Skip to content

feat(gh-egress,idd-comment): reply layer-3 third-party payload tier floor (v2.101.0, #272)#274

Merged
kiki830621 merged 2 commits into
mainfrom
idd/272-reply-thirdparty-scrub-tier-floor
Jul 19, 2026
Merged

feat(gh-egress,idd-comment): reply layer-3 third-party payload tier floor (v2.101.0, #272)#274
kiki830621 merged 2 commits into
mainfrom
idd/272-reply-thirdparty-scrub-tier-floor

Conversation

@kiki830621

Copy link
Copy Markdown
Member

Refs #272

Summary

reply layer-3(points-from=user-pasted)第三方 verbatim payload 的 scrub tier floor —— #269 verify DA-3 的正式修補。比例原則:layer 1/2 重引本 repo remote 既有內容(零新增暴露、維持 repo-tier 預設);layer 3(user-pasted)是新第三方逐字內容首次進 remote 的唯一通道,floor 只綁這裡。

三件套:

  1. rules/privacy-scrubbing.md normative 段——LIGHT 不適用於 user-pasted reply;有效 tier = max(repo-derived tier, WARN)ENFORCE 永不因確認而降級);unattended 不 post
  2. idd-comment SKILL R1——attended AskUserQuestion 顯式確認(附 redact 選項)/ unattended refuse;跨 repo comment URL 視同 layer 3;Step 4 先取 floor max() 再 attest
  3. gh-egress.sh net item 4(3→4,rules 檔要求的 separate change)——type=reply + points-from=user-pasted token 且 attested=light → exit 13(attestation band)。IDD 自產 marker token 的 fixed-string 匹配、零 semantic matching

Verification

6-AI cross-model verify round 1(4 lens opus + Codex gpt-5.6-sol + sequenced Devil's Advocate)→ 4 lens 初判 PASS,Codex + DA 抓到 1 HIGH(SKILL 把 floor 寫成 pinned warn——third-party repo 的 ENFORCE 會被降級)+ layer-1 same-repo 前提缺口+4 MED,全部已在 763c1b5 修復並補測試鎖住。詳見 PR 的 verify master comment。

Checklist

  • Diagnose ✓(Spectra;Conflict Class C——與 in-flight add-privacy-scrubbing-gate 疊層紀律遵守)
  • Implement(spectra chain:discuss → propose → apply;TDD RED→GREEN)
  • Verify ✓(round 1 findings 全數 reconciled)
  • Verify-gated: gh-egress 66、idd-comment-reply 35、aggregator 40 suites 0 fail —— ready to merge → after merge, run /idd-close to finalize(manual gate + closing summary; no auto-close trailer)

Related


🤖 Generated by /idd-all. Do NOT add a GitHub close trailer(Closes/Fixes/Resolves)—— IDD discipline requires manual /idd-close after merge.

…loor (v2.101.0)

Proportionality-scoped floor: layers 1-2 re-quote content already on this
repo's remote (tier default kept); layer 3 (user-pasted external text) is the
one channel where NEW third-party verbatim content first reaches the remote.

- rules/privacy-scrubbing.md: normative floor section — LIGHT does not apply
  to points-from=user-pasted replies regardless of repo visibility; minimum
  WARN + explicit user confirmation; unattended contexts refuse to post.
- SKILL R1: attended AskUserQuestion confirm (redact option) / unattended
  refuse — replaces the v2.100.0 "heightened self-review" prose that #269
  verify DA-3 judged necessary-but-insufficient.
- gh-egress.sh net item 4 (3->4, the separate change the rules file requires):
  type=reply + points-from=user-pasted marker tokens at attested light ->
  exit 13 (attestation band). IDD-own marker tokens only, zero semantic
  matching; SKILL confirm is the primary gate, wrapper is belt-and-suspenders.

Tests: gh-egress 60 (RED-verified: floor assertion red before item 4 landed),
idd-comment-reply 33, aggregator 40 suites 0 fail. Version 2.101.0 synced in
plugin.json + marketplace.json + CHANGELOG.

Refs #272
…t — verify round 1

6-AI verify round 1 (4 lens + Codex + DA) findings, all folded:

- HIGH (Codex + DA concur): SKILL R1 read "after confirmation dispatch at
  --scrub-attested warn" — a pinned level that would silently DOWNGRADE a
  third-party repo's ENFORCE tier. Rewrote as floor semantics: effective tier
  = max(repo-derived tier, warn); ENFORCE never downgrades, block-with-diff
  runs unchanged. Spec: warn-proceed scenario qualified to LIGHT/WARN repos +
  new enforce-preservation scenario.
- HIGH/MED (Codex + DA): layer-1 "already on same repo remote" premise was
  unguaranteed — a cross-repo comment URL is a new cross-audience disclosure.
  SKILL + spec: layer-1 exemption requires the URL to belong to the
  destination repo; cross-repo URLs resolve as layer 3 (marker records
  user-pasted) and carry the floor. New spec scenario.
- MED: rules/header reclassification — items 1-3 are level-independent
  zero-tolerance nets; item 4 is a level-dependent tier-floor attestation
  check (the blanket "LEVEL-INDEPENDENT"/"zero-tolerance" claims no longer
  held). gh-egress header now enumerates all 4 items.
- MED: honest raw-substring wording (two fixed-string token matches over raw
  prose, fences not stripped, NO backtick escape hatch — the entity-@ parity
  claim was inaccurate on that dimension) + accepted-friction LOCK test
  (fenced discussion body at light → 13).
- MED (DA N-2): SKILL Step 4 now takes the floor max() before attesting —
  the SKILL side is the primary gate for own-private, not just the wrapper
  bounce. MED (DA N-4): template↔wrapper token binding assertions (silently-
  disabled-net risk). Conjunction negative fixture (user-pasted without
  type=reply → dispatch) + stderr remediation assertion.
- LOW: grep -Fq -- hardening; "body needs no redaction" wording softened;
  design/tasks append-only + R1/R4 claims corrected to match reality.

Tests: gh-egress 66, idd-comment-reply 35, aggregator 40 suites 0 fail.

Refs #272
@kiki830621

Copy link
Copy Markdown
Member Author

Verify Report — PR #274 (Refs #272)

Engine

manual fan-out (4 lens Agents + sequenced Devil's Advocate, model: opus, file-based output) + Codex (gpt-5.6-sol, xhigh, via codex-call)

Aggregate

PASS(after round-1 fix 763c1b5)— 0 blocking,round-1 findings 全數 reconciled in-PR,1 follow-up filed(#273)。

4 lens 初判 PASS/shippable;跨模型(Codex)與 Devil's Advocate 抓到 4 lens 全部漏掉的 HIGH——本輪是 cross-model + adversarial 兩層各自發揮價值的案例(DA 並指名 Logic lens 曾看到該字句卻誤標 NIT)。

Findings(合併去重)

# Severity Finding Source Action
1 HIGH SKILL 把 floor 寫成 pinned level(「確認後以 warn 派送」)——third-party repo 的 ENFORCE 會被靜默降級;只有 SKILL 錯、rules/spec/stderr 皆對(內部自相矛盾) codex+agents:devils-advocate Fixed 763c1b5max(repo-derived tier, warn)、ENFORCE 永不降;spec 加 enforce-preservation scenario
2 HIGH/MED layer-1「內容已在同 repo remote」前提未被保證——跨 repo comment URL 是新的跨受眾揭露,卻被豁免 floor codex+agents:devils-advocate Fixed:layer-1 豁免限 destination-repo URL;跨 repo URL 視同 layer 3;spec 新 scenario
3 MEDIUM rules/header 的「4 zero-tolerance」「LEVEL-INDEPENDENT」宣稱對 item 4 不成立(light-only、非 content leak)+ header 列舉只到 item 2 codex+agents:regression+security Fixed:重分類 items 1–3(level-independent zero-tolerance)vs item 4(level-dependent tier-floor);header 列舉 1–4
4 MEDIUM 「只匹配 structured marker」不精確——實為 raw prose 上兩個 fixed-string token;fenced 討論體會 over-refuse 且無 backtick escape(entity-@ parity claim 在此維度不準) codex+agents:logic Fixed:rules 誠實表述 + accepted-friction 鎖定測試(fenced 討論體 at light → 13)
5 MEDIUM SKILL Step 4 hardcode $SCRUB_LEVEL——own-private 的主 gate 實際是 wrapper bounce(架構倒置) agents:devils-advocate(+security N5) Fixed:Step 4 先取 floor max() 再 attest,SKILL 端恢復主 gate 地位
6 MEDIUM 測試缺 conjunction pin(single-token 錯誤實作可全綠)+ 無 template↔wrapper token binding(silently-disabled-net 風險)+ stderr 指示未鎖 codex+agents:devils-advocate Fixed:+conjunction fixture、+binding 三斷言、+stderr 斷言(gh-egress 60→66)
7 MEDIUM unattended-refuse 在 warn/enforce 只有 prose 強度(wrapper 無 unattended 訊號) agents:logic+security Documented:rules 明文承認此邊界(deliberate;wrapper 不看 unattended state)——SKILL 主 gate 承擔
8 MEDIUM idd-edit batch 無法觀測 exit-13 floor refusal(outcome bucket 缺席、契約未定義) agents:devils-advocate (N-1) Follow-up #273
9 LOW grep -qgrep -Fq --;"body needs no redaction" 措辭;design/tasks append-only + R1/R4 宣稱不實 codex+agents:* Fixed

Scope check

Branch 兩 commit(feat fe75e46 + fix 763c1b5)全部落在 #272 範圍;rules 檔對 in-flight add-privacy-scrubbing-gate 的疊層紀律由 regression lens 逐段驗證(既有段僅兩處 count/growth 句最小校正,其餘零改動)。

驗證數字

  • gh-egress suite 66/66(RED-verified:item 4 移除時 tier-floor 斷言紅)
  • idd-comment-reply suite 35/35
  • run-all-tests.sh 40 suites 0 fail
  • spectra validate valid

Follow-up Findings Filed (v2.72.0+ #148)

Process notes

@kiki830621
kiki830621 merged commit 2865a09 into main Jul 19, 2026
1 check passed
@kiki830621
kiki830621 deleted the idd/272-reply-thirdparty-scrub-tier-floor branch July 19, 2026 05:47
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