Repository navigation
fix(verify): derive Grok live-gate reach from runtime ownership (#287) - #288
Conversation
Replace the exact-path GROK_REACH list with permission granted in each runtime ownership branch of classify(). Assets, version-only manifests and non-runtime paths stay narrow; unmapped paths still fail. Decided in the step-back exchange after two verdicts found paths missing from the list (#284, #286). Closes #287 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merge Protections🟢 All 2 merge protections satisfied — ready to merge. Show 2 satisfied protections🟢 Queue ready pull requestsAutomatically queue non-draft pull requests targeting main after verify and live-gate pass on the head and every review thread is resolved.
🟢 🚦 Auto-queueWhen all merge protections are satisfied and these conditions match, this pull request will be queued automatically.
|
Live evidence: Open Pstack
|
✅ Merged into
|
✅ No blocking findingsWalkthroughThis PR changes how the verifier decides which paths permit naming the Grok live-gate features. Previously a hand-maintained exact-path list
Details
First review of this pull request. @unfret review · @unfret status · @unfret help |
Summary
This is the fix-forward PR for the merged head of #286 (e4537f0). It replaces the verifier's exact-path Grok reach list with permission taken from the registry's runtime ownership. The step-back exchange chose this design after two consecutive verdicts each found a path missing from that list: v1:1f3cdb66 and v1:ccdebf5c on #284, then v1:427364ab on #286.
Reach is permission only.
verify.tsstill runs just the named features plusproject-skillunder--self-test, so no Grok session runs unless an operator names it.Introduced by: #286. Closes #287.
Evidence
classify([{filename: '.claude/skills/verify-open-pstack/scripts/io.ts'}])permitted no Grok feature, and the earlier misses had the same cause.After: the new
core.test.tscase "every runtime ownership permits naming both Grok features; assets, version-only manifests and non-runtime paths do not" covers 16 paths. They include the seven paths found on feat(grok): Grok as a parent harness (#281) #284,scripts/io.ts, a new verifier helper and a new skill reference, and each permits exactlygrok:dispatchandgrok:setup. In the same test,assets/logo.png, a version-only Claude manifest and.mergify.ymlpermit none, and an unknown plugin path still throwsUnmapped path.records/2026-11-08-batch-281/stepback-286/, covering the opening, the advisor's opening and closing, the rebuttal and the artefact.Merge Danger
Door: two-way
Blast Radius: verifier-only
The change widens only which features an operator may name. Run selection, recipes, T3 classification and publication are unchanged.
Acceptance criteria (#287)
GROK_REACH, its loop andGROK_TRANSPORTare deleted fromscripts/core.ts.classify()callsgrok()in the catalog, shared and shared-recipe, setup, runner, tools, project, skill-content and transcript-resolver branches. The 16-path test covers it.requiredHarnessesassertions are unchanged.features/grok.mdnow states the ownership rule and its exceptions instead of listing files.Gate results (head b43e759)
bun run testbun run typecheckbun run staticclaude plugin validate plugins/pstackgrok plugin validate plugins/pstackNot verified
live-gateis pending. It runs from this candidate head because the PR changes the verifier:grok:dispatchwith--self-test. That run exercises the changed classification on this PR's own paths.🤖 Generated with Claude Code