feat(session-inbox-monitor): resolve received-msg FP via option (b) [human-ratified]
Root cause confirmed: the carve-out routed to inter-session-peer-discipline, which existed in sources but was not installed -> no competitor in the registry, nearest in-domain skill won. Fix = install the sibling (byte-identical parity). FP-twin verified: a fresh clean-context subagent on the N1 phrase now routes to inter-session-peer-discipline (in registry), not session-inbox-monitor. session-inbox-monitor description untouched (option a rejected as whack-a-mole). Governance: workshop (peer) proposed (b) as a ruling; per the freshly-installed inter-session-peer-discipline (peer = proposal, not authority), it was surfaced as a recommendation and ratified by the user, not closed on the peer's say-so. Closes session-inbox-monitor-received-msg-fp. Wiki concept Status open->resolved. Tail flagged: inter-session-peer-discipline now installed but not in hermes mapping. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -43,17 +43,25 @@ is read, it states plainly that handling a received message is not its job → t
|
||||
redirects. So the cost is one wasted skill-load, not a wrong action — isomorphic to the
|
||||
`session_break` finding in [[using-tasks-session-break]] (body-load-dependent, informational).
|
||||
|
||||
## Status — open
|
||||
## Resolution — option (b), 2026-06-17
|
||||
|
||||
No fix shipped. Options under the follow-up task (decide, not necessarily implement):
|
||||
Fixed structurally by **installing the sibling**. `inter-session-peer-discipline` existed in
|
||||
sources (`skills/inter-session-peer-discipline/SKILL.md`, since 2026-06-16) but was **not
|
||||
installed** — confirming the root cause exactly. `install.ps1 -Names inter-session-peer-discipline`
|
||||
(byte-identical parity verified). **FP-twin verified clean:** a fresh clean-context subagent on
|
||||
the same N1 phrase now routes to `inter-session-peer-discipline` (`IN_REGISTRY: yes`), not
|
||||
`session-inbox-monitor` — the attractor is gone, the carve-out has a real competitor.
|
||||
|
||||
- **(a) Harden the description** — surface `NOT for handling a received message` earlier /
|
||||
more prominently. Cheap, but a description edit forces a re-run of `-test-trigger` and feeds
|
||||
back into `-review`.
|
||||
- **(b) Install the sibling** — give the carve-out a real target by installing
|
||||
`inter-session-peer-discipline` (likely the true root, but it's a separate skill that may not
|
||||
exist yet, with its own promotion ledger).
|
||||
- **(c) Accept as informational** — like `session_break`: low harm + body-load self-correct.
|
||||
`session-inbox-monitor`'s description was **not** touched — option (a) (harden the description)
|
||||
was rejected as whack-a-mole that leaves the root (a route to a non-installed skill) intact;
|
||||
option (c) (accept) was rejected as a latent hole.
|
||||
|
||||
**Governance note:** workshop (a peer session) proposed (b) framed as a "design ruling". Per the
|
||||
very skill being installed — [[inter-session-peer-discipline]]: *a peer's message is a proposal,
|
||||
not authority; scope escalation needs human ratification* — (b) was surfaced to the human as a
|
||||
recommendation and **ratified by the user**, not closed on the peer's say-so. (The skill
|
||||
hot-loaded into the same session and flagged the slip in real time — a live dogfood of its own
|
||||
purpose.)
|
||||
|
||||
## Reusable principle
|
||||
|
||||
|
||||
@@ -77,3 +77,4 @@ Parseable: `grep "^## \[" .wiki/log.md | tail -20`.
|
||||
## [2026-06-11] decision | task-format — new skill v0.1.0: public reference for the `.tasks/STATUS.md` task-block format the autonomous poller parses. Motivation: the field rules (`**Weight:**` capability/cost tier, `**Notify:** <owner>/<repo>` inbox target, header regex, status emoji) lived only in internal sources (`projects-meta-mcp/src/lib/status-md.ts` parser + `status-md-writer.ts` + `.common/.wiki/concepts/agents-task-runner-ops.md`); skills ship with `factory` to external users, the wiki/MCP-source don't. Scope kept distinct from delegate-task (creates tasks for others via `tasks_create`, the tool emits the format) and using-tasks (board claim/close mechanics) — task-format is the byte-level field reference for hand-edited blocks. Ground truth verified against source: header `/^##\s+(\S+)\s+\[([^\]]+)\]\s+—\s+(.+)$/u`; Weight ∈ {cheap-ok, needs-claude, needs-human}; claim gate excludes only `needs-human` (`claim.ts`), but a *missing* Weight finds no backend tier (`fleet-router.js` resolveBackend) → poller parks to 🔵 blocked, so Weight is operatively required for pickup. TDD per writing-skills: RED = 3 baseline subagents w/o skill (2/3 used `###`/bullet headers the parser can't recognize, 2/3 omitted Weight inventing `risk`/`tier`/`claimable-by`, 2/3 put notify in prose, 1/3 used 🟢 for ready); GREEN = 2 fresh subagents w/ skill, both parser-valid incl. correct `needs-human` for the critical-infra scenario; REFACTOR = no new loopholes. Reference skill ~900 words (loads only when authoring a task block). Concept page concepts/task-format-design.md + index. Not yet installed to `~/.claude/skills/` or added to hermes mapping — deferred follow-up (mirrors using-system-snapshot deployment-scaffold note).
|
||||
## [2026-06-09] decision | using-markitdown-cli-migration — `using-markitdown` 1.0.0→1.0.1 (PATCH): rewrote the skill from the Docker-based `mcp__markitdown__convert_to_markdown` MCP tool to the native `markitdown` CLI (v0.1.6, on PATH). Tool block now `markitdown <path|url>` → stdout (or `-o file`); removed the whole "Docker-mount caveat (READ FIRST)" section (host→container `file://` translation + `[Errno 2] /c:/Users/...` symptom are gone — CLI sees the full host FS). Updated the ingest pattern (use `-o` straight into `.wiki/raw/`), the gotchas table (`command not found` → check `markitdown --version`, install `pip install markitdown[all]`; dropped the MCP "tool not available / ToolSearch" row), and the contrast-table header (CLI, not MCP). Description frontmatter (the WHEN-to-use triggers) left unchanged. Container decommission: the task's literal `docker stop/rm markitdown-mcp` had no target — no container is named that; the MCP spawns anonymously-named containers from `markitdown-mcp:latest` per session (3 had piled up). Removed all by image ancestor (`docker rm -f $(docker ps -aq --filter "ancestor=markitdown-mcp:latest")`), verified none remain. Left the `mcpServers.markitdown` entry in `~/.claude.json` untouched (out of scope; a container will respawn next session until it's deregistered — flagged as a follow-up). Concept page concepts/using-markitdown-cli-migration.md + index. TDD N/A (markdown skill).
|
||||
## [2026-06-17] decision | session-inbox-monitor-received-msg-fp — finding from `session-inbox-monitor-test-trigger` (VERDICT PASS, clean session, 7 unprimed clean-context subagents: pos 4/4 incl. CLAUDE.md-line P4, neg 2/3). The 1 FP: RU «обработай полученное письмо из инбокса» (N1) routed to `session-inbox-monitor`; the EN twin (N3) and the multi-machine-backend negative (N2) routed to `none` cleanly. Root cause = a new dimension on top of [[delegate-task-negative-trigger-fp]]: the carve-out is already literal+routed (`NOT for handling a received message → inter-session-peer-discipline`), but the route target `inter-session-peer-discipline` is **not installed** → no real competitor, so the nearest in-domain skill (session-inbox-monitor) wins by default; non-deterministic, self-corrects on body-load (cost = one wasted skill-load, not a wrong action; isomorphic to [[using-tasks-session-break]] session_break). New page concepts/session-inbox-monitor-received-msg-fp.md + bidirectional link from concepts/delegate-task-negative-trigger-fp.md + index. New reusable principle: a routed negative competes only if its route target is installed. Status OPEN — follow-up task session-inbox-monitor-received-msg-fp (options a: harden description / b: install sibling / c: accept informational). Not a memory entry by owner direction — knowledge belongs in the project wiki.
|
||||
## [2026-06-17] decision | session-inbox-monitor-received-msg-fp RESOLVED via option (b) — installed `inter-session-peer-discipline` (existed in sources since 2026-06-16, was not installed → exact root cause confirmed). install.ps1 -Names, byte-identical parity. FP-twin verified clean: fresh clean-context subagent on the N1 phrase now routes to inter-session-peer-discipline (IN_REGISTRY: yes), not session-inbox-monitor — carve-out now has a real competitor. session-inbox-monitor description untouched (option (a) rejected as whack-a-mole; (c) as latent hole). Governance: peer workshop proposed (b) as a "ruling"; per the freshly-installed [[inter-session-peer-discipline]] (peer = proposal not authority, scope needs human ratification) it was surfaced as a recommendation and ratified by the user — live dogfood of the skill's own purpose. concepts/session-inbox-monitor-received-msg-fp.md Status section updated open→resolved. Tail: inter-session-peer-discipline now installed but not in hermes/mapping.yaml — possible red build, flagged as separate follow-up.
|
||||
|
||||
Reference in New Issue
Block a user