Repository navigation
feat: write discussion changes back to the issue (#424) - #469
Conversation
While an issue is discussed, each change goes back to the place that owns it: the problem to the issue body section, the diagnosis to the Diagnosis section (/idd-edit --correct), new information or a decision to a new /idd-comment. The AI decides the kind, writes without asking, reports each write-back, and rewrites only the invoking user's own content. - rules/issue-write-back.md (new) and a fifth SessionStart line - /idd-edit --correct no longer asks for confirmation; --prepend-note skips it only on your own comment (strict author check) - idd-verify / idd-diagnose / idd-reorganize apply corrections and report ### Applied Corrections; idd-diagnose Stage 1 rewrites its own Diagnosis - append-vs-modify: in-place-correction without confirmation, write-back map - Spectra change issue-write-back; plugin 3.6.0 Refs #424
Verify Report — PR #469Enginepai-ensemble 2.25.1 (canonical) — 4 IDD lenses + DA + Codex (gpt-6.1-sol, effort medium), model: opus AggregateFAIL — 1 CRITICAL、17 HIGH、38 MEDIUM、17 LOW、7 INFO(合併後 80 則,含同一問題的多則;下面以主題歸併) 審的是 Scope coveragePR refs: #424 主題
Devil's Advocate 的兩項修正:第 8 點的後果是卡住,不是寫錯(#71);現存風險主要走第 3 點的路徑,第 1、2 點要在同一個 commit 修(#56)。 Findings
查過且成立的部分
Scope Check沒有超出 #424 範圍的程式改動。 Process notereviewer 指出本次 context 把流程指示放在標為不可信的區塊內(#77),下一輪改放到區塊外。 |
…ible line (#424) Verify round 1 (PR #469) failed on one CRITICAL and seventeen HIGH. The maintainer decided four points after reading the findings: - Comments: only OWNER, MEMBER and COLLABORATOR can lead to a write-back, factual claims are checked in the repository first, and Type and Complexity never move because of a comment. New script writeback-candidates.py; idd-diagnose, idd-plan, idd-update run it. - Detecting skills correct only the user's own Diagnosis Root Cause, Impact and Risks, after the main agent checks the evidence itself. Expected, Strategy, checklists and everything else are listed. - Only a decided change counts; a closed issue is not rewritten. - --correct ends the replaced text with a visible line (--note). Also from the findings: a privacy hit at any level stops the no-ask path; SCRUB=enforce keeps the confirmation; idd-edit no longer asks in unattended mode (discard --reason, finish reports HELD); corrections after implementation that overturn the premise go to idd-reorganize; the main specs no longer require a confirmation; idd-close ignores the line when it reads Residue; --body-file refuses more private paths; verify scans Applied Corrections. Refs #424
Verify Report — PR #469(第 2 輪)Enginepai-ensemble 2.25.1 (canonical) — 4 IDD lenses + DA + Codex (gpt-6.1-sol, effort medium), model: opus AggregateFAIL — 0 CRITICAL、15 HIGH、63 MEDIUM、25 LOW、5 INFO(合併後 108 則,同一問題有多則) 審的是本機 commit 主題
Devil's Advocate 指出前兩個主題可以用砍掉來解,不必再補防線(#69、#70、#76)。 Findings
Scope Check |
…rify lists only (#424) Verify round 2 (PR #469) failed on fifteen HIGH. The maintainer decided two points (comment 6611450882): - Other people's comments are looked at when idd-diagnose, idd-plan or idd-implement starts. idd-update and idd-verify no longer run the candidates script: idd-update runs at the end of every stage, so verify could rewrite its own acceptance criteria between rounds, and it recursed. - idd-verify lists published errors as findings and changes nothing; an error in Expected, scope, a checklist, Type or Complexity is Blocking. idd-diagnose and idd-reorganize correct only an open bug's Diagnosis facts, checked on the default branch; the Implementation Plan is listed. Also from the findings: a trusted comment must be decided and checked; "decided" and the refusals that become a comment are closed lists; quoted text in a trusted comment is someone else's; listed corrections reach Blocking through idd-update, which now reads trusted comments only; --repo is always passed; the privacy review covers the text being added; writeback-candidates takes its cutoff from your own IDD comments and marks bots untrusted; a marker-only replacement is refused again; an earlier visible line is replaced; --note and --body-file refuse more. Refs #424
Verify Report — PR #469(第 3 輪)Enginepai-ensemble 2.25.1 (canonical) — 4 IDD lenses + DA + Codex (gpt-6.1-sol, effort medium), model: opus AggregateFAIL — 0 CRITICAL、5 HIGH、33 MEDIUM、24 LOW(合併後 63 則,同一問題有多則) 審的是本機 commit 主題
Findings
|
…he report (#424) Verify round 3 (PR #469) left five HIGH, all in machinery rounds 2 and 3 added. The maintainer decided two points (comment 6615341615): - writeback-candidates.py has no time cutoff. The cutoff came from your own stage comments' updated_at, which a write-back moves, so comments nobody read were hidden for good. Comments not written back are listed under ### Comments Not Taken by link and login only. - Listed corrections stay in the report. idd-update no longer turns them into Blocking entries; a re-diagnosis that changed Type blocked idd-all. idd-all stops at verified for a person; #392's close gate is asked to stop on listed rows (#392 comment 6615342214). Also from the findings: idd-verify's published-error findings have Action listed and stay out of the fix loop; idd-diagnose looks at the issue body again; idd-update reads trusted non-bot authors only and skips Comments Not Taken, quotes and HTML comments, for phases too; the unrunnable req_state check is removed; a copied earlier marker is dropped with the earlier line; the private-path check survives a home path in other case; allowed-tools, design, proposal and append-vs-modify updated. Refs #424
Verify Report — PR #469(第 4 輪)Enginepai-ensemble 2.25.1 (canonical) — 4 IDD lenses + DA + Codex (gpt-6.1-sol, effort medium), model: opus AggregateFAIL — 0 CRITICAL、6 HIGH、28 MEDIUM、19 LOW 審的是本機 commit 主題
Devil's Advocate 的結論:D4 經兩輪縮窄後,剩下的自動更正只有負面效果,可以整塊砍掉(#33)。 Findings
|
…-correct (#424) Four verify rounds failed without converging, and every HIGH was in two parts added for #424: other people's comments triggering write-back, and detecting skills correcting published text on their own. The core (a change the user decides in a session is written back by kind) was never hit. The maintainer cut both parts (comment 6616229678): - Someone else's comment no longer triggers anything. It counts only when the user raises it in a session and decides to adopt it. writeback-candidates.py, its tests, the trust table, Comments Not Taken and the idd-update author filter are gone; idd-update, idd-plan and idd-implement are back to main. - idd-verify, idd-diagnose and idd-reorganize are back to the 3.6.0 proposal flow (Proposed Corrections, asked when attended, listed only when unattended). The one change kept: after the user chooses "run now", /idd-edit --correct shows its preview and writes without a second question. - idd-diagnose Stage 1 still rewrites its own Diagnosis instead of appending a correction comment. Kept: decided session write-back, --correct without confirmation, the visible line (--note), no questions in unattended mode, the private-path rules, the Residue reader. Rule, specs, design, proposal, tasks group 8, CHANGELOG 3.7.0, READMEs, plugin.json and marketplace rewritten to match; the hook line says other people's comments do not trigger. Refs #424
Verify Report — PR #469(第 5 輪)Enginepai-ensemble 2.25.1 (canonical) — 4 IDD lenses + DA + Codex (gpt-6.1-sol, effort medium), model: opus AggregateFAIL — 0 CRITICAL、3 HIGH、17 MEDIUM、24 LOW、4 INFO 審的是本機 commit 主題
Findings
|
…d branch (#424) Verify round 5 failed on one leftover (append-vs-modify §8 still said other skills apply corrections, and a test locked it in). The maintainer decided four points after it (comment 6617788666): - Verify reports get no note after a diagnosis correction (D2 withdrawn); --prepend-note asks again, as on main (D1b withdrawn). - The --body-file private-path gate is gone; main's system and credential directory checks stay, and a credential in the added text is a privacy hit at every level. - /idd-edit's unattended branch, discard --reason and finish's HELD are gone: no unattended flow calls /idd-edit after the cut. - A change decided after implementation is written back in place when the same pull request carries it; idd-reorganize only when built work is thrown away. Also from the findings: §8, the canonical spec Purpose and the tasks no longer describe the cut parts; a detecting skill's run-now question shows the full replacement and its command carries --repo and --note; the hook line names the user as the one who decides and keeps comments as data; an adopted comment counts only for the items the user names; the Diagnosis target is your newest one; Spectra-tier issues take the change through spectra-ingest; idd-diagnose Stage 1 touches only the Diagnosis it just posted; every earlier visible line in a replacement is removed and a replacement of markers only is empty. Refs #424
Verify Report — PR #469(第 6 輪)Enginepai-ensemble 2.25.1 (canonical) — 4 IDD lenses + DA + Codex (gpt-6.1-sol, effort medium), model: opus。Devil's Advocate 第一次跑時撞到用量上限,之後只重跑它,其他 reviewer 的結果從快取重播。 AggregatePASS(有 findings) — 0 CRITICAL、0 HIGH、9 MEDIUM、38 LOW、5 INFO 審的是本機 commit 主題
Findings
|
Verify round 6 passed with no blocking finding. The Devil's Advocate showed #424 itself reproduced #399: six rounds of strategy decisions went only to decision comments, and the Diagnosis stayed at round 1. The maintainer decided two points (comment 6619279709): - A decision that changes the diagnosis is written to both places: a decision comment with the user's words, and the Diagnosis section with --correct. - The visible line drops (AI 判斷): _更正於 YYYY-MM-DD:<note>_. From the round 6 findings: - run-start replaces only the trailing group of an earlier visible line and correct marker (other IDD markers kept) and refuses an earlier line or correct marker elsewhere outside a code fence; look-alike prose and code examples are kept. - Write-back and run-now replacement files go to a new directory under ~/.cache/idd/writeback, not TMPDIR (sandboxed calls see another TMPDIR). - The Diagnosis target is the newest Diagnosis; someone else's gets errata. The Plan target is the newest Plan. - After implementation, a change no pull request carries is written back and idd-reorganize rolls the phase back. - Text taken from someone else's comment is shown and asked before writing. - idd-reorganize's entry text and table send a same-PR change to write-back; idd-issue's edit-body rows show the replacement and carry --repo and --note; --last with a whole-comment correction asks. - The rule leaves the permission and privacy questions of kinds 1 and 2 to /idd-edit, so nothing is asked twice; §8 lists credentials; the hook keeps lines 1-4 literal. Refs #424
Verify Report — PR #469(第 7 輪)Enginepai-ensemble 2.25.1 (canonical) — 4 IDD lenses + DA + Codex (gpt-6.1-sol, effort medium), model: opus AggregatePASS(有 findings) — 0 CRITICAL、0 HIGH、10 MEDIUM、39 LOW、7 INFO 審的是本機 commit 主題
Findings
|
Verify round 7 passed with no blocking finding. Its heaviest point: round 7 had added, without a decision, "a change no PR carries is written back and then idd-reorganize runs". In a direct-commit repository that sent ordinary verify-fix changes to idd-reorganize, which posts a new Diagnosis. The maintainer decided (comment 6620544269): a change after implementation that no PR will carry, while the built work stays valid, is new work and goes to a new issue with a link comment; idd-reorganize is only for built work that is thrown away; in a direct-commit repository the same branch before close counts as the same PR. From the other round 7 findings: - run-start replaces only the trailing group; everything before it is kept as it is (round 7 refused it and blocked corrections main accepts). prepare and idd-close's Residue reader now recognise only the exact visible line, so prose that starts the same way is kept. - idd-diagnose Stage 1 also posts a decision comment when the adjustment changes the strategy or the root cause (both places). - The detecting skills write the run-now replacement only to a new directory under ~/.cache/idd/writeback; the question shows the --note. - --last always asks; a new mention in a kind-3 comment is asked first; the Diagnosis target is the newest Diagnosis comment, without the claim that idd-plan and idd-close read the same one. - The append-vs-modify spec delta no longer says an AI decided the line; the issue-write-back spec no longer says exactly one kind; examples quote --section with single quotes; the hook line mentions both places. Refs #424
Writing back #424's own Strategy a second time showed the earlier correct marker carried next to the new one. That is #351's design (the first backup stays reachable); the spec scenario said one marker. The scenario now says one visible line, the earlier marker once and the new one, and edit-run corrects one section twice to lock it. Refs #424
Round 8 keeps everything before the trailing group, but rule line 43 still told the AI that the helper refuses such lines and to remove them first, so a whole-comment correction could lose another section's record. Reworded, with a negative assertion; design D13 now says round 8 changed this. Refs #424
Verify Report — PR #469(第 8 輪)Enginepai-ensemble 2.25.1 (canonical) — 4 IDD lenses + DA + Codex (gpt-6.1-sol, effort medium), model: opus。第一次跑時五個 reviewer 撞到用量上限,只有 Codex 完成;修掉它抓到的規則第 43 行之後,在 AggregatePASS(有 findings) — 0 CRITICAL、0 HIGH、11 MEDIUM、43 LOW、5 INFO 審的是本機 commit 主題
Findings
|
…ed (#424) Verify round 8 passed with no blocking finding (0 HIGH, 11 MEDIUM). The maintainer decided (comment 6680124222): - Only changes the user decides are written back. Corrections listed by an unattended verify and an approach the implementer changed on their own are out of scope, stated in the rule and proposal, tracked in #474. - Two questions added while fixing findings, never decided, are gone: text from someone else's comment shown and asked before writing, and --last always asking. Items the user names count as decided. From the other findings: a change that needs no further work is written back as usual, and the three cases after implementation apply in order to work that remains; --correct runs before the decision comment, and a refused correction joins that comment instead of a second one; every command in the rule carries --repo; the idd-clarify branch is gone; IDD_MARKER_RE stops at the first -->, a lone CR ends a line, and indented lines are not part of the trailing group. idd-issue and idd-diagnose's allowed-tools are back to main. Refs #424
spectra archive applied the four delta specs to the main specs (added 10, modified 5, removed 3) and moved the change to openspec/changes/archive/2026-11-06-issue-write-back. The move left two paths in the issue-write-back test stale: the header comment, and an assertion that read the delta spec. The assertion now reads the main spec, which holds the same text. Refs #424
main gained #392 (dc7eb2c, archive 90054e2) and #405 since this branch was cut. One conflict, in CHANGELOG.md: the branch had a dated [3.7.0] section, main an [Unreleased] one for #392. They are now one [Unreleased] section holding both sets of entries. The version bump moves out of this PR. The marketplace serves the plugin from main, so merging a PR that sets 3.7.0 would ship it to users at the merge. plugin.json, marketplace.json, the root README row and the plugin README's v3.7.0 row are back to main's 3.6.0 values; the release commit sets 3.7.0, the date and the descriptions for #392 and #424 together, as the 3.6.0 release did. Refs #424
Refs #424
Summary
討論 open issue 時,使用者定案的改變寫回它該在的地方,不再靠人記得:問題改正文段落、診斷改 Diagnosis 段落(
/idd-edit --correct)、新資訊與決定新增 comment;改了診斷的決定兩處都寫。在有寫入權的 repo,由 AI 判斷類別、不先問、每次回報,而且只改執行者自己寫的內容。rules/issue-write-back.md,SessionStart 多一行提醒(仍是 5 行)。/idd-edit --correct在有寫入權的 repo 顯示 diff 與預覽後直接寫入,不再問確認;隱私自審、reply 型第三方 verbatim payload 應強制 heightened scrub tier(不論 repo visibility)—— #269 DA-3 follow-up #272 那一題、寫入前重讀與歸檔都保留。--prepend-note、--append、--replace照舊確認。--correct加--note:段落尾留一行可見文字_更正於 YYYY-MM-DD:<note>_。idd-verify、idd-diagnose、idd-reorganize仍然只提議更正,使用者選「現在執行」就是確認。idd-diagnoseStage 1 改寫自己的 Diagnosis,不再追加修正 comment。idd-reorganize;PR 合併後才擴大的範圍開新 issue 承接。第一版另外有兩塊:別人的 comment 自動觸發、偵測 skill 自動更正。verify 四輪沒有收斂,第 4 輪之後拿掉(#424 comment 6616229678)。第 5 輪之後再拿掉 verify 報告的註記、
--body-file的私人路徑閘與/idd-edit的 unattended 分支(comment 6617788666)。Verification
72cb064跑完整測試,67 個 suite:58 個在 Linux 節點(Oracle Linux 8)通過;另外 9 個在節點失敗,都在 macOS 上同一個 commit 通過。節點上的失敗來自環境:markdown-it-py3.0.0(專案固定 4.0.0)、沒有shasum、檔案解壓在/tmp底下。spectra validate issue-write-back:valid。/idd-verify:第 1 到 5 輪 FAIL,第 6、7、8 輪 PASS(沒有 blocking finding)。第 9 輪的修改由維護者決定不再跑完整 verify(comment 6680124222)。72cb064與封存的0ffd4b8都通過。74be00c):唯一的衝突在 CHANGELOG,兩邊的條目合成一個[Unreleased]段;合併後完整測試 70 個 suite 全過。