Add format-parity gate, tighten skill git allowlists#5
Merged
Conversation
Format parity with OpenWiki was previously enforced only by prose
doctrine in references/wiki-format.md, with no automated check —
unlike algorithm parity, which tests/noop.test.ts verifies case for
case. check-format.sh closes that gap: it validates an openwiki/
directory against the format contract (entrypoint filename, H1-first
pages, resolving relative links, ## Source map / Git evidence: shape,
init page ceiling) and emits {ok, pages, problems, warnings} JSON,
following the same script-emits-JSON convention as the rest of
scripts/. tests/check-format.test.ts exercises it against a real temp
git repo per the project's co-located-behavioral-test convention.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Run scripts/check-format.sh as a blocking step before init and update record state, so a wiki that has drifted from the format contract never gets committed — matching how the algorithm side already blocks on check-noop.sh. Both skills now hard-stop on ok:false and treat warnings as judgment calls. While touching allowed-tools, narrow the blanket Bash(git *) grant down to the read-only subset the skills' disciplines actually need (log/show/diff/status/blame/rev-parse/rev-list/cat-file/ls-files/ shortlog). Git writes (add/commit/push/checkout) belong to the agent pipeline, not a skill invoked mid-conversation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rine Switch wiki-scout's model from a pinned dated id to the durable `sonnet` alias so the scout tracks the current Sonnet without needing a version-bump edit every release. Document why its Bash grant can't be narrowed to a read-only git subset the way the skills' can — agent `tools:` frontmatter only accepts bare tool names, not per-command specifiers like `Bash(git log:*)` — and note the upgrade path if Claude Code adds that support. tests/plugin-structure.test.ts locks both the read-only-git doctrine for init/update (no Bash(git *) catch-all, no commit/push/checkout grant) and the wiki-scout alias/read-only claims, so a future edit can't silently re-widen either allowlist. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PARITY.md: point the format-parity row at the new check-format.sh verifier (was doctrine-only) and add a watch item flagging that check-noop.sh parses openwiki/.last-update.json with sed rather than a JSON parser — the one seam where interchangeability depends on parsing JSON that OpenWiki itself wrote, to be re-checked first if upstream's serializer output ever changes shape. CLAUDE.md: document the format gate in the architecture blurb and add the pr_automerge Agent Config key — pr-monitor now merges feature PRs automatically once CI is green, no human approval gate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
gpxl
force-pushed
the
claude/clever-ardinghelli-d2d2d4
branch
from
July 8, 2026 12:39
ccbdebc to
64b2475
Compare
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.
Summary
Implements three tracked issues (wj-a7u, wj-ehf, wj-c1q) from an architecture
review:
previously enforced only by prose doctrine in
references/wiki-format.md,unlike algorithm parity which
tests/noop.test.tsverifies case for case.scripts/check-format.shcloses that gap — a read-only validator thatemits
{ok, pages, problems, warnings}JSON, following the repo'sscript-emits-JSON + co-located-behavioral-test convention
(
tests/check-format.test.ts).before recording state and hard-stop on
ok:false, matching how thealgorithm side already blocks on
check-noop.sh.skills/initandskills/updatehad ablanket
Bash(git *)grant; narrowed to the read-only git subset thedisciplines actually need. Git writes belong to the agent pipeline, not a
skill invoked mid-conversation.
agents/wiki-scout.mdnow pins the durablesonnetmodel alias and documents why its Bash grant can't be narrowed thesame way (agent
tools:frontmatter only accepts bare tool names).tests/plugin-structure.test.tsasserts the allowlist claims so a future edit can't silently re-widen them.
PARITY.mdpoints the format-parity row at the new verifier and adds awatch item on the
sed-based state-file parsing seam.CLAUDE.mdrecordsthe architecture change and the
pr_automergeconfig key — CI mergepolicy is now auto-merge-on-green per the updated Agent Config.
Commits
7f4b07cfeat: add deterministic wiki-format parity gateeb88141feat: wire format gate into init/update, tighten git tool allowlists93e4fbarefactor: pin wiki-scout to durable sonnet alias, lock allowlist doctrineccbdebcdocs: record format-gate parity row and pr_automerge policyTest plan
npm test— 8 files, 62 tests)npm run lint— shellcheck)🤖 Generated with Claude Code