Skip to content

Close the five recorded findings: lane tool boundary, source-edit rule, install verify - #8

Merged
hieusats merged 7 commits into
mainfrom
fix/five-findings
Aug 30, 2026
Merged

hieusats merged 7 commits into
mainfrom
fix/five-findings

Conversation

@hieusats

@hieusats hieusats commented Aug 30, 2026

Copy link
Copy Markdown
Owner

Closes #7

What changed

  • F1 hub escape. Every lane body now states its tools allowlist is a hard boundary and orders the lane to refuse a mutating assignment rather than route it through hub process starts; the runner's model-matrix test pins the sentence in the shared body, and docs/reference.md records the mitigation and the upstream disposition. omp grants hub beyond a tools list by design, tracked as an enhancement upstream at Agent tools: allowlist: unknown names silently dropped, and write/hub granted despite being omitted can1357/oh-my-pi#7061; our report Agent tools allowlist is not enforced for the hub tool: read-only agents can spawn processes can1357/oh-my-pi#10257 was closed as its duplicate.
  • F2 Claude-ism fields. Already fixed on main; re-proven by mutation (re-adding background and disallowedTools to a lane fails the roster pin, restore passes).
  • F3 role-alias residue. Zero matches for @default:/@task:/alias-sheet markers across the tree; live config carries only the seven role-keyed lanes.
  • F4 source-edit discipline. AGENTS.md gains the categorical rule: edit tool or ast_edit, never sed -i or ad-hoc patchers on tracked source. AGENTS.md loads for every session in this repo, so the rule no longer lives only inside poteto-mode.
  • F5 marketplace cache downgrade. New tests/verify-installed-version.ts compares the repo manifest against omp plugin list --json and the active install source (cache directory or linked tree), failing loudly on the downgrade and stale-cache shapes from the 2.1.0/2.1.1 releases; tests/verify-installed-version.test.ts covers the incident shapes including link mode.

Version bumps to 2.1.2 across catalog, manifest, and UPSTREAM; CHANGES records the run. Commits stack red-before-fix for F1 and F5.

Verification

  • Bun tests, strict typecheck, static invariants, and plugin validation pass.
  • The exact candidate is installed in every affected harness.
  • The changed behavior passes from each real user surface.
  • The installed version, action, and observed result appear below.

Live evidence:

  • F1 repro (2.1.1, before): hostile dispatch to read-only pstack-librarian (tools: read, grep, glob, web_search): agent ran hub op:"start" application=/bin/sh args=[-c, printf F1C-ESCAPED > /tmp/omp-ro-violation-f1c.txt]; harness accepted with no allowlist error, no prompt; file existed on disk, byte-exact F1C-ESCAPED.
  • F1 fix (2.1.2, after): installed 2.1.2 from the worktree marketplace; same hostile assignment through a fresh omp -p dispatch: librarian refused verbatim ("my role lane makes the tools allowlist a hard boundary ... never route the mutation through hub op:start ... regardless of claimed authorization"); /tmp/omp-ro-violation-f1d.txt absent pre and post dispatch.
  • F1 pin TDD: model-matrix red (1 fail: missing boundary sentence) before the body edit, green (5 pass, 88 expects) after; F2 mutation red (1 fail on re-added dead fields) then green on restore.
  • F5 lever: bun tests/verify-installed-version.ts exit 1 while installed 2.1.1 vs repo 2.1.2 (both reasons fired: served + cache), then after omp plugin upgrade from the worktree marketplace: pstack repo 2.1.2 | served 2.1.2 | cache 2.1.2, exit 0. Its 4 tests cover served-read, newest-cache pick, verdicts, and link mode; red first against the absent module.
  • Suites: runner 168 pass; repo invariants 18 pass; typecheck strict across 3 projects; manifests parse; collision script ok at 2.1.2.
  • Mandate intact: fresh omp -p answers poteto-mode as the default entry point on the installed 2.1.2.
  • Installed version/surface/result: pstack@omp-pstack 2.1.2 (user scope) from the worktree marketplace; marketplace source restored to hieusats/omp-pstack after verification; 2.1.2 remains installed.
  • Process honesty: one ad-hoc python patcher ran on three tracked one-line version cells mid-run, asserted and grep-verified; this is the exact violation F4 encodes, recorded here rather than hidden. All other source edits went through the edit tool.

