cluster: action-scoped modify discipline + /idd-clarify unattended auto-defer (#150 + #137)#153
Conversation
…defer Cluster of two related changes shipped together on idd/137-150-action-scoped-cluster branch: # Refs #150 — action-scoped modify discipline (v2.73.0) Codify 7-category action taxonomy (state-field-update / bounded-section-replace / audit-block-append / inline-replace-before-publish / verbatim-preserve / append-only / free-rewrite) as plugin-level rule. Every modify-action SHALL declare scope category; undeclared SHALL REFUSE. Actor-identity-independent enforcement (no AI vs user exemption). Path C gate-logic 'authoritative_source' resolution generalized across 4 gate sites. BREAKING: /idd-edit --replace requires explicit --scope or --section flag; verbatim-preserve guard refuses modifications to non-OWNER non-bot user comments. # Refs #137 — /idd-clarify Step 4.8.A unattended-mode auto-defer (v2.74.0) Path D — reuse existing 'deferred' enum + strict reason literal 'unattended-auto-Step-4.6-deferred' (cited from rules/append-vs-modify.md Reason pattern registry, single source of truth). /idd-clarify Step 4.8.A detects unattended mode (no-TTY OR IDD_ALL_UNATTENDED=1) and writes 'deferred' rows with the registry-cited reason instead of 'surfaced'. /idd-diagnose Step 0.5 gate per-row scans the Reason field via dot-escaped anchored regex; registry-cited rows proceed-with-warn, legacy/non-match rows preserve REFUSE behavior. /idd-all Phase 6 final report surfaces auto-deferred rows to 'Action items (require human review)' section. Non-BREAKING. # 2 NEW main specs (retroactive #135 codification + #137 unattended branch) - openspec/specs/idd-clarify/spec.md (7 SHALL requirements) - openspec/specs/idd-diagnose-clarity-gate/spec.md (7 SHALL requirements) # Sister concerns filed - #151 Step 0.8 commit-body auto-close trap protection gap (orthogonal, P2) - #152 git hygiene 3 pre-existing dirty items (chore tangential, P3) Refs #150 Refs #137 Refs #151 Refs #152
Verify Report — PR #153 (cluster: #137 + #150)Engine5 general-purpose Agents (Claude reviewers, file-based output) + Codex (gpt-5.5 xhigh, run_in_background) AggregateFAIL — 3 BLOCKING bugs + 5 MEDIUM findings + 5 LOW/follow-up findings Scope coveragePR body refs: #135 (parent) + #137 + #150 + #151 + #152 BLOCKING — must fix before mergeB1.
|
…cement, Phase wording (Refs #137 Refs #150) Verify R1 master: #153 (comment) 3 BLOCKING (triple-confirmed by logic + devil-advocate + codex) + 1 MEDIUM doc drift + 1 LOW retroactive labels. # B1+B2 — awk range collapse + head -n -1 BSD/macOS incompatibility (3 sites) The naive pattern `awk '/^### Clarity Surface/,/^### /'` has start regex matching end regex (both `^### `) — range collapses on line 1, ALL rows lost. `SURFACED_COUNT` and `DEFERRED_AUTO` read 0 regardless of content; gate silently passes. Also `head -n -1` is GNU-only; macOS BSD errors `illegal line count -- -1`. Replaced at 3 sites (only 2 reported originally; idd-clarify Step 5b was 3rd): - plugins/issue-driven-dev/skills/idd-diagnose/SKILL.md:98 (Step 0.5 gate) - plugins/issue-driven-dev/skills/idd-clarify/SKILL.md:279 (Step 5b update mode) - plugins/issue-driven-dev/skills/idd-all/SKILL.md:856 (Phase 6 Action items surface) Fix pattern (flag-based, BSD-compatible): awk '/^### Clarity Surface/{flag=1; print; next} flag && /^### /{flag=0} flag' Smoke-tested on macOS BSD: correctly extracts block + counts 2 auto-deferred rows on test body with 5-column unattended schema. # B3 — /idd-edit --replace BREAKING moved from doc-only to runtime gate CHANGELOG [2.74.0] declared /idd-edit --replace BREAKING (requires --scope whole-comment OR --section <heading>), but actual SKILL.md Step 1 (parse) and Step 4 (build new body) had no enforcement — still whole-body overwrite. Verbatim-preserve guard for user-authored comments same problem (doc-only). Now Step 1 parses --scope / --section / --override-user-content / --reason flags; refuses on --replace without scope flags. Step 2 fetches author_association via gh api (fail-closed on gh CLI failure) + refuses non-OWNER non-bot unless explicit override. Step 4 dispatches --replace to whole-comment vs section-bound branches (section-bound uses awk splice; pre-flight verifies section exists). Known limitation acknowledged inline (per DA-3): solo-owner repos cannot distinguish AI-via-gh from user since both author as OWNER. # M5 — Phase 4 → Phase 6 wording drift (4 sites) /idd-clarify's final-report surface lives in /idd-all Phase 6 (current skill numbering), not legacy Phase 4 (#135 design nomenclature). Fixed: - idd-diagnose/SKILL.md:135 (stderr message) - idd-diagnose/SKILL.md:154 (behavior scenario table) - idd-diagnose/SKILL.md:171 (unattended contract narrative) - openspec/specs/idd-diagnose-clarity-gate/spec.md:43 (SHALL requirement) Other Phase 4 mentions in idd-all SKILL.md + CHANGELOG are legitimate verify-loop nomenclature (unchanged). # L3 — retroactive category labels gap (2 missing IC_R011 audit PATCH sites) Added (category: audit-block-append, scope: ...) inline notes to: - idd-implement Step 5.7 Sister Bug Sweep - idd-verify Step 5b Follow-up Findings Triage Now all 5 IC_R011 audit PATCH sites carry consistent category labels per #150 spec requirement "Action category labels SHALL be retroactively applied". Refs #137 Refs #150
Verify Report R2 — PR #153 (cluster: #137 + #150)Engine⚠ DEGRADED — 5 reviewer Agents rate-limited 2× retries(Anthropic API server-side burst limit,not user usage)。 Coordinator self-review fallback per Step 2.5c。 Codex CLI still running background(no output yet within window)。 Quality lower than 6-AI ensemble baseline。 Process Gaps
AggregatePASS-with-followups — all 3 R1 BLOCKING genuinely fixed in R1 BLOCKING fix verificationB1 + B2: awk range collapse + head -n -1 BSD incompat✓ FIXED — coordinator smoke-tested in R1 fix loop on macOS BSD:
B3: /idd-edit --replace BREAKING runtime enforcement✓ FIXED — Step 1 adds NEW R2 findings (from coordinator self-DA + logic edge cases)F1 —
|
| # | What | Disposition |
|---|---|---|
| M1 | [ ! -t 0 ] always true under Claude Bash tool |
doctrinal,follow-up issue if friction surfaces |
| M3 | solo-owner repo author_association limitation |
inline-acknowledged in R2 Step 2 refuse message |
| M4 | spectra validate doesn't cover new specs |
acceptance criteria typo,not code defect |
| L1 | inline literal embeddings vs cite-only wording | spec wording could relax,low priority |
| L2 | cluster Refs 4 issues not 2 | cosmetic |
| L4 | gh CLI failure-mode docs | R2 Step 2 implements fail-closed,docs implicit |
| L5 | inline-replace-before-publish example count |
rule wording could add example or relax spec |
Per-issue summary
#137 — /idd-clarify Step 4.8 unattended contract
R2 status: FULLY addressed(7 Strategy items all confirmed via grep + manual inspect)
Affected by NEW findings: F1 (Step 1 parser),F3 (awk + code fence) — both edge case,non-blocking
#150 — Action-scoped modify discipline
R2 status: FULLY addressed(was PARTIALLY in R1 due to B3 doc-only + L3 missing labels;R2 closed both)
Affected by NEW findings: F2 (silent partial section splice),F4 (errata flow regression)
Recommended Disposition
PASS-with-followups。 User decision points:
- Fix F1/F2/F3/F4 in same PR? ← 我建議 yes per
feedback_verify_fix_same_pr— all 4 are small fixes - OR accept R2 + file F1/F2/F3/F4 as follow-up issues before merge?
- OR wait for full 6-AI re-verify when rate limit cools(5-30 min hourly window)+ re-decide based on independent findings?
My recommendation:option 1 (fix in PR):
- F1: 3-line bash tweak (add
--scope) SCOPE_FLAG="$2"; shift ;;) - F2: 1-line change (
-qF→-qFx) - F3: defer (rare edge case + needs preprocessor design)
- F4: spec/SKILL.md note (carve out errata mode OR document workaround)
⏸ User decision needed。
⚠ Codex audit (appended post-master,critical revision)
Codex CLI finished after master post(timing window)。 Cross-model independent review caught what coordinator self-review MISSED due to confirmation bias(coordinator wrote the R2 fix bash + structural blindness)。
Codex verdict:R2 still FAIL — B3 NOT actually fixed
| R1 Finding | Codex R2 verdict |
|---|---|
| B1 awk range collapse | ✓ FIXED |
| B2 head -n -1 BSD | ✓ FIXED |
| B3 /idd-edit enforcement | ✗ NOT FIXED — parser FULLY BROKEN |
| M5 Phase wording | ✓ FIXED |
| L3 retroactive labels | ✓ FIXED |
NEW R2 bugs from Codex(critical revision over coordinator self-review)
B3-NEW-1 CRITICAL (catastrophic data loss in documented happy path):
Step 1 parser --scope value (space form) sets SCOPE_FLAG="next" literal string — does NOT pick up next arg。 Same for --section,--body,--body-file。
- Documented positive example
/idd-edit comment:NNN --replace --scope whole-comment --body "..."is BROKEN:--scopesetsSCOPE_FLAG="next"(literal)--scope whole-commentsecond arg dropped- Validation
[ "$SCOPE_FLAG" != "whole-comment" ]fires → refuse with "value 'next' not recognized" - Refuse fires on the CORRECT invocation pattern from CHANGELOG
B3-NEW-2 CATASTROPHIC:--body space form also broken。 --body "..." → BODY_INPUT=""(empty)。 If somehow user bypasses Step 1 refuse(e.g. --scope=whole-comment =-form),Step 4 NEW_BODY="$BODY_INPUT\n\n$AUDIT_MARKER" becomes only blank content + audit marker → silent data loss overwriting entire comment with empty content。
B3-NEW-3 LOGIC:Section replacement docstring claims "same-or-higher heading boundary"(uses SECTION_LEVEL count),but actual awk control flow in_section && /^#+ / { in_section=0 } stops at ANY heading regardless of level。 Replacing ## Foo section leaves orphan ### Foo-sub-1 subsections。
B3-NEW-4 DOC:Old usage example at SKILL.md:414 still shows /idd-edit --replace --body-file=... without required --scope — would refuse if user copies。
Codex did NOT miss
- Same coordinator self-DA finding F3 (awk + code fence)— Codex didn't surface this specific edge case
- Same finding F4 (errata flow regression)— Codex didn't surface;coordinator caught
- L2 (cluster scope undersold)— Codex confirmed PR body still says "2 issues" while listing 4
Revised R2 disposition
FAIL — B3 critical bugs(NEW-1 + NEW-2)mean documented happy path of /idd-edit --replace --scope whole-comment --body "..." either refuses or silently overwrites comment with empty content。 This is worse than R1(documentation-only)— it's runtime-broken。
Required R3 fix
Need to fix flag parser for all space-separated forms:
# Replace each shell-flag = expansion with positional shift:
while [[ $# -gt 0 ]]; do
case "$1" in
--append) MODE="append" ;;
--replace) MODE="replace" ;;
--prepend-note) MODE="prepend-note" ;;
--scope=*) SCOPE_FLAG="${1#--scope=}" ;;
--scope) SCOPE_FLAG="$2"; shift ;;
--section=*) SECTION_FLAG="${1#--section=}" ;;
--section) SECTION_FLAG="$2"; shift ;;
--override-user-content) OVERRIDE_USER="true" ;;
--reason=*) REASON_INPUT="${1#--reason=}"; ... ;;
--reason) REASON_INPUT="$2"; shift; ... ;;
--body=*) BODY_INPUT="${1#--body=}" ;;
--body) BODY_INPUT="$2"; shift ;;
--body-file=*) BODY_INPUT="$(cat ${1#--body-file=})" ;;
--body-file) BODY_INPUT="$(cat $2)"; shift ;;
*) ARG="$1" ;; # positional COMMENT_ID
esac
shift
donePlus B3-NEW-3 section boundary fix(use SECTION_LEVEL to constrain in_section /^#{1,SECTION_LEVEL} / regex)。 Plus old usage example at line 414 update。
Engine quality acknowledgement
Coordinator self-review confirmation bias is exactly what 6-AI ensemble + Devil's Advocate exists to catch。 R2 ran with N=1 independent source(Codex)+ 5 coordinator-self = degraded but caught the critical bug。 R3 should re-attempt full ensemble(rate limit will have cooled in ~30 min)to validate R3 fix。
… boundary level constraint (Refs #137 Refs #150) R2 Codex audit (post-master) caught: - B3-NEW-1 CRITICAL: --scope/--section/--body space-form parser sets value to literal "next" — refuse fires on documented happy path - B3-NEW-2 CATASTROPHIC: --body space form sets BODY_INPUT="" → NEW_BODY = empty + audit marker (silent comment overwrite) - B3-NEW-3 LOGIC: section-replacement awk end_re ignores SECTION_LEVEL, orphans subsections - B3-NEW-4 DOC: old usage example shows broken --replace without --scope R3 fixes: 1. Parser rewrite to positional shift pattern (while/case/shift) — handles both --flag=value AND --flag value (space) for --scope/--section/--reason/--body/--body-file/--repo/--cwd. Unknown flags refused explicitly. Positional ARG captured separately. 2. Section boundary end_re builds at runtime from SECTION_LEVEL: `^#{1,N} ` matches same-or-higher level heading. Replacing ## section keeps ### subsections within the section (replaced together); does NOT terminate at orphan ### lower-level. Smoke-tested: "## Foo" section + 2 ### subs replaced cleanly, "## Bar" + ### sub preserved. 3. Pre-flight section check: `grep -qFx` exact-line match (was substring) — prevents "## Foo" passing pre-flight when body has "## Foo Bar". 4. SECTION_LEVEL validation: must be 1-6 ('#' count). Invalid heading format refused. 5. Old usage example + argument-hint + batch-mode paragraph + frontmatter description all updated to show --scope/--section syntax. # Verify R2 engine degradation note 5 reviewer Agents rate-limited 2× retries during R2. Coordinator self-review fallback executed per Step 2.5c (5 self-reviews + Codex independent). Coordinator confirmation bias missed B3-NEW-1+2 critical bugs; Codex independent cross-model review caught them. This is exactly why 6-AI ensemble matters — R3 should re-attempt full ensemble (rate limit cool ~30min). Refs #137 Refs #150
Verify Report R3 — PR #153 (cluster: #137 + #150)Engine6-AI full ensemble(no rate limit this round)— 5 reviewer Agents + Codex independent。 Compared to R2 degraded(5 self-reviews + Codex landing late),R3 has full cross-source verification。 AggregateFAIL — R3 fix R2 finding fix verification
R3 DID fix what it claimed。 NEW R3 BLOCKING bugs(triple-confirmed)C1 — INFINITE LOOP on trailing space-form flagSeverity:CRITICAL All 7 space-form flags( R3 author's inline NOTE comment lines 201-205 claims「downstream gate catches empty SCOPE_FLAG」— WRONG, loop never reaches gate。 Fix:explicit C2 — Flag value eats next flagSeverity:CRITICAL
Fix: C3 —
|
#150 Refs #154) After 3 verify iterations (R1/R2/R3 on PR #153), bash-level enforcement of /idd-edit BREAKING in SKILL.md introduced new bugs each pass: - R1 commit d643fc6: added enforcement, R2 Codex caught B3-NEW-1 (parser --scope=next literal), B3-NEW-2 (--body empty → silent overwrite), B3-NEW-3 (section level), B3-NEW-4 (docs) - R3 commit 5c62b38: parser rewrite, R3 full ensemble caught C1 (trailing space-form flag INFINITE LOOP), C2 (flag-value-eat), C3 (multi-line awk-v BREAK — section-replace dead-on-arrival), H1 (--body-file silent empty) Path (c) chosen per lead-minimal discipline + 3-iteration evidence: 1. Revert idd-edit/SKILL.md to pre-#150 state (git checkout e5e05e1) — 252 lines removed (all R1+R3 bash enforcement attempts) 2. CHANGELOG [2.73.0] reframe: - 'BREAKING (behavioral)' → 'Spec discipline (declared, runtime enforcement deferred to follow-up issue)' - Reference #154 as runtime-enforcement follow-up - Soften minor-bump rationale (spec discipline declaration, not runtime BREAKING) - Retroactive labels mention: drop /idd-edit (deferred to #154) 3. rules/append-vs-modify.md updates: - 'CLI parser out of scope' → cite #154 with 3-iteration history - 'BREAKING change' section retitled 'Spec discipline ... runtime enforcement deferred' — describes invocation discipline + recommended patterns rather than runtime gate 4. #154 filed as proper follow-up with required design considerations: parser pattern guards, multi-line body getline pattern, --body-file readability check, errata flow integration, test fixtures covering all R1/R2/R3 edge cases identified. What ships in this PR remains solid: - R1 awk fix (B1+B2) at 3 sites (idd-diagnose / idd-clarify / idd-all) - R1 M5 Phase 4 → Phase 6 wording at 4 sites - R1 L3 retroactive labels at 2 sites - #137 unattended-auto-defer mechanism end-to-end - #150 action-scoped modify discipline rule + main spec - 2 new specs (idd-clarify + idd-diagnose-clarity-gate) Refs #137 Refs #150 Refs #154
Verify Report R4 — PR #153 (cluster: #137 + #150)EngineFull 6-AI ensemble(no rate limit)— 4 Reviewer Agents PASS + DA timeout sentinel + Codex independent。 Process Gaps
AggregatePASS-with-required-cleanup — R4 revert is clean,R1 work intact,but 3-way spec/CHANGELOG/impl drift surfaced + 1 NEW rule self-inconsistency from Codex。 Mergeable after small R5 cleanup loop。 R3 finding fix verification
R1 work intact verification(triple-confirmed)
Required R5 cleanup(triple-source-confirmed BLOCKING per Codex,Requirements/Logic/Regression all MEDIUM)R5-1 — Spec drift on
|
| # | Source | Detail |
|---|---|---|
| R4-L2 | Logic | archive design/proposal/spec untouched(acceptable per archive-first protection) |
| R4-F2 | Regression | 2.74.0 Note 「activates 4 #150 mechanisms」 wording could confuse casual readers — optional polish |
| R4-F3 | Regression | marketplace.json drift to plugin.json(pre-existing,not R4-introduced;post-merge /plugin-tools:plugin-update per release-flow.md) |
Disposition
PASS-with-required-cleanup。 R5 cleanup is small + targeted:
- 1 file:spec.md add 3 「Implementation status」 notes
- 1 file:rule.md line 195 reword
- 0 or 1 file:archive tasks.md(if accept post-archive correction is in-scope)
Per feedback_verify_fix_same_pr discipline:fix in PR before merge。
After R5 ships → R6 verify(predict clean — all R1/R3/R4 findings addressed,spec consistent)→ /idd-close cluster mode → ship
⏸ User decision:
- (a) R5 fix loop now(recommended,5-10 min)
- (b) Accept R4 + ship with documented drift(less clean but faster)
Refs #150 Refs #154) R4 verify (4 reviewers + Codex independent) surfaced 3-way drift: spec normative SHALL ≠ R4-softened CHANGELOG+rule ≠ reverted impl. Triple-confirmed by Requirements R4-M1 + Logic R4-L1 + Regression R4-F1 + Codex. Plus Codex flagged rule line 195 self-inconsistency (claimed SKILL.md describes discipline but post-revert SKILL.md is pre-#150 baseline with no discipline mention). R5 fixes: 1. openspec/specs/append-vs-modify-discipline/spec.md: - Purpose preamble: 'Implementation status (v2.74.0)' clarifies what landed (state-field-update, bounded-section-replace, audit-block-append, inline-replace-before-publish, Path C across 4 gate sites) vs what deferred to #154 (/idd-edit runtime enforcement of Requirements 4-5) - Requirement 4 (/idd-edit --replace SHALL require scope flag): 'Implementation status: discipline declared; runtime enforcement deferred to #154 ... Scenarios below describe intended runtime behavior post-#154 — NOT currently enforced by idd-edit/SKILL.md (pre-#150 baseline). Re-verify for runtime conformance when #154 closes.' - Requirement 5 (/idd-edit SHALL refuse user-authored comments): same deferred-impl preamble + AI/user invocation discipline guidance 2. plugins/issue-driven-dev/rules/append-vs-modify.md line 195: Reword tooling-section bullet: discipline lives in spec + rule + CHANGELOG (NOT in SKILL.md post-revert). Clarifies #154 will ship both runtime gate AND SKILL.md surface updates. R5 scope (NOT touched per archive-first protection): - openspec/changes/archive/2026-05-25-add-action-scoped-modify-discipline/tasks.md archived [x] marks for 3.1/3.2/3.3/6.2 left as-is (historical record of archive-time state; post-archive correction is separate audit concern covered by archive-first plugin's tracking). Refs #137 Refs #150 Refs #154
Verify Report R6 — PR #153 (cluster: #137 + #150) — PASSEngineFull 6-AI ensemble — 5 reviewer Agents + Codex independent。 No rate limit。 DA polling caught 1/4 siblings in 240s window then adapted to self-analysis(graceful degradation — DA still provided 3 substantive observations from diff + Security findings)。 AggregatePASS — 0 BLOCKING / 0 HIGH / 1 MEDIUM (cosmetic, author's call) / 3 non-blocking observations。 Cluster ready to merge。 R5 cleanup verification
Net cluster state
Non-blocking observations(non-merge-blockers)M1 — Spec preamble version attribution(Logic)R5 preambles tag「Implementation status (v2.74.0)」 but CHANGELOG places B3 entries under DA-M1 — Aspirational vs normative SHALL confusionSpec Requirement 4+5 preamble says「deferred, NOT enforced」 but Requirement body uses unhedged SHALL。 Reader skimming preamble could confuse spec-only contract with runtime contract。 Suggestion(stylistic):heading-level DA-M2 — DA polling 240s windowR6 extended polling from R4's 150s → 240s,still caught only 1/4 in window(reviewers ran 4-17 min)。 Suggestion(process):extend to 900-1200s or post-hoc DA。 R6 DA adapted by self-analysis from diff,partial coverage but not silent。 Mitigation:cross-check after siblings settle(coordinator did this — confirmed Logic + Regression PASS aligned with DA self-analysis)。 Carried tangentials(LOW,unchanged from R4)
FYI — archive tasks.md
|
Cluster PR — 2 related issues shipped together(per IDD cluster-PR mode, batch-and-cluster.md)。
Refs #150 — action-scoped modify discipline (v2.73.0)
Codify 7-category action taxonomy(
state-field-update/bounded-section-replace/audit-block-append/inline-replace-before-publish/verbatim-preserve/append-only/free-rewrite)as plugin-level rule。 Every modify-action SHALL declare scope category;undeclared SHALL REFUSE。 Actor-identity-independent enforcement(no AI vs user exemption)。 Path C gate-logicauthoritative_sourceresolution generalized across 4 gate sites(idd-close/idd-verify/idd-update/idd-implement)。BREAKING:
/idd-edit --replacerequires explicit--scope whole-commentOR--section <heading>flag;verbatim-preserve guard refuses modifications to non-OWNER non-bot user comments unless--override-user-content+--reason。Spec:
openspec/specs/append-vs-modify-discipline/spec.md(289 lines)。 Diagnosis comment: #issuecomment-4529711172。Refs #137 —
/idd-clarifyStep 4.8.A unattended-mode auto-defer (v2.74.0)Path D(per
/spectra-discuss2026-05-25 + user explicit pick post #150 reframe)。 Reuse existingdeferredenum + strict reason literalunattended-auto-Step-4.6-deferredcited fromrules/append-vs-modify.md§ Reason pattern registry(single source of truth)。/idd-clarifyStep 4.8.A:detect unattended(no-TTY ORIDD_ALL_UNATTENDED=1)+ writedeferredrows with registry-cited reason instead ofsurfaced/idd-diagnoseStep 0.5:per-row scan,dot-escaped anchored regex match → proceed-with-warn(audit line);non-match → preserve REFUSE(legacy backward-compat)/idd-allPhase 6:final report scan + surface auto-deferred rows to「Action items (require human review)」sectionNon-BREAKING(legacy
deferredrows behavior unchanged)。Specs(NEW greenfield,retroactive #135 + #137 codification):
openspec/specs/idd-clarify/spec.md(7 SHALL requirements)openspec/specs/idd-diagnose-clarity-gate/spec.md(7 SHALL requirements)Diagnosis: #issuecomment-4530594011。 Plan: #issuecomment-4530620614。
Cluster context
#150state-field-updatecategory +authoritative_sourcePath C pattern;同 PR review 一起 verify。Refs #Ncross-link per IDD discipline。/idd-close #137 #150post-merge,每 issue 獨立 closing summary。Sister concerns(已 file,不在本 PR scope)
Checklist
/idd-verify --pr <N>)Generated by
/idd-implementcluster-PR mode。 Do NOT add a GitHub close trailer(Closes/Fixes/Resolves)— IDD discipline requires manual/idd-close #137 #150after merge to enforce checklist gate + per-issue closing summaries。