You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is the same privacy boundary as the global CLAUDE.md rule "third-party verbatim content does not go to remote" — only here the leak path is the AI-drafted issue/comment body, not a raw file.
實作契約 :149-167 列的 egress site 也只有 gh issue create/comment/edit。
改 spec(Spectra change):MODIFIED「Stage 1 Extract SHALL produce paragraph-level findings with original quotes」和「JSONL run log SHALL be committed to git by default」兩條,並和 privacy-scrubbing-gate 的 LIGHT 情境對齊。做法是先封存 add-privacy-scrubbing-gate,或在同一個 change 裡處理它懸空的 delta。
Which resolution for third-party finding_quote in the run log? (A) committed jsonl carries a locator (source, time/position, speaker role) for third-party findings and the verbatim goes to a gitignored sidecar next to it — keeps D2 cross-machine continuity, matches the reply-type 'redaction wins over verbatim' precedent at skills/idd-comment/SKILL.md:417 (recommended); (B) the whole run log defaults to skip-commit whenever any finding is third-party — simplest, loses continuity for that run; (C) locator only, IDD persists no verbatim copy — jsonl loses its forensic 'what did the source say' role.
Who classifies a finding as third-party? Options: (a) LLM per-finding judgment shown as a column in the Stage 3 batch preview with per-row override (recommended); (b) one per-run question to the user.
Existing run logs already committed with third-party verbatim in some repos' history: leave them, or provide a rewrite/cleanup path? (out of the fix itself; needs a maintainer call)
Activity
kiki830621 commentedon Oct 26, 2026
Diagnosis
Type
bug
Root Cause / Analysis
我認為 root cause 是這樣:multi-finding run log 的兩條規定(逐字、預設 commit)是在只考慮終端機安全和跨機器延續時寫下的;privacy-scrubbing 規則則刻意只管
gh issue的 body。結果 git commit 這條路上沒有任何閘,也沒有任何一處寫明兩條規則衝突時哪條優先。證據如下:逐字是 SHALL。
skills/idd-issue/SKILL.md:1475:同一條規定也出現在 schema(
:2085finding_quote: string; // verbatim from source)、:2130(jsonlactions[].finding_quoteMUST contain the verbatim source content),以及 specopenspec/specs/idd-issue-multi-finding-source/spec.md:90-104(Scenario: Verbatim quote preserved)。commit 是預設。
SKILL.md:2062:同一份 spec 的
:416-425寫「JSONL run log SHALL be committed to git by default」。Stage 4.5 只看檔案有沒有被 ignore。
SKILL.md:1662-1830唯一的判斷是git check-ignore -v(:1769)。沒被 ignore 就走到:1819的JSONL_GITIGNORE_DECISION="committed" # not ignored, silent pass。不 commit 的情況只有四種:路徑被 ignore、選 Abort、設環境變數略過、unattended(:1644-1660自動選 skip-commit)。有人在場的一般路徑上,完全沒有提示。[security] idd-issue multi-finding: dual-track sanitization design (IC_R007 verbatim vs GitHub body sanitization) #75 的 dual-track 只處理顯示安全,不處理隱私。
SKILL.md:2116-2134把 jsonl 定為逐字的 source of truth,GitHub body 改用finding_quote_display;sanitize 的是控制字元和 bidi 字元。:2064的 CAUTION banner 也只談終端機。隱私規則在 LIGHT 仍要擋第三方逐字,但範圍只限 body。
rules/privacy-scrubbing.md:80的 LIGHT 列寫「still honor ... raw third-party verbatim content does not go to remote」;skills/idd-issue/SKILL.md:335是同一個意思。openspec/changes/add-privacy-scrubbing-gate/specs/privacy-scrubbing-gate/spec.md:91-95。:27-29把範圍限定在 body::149-167列的 egress site 也只有gh issue create/comment/edit。所以 GitHub body 那一側,有 Stage 4 的 LLM 自審可以仲裁:2026-10-24 那次 issue 正文只寫時間定位,就是在這裡做的判斷。git 那一側什麼都沒有,只能靠 agent 自己偏離 schema,而 schema 又沒有欄位能標出這筆偏離了。
repo 裡已有「隱私優先於逐字」的先例。
skills/idd-comment/SKILL.md:417(reply 的 R1):multi-finding 沒有對應的句子。
更廣的設計缺口已經有 issue。 feat: privacy needs its own design in IDD — a gate for content that goes into a repo (commits, files, pushes) and a dedicated TaskCreate step #395 指出:內容進 repo 的路徑(commit、檔案、push)沒有隱私閘。本 issue 是它的一個具體實例。
目前沒有程式讀 run log:
grep issue-runs只命中 SKILL、spec 和 gitignore helper 的測試。所以 schema 改了,目前沒有程式會受影響;會讀它的是人,以及 crash-recovery 流程(:1635-1642用comment_urlgrep jsonl)。Existing work
(none)
Impact
plugins/issue-driven-dev/skills/idd-issue/SKILL.md(Stage 1、Stage 3 preview、Stage 4.5、JSONL schema、Content sanitization contract)plugins/issue-driven-dev/rules/privacy-scrubbing.mdopenspec/specs/idd-issue-multi-finding-source/spec.mdopenspec/changes/add-privacy-scrubbing-gate/)plugins/issue-driven-dev/references/usecase-routing.md:72Strategy
/spectra-discuss定下做法和優先序(候選做法見 Risks 第一項,問題已交給維護者)。scripts/tests/multi-finding-privacy/test.sh,用跟scripts/tests/idd-comment-reply/test.sh一樣的內容斷言形式,檢查:quote_kind(verbatim|locator,沒寫就是 verbatim)和 locator 欄位rules/privacy-scrubbing.md點名 run log 的 commit 通道add-privacy-scrubbing-gate,或在同一個 change 裡處理它懸空的 delta。skills/idd-issue/SKILL.mdStage 1:每個 finding 由 LLM 判斷是不是第三方(依 attribute-assessment,不用關鍵字比對),Stage 3 batch preview 多一欄,可以逐列改。:2083-2098)加quote_kind和 locator(來源、時間或位置、說話者角色);Stage 4.5 寫出 jsonl 的步驟依選定的做法改,例如 committed 的 jsonl 寫 locator,逐字寫到另一個用scripts/git-ignore-block.sh --direction exclude擋下的檔案。:2064的 CAUTION banner 和:2112-2134的 dual-track 段落,順便修正已經失效的「IC_R007 line 1007」行號(第 1007 行現在是 Step 3.5 的 label 說明)。Stage 4 組 body 也依同一個quote_kind:只是把 gate 本來就在做的判斷寫明,不新增行為。rules/privacy-scrubbing.md:27-29補一句:IDD 自己寫進 repo 的產物(run log)同樣受 LIGHT 的第三方逐字條款約束,並指向 feat: privacy needs its own design in IDD — a gate for content that goes into a repo (commits, files, pushes) and a dedicated TaskCreate step #395。references/usecase-routing.md:72(那裡寫「commit 進 git」),更新 CHANGELOG 與版本。Conflict Class
C_shared_module_coord
共享資源有兩個:
openspec/specs/idd-issue-multi-finding-source/spec.md:idd-issue/idd-comment:附件可以只用 repo 相對路徑指向本機檔,不上傳 attachments release #420 改它:390的附件條款,未封存的add-privacy-scrubbing-gate另有一份還沒套用的 MODIFIED delta。skills/idd-issue/SKILL.md:idd-issue/idd-comment:附件可以只用 repo 相對路徑指向本機檔,不上傳 attachments release #420、idd-issue/idd-comment:Telegram 附件改用 download_message_media 下載;idd-comment 補附件保留規則 #415 改同一個檔案的 Step 1/4。要和這兩邊排定順序。
Complexity
Spectra — Layer 2:run log 的 schema 是 published plugin skill(
idd-issuemulti-finding mode)文件化的輸出契約,讀者要看 spec 才知道finding_quote是逐字還是 locator;issue 的 Expected 要求的正是讓 schema 能標出這點。Layer 3:要改既有 published spec 的兩條 SHALL(idd-issue-multi-finding-source的 spec.md:90-104 逐字、:416-425 預設 commit),還要和第二份 spec(privacy-scrubbing-gate 的 LIGHT 情境)保持一致。Layer 1 沒有命中;Layer V 沒有觸發。Hard-gate: triggered — 同一個概念散在 ≥5 個檔案:
skills/idd-issue/SKILL.md(Stage 1/3/4.5、schema、sanitization contract)、openspec/specs/idd-issue-multi-finding-source/spec.md、privacy-scrubbing-gate 的 spec、rules/privacy-scrubbing.md、references/usecase-routing.md,加上新的測試。Spectra 已經先成立。Risks
:2134)。add-privacy-scrubbing-gatechange:tasks 5.x 沒勾、spec 不在openspec/specs/、對 multi-finding spec 的 delta 也沒套用。本 change 的 spec 修改會撞上那份懸空的 delta,要先處理它。skills/idd-issue/SKILL.md(不同段落)和 multi-finding spec(不同條款),分開做、依序合併即可。做法 (A) 的逐字旁檔放哪,可以和 idd-issue/idd-comment:附件可以只用 repo 相對路徑指向本機檔,不上傳 attachments release #420 討論「只留本機的東西放哪」時一起定。Residue
IC_R007 讓 jsonl 能還原「來源字面上說了什麼」(
:2134的 forensic 用途)。第三方 finding 改寫成 locator 之後,只有本機還留著來源檔或旁檔時才做得到;對 git 歷史來說,這部分意圖保留不了。Open questions(交給
/spectra-discuss)Sister Concerns Filed (mid-diagnose, v2.47.0+ #528)
Source: surfaced during /idd-diagnose #421 sister concern surfacing (Step 3.6)
Vagueness Pre-check
Generated by Claude Code