feat(idd-comment): --type=reply human-facing point-by-point reply (v2.100.0, #269)#271
Conversation
…c) static check The 23 idd-edit fixtures all invoke the helper directly, so 'SKILL references a variable the helper never emits' bugs shipped with green tests three times (R1 B1 APPEND_BODY, R1 B2 GITHUB_REPO, independently flagged by 3 reviewers). New suite idd-edit-contract embeds a python3 checker: EMITTED derives mechanically from the helper source (emit_assignment calls + TARGETS array — single source, no third variable list), CONSUMED/DEFINED parse the SKILL's fenced bash blocks, and the invariant CONSUMED - DEFINED - EMITTED - ALLOWLIST = empty catches the unsourced-reference class. Allowlist is env only (CLAUDE_PLUGIN_ROOT, IDD_CALLER per the #161 cross-skill contract, ...; GITHUB_REPO deliberately excluded — that WAS bug B2). Checker efficacy is self-tested against a seeded three-violation fixture (detection failing = suite fails), and the 11-name emit surface is frozen (deleting an emit goes red here before it breaks consumers). First live run caught IDD_CALLER and forced its provenance classification — working as intended. SKILL gains a Contract section documenting mechanism + scan boundary (H7 structural class stays with fixture 14). Shape (a) escalation stays trigger-based per the approved plan. GREEN 17/0; sweep 39 suites 0 fail. Refs #163
… (v2.100.0) Seventh comment type for correspondence to a human collaborator (review author, advisor), the recipient-facing counterpart to the six audit-facing types. Per-point structure: verbatim blockquote of the counterpart's point -> what changed and where -> commit/PR/merge-SHA anchor -> honest per-point status. Required --points-from resolves through a three-layer chain (comment URL -> issue-body Original-text blockquote -> user-pasted); verbatim, no paraphrase. verify-before-claim gate (same family as idd-close Step 1.6) keeps unevidenced points open/pending. perspective-writer soft integration with graceful degrade: presence-check present -> calibrate voice/recipient; absent -> print the two install commands and post the anchored draft anyway. No install-time dependency (deliberate opposite of superpowers hard-dependency — calibration is an enhancement, not a canonical-process substitute). Anchoring precedes calibration; calibration must not alter anchored facts. New drift-guard suite idd-comment-reply (19 assertions). run-all-tests: 40 suites, 0 fail. Docs (commands/workflows/README) + CHANGELOG + both manifests bumped to 2.100.0. Spectra change add-idd-comment-reply-type (validate + analyze clean). Refs #269 Related PsychQuant/psychquant-claude-plugins#116, PsychQuant/perspective-writer#1
Verify round 1 (4 lens + Codex + Devil's Advocate) findings, all folded: - DA-1 (HIGH): verify-before-claim was issue-level (git log --grep "#N") but the obligation is per-point. Rewrote R2: the grep is an entry point; the found commit/PR must actually contain the change addressing THAT point, and finding any #N commit must not mark all points resolved. Locked by 2 new drift-guard assertions. - Codex + Regression F1: --points-from "required" vs spec "when unspecified default to issue-body" was a genuine contradiction. Reworded spec so the three layers describe how the REQUIRED value resolves (issue-body is an explicit sentinel), not a default for an absent flag. Dropped --body from reply's 必填 column (Step 2 + spec make it optional). - DA-2 (MEDIUM): bootstrap TaskCreate order (build_comment_body before resolve/verify) contradicted the pipeline "順序是契約". Reordered so resolve_points_source + verify_before_claim precede build_comment_body (= R3 anchoring) and annotated the dependency. - Security F4 + DA-3 (MEDIUM): reply is the only type reproducing third-party verbatim. Added scrub-wins-over-verbatim clause + noted SCRUB_LEVEL is repo-visibility-keyed (own-repo → warn/light, never enforce) so layer-3 pasted external content needs heightened self-review, not tier default. - Test strengthening (Logic LOW-1 / Requirements F3 / Codex gaps): anchored the weak "reply" docs needle, added assertions for layer-1 URL / layer-3 paste / per-point template elements / degrade post-anyway / scrub-wins. Suite 19 -> 27 assertions. - Doc drift: design/proposal run.sh -> test.sh, suite count 39->40. run-all-tests: 40 suites 0 fail. reply suite 27/27. spectra valid. Refs #269
Verify Report — PR #271 (Refs #269)Enginemanual fan-out (4 lens Agents + sequenced Devil's Advocate, model: opus, file-based output) + Codex (gpt-5.6-sol, xhigh, via codex-call) AggregatePASS (after round-1 fix 6 個獨立來源(requirements / logic / security / regression lens + Codex 跨模型盲驗 + Devil's Advocate)全數判 mergeable。無任一 BLOCKING。Round-1 找到 4 個實質不一致(其中 DA-1 是 HIGH、feature 核心價值),已全部在本 PR 修掉並補測試鎖住。 Requirements coverage6/6 spec requirements FULLY addressed(reply per-point 結構 / points-source 三層 / verify-before-claim / perspective-writer soft integration + graceful degrade / anchoring-precedes-calibration / additive + egress)。drift-guard suite 19 → 27 assertions,RED-verified 非 tautological(多個 reviewer 各自剝 needle 驗證會紅)。 Findings(合併去重)
Scope Check
Follow-up Findings Filed (v2.72.0+ #148)
Process notes
|
Summary
idd-comment新增第 7 型--type=reply(v2.100.0)—— 寫給人類 collaborator(review 提出者、指導教授)看的逐點回覆,是六個 audit-facing 型別以外唯一 recipient-facing 的型。處理 #269(after merge 走 /idd-close,見下)(Spectra changeadd-idd-comment-reply-type;validate + analyze clean)。Spec delta(
idd-comment-reply,6 requirements)--points-from;每點 verbatim blockquote → 改了哪/怎麼改 → commit/PR/SHA 錨定 → per-point 狀態;結尾整體狀態行 + metadata marker。git log --grep "#N"/ merged-PR 驗證;無證據寫 open/pending。同族於 idd-close Step 1.6 semantic gate。perspective-writer:perspective-writercalibration(轉交 mention login + target repo correspondence rules 路徑);缺席 → 印兩行安裝指令照 post。不新增 install-time dependency(刻意與 superpowers hard-dependency 相反:calibration 是 enhancement 非 canonical-process 替代)。Changes
skills/idd-comment/SKILL.md— 型別表 6→7、Step 2 validation 列、#### Template: reply、Reply drafting pipeline(R1–R5)、bootstrap stage tasks、鐵律、範例scripts/tests/idd-comment-reply/test.sh(19 assertions)→ run-all-tests: 40 suites, 0 fail設計背景
D1–D5 於 #269 spectra-discuss 收斂(decision comment)。觸發案例:#141 的六點 review 逐點回覆,當時分兩輪口頭指揮才排出格式——本 PR 把該格式收斂成 first-class 型別。
依賴
PsychQuant/perspective-writerv2.10.0(degrade notice 的安裝指令對公共使用者才成立)Test plan
bash plugins/issue-driven-dev/scripts/tests/idd-comment-reply/test.sh— 19/19 pass(RED→GREEN 已驗證:先寫測試對空 SKILL 全紅,實作後全綠)bash plugins/issue-driven-dev/scripts/run-all-tests.sh— 40 suites 0 failspectra validate/spectra analyze— valid / 0 critical-warning