Skip to content

chain (multi-root): 3 issues — idd-close: Residue acknowledgement prompt — close the F3 write-only loop#110

Merged
kiki830621 merged 7 commits into
mainfrom
idd/chain-multi-5439e76b-idd-close-residue-acknowledgement-prompt
May 20, 2026
Merged

chain (multi-root): 3 issues — idd-close: Residue acknowledgement prompt — close the F3 write-only loop#110
kiki830621 merged 7 commits into
mainfrom
idd/chain-multi-5439e76b-idd-close-residue-acknowledgement-prompt

Conversation

@kiki830621
Copy link
Copy Markdown
Contributor

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":

Cluster overview

# root_id Spawn source Phase Commit
#105 105 root (Plan-tier) implemented c9cfa59
#107 107 root (Simple) implemented 51373fc
#108 108 root (Plan-tier) implemented 7f94c96 + 7a81617 + 3708304
shared bump cluster 0370516

Per-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 ## Diagnosis comment's ### Residue section, 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.md Step 5, anchored after the v2.64.0 echo paragraph (per #103). Verbatim wording from issue body's ## Expected. Mirrors v2.55.0 --no-multi-finding CI 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:

Review status

  • Diagnose ✓ for all 3 issues (2 Plan, 1 Simple)
  • Implement ✓ (7 commits across 6 files)
  • Verify (run /idd-verify --pr <this PR>)
  • Verify-gated: per-issue verify PASS — cluster ready to merge → /idd-close #105 #107 #108 per 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.

#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
@kiki830621
Copy link
Copy Markdown
Contributor Author

/idd-verify --pr 110 — cluster verify report

Phase: verified (verify-gated PASS)
Mode: PR mode, cluster (3 issues: #105 #107 #108)
Diff: 338 lines, 7 files (doc-only). Post-finding fix commit 6bae8e6 adds 4 more line edits (4 files).
Reviewers: 5 general-purpose Agents (requirements / logic / security / regression / devil's advocate) + Codex gpt-5.5 xhigh.

為什麼:post-execution 是 execution-fidelity check(per idd-implement 對 issue 的對應),不是 confirmation loop。Issue + diagnosis 已合上 confirmation loop in this cluster — verify report 是 execution-fidelity 的 5+1 平行盲驗 + DA polled rebuttal。

Aggregate verdict: PASS (post-fix)

Reviewer Initial verdict After fix commit 6bae8e6
Requirements PASS PASS
Logic PASS (3 minor obs) PASS
Security PASS (0 blocking, 1 LOW informational) PASS
Regression CONDITIONAL PASS (1 HIGH + 2 LOW) PASS (all 3 findings fixed in-PR)
Devil's Advocate reported stale-sibling-file context mismatch — dismissed (verified all 4 sibling files reviewed PR #110 correctly; DA polled before siblings overwrote stale 2026-05-19 leftovers) n/a
Codex (independent gpt-5.5 xhigh) #105 FULLY / #107 PARTIALLY (CHANGELOG accuracy nit) / #108 FULLY PASS (CHANGELOG softened in fix commit)

Findings dispatched in-PR (per feedback_verify_fix_same_pr)

Fix commit 6bae8e6:

# 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)
  • awk extraction: /^### 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_acknowledgement task entry at line 166
  • manifest-append.sh 9-arg invocation matches idd-implement Step 5.7 precedent (ROOT_ID_FOR_MANIFEST="${IDD_CHAIN_CURRENT_ROOT_ID:-${NUMBER:-}}")
  • Security: RESIDUE_CONTENT interpolated through quoted variable expansion across all 7 use sites; no eval / bash -c; head -c 4000 cap 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 #107 self-reference + precedent parenthetical preserved (CHANGELOG softened to match — fix commit)
  • Mirrors v2.55.0 --no-multi-finding CI 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 both REVIEW_FLAG="" and REVIEW_FLAG="--review"
  • Trace 1 example refresh with parallel default + --review variant blocks
  • DA3 wordingorchestrator-scope messaging-only consistent in idd-all (lines 117 + 843), idd-all-chain (line 118), MANIFESTO (line 119)
  • Option A respectedgrep -- "--review" skills/idd-implement/SKILL.md returns 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:161 to match emission

Shared

  • plugin.json 2.65.0 → 2.66.0 (minor — justified by new step + 4 wording + new conditional)
  • CHANGELOG.md [2.66.0] entry covers all 3 issues; ### Notes honest about marketplace.json deferral

Scope discipline

No cross-issue creep verified:

  • #105skills/idd-close/SKILL.md only
  • #107skills/idd-issue/SKILL.md only
  • #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:

  1. Merge chain (multi-root): 3 issues — idd-close: Residue acknowledgement prompt — close the F3 write-only loop #110 (squash recommended — single review surface)
  2. /idd-close #105 #107 #108 (per-issue closing summary required, no shortcut)
  3. 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.

@kiki830621 kiki830621 merged commit cb19802 into main May 20, 2026
kiki830621 added a commit that referenced this pull request May 20, 2026
…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
kiki830621 added a commit that referenced this pull request May 20, 2026
… 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant