fix(p12): runbook install_time_config wrongly claimed hooks deploy to ~/.claude/hooks/#425
Merged
Merged
Conversation
…o ~/.claude/hooks/ The shared renderConfigBlock generator hardcoded "hooks deployed under `~/.claude/hooks/` by `install.mjs --install-hooks`", emitted into every plugin runbook's §10. That contradicts Principle 12 and the actual installer: install.mjs:1336 roots userHooksDir at <project>/.claude/hooks (not os.homedir()), and enforcement deploys per-project under <project>/.claude/ or <project>/.opencode/, NEVER ~/.claude/. - validate-plugin-registry.mjs renderConfigBlock: corrected the line to state the per-project / never-global truth (Principle 12). - regenerated the §10 CONFIG block in both plugins/claude-code and plugins/opencode runbooks to byte-match (M7f). test-plugin-registry 200/0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
lantiscooperdev
left a comment
Collaborator
There was a problem hiding this comment.
Review — P12 runbook install_time_config doc fix
Verified against the actual installer, not the runbook text:
install.mjs:1336definesuserHooksDir = path.join(projectDir, '.claude', 'hooks')— project-rooted, neveros.homedir(). The old runbook line "hooks deployed under~/.claude/hooks/" was factually wrong and P12-inconsistent.- The corrected line states the per-project / never-global truth and cites Principle 12; it is now harness-accurate for both
.claude/(claude-code) and.opencode/(opencode). - Generator and both runbooks carry the identical corrected string;
test-plugin-registry200/0 confirms the §10 M7f byte-match holds for both.
Scope is doc/string only; no behavior change. No blockers. Deferring merge approval to a human.
lantiscooperdev
approved these changes
Jun 27, 2026
lantiscooperdev
pushed a commit
that referenced
this pull request
Jun 27, 2026
P5 (OpenCode enforcement plugin) merged via #424 (`f5dbaef`) + doc fix #425 (`a7f66c9`). Flip the stale `queued` P5 status in the three places that track it, mirroring #423's P4-DONE sync: - RFC-008/README.md phase matrix: the shared P5-P7 row now reads P5 DONE; P6 / P7 queued (Codex, Pi Agent still pending). - RFC body phase-index stub (:1220): same split. - P5-P7-tool-plugins.md status line: P5 DONE, P6/P7 queued. P6/P7 stay queued (shared row/file). RFC-008 remains `accepted` at the registry level (not all phases shipped), so docs/rfcs/_index.json + README.md are unchanged; em-rfc-validate passes (8/8/8 consistent). Rule 10 doc-sync; no code change. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Problem
The shared
renderConfigBlockgenerator hardcodedinstall_time_config: hooks deployed under/.claude/hooks//.claude/`.byinstall.mjs --install-hooks``, emitted into every plugin runbook §10 (claude-code + opencode). That contradicts Principle 12 (enforcement is per-project, never global) and the actual installer:install.mjs:1336roots `userHooksDir` at `/.claude/hooks` (not `os.homedir()`), and enforcement deploys per-project under `/.claude/` or `/.opencode/`, never `Caught during the P5 post-merge review when the deploy scope was being audited.
Fix
scripts/validate-plugin-registry.mjsrenderConfigBlock: corrected the line to state the per-project / never-global truth, citing Principle 12.plugins/claude-code/runbooks/enforcement.mdandplugins/opencode/runbooks/enforcement.mdto byte-match the generator (M7f).Verification
node tests/test-plugin-registry.mjs-> 200/0 (M7f byte-match holds for both runbooks). Old~/.claude/hooks/string removed everywhere; corrected line present in generator + both runbooks.🤖 Generated with Claude Code