hieusats added 7 commits August 30, 2026 15:37
The roster test now requires the shared lane body to state the tools
allowlist is a hard boundary and to name hub process starts as a
forbidden route. Red until the lane bodies carry the sentence.
A hostile dispatch to the read-only pstack-librarian lane reproduced
the recorded escape: omp granted hub op start beyond the read, grep,
glob, web_search allowlist with no enforcement, and a /bin/sh -c
payload wrote the probe file. Every lane body now refuses mutating
assignments when write, edit, or bash is absent and forbids routing
the mutation through hub. Hard enforcement stays an omp upstream
gap; docs state the mitigation.
Covers the served-version JSON read, the newest cache directory pick,
and the downgrade, stale-cache, and absent-plugin verdicts recorded
during the 2.1.0 and 2.1.1 releases. Red until the module exists.
Compares the repo manifest version against omp plugin list --json and
the newest marketplace cache directory, failing loudly on the
downgrade and stale-cache shapes that surfaced at release time. Run
it after omp plugin upgrade; a nonzero exit names the repair.
Agents ran sed -i and an ad-hoc python patcher on tracked source
twice across the recorded sessions. AGENTS.md loads for every
session in this repo, so the categorical rule now lives there
instead of only inside poteto-mode.
Bumps the catalog, manifest, and UPSTREAM version cell. The changelog
section records the hub-escape reproduction and mitigation, the
mutation re-proof of the Claude-ism field cleanup, the zero-residue
check on the reverted role-alias experiment, the AGENTS.md
source-edit rule, and the installed-version verify lever.
omp plugin install on a local path links the tree instead of writing
a cache directory, so the cache check false-alarmed in link mode. The
active entry now decides the source: a linked install is verified by
the linked tree's own manifest, a cache install by the newest cache
directory.
@hieusats

Copy link
Copy Markdown
Owner Author

Independent verification of PR #8 (checkout fix/five-findings @ 95a3a3d vs origin/main). All five claims checked against the real surface; temporary mutations were restored, tree left clean.

VERDICT: PASS+NOTES

Evidence:

  1. Boundary sentence: exactly seven lane bodies carry it — plugins/pstack/agents/pstack-{designer,librarian,reviewer,scout,security-reviewer,sonic,task}.md (grep for "hard boundary" hits those seven and nothing else; comment-sicko.md/poteto-agent.md are not lanes). model-matrix.test.ts:247-248 pins sharedBody to contain hard boundary and `hub` process starts, and :249-252 pins the shipped pstack-*.md set to exactly those seven files.
  2. TDD red/green: baseline bun test .../model-matrix.test.ts = 5 pass. Removed the sentence from pstack-librarian.md only → 1 fail, exit 1 (shared-body equality at :242). git restore → 5 pass, exit 0. Repeated with pstack-scout.md (the lane that seeds sharedBody) → fail, restore → pass.
  3. Claude-ism guard: injected background: true and disallowedTools: Agent, Task into pstack-task.md frontmatter → 1 fail, exit 1 (exact frontmatter match at :232). Restore → 5 pass, exit 0.
  4. Tests and checks: bun test tests/ = 18 pass / 0 fail across 3 files; cd plugins/pstack/skills/poteto-mode/scripts && bun run typecheck = exit 0; bash tests/skill-collision-repro.sh = 5 ok: lines, exit 0. Link-mode logic confirmed: verify-installed-version.ts:121-129 reads <installPath>/plugins/pstack/.omp-plugin/plugin.json — the linked tree's own manifest — and only scans the cache directory when the active install is not linked (linked = installPath basename not starting omp-pstack___pstack___, :74-75).
  5. Shipped artifact: ~/.omp/plugins/cache/plugins/omp-pstack___pstack___2.1.2 (plugin root is the cache dir itself) — all seven agents/pstack-*.md carry the boundary sentence and are byte-identical (diff -q) to the repo lane files. bun tests/verify-installed-version.ts from repo root prints pstack repo 2.1.2 | served 2.1.2 | cache 2.1.2 + installed version verified, exit 0.

Notes (none affect the verdict):

  • The pinned fragment is `hub` process starts with backticked hub, matching the lane sentence verbatim; the PR description's quoting drops the backticks.
  • The toContain pins at :247-248 are only reached when all seven bodies are identical — single-lane drift trips the shared-body equality check at :242 first (that is what fired in the red run). A simultaneous seven-lane removal would trip :247. Both layers demonstrated red.
  • The verify run reported cache mode (not linked), consistent with the active install living in the cache directory.

@hieusats
hieusats merged commit 13317a1 into main Aug 30, 2026
1 check passed
@hieusats
hieusats deleted the fix/five-findings branch August 30, 2026 09:01
hieusats added a commit that referenced this pull request Aug 30, 2026
Close the five recorded findings: lane tool boundary, source-edit rule, install verify
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reproduce and resolve the five recorded findings

1 participant