chain (multi-root): 3 issues — idd-close: Residue acknowledgement prompt — close the F3 write-only loop#110
Conversation
#103 PR #104 expanded idd-issue Step 5 from metadata-only to also echo the AI-rendered ## Type / ## Expected / ## Actual + plain-language interpretation. For human readers this is strictly better — misparse becomes catchable from terminal. For CI / /loop scripts that hard-parse Step 5 stdout, this is a silent surface change. Adds one ⚠ paragraph mirroring the v2.55.0 --no-multi-finding CI warning precedent at line 994. Verbatim wording from #107 issue body, scoped to Step 5 (same anchor as the v2.64.0 echo paragraph this warning is about). No behavior change — purely documentation.
…ing (Refs #108) 5-template + 3-satellite consistency family — this commit covers the 4 PR-body wording sites that #102 left out of scope: - skills/idd-implement/SKILL.md:503 (PR template Pending review line) - skills/idd-all/SKILL.md:755 (Phase 5 PR-body Pending review line) - references/pr-flow.md:135 (canonical Pending review line) - references/chain-flow.md:254 (cluster variant) All swap legacy 'Pending: human review of this PR + /idd-close after merge' to verify-gated default: 'Verify-gated: verify PASS — ready to merge → /idd-close ... after merge'. Per Option A from #108 diagnosis: idd-implement does NOT accept --review flag (--review remains idd-all + idd-all-chain only); direct idd-implement invocations get the default wording without conditional. Remaining #108 work in subsequent commits: F3 (idd-all-chain Phase 4 stdout --review-aware), Trace 1 example refresh (idd-all 893-901), DA3 wording precision (orchestrator-scope messaging-only).
…efs #108 F3) Per PR #109 verify regression finding F3: Phase 4 final report stdout text (the verify-gated terminal disposition line + Next steps block) was NOT --review-aware, while the PR-body checklist already was. Build VERIFY_LINE + NEXT_STEPS as separate vars via explicit if/else BEFORE the heredoc (NOT inline ${VAR:-word} — that mutex pitfall already caught in PR #109 F1, hardcoded into the doctrine). Default: 'Verify: verify-gated PASS across cluster — cluster ready to merge' + 'Next: 1. Merge ... 2. /idd-close ...' --review: 'Verify: verify-gated PASS across cluster — awaiting human acceptance (re-opened confirmation loop per --review)' + 'Next: 1. Review PR ... 2. Merge after acceptance 3. /idd-close ...' This closes the F3 satellite of #108's 5-template + 3-satellite scope.
…efs #108) Two remaining satellites from #108's 5-template + 3-satellite scope: **Trace 1 example refresh** (idd-all/SKILL.md 893-901, idd-all 鐵律 line 843): - Default example now shows 'Verify: verify-gated PASS' + 'Next: merge' - Adds parallel --review variant block showing 'awaiting human acceptance (re-opened confirmation loop per --review)' + 'merge after acceptance' - 鐵律 line: 'messaging-only' → 'orchestrator-scope messaging-only' with explicit #108 DA3 citation **DA3 wording precision** (3 sites + MANIFESTO): - idd-all/SKILL.md:117 args parsing comment → 'orchestrator-scope messaging-only effect' - idd-all-chain/SKILL.md:118 args parsing comment → same swap - MANIFESTO.md Human-in-the-loop --review paragraph → 'orchestrator-scope' Rationale: '--review is messaging-only' is true AT THE ORCHESTRATOR (does NOT change skill behavior, does NOT make orchestrator wait), but humans + CI parsers downstream can react to the changed text differently — so it isn't messaging-only in the strict end-to-end sense. The qualifier prevents that misreading. Closes the F3 + Trace 1 + DA3 satellites of #108's scope. Remaining for #108: CHANGELOG + plugin.json bump (next commit).
…ly loop (Refs #105) Per #103 PR #104 verify Devil's Advocate D2 finding: `### Residue` shipped in #103 as a producer-only field — idd-implement / idd-verify / idd-close / idd-list / idd-update / idd-all all read OTHER Diagnosis sections but none read Residue. Result: latent ritual-drift risk — without a downstream consumer pressuring the field to stay honest, it becomes ignored boilerplate over time. #105 closes the loop by giving Residue its first downstream consumer at close time: - NEW Step 3.6 between Step 3.5 (closing follow-up keyword scan) and Step 4 (publish + close), mirroring Step 3.5's drafted-summary-scan pattern. - Reads the **latest** `## Diagnosis` comment's `### Residue` section (mirrors Step 0 supersession — older drafts are deliberation history, not current contract). - Trigger logic: silent skip when no Diagnosis exists (legacy), no `### Residue` section (pre-v2.64.0 format), or content is exactly `(none)` (the explicit empty-state marker the template requires). - When triggered: AskUserQuestion 3-option per IC_R011 canonical pattern — `still residue`, `file as follow-up issue(s)`, `skip`. - Audit trail PATCH per canonical heading-conventions table — every branch records something to the closing summary (5 outcomes covered: acknowledge, file, skip, silent, env-var rollback). - Manifest helper integration: filed follow-ups get spawn manifest entries when chain context active (additive, silent skip otherwise). - Step 0.5 Bootstrap Task List adds `residue_acknowledgement` entry alongside `closing_followup_keyword_scan` for visible per-step accountability. Non-blocking (SHOULD-tier) per closure-tier IC_R011 eligibility: closure is mostly mechanical action with text artifact; hard-blocking on every residue declaration would multiply close-time friction. The value is making 'residue is real, what happened to it?' a visible deliberation moment. Placement rationale: Step 3.5 already established the 'scan drafted closing summary + AskUserQuestion before publish' pattern. Step 3.6 mirrors it — same draft/scan/PATCH flow, different source (Residue vs orphan keyword mentions). Both must run BEFORE Step 4 so the audit PATCH happens to the same in-memory draft.
Cluster release covering 3 chain-solved issues on branch idd/chain-multi-5439e76b-idd-close-residue-acknowledgement-prompt: - #105 (Plan-tier): idd-close Step 3.6 Residue Acknowledgement — closes the F3 write-only loop from #103. - #107 (Simple): idd-issue Step 5 ⚠ paragraph for CI/loop hard-parse warning. - #108 (Plan-tier): 5-template + 3-satellite consistency family — 4 PR-body wording syncs + idd-all-chain Phase 4 stdout --review dispatch + idd-all Trace 1 example refresh + DA3 wording precision. Minor bump justification: new idd-close step (additive behavior at close time) + 4 default PR-body wording strings change (user-visible diff in every PR opened by IDD orchestrators) + new conditional in idd-all-chain Phase 4 stdout. Patch would have under-claimed. Marketplace.json sync deferred to /idd-close Step 6.5 chain per repo precedent. CHANGELOG entry covers all 3 issues.
Verify findings dispatched in same PR per feedback_verify_fix_same_pr: - H1 (regression): openspec/specs/idd-all-chain/spec.md:161 contract drift — updated section heading + bullet wording to match shipped chain-flow.md (## Review status + Verify-gated default + --review opt-in branch). Otherwise live spec contracts pre-v2.66.0 wording that v2.66.0 removes from emission. - L3 (regression): chain-flow.md:249 section heading swap '## Pending review' → '## Review status'. Was missed when idd-all-chain SKILL.md got the cosmetic heading swap; chain-flow.md is the documentation contract and should match. - L1 (regression): idd-issue/SKILL.md:880 parenthetical pointed at 'line 994' but actual reference moved to line 996 after paragraph insertion (off-by-2 from the inserted paragraph itself). Drop the line-number reference entirely — paths rot, the descriptive '--no-multi-finding CI warning below' is enough. - Codex finding (nit): CHANGELOG.md #107 entry claimed 'Verbatim wording from the issue body' but shipped wording adds two skill- internal items (#107 self-reference + precedent parenthetical). Softened to 'near-verbatim ... with two skill-internal additions' to keep CHANGELOG accuracy honest. Refs #105 #107 #108
/idd-verify --pr 110 — cluster verify reportPhase: verified (verify-gated PASS)
Aggregate verdict: PASS (post-fix)
Findings dispatched in-PR (per
|
| # | Severity | Source | What | Where |
|---|---|---|---|---|
| H1 | HIGH | regression | Live spec contract drift — openspec/specs/idd-all-chain/spec.md:161 contracted old Pending: human review wording that v2.66.0 removes from emission |
Updated section heading + bullet wording to match shipped chain-flow.md |
| L3 | LOW | regression | Heading dissonance — chain-flow.md:249 ## Pending review but content was Verify-gated checkbox |
## Pending review → ## Review status |
| L1 | LOW | regression | Off-by-2 line number — idd-issue/SKILL.md:880 ⚠ paragraph cited "below at line 994" but actual reference moved to 996 after paragraph insertion |
Dropped specific line number — paths rot |
| Codex nit | LOW | Codex | CHANGELOG #107 entry claimed "Verbatim wording from the issue body" but shipped adds #107 self-reference + parenthetical |
Softened to "near-verbatim ... with two skill-internal additions" |
Per-issue verdict
#105 — idd-close Residue Acknowledgement: PASS
- Step 3.6 inserted at correct position (line 405, between Step 3.5 at 337 and Step 4 at 499)
awkextraction:/^### Residue/{flag=1; next} flag && /^###? /{flag=0} flag— stops at H2/H3 correctly, EOF terminates scan- 3-branch silent-skip (missing /
(none)/ pre-v2.64.0) - AskUserQuestion 3-option per IC_R011 canonical (file all / file selected / skip)
- 5-row audit-PATCH table (acknowledge / file all / file selected / skip / silent-skip)
- Step 0.5 Bootstrap
residue_acknowledgementtask entry at line 166 manifest-append.sh9-arg invocation matches idd-implement Step 5.7 precedent (ROOT_ID_FOR_MANIFEST="${IDD_CHAIN_CURRENT_ROOT_ID:-${NUMBER:-}}")- Security:
RESIDUE_CONTENTinterpolated through quoted variable expansion across all 7 use sites; noeval/bash -c;head -c 4000cap mitigates DoS - Rollback hatch present (
IDD_LOW_BAR_RESIDUE_ACK=false)
#107 — idd-issue Step 5 CI/loop hard-parse warning: PASS
- ⚠ paragraph at exact anchor — line 880, between v2.64.0 echo block (878) and
提示下一步(882) - Wording near-verbatim per issue body
## Expected; skill-internal#107self-reference + precedent parenthetical preserved (CHANGELOG softened to match — fix commit) - Mirrors v2.55.0
--no-multi-findingCI warning precedent shape - Off-by-2 line-number reference dropped (fix commit)
#108 — 5-template + 3-satellite consistency: PASS
- 4 PR-body templates synced (idd-implement:503, idd-all:755, pr-flow:135, chain-flow:254)
- F3 — explicit if/else built BEFORE heredoc (idd-all-chain Phase 4 stdout, lines 707-727) — avoids
${VAR:-word}mutex from PR [enhancement] acceptance-review 缺在 IDD mode model — 「人不 review」需要 first-class 做法 #109 F1. Empirically traces correctly for bothREVIEW_FLAG=""andREVIEW_FLAG="--review" - Trace 1 example refresh with parallel default +
--reviewvariant blocks - DA3 wording —
orchestrator-scope messaging-onlyconsistent in idd-all (lines 117 + 843), idd-all-chain (line 118), MANIFESTO (line 119) - Option A respected —
grep -- "--review" skills/idd-implement/SKILL.mdreturns 0 hits (CLI argument-hint clean) - chain-flow.md heading swap (fix commit) syncs to idd-all-chain SKILL.md heading swap shipped pre-fix
- Live spec contract (fix commit) updates
openspec/specs/idd-all-chain/spec.md:161to match emission
Shared
plugin.json2.65.0 → 2.66.0 (minor — justified by new step + 4 wording + new conditional)CHANGELOG.md[2.66.0]entry covers all 3 issues;### Noteshonest about marketplace.json deferral
Scope discipline
No cross-issue creep verified:
#105→skills/idd-close/SKILL.mdonly#107→skills/idd-issue/SKILL.mdonly#108→ 4 PR-body sites + idd-all-chain (Phase 4 stdout + DA3 args comment + heading swap) + idd-all (Trace 1 + 鐵律 + DA3 args comment) + MANIFESTO (DA3 wording) + pr-flow + chain-flow + spec- Shared: CHANGELOG + plugin.json
Devil's Advocate dismissal note
DA's findings file claims all 4 sibling reviewers reviewed a different PR (Swift MailController.escapeForAppleScript dedup). Verified false: actual sibling findings files (timestamps 2026-05-20 10:35-10:38) all correctly review PR #110 (cite idd-close Step 3.6, idd-issue Step 5, F3 if/else, MANIFESTO line 119). Most likely cause: DA polling succeeded earlier when stale 2026-05-19 sibling files (since overwritten) were on disk. DA's 10 adversarial angles, applied to the actual PR #110 diff (independent of sibling files), surface no new blocking findings — only deferred-tech-debt observations already documented as Residue in the diagnoses.
Next: merge ready
Cluster ready to merge per verify-gated doctrine:
- Merge chain (multi-root): 3 issues — idd-close: Residue acknowledgement prompt — close the F3 write-only loop #110 (squash recommended — single review surface)
/idd-close #105 #107 #108(per-issue closing summary required, no shortcut)- Distribution sync to v2.66.0 via
/plugin-tools:plugin-update issue-driven-dev
Verify: 6-AI ensemble PASS (post-fix). Findings dispatched in same PR per feedback_verify_fix_same_pr.
…n-dev v2.66.0 Distribution sync after PR #110 merge (cb19802) closing #105 #107 #108: - .claude-plugin/marketplace.json: 2.65.0 → 2.66.0 + full description chain (NSQL doctrine follow-up family rationale + 4 deliverables) - plugins/issue-driven-dev/README.md: Version History row v2.56.0–v2.65.0 → v2.56.0–v2.66.0, appended v2.66.0 paragraph with per-issue scope + 6-AI verify outcome + fix commit reference Refs #105 #107 #108
… family from #48 verify (#113) chain (multi-root): 5 issues — idd-issue multi-finding spec hardening family from #48 verify (#113) Cluster PR closes 5 sister bugs from #48's 6-AI verify, all same-file (skills/idd-issue/SKILL.md multi-finding mode), shipped as one chain: * #75 (security) — Content sanitization contract: dual-track (jsonl verbatim per IC_R007 + GitHub body sanitized via Unicode-aware Python filter covering C0/DEL/C1/bidi-override U+202A-U+202E + U+2066-U+2069 Trojan-Source CVE-2021-42574 family); sanitize_source_label() refuse-on-@-token cross-references rules/tagging-collaborators.md; jq --arg / --argjson parameter binding mandate. * #76 (bug) — run_id collision + symlink hardening: ISO-8601 millisecond precision dispatch chain (GNU %3N → Python datetime fallback for BSD date hazard on macOS → .000Z last resort); TOCTOU symlink check fail-closed; JSONL_WRITE_GUARD invoked at run-start to lock canonical path before Stage 4 footer composition (prevents nonce-retry path mutation invalidating footer URLs). * #77 (enhancement) — 7 corner-case spec contract gaps closed: flag-conflict refusal layering, partner_eligible_set formal definition, Stage 3 Edit-row soft cap >5, [Back to top-3] 5th Other option, Stage 1 path canonicalization, agent-crash known gap, Stage 4.5 unattended fallback. * #79 (enhancement) — Audit trail completeness: abort-path now writes minimal aborted: true jsonl with partial timestamps (footer URLs valid post-abort); > **Action** footer line; "srt" source_type enum. * #80 (enhancement) — Stage 1 + Stage 2 LLM determinism: anchor heuristics for MAY merge/split clauses; max_possible_score formula explicit; N<3 degenerate-case picker shape table. Plus: CHANGELOG v2.67.0 + plugin.json 2.66.0 → 2.67.0 (minor — additive spec hardening). Verify dispatched 4 HIGH blocking findings in-PR (commit 0fe06ed): F75-1 (CJK UTF-8 corruption via byte-level tr), F76-1 (BSD date %3N silent literal output), F76-2 (JSONL_WRITE_GUARD dead code + RANDOM 15-bit comment-code drift), #79 spec/impl contradiction. 5/6-AI verify PASS post-fix (Codex hung at 12+ min — process gap recorded per v2.59.0+ convention, precedent: PR #110 DA stale-file). Refs #75 #76 #77 #79 #80
Refs #105 #107 #108
Summary
Multi-root chain (N=3 roots: 105 107 108) solved as one cluster via
/idd-all-chain(v2.60+, traversal=dfs). All 3 are NSQL doctrine consistency follow-ups from #103 (PR #104) + #102 (PR #109), grouped together because they share the theme "follow up the IDD doctrine work":idd-closeStep 3.6 Residue Acknowledgement: closes the F3 write-only loop from IDD human-in-the-loop should conform to the NSQL confirmation protocol (v4.1.0) #103 by giving### Residuea downstream consumer at close time.idd-issueStep 5 CI/loop hard-parse warning: defensive doc mirroring v2.55.0--no-multi-findingprecedent.--reviewdispatch + idd-all Trace 1 example refresh + DA3 wording precision.Cluster overview
c9cfa5951373fc7f94c96+7a81617+37083040370516Per-issue details
#105 (root_id=105) — idd-close: Residue acknowledgement prompt — close the F3 write-only loop
See issue #105 for Diagnosis (Plan-tier, Layer V V1=2 V4=3 untriggered) + Implementation Complete.
NEW Step 3.6 between Step 3.5 (closing follow-up keyword scan) and Step 4 (publish+close) in
idd-close. Reads latest## Diagnosiscomment's### Residuesection, silent skips when content is(none)or section missing, AskUserQuestion 3-option when non-empty. SHOULD-tier (non-blocking) per IC_R011 closure-tier eligibility.#107 (root_id=107) — idd-issue Step 5: CI/loop hard-parse warning
See issue #107 for Diagnosis (Simple, Layer 1 disqualifier — prose update) + Implementation Complete.
One ⚠ paragraph addition at
skills/idd-issue/SKILL.mdStep 5, anchored after the v2.64.0 echo paragraph (per #103). Verbatim wording from issue body's## Expected. Mirrors v2.55.0--no-multi-findingCI warning precedent at line 994.#108 (root_id=108) — Sync 5-template + 3-satellite PR-body wording to NSQL doctrine
See issue #108 for Diagnosis (Plan-tier, Layer V V1=2 V4=3 untriggered) + Implementation Complete.
Wording sync across:
idd-implementStep 5.5,idd-allPhase 5,pr-flow.md,chain-flow.md)idd-all-chainPhase 4 final stdout--review-aware (built via explicitif/elseto avoid the${VAR:-word}mutex pitfall from PR [enhancement] acceptance-review 缺在 IDD mode model — 「人不 review」需要 first-class 做法 #109 F1)idd-allexample block refreshmessaging-only→orchestrator-scope messaging-onlyin 3 sitesReview status
/idd-verify --pr <this PR>)/idd-close #105 #107 #108per issue after merge🤖 Generated by /idd-all-chain. Do NOT add GitHub close trailers (Closes/Fixes/Resolves) — IDD discipline requires manual /idd-close per issue after merge to enforce checklist gate + per-issue closing summary.