Brief for the next session (post-/clear): independently DISPROVE the "CC 2.1.114-181 feilretting is complete" claim rather than re-assert it. Designed to run as a Dynamic Workflow (Workflow tool): one read-only Explore skeptic per scanner surface (settings/hooks/mcp/permissions-DIS/ claude-md/knowledge/token) tries to find a still-open or superficially- fixed row, plus adversarial review of this week's CA-SKL-002 + HOME-leak work, then synthesis into a punch-list or a verified attestation. Includes the 3 claims to attack (P1 no active false positives, P2 fixes correct-not-superficial, P3 new work regression-free), the surface-cluster table with attack angles, a runnable script skeleton + output schemas, and a read-only scope-fence (findings → report, no fixes without approval). STATE.md (gitignored, polyrepo) updated on-disk to hand this off as the next session's active task. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ter3E2JSi1Khgmuf2kady8
8.6 KiB
Brief — Devil's Advocate: motbevis at CC 2.1.114→181-feilrettingen er komplett
Skrevet: 2026-06-18 · For: NESTE sesjon (etter /clear) · Scope: kun config-audit/ · Metode: Dynamic Workflow (adversariell fan-out)
Hvorfor denne sesjonen finnes
Forrige sesjon konkluderte: «den akutte feilrettingen er ferdig; gap-matrisen er stale, alle 5 false-positive-klynger er fikset.» Den konklusjonen hviler på spot-sjekk av 5 klynger + git-historikk, IKKE på en uttømmende rad-for-rad-verifisering av matrisens 130+ rader. Operatøren bestilte derfor en devil's advocate: en uavhengig, skeptisk part som aktivt prøver å motbevise «alt er lukket». Default-holdning: en fiks er IKKE bekreftet før kode + test beviser den korrekt OG komplett.
Hva som skal angripes (3 påstander)
- P1 — Ingen aktive false positives igjen. Hver matrise-rad med
verdict=now-wrong/action=fix-false-positiveer faktisk fikset i dagens kode. - P2 — Fiksene er korrekte, ikke overfladiske. Ikke bare «nøkkel lagt i KNOWN_KEYS», men riktig TYPE_CHECK/enum/struktur. (Presedens:
skillOverridesskulle IKKE i TYPE_CHECKS fordi verdien er objekt — en naiv'string'-sjekk ville skapt NY false positive. Let etter den slags.) - P3 — Denne ukens nye arbeid er regresjonsfritt.
CA-SKL-002(aggregat-budsjett) + HOME-leak-klasse-fiksen har ingen skjulte feil.
Eksplisitt UTENFOR scope: rader merket missing / new-feature-gap-check / new-scanner er manglende kapabiliteter, ikke bugs. Devil's advocate skal IKKE rapportere dem som funn — MEN skal flagge hvis en missing-rad i virkeligheten er en feilmerket now-wrong (bug i forkledning).
Hvorfor Dynamic Workflow (ikke solo-kontekst)
Matrisen spenner ~12 config-surfaces × 130+ rader. Uttømmende verifisering mot scanner-kode + tester er en fan-out-oppgave: uavhengige skeptikere per surface gir bredde + uavhengighet som én kontekst ikke klarer uten å skumme. Mønster: review → find → adversarially verify → synthesize. Workflow-verktøyet er forhåndsautorisert av operatøren for DENNE sesjonen (denne forespørselen = opt-in); bekreft kort med operatør før du brenner tokens, kjør så.
Surface-klynger å fane ut over (fixed-claims å motbevise)
Ankret i docs/cc-2.1.x-gap-matrix.md + git. Hver klynge = én skeptiker-agent:
| Klynge | Mål-fil | Påstått fikset i | Angreps-vinkel |
|---|---|---|---|
settings-keys + xhigh |
scanners/settings-validator.mjs |
7309935 |
Er ALLE ~11 nøkler + xhigh til stede? Er TYPE_CHECKS riktige (array vs string vs objekt)? Finn en gyldig CC 2.1.181-config som fortsatt flagges. |
| hook-events | scanners/hook-validator.mjs |
98ddd77 |
MessageDisplay+post-session i VALID_EVENTS? Count = 28? Andre nye events (2.1.114–181) glemt? |
MCP env-vars + trust |
scanners/mcp-config-validator.mjs |
4b94da0,b3c572a |
CLAUDE_PROJECT_DIR-allowlist + POSIX ${var%}-skip korrekte? Shell-${VAR} (2.1.161)? Er trust helt borte (kode+humanizer+knowledge+fixturer)? |
| permissions / DIS + CNF | scanners/disabled-in-schema-scanner.mjs, conflict-detector.mjs, lib/permission-rules.mjs |
bec3f45 |
Er Tool(param:value) / WebFetch(domain:*) param-bevisst i BEGGE scannere? Konstruer deny/allow-par som FØR kollapset — fyrer det fortsatt feil? |
| claude-md-lengde | scanners/claude-md-linter.mjs |
feaa7ed |
Er HIGH@500 reframet til MEDIUM token-kost? Finnes det en gjenværende SEVERITY.high-sti for ren lengde? |
| knowledge-korpus | knowledge/* |
624f5ed |
/simplify→/code-review, Opus 4.8-default, Fable 5, siste feature-evolution-rad = v2.1.181? Gjenværende «4.7»/«v2.1.111»-staleness? |
| token / skill-listing | scanners/skill-listing-scanner.mjs, token-hotspots.mjs |
8376dab,7bb2547,66433fe |
(se P3) |
Workflow-skisse (script-skjelett — neste sesjon authorer/kjører via Workflow)
Hybrid: hovedkontekst skummer matrisen inline → bygger klynge-listen → fan-out skeptikere. Pipeline der mulig (per klynge uavhengig), barrier kun før syntese.
export const meta = {
name: 'devils-advocate-gap-verification',
description: 'Adversarially disprove that the CC 2.1.114-181 feilretting is complete',
phases: [
{ title: 'Refute', detail: 'one skeptic per scanner surface — try to find a still-open or wrongly-fixed row' },
{ title: 'Session', detail: 'adversarial review of CA-SKL-002 + the HOME-leak fix' },
{ title: 'Synthesize', detail: 'punch-list of genuinely-open items, or a verified attestation' },
],
}
const VERDICT = { type:'object', additionalProperties:false,
required:['surface','rows','overallVerdict'],
properties:{
surface:{type:'string'},
rows:{type:'array', items:{type:'object', additionalProperties:false,
required:['claim','actualStatus','verdict','evidence'],
properties:{
claim:{type:'string'}, // the matrix row / fixed-claim
actualStatus:{type:'string'}, // what the code actually does now
verdict:{enum:['confirmed-fixed','still-open','incorrectly-fixed','uncertain']},
evidence:{type:'string'}, // file:line + the proving/refuting test or config
counterexample:{type:'string'} // a config that still false-positives, if found
}}},
overallVerdict:{enum:['all-closed','has-open-items']}
}}
// CLUSTERS: hardcode from the table above (surface, targetFiles, matrixRows) — keeps it deterministic.
const CLUSTERS = [ /* settings, hooks, mcp, permissions, claude-md, knowledge, token */ ]
phase('Refute')
const refutations = await parallel(CLUSTERS.map(c => () =>
agent(
`DEVIL'S ADVOCATE. Surface: ${c.surface}. Target file(s): ${c.targetFiles}.\n` +
`For each matrix row claimed fixed (${c.matrixRows}), READ the scanner code AND its test, then TRY TO REFUTE ` +
`that the fix is correct and complete. Construct a valid CC 2.1.181 config that SHOULD pass and check whether ` +
`the scanner still flags it; check TYPE_CHECK/enum/struct correctness (skillOverrides precedent: object, not string). ` +
`Default each row to 'still-open'/'uncertain' unless code+test prove 'confirmed-fixed'. Cite file:line. Do NOT report ` +
`'missing'/feature-gap rows as findings (out of scope) unless one is a now-wrong bug mislabeled.`,
{ label:`refute:${c.surface}`, phase:'Refute', schema:VERDICT, agentType:'Explore' }
)))
phase('Session')
const sessionReview = await parallel([
() => agent(`Adversarially review CA-SKL-002 in scanners/skill-listing-scanner.mjs + its tests. Hunt: off-by-one at the ` +
`4000-tok boundary, the min(desc,1536) capping logic, ID-ordering assumptions, calibration-note honesty, humanizer entry.`,
{ label:'review:CA-SKL-002', phase:'Session', schema:VERDICT, agentType:'Explore' }),
() => agent(`Adversarially review the HOME-leak fix (commits 66433fe + 325182d). Did isolating HOME hide real coverage? ` +
`Are there OTHER CLI-spawning tests still reading real ~/.claude that the grep audit missed? Is fix-cli REALLY leak-free?`,
{ label:'review:home-leak', phase:'Session', schema:VERDICT, agentType:'Explore' }),
])
phase('Synthesize')
const all = [...refutations, ...sessionReview].filter(Boolean)
const open = all.flatMap(r => r.rows).filter(x => x.verdict==='still-open' || x.verdict==='incorrectly-fixed')
return { open, attestation: open.length===0 ? 'all-closed (verified)' : `${open.length} open items`, raw: all }
Suksesskriterier (verifiserbare)
- Hver
now-wrong/fix-false-positive-rad har en eksplisittverdictmedfile:line-bevis (ikke «ser bra ut»). - Devil's advocate har FAKTISK forsøkt minst én counterexample-config per klynge (ellers er den ikke adversariell).
- Sluttleveranse: enten «all-closed (verified)» med rad-telling, ELLER en punch-list av reelt åpne items → hver blir en failing-test-først-fiks (Iron Law), IKKE auto-fikset uten godkjenning.
node --test 'tests/**/*.test.mjs'forblir grønn; ingen workflow-agent endrer kode (read-onlyExplore-agenter).
Scope-gjerde
Read-only analyse. Funn → rapport + forslag. INGEN kode-endring i devil's advocate-sesjonen uten at operatøren godkjenner punch-listen og ber om fiks (da: failing-test-først per item). Ikke utvid til feature-gap-implementering.
Pekere
- Matrise:
docs/cc-2.1.x-gap-matrix.md(stale ift. kode — verifiser mot kode, ikke mot matrisen). - Overordnet plan:
docs/cc-2.1.x-gap-review-plan.md. Fase 4-plan:docs/cc-2.1.x-fase4-items-2-3-plan.md. - Fix-commits å revidere:
7309935,98ddd77,4b94da0,bec3f45,feaa7ed,624f5ed,b3c572a,8376dab,7bb2547,66433fe,325182d.