docs: promote CLAUDE.md nullable-gate divergence to #522 and record epic-planner lessons - #523
Merged
Merged
Conversation
The C# type-check command in CLAUDE.md, .claude/rules/csharp.md, and the csharp-qa-gate skill passes /p:Nullable=enable, but ci.yml deliberately omits it because the repo uses per-file `#nullable enable` opt-in. Forcing the flag reports 200-414 errors that are red on main regardless, so the documented gate can never pass and agents manufacture false CS86xx blockers. Independently hit by the #507 and #508 deliveries on 2026-08-08; both required overriding a subagent's false blocking finding. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011vjbBgWNjMZLxBexMQMwLd
…ning run Capture two findings from the gate-failed epic-plan run: - Check in-flight branches, not just origin/main, before decomposing. All four issues were spawned by the unmerged #503 branch, which relocated the methods named by #505/#506 into a new file while carrying both defects forward. - The epic-planner-state validator enforces exact enum strings for epic_worthiness.verdict and next_step that the agent docs never state. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011vjbBgWNjMZLxBexMQMwLd
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.
Suggested title
docs: promote CLAUDE.md nullable-gate divergence to #522 and record epic-planner lessons
Summary
CLAUDE.mdand two other governance files passes/p:Nullable=enable, but CI deliberately omits it, so the documented gate can never pass on a cleanmain.epic-planneragent-memory entries from the gate-failed 505/506/507/508 planning run.Why
Two deliveries on 2026-08-08 (issues #507 and #508) each independently hit the same false blocker: a subagent running the
CLAUDE.mdtype-check command verbatim reported a blockingCS8603on work that was in fact clean. In both cases the error only appeared under/p:Nullable=enable, a flag.github/workflows/ci.ymlintentionally does not pass.The workflow states the reasoning inline — enforcement relies on each file's own
#nullable enablepragma, becauseUtilitiesCS.csprojandSVGControl.csprojcarry no project-level<Nullable>element. Solution-wide/p:Nullable=enableopts in every file at once, including the majority never written for it, producing 200-414 errors that are red onmainregardless of any local change.That decision was never propagated back into the governance layer, so the documentation instructs every agent to run a gate that cannot pass. Left uncorrected, the cost recurs on every C#-touching run.
The epic-planner entries capture a separate finding from the same day: bugs promoted out of another feature's review are usually located in the exact code that feature is refactoring, so decomposition must check unmerged branches rather than only
origin/main.What Changed
Docs — potential-entry promotion
docs/features/potential/promoted/2026-08-08-claudemd-nullable-gate-diverges-from-ci.md(+95) — full bug report: reproduction steps, theci.ymlexcerpt with its rationale comment, the six affected occurrences across three files, severity assessment, and proposed fix criteria.Docs — agent memory
.claude/agent-memory/epic-planner/feedback_check_inflight_branches_before_decomposition.md(+46) — new: check in-flight branches and their orchestrator checkpoints before computing an epic decomposition; includes the two decomposition rules the run confirmed..claude/agent-memory/epic-planner/feedback_epic_planner_state_required_fields.md(+12/-1) — records the exact enum values the checkpoint validator enforces forepic_worthiness.verdictandnext_step..claude/agent-memory/epic-planner/MEMORY.md(+2/-1) — index entries for the above.Architecture / How It Fits Together
No runtime wiring. The promoted entry sits in the standard
docs/features/potential/promoted/location consumed by the feature-promotion lifecycle. The agent-memory files are read by theepic-planneragent at session start via itsMEMORY.mdindex.Verification
Completed
git statusclean on the branch; all four files committed across two commits.git diff --numstat origin/main...HEAD..github/workflows/ci.ymllines 103-116 omit/p:Nullable=enable, and the six divergent occurrences were located atCLAUDE.md:206,CLAUDE.md:383,CLAUDE.md:401,.claude/rules/csharp.md:16,.claude/rules/csharp.md:83, and.claude/skills/csharp-qa-gate/SKILL.md:32.Recommended
actionlint,Format, build, analyze, and test) will run unchanged; a docs-only diff should not affect them.Backward Compatibility / Migration Notes
None. No API, command, or configuration behavior changes. The defective commands are documented but deliberately left in place for #522 to fix.
Risks and Mitigations
Review Guide
Small diff, suggested order:
docs/features/potential/promoted/2026-08-08-claudemd-nullable-gate-diverges-from-ci.md— the substantive content; check the reproduction steps and theci.ymlexcerpt against the workflow.Follow-ups
ci.ymlrationale into.claude/rules/csharp.mdso the per-file-pragma convention lives in the governance layer. Verify the corrected command still fails on a genuine regression in a file that does carry#nullable enable, so the gate is fixed rather than merely weakened.GitHub Auto-close
None. This PR records the promoted entry for #522 but does not fix it. The context bundle's author-asserted autoclose list contained
#522, which is a text scan of the commit message rather than author intent; it is deliberately not emitted as aClosesbullet.