Rework: CLAUDE.local.md per-developer overrides (was #9)#11
Closed
filip-ceos wants to merge 2 commits into
Closed
Conversation
Introduce a local override mechanism where an optional, gitignored CLAUDE.local.md is merged over CLAUDE.md (local wins) before parsing Automation Config (core/config-reader.md Step 0). Add claude_local_md_content input and merge rules, document the feature in CLAUDE.md and docs/reference/automation-config.md, and show example usage in onboard docs. Introduce browser.enabled (default true) and a derived gate browser_verification_enabled = false when the Browser Verification section is absent or Enabled is false; update agents and skills to consume the merged config and to skip/defensively refuse based on the new gate (browser-agent, deployment-verifier, skills/fix-bugs, steps/03-reproduce.md, steps/08-browser-verify.md, skills/check-setup/SKILL.md). Also update tracker-type lookup in fix-bugs to prefer CLAUDE.local.md when present. Files changed: CLAUDE.md, core/config-reader.md, docs/reference/automation-config.md, agents/browser-agent.md, agents/deployment-verifier.md, skills/check-setup/SKILL.md, skills/fix-bugs/SKILL.md, skills/fix-bugs/steps/03-reproduce.md, skills/fix-bugs/steps/08-browser-verify.md, skills/onboard/SKILL.md.
- fix-bugs/SKILL.md: fix the TRACKER_TYPE awk extractor (`awk -F'| '` treats the
separator as an ERE alternation, yielding a literal `|`); use `awk '{print $4}'`
so the CLAUDE.local.md Type precedence actually works
- config-reader Step 0: define empty-value override (clears base), whole-unit
replacement for multi-value/map keys, and the Step-0-before-Step-4 ordering note
- docs: add a copy-paste `.gitignore` block + a security note (local overrides can
change webhook/remote/base-branch; by design machine-local)
- browser-agent: annotate the verify-phase "Read context" as override-resolved
- add examples/CLAUDE.local.example.md (docs referenced it as a tracked template)
Full local harness: 230 pass / 0 fail / 1 skip.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
18 tasks
Collaborator
Author
|
Closing — superseded by the Automation Config relocation decision (#18): the 🤖 Generated with Claude Code |
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.
Rework: CLAUDE.local.md per-developer overrides (was #9)
This carries the
CLAUDE.local.mdlocal-override work from #9 (review fixes already applied) for redesign. It was deliberately pulled from the v1.1.0 release (#10); do not merge as-is.Why it was pulled
The current design adds a config-layering mechanism — a second, gitignored source of truth (
CLAUDE.local.md) merged over the committedCLAUDE.md, with an LLM-performed sparse markdown merge incore/config-reader.mdStep 0. Concerns:config-readeris the single place the pipeline learns where to push and what to label. A gitignored override + an LLM-performed merge there weakens the "single committed, inspectable config" property and adds a misparse surface exactly where mistakes are most damaging (wrong remote/base — the incident class feat(publisher): PR-ownership defenses (6a/6b) + PR Rules Title format key — v1.1.0 #7 hardened against).What to change
Enabled/Base URL; Issue TrackerBug query; possibly Local Deployment ports / Module Docs). A hard denylist that can NEVER be overridden: Source ControlRemote/Base branch, NotificationsWebhook URL, Issue TrackerInstance/Project, and all of PR Rules —config-readermust ignore any local override of these with a[WARN].Enabledkey is a clean standalone optional key (disable verification without removing the section) and can land on its own, independent of any override layer.CLAUDE.mddirectly and bypassesconfig-reader(one such bypass — thefix-bugstracker-type grep — was found during review).Already in this branch
The original #9 mechanism plus the multi-perspective review fixes: the
awk -F'| 'tracker-type extractor fix, merge-rule clarifications (empty value; multi-value/maps replaced as a whole unit; Step-0-before-Step-4 ordering), a.gitignoreblock + security note, the verify-phase annotation, andexamples/CLAUDE.local.example.md.