docs: codify batch-1 operator precedents (two-lane defaults + built-in-first gate) (#557) - #598
Conversation
…n-first gate) (#557) Transcribes two fleet-wide operator precedents from decision-session batch 1 into the source-of-truth docs, where they were previously only in issue comment threads (#415, #423). PLUGIN-PHILOSOPHY.md: - Native-first: adds the built-in-first customization gate (from the #423 ruling) — before building any custom config surface, verify against current official Claude Code docs that no native mechanism (userConfig, environment, built-in per-repo config) fits; custom is the fallback only on genuine misfit. - New "Two-lane convention posture" section (from the #415 ruling): a pre-prescribed convention is a hardcoded dependency; lane 1 is non-conflicting good-practice defaults, lane 2 is discover-via-setup and externalize. MIGRATION-PLAYBOOK.md: the convention-resolution ladder now points up to the new posture as its durable principle (pointer-over-copy, no restatement). Docs-only, no plugin touched — no version bump per the #306 doctrine-codification precedent. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011V31qpAHP3jfs76B9d5Rfo
|
Claude finished @kyle-sexton's task in 2m 0s —— View job PR Review
Docs-only, no blocking issues. Two precedents correctly transcribed from primary-source rulings into the SSOT. Changes are internally consistent, match the document's voice, and respect the repo's pointer-over-copy convention.
|
Post-green review classificationNo findings requiring action. Reviewer's own checks confirm: version-bump correctly omitted (precedent CI green (15/15). Flipping to ready for review. |
|
Claude finished @kyle-sexton's task in 1m 23s —— View job PR Review
Docs-only. No blocking issues. Both precedents are correctly transcribed and land cleanly in the existing document structure. The review below is a complete independent pass.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 641f004910
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The native-first gate listed environment variables as a native mechanism that could host a config need, contradicting the later "Configuration ownership and scope" policy in the same document, which retires custom env channels and migrates every personal or admin scalar to userConfig. The only native env surface is the CLAUDE_PLUGIN_OPTION_* mirror, which is userConfig's hook read-path, not an independent config host. Leave userConfig and the built-in per-repo surface as the two genuine native hosts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 38s —— View job PR Review
This is an independent pass covering the full two-commit diff. Two prior Claude reviews covered the initial commit (
|
| Remaining mechanism | Maps to |
|---|---|
userConfig |
"Personal or administrator-provided scalar" |
| a built-in per-repo config surface | "Tracked repository convention or rich team policy — a documented file under the consumer project" |
The intentional abstraction of "a built-in per-repo config surface" is correct — it avoids enumerating a surface that might be renamed or split as the platform evolves, and the surrounding "re-fetch the documentation" instruction directs the reader to discover the current form.
Permalink: docs/PLUGIN-PHILOSOPHY.md lines 80–85
Residual checks
- No regression in
Two-lane convention posture(lines 119–136) or the MIGRATION-PLAYBOOK.md pointer (lines 263–267). These are unchanged from641f004and were fully verified in the prior two passes. - Internal consistency confirmed. The gate now enumerates only mechanisms the document elsewhere endorses; the retirement of custom env channels (lines 168–172) and the gate (lines 80–85) no longer pull in opposite directions.
- No prose duplicated. The PHILOSOPHY doc is the SSOT; the playbook carries the summary pointer only.
- Version bump correctly omitted. No
plugin.jsontouched; consistent with the docs: codify the fresh-eyes checkpoint rule in plugin doctrine #306 precedent. - Markdown clean. The two-line edit is a drop with no formatting change; the surrounding paragraph structure is unaffected.
No blocking issues. Clean execution of both the original transcription and the Codex-driven correction. Ready to merge.
Summary
Two fleet-wide operator precedents from decision-session batch 1 (2026-07-19) were established as rulings inside issue-specific comment threads (#415, #423) but never written into the shared source-of-truth doc. This transcribes both into
docs/PLUGIN-PHILOSOPHY.md(SSOT) in the file's existing voice, and points the migration playbook up at them. Docs-only; no plugin code touched.The task framing assumed one PHILOSOPHY section + one pointer, but the file's reality overrode it faithfully: Precedent 2's home already exists (the
Native-firstsection already carries its thesis), so it was strengthened rather than duplicated; Precedent 1 had no home, so it got a new section. The convention-resolution mechanism lives in the playbook, so the pointer attaches there. Two touchpoints, no duplicated prose — more faithful to the repo's pointer-over-copy convention than restatingNative-firstwould have been.Change
docs/PLUGIN-PHILOSOPHY.md§ Native-first — Precedent 2 (built-in-first customization gate, from the verification: consumer override seams gestured ("when the project documents…") but no declared location exists #423 ruling). Added the build-time gate the section lacked: before building any custom config surface (YAML concern file, bespoke seam), verify against current official Claude Code plugin documentation that no native mechanism (userConfig, environment variables, built-in per-repo config) can host the need; custom is the fallback only on genuine misfit. The section already said "prefer native / build custom only on misfit" — only the doc-verification gate is net-new, so only that was added.docs/PLUGIN-PHILOSOPHY.md§ Two-lane convention posture — Precedent 1 (from the planning: branch-name grammar hardcoded to Conventional Commits types, no consumer seam #415 ruling). New section: a pre-prescribed convention is a hardcoded dependency to externalize; lane 1 is non-conflicting good-practice defaults, lane 2 is discover-via-setup and externalize as configuration extensibility points. States the durable principle only — the runtime mechanism (the ladder) stays in the playbook and points back up.docs/MIGRATION-PLAYBOOK.md§ Convention-resolution ladder — pointer, not copy. The ladder now names the new posture as its durable principle and links to it, using the repo's existing§-label link style. No prose restated.Transcribed from the primary-source operator ruling comments on #415 and #423, not paraphrased from the #557 body. Provenance stays in those rulings and this PR/commit; PHILOSOPHY does not inline-cite issue numbers (matching how the fresh-eyes doctrine landed via #306).
Verification
Precedents now live in
PLUGIN-PHILOSOPHY.md(diff excerpt):New section:
Native-first gate (added paragraph):
Migration-playbook pointer resolves to the right section. The repo has zero fragment-anchor links in
docs/*.md(grep -roE '\]\([^)]+\.md#[a-z0-9-]+\)' docs/*.md→ 0 matches); the established convention is a file-level link with a§ Section Namelabel (existing examples at MIGRATION-PLAYBOOK.md:267 and :575). The new link[PLUGIN-PHILOSOPHY.md § Two-lane convention posture](PLUGIN-PHILOSOPHY.md)matches that convention exactly, and its§label names the new section heading verbatim.Markdown linter clean (real output,
.markdownlint-cli2.jsonc— the config the CILint markdownlane uses):editorconfig-checker clean (config
.editorconfig-checker.json, the CI editorconfig lane's config): exit 0, no findings.Version bump: none required, and none made — deliberately. This is a docs-only change touching no
plugin.json(git diff --name-only→ only the twodocs/*.mdfiles). The controlling precedent is #306 (e4c996cf"docs: codify the fresh-eyes checkpoint rule in plugin doctrine") — the closest analog, also a doctrine-codification change toPLUGIN-PHILOSOPHY.md;git show --statconfirms it touched onlydocs/PLUGIN-PHILOSOPHY.mdand bumped no plugin version. Per-pluginCHANGELOG.md/ version-bump delivery applies to changes to a plugin's own files (the version is the update cache key); adocs/change delivers nothing to a consumer and has no bump vehicle.Closes #557
Related
🤖 Generated with a Claude Code implementation subagent (issue #557)