plugin: the generated plugins page tells a gate from a guard - #162
Merged
Merged
Conversation
chock marketplace build wrote one fixed paragraph per tree describing every enforcing package as a PreToolUse guard script that can deny a shell command. Since 0.11.0 a package can carry a policy's gate instead, which judges what a turn writes rather than what it runs. The published PLUGINS.md in every distribution repo therefore misdescribed five of its fourteen enforcing packages, and named PreToolUse even in the Cursor tree, whose guards hook beforeShellExecution. The paragraph is now derived from the hooks each package publishes. A --guard command makes a guard package and a --gate command a gate package, and each kind is described with the events its own hooks file wires, in that client's spelling. Where a client records no write-tool vocabulary (Codex, Devin) the page says the gate runs at the turn's end only and the write is not judged. Devin keeps its best-effort framing as a closing caveat. The renderer moves to chock.plugin.catalog_page: marketplace_core had grown past the 300-line review budget, and the page is its own activity. Its three new tests fail against the old emitter and pass against this one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Claude <noreply@anthropic.com>
jothimani-rajendran
marked this pull request as ready for review
September 23, 2026 23:20
This was referenced Sep 23, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
chock marketplace buildwrote one fixed paragraph per tree intoPLUGINS.md, describing every enforcing package as "aPreToolUsehook, a guard script and a stdlib-only adapter" that "can deny a shell command before the client runs it". Since 0.11.0 a package can carry a policy's gate instead, which judges what a turn writes rather than what it runs. So the page published in every distribution repo misdescribed five of its fourteen enforcing packages, and namedPreToolUseeven in the Cursor tree, whose guards hookbeforeShellExecution.The paragraph is now derived from the hooks each package actually publishes:
--guardmakes a guard package; one carrying--gatemakes a gate package;Rendered against the four real published trees:
PreToolUsePreToolUseandStop, judging the write then re-reading the turnbeforeShellExecutionpreToolUseandstopPreToolUseStoponly, write not judgedPreToolUseStoponly, plus its existing best-effort caveatDevin's best-effort row and summary words are unchanged; its "not a guarantee" sentence now closes the derived paragraph rather than replacing it.
The renderer moves to its own module,
chock.plugin.catalog_page.marketplace_core.pyhad grown past the repo's 300-line review budget, and the page is its own activity;marketplace.pyimports it from there and every public name keeps its import path throughchock.plugin.marketplace.Definition of done
chock check→ 0 errors, 0 warnings, 0 infos (the## Unreleasedchangelog heading is skipped bycheck_release_consistency's digit-anchored pattern by design)chock check --only matrixpasses; the enforcement matrix is unaffectedchock sync --repo . --checkcleanchock check --only verifycleanpytest -qgreen (1462 passed, 2 skipped)pytest acceptance/— not applicable, packaging,init,addand hook installation unchanged; only the generated page's prose changesruff check .andruff format --check .cleanThree new tests in
tests/test_catalog_page.pybuild a tree holding a guard, a gate and an advisory policy through the real plugin CLI. All three fail against the old emitter and pass against this one: one pins that a gate is not called a shell-command guard, one that a stop-only client says the write is not judged, one that each client's own event spelling is used.Claims
After merge, the four distribution repos need a Publish run to carry the corrected page; nothing there should be hand-edited, since
PLUGINS.mdis generated.🤖 Generated with Claude Code
https://claude.ai/code/session_01CzNYfzP8ymU3r4JB9Sz8Ha
Generated by Claude Code