feat(validator,generate,run): an identifier a proposal builds on must be in the input, or the verdict falls [skip-docs]
P6 (økt 108) ended in ValidatedProposal (verdict 5fd6272e3725fe68) on two cost codes -- M-04-01 / M-04-03 -- that appear in NO prompt of that run. Measured here first, verbatim: validate_proposal(p, baseline=None) validates it; the same proposal against any non-empty CostBaseline is rejected naming both codes. So the hole was never "fabrication goes uncaught" -- _reconcile_against_baseline exists and is right -- but that the falsifier is reached only through `if baseline is not None`. The input always exists; the baseline does not. New stage 0b (_ground_against_input), OUTSIDE the baseline branch, after stage 0 so an anchored run's message is byte-identical to before. ONE Rejection, the validator's own type, naming EVERY ungrounded identifier "; "-joined in the proposal's own order (økt 94's completeness reason). The rule has NO pattern -- `code in grounding`, exact substring -- and that is a measurement: over the delivered corpora (K2 1108 files / 2 005 561 chars, the three N payloads 8 excerpts each) the identifier forms are heterogeneous, and a pattern chosen to cover them would be a rule about shapes. Bare numerals are the one inert class (46 394 occurrences / 2 117 distinct in K2); the rule fails OPEN there, never closed. Evidence is three non-model-authored sources: what run_project DELIVERED (the rendered cut/pointer/chunks plus the base's context_files -- never files, which would make the type: verdict layer evidence), the project's own cost lines, and the baseline's codes when anchored. The rendered PROMPT is deliberately NOT evidence, on two measurements: gen_context IS the debate output on the S2c path, and from attempt 2 the prompt carries the previous Rejection.reason verbatim -- which for this stage QUOTES the identifier it just refused. Grounding in the prompt would let the gate's own refusal disarm it on its second round. Prose scanning was chosen against WITH THE NUMBERS: a typed gate catches 2/2 (P6) and 2/2 (S7c) -- 100% of what reached a verdict. What stays uncaught, said plainly: an ungrounded identifier that lives only in agent/debate prose and never becomes an affected_item code (2 of 4 P6, 2 of 4 S7c, 1 of 2 P4). Iron Law: 9 red / 2 green before the rule existed. Ten mutations all red against the whole suite, green control 1558 passed / 5 skipped (from 1543/5, superset, 0 removed), golden demo-transcript.stdout BYTE-UNCHANGED (shasum -a 1 of the CONTENT = ea8c534773acdbe41ae68f2c55724d69aaf8be4f). Three existing fixtures changed, no gate weakened -- most of all test_pre_amendment_bundle_runs_unchanged, which sent the SAME FABRICATED code and asserted it validated: the økt-108 hole written down as an expectation. No paid run. Order 20260909T113641Z-38938691-from-.claude. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
999846a485
commit
277bb95777
12 changed files with 831 additions and 13 deletions
58
CLAUDE.md
58
CLAUDE.md
|
|
@ -2258,6 +2258,64 @@ Python ≥3.10. MAF (`agent-framework-core` 1.16.0, `-orchestrations` 1.1.1 —
|
|||
hver sin uavhengige gate. **Én betalt N100-arm med `--require-cost-baseline`: rc 1, 0 modellkall,
|
||||
NOK 0,00** — (b′) forblir STRUKTURELT umålbar under flagget (F4: en vegnormal bærer ingen
|
||||
kostlinjer, uendret av denne fiksen). Måling: `docs/2026-09-08-n-bundlene-hypoteseform.md` § 10.
|
||||
- **En identifikator forslaget bygger på skal finnes ORDRETT i inputen, ellers faller dommen — og
|
||||
hullet var ALDRI at fabrikasjon var ufanget (P7, 09.09):** `_reconcile_against_baseline`
|
||||
(`validator.py`) bærer allerede setningen «the cost code is absent from the baseline — a
|
||||
fabricated line», men den nås KUN gjennom `if baseline is not None`, så falsifisereren var koblet
|
||||
til om det tilfeldigvis fantes en kostnadsbaseline. MÅLT (økt 108, dom `5fd6272e3725fe68`): en
|
||||
uforankret K2-kjøring endte i `ValidatedProposal` på to kostkoder — `M-04-01`/`M-04-03` — som
|
||||
står i INGEN prompt av den kjøringen, og S7cs `PRD-001`/`PRD-002` falt på MAGNITUDE (stage 4),
|
||||
ikke på fabrikasjon. **Inputen finnes ALLTID; baselinen gjør ikke det.** `_ground_against_input`
|
||||
er derfor et EGET stadium (0b) som ikke ser på `baseline`, plassert ETTER stage 0 så en forankret
|
||||
kjøring der begge ville fyrt får byte-identisk samme melding (baselinens setning navngir
|
||||
prosjektet og kodetallet, og Steg 5 mater nettopp den tilbake). ÉN `Rejection`, validatorens egen
|
||||
type, som navngir HVER ugrunnet identifikator `"; "`-joinet i FORSLAGETS rekkefølge (økt 94s
|
||||
fullstendighets-grunn). **REGELEN HAR INTET MØNSTER, og det er en MÅLING:** sjekken er
|
||||
`code in grounding` — eksakt delstreng — fordi de leverte korpusene bærer heterogene former
|
||||
(K2: 499 `UPPER-num`-treff / 23 unike, 25 enkeltbokstav-koder à `B-20-00-00`, **0** `Krav`-numre i
|
||||
kroppen; N-payloadene: `Krav X.Y.Z—N` i `req_number`/`title` 8/8 i hver, 71 UUID-er i N200), så et
|
||||
mønster valgt for å dekke dem ville vært en regel om FASONGER. **Rene tall er den ene inerte
|
||||
klassen** (K2: 46 394 forekomster / 2 117 distinkte), og feilretningen er ÅPEN — regelen kan ikke
|
||||
felle en ekte kode. **Beviset er TRE ikke-modell-forfattede kilder** (`_grounding_text`):
|
||||
`delivered` fra `run_project` (den leverte rendringen + basens `context_files`, **aldri `files`** —
|
||||
den property-en dropper `type: verdict`-laget, og å grunne et forslag i en tidligere DOM ville
|
||||
rutet ExpeL-foldens materiale rundt sin egen gate), prosjektets EGNE `cost_items` (MÅLT:
|
||||
`_project_from_bundle` bygger `cost_items=()`, så kilden bidrar med null på bundle-stien) og
|
||||
baselinens koder når kjøringen er forankret (stage 0 har alt dømt dem EKTE; det svakere stadiet
|
||||
skal ikke overprøve det sterkere). **Den rendrede PROMPTEN er BEVISST IKKE bevis, og det er to
|
||||
målinger:** på S2c-stien er `gen_context` DEBATT-OUTPUTEN (en proposer som navngir en kode i en
|
||||
debatt-tur grunner så sitt eget forslag i den), og fra forsøk 2 bærer prompten forrige
|
||||
`Rejection.reason` ORDRETT (Steg 5) — som for dette stadiet SITERER identifikatoren den nettopp
|
||||
nektet, altså **en falsifiserer som avvæpner seg selv på sin andre runde**. **Prosa-skanningen er
|
||||
VALGT BORT med tall:** en typet gate fanger 2/2 (P6) og 2/2 (S7c) — 100 % av det som nådde en DOM
|
||||
— mens en prosa-gate legger til fire tokens som aldri nådde noen dom og krever nøyaktig det
|
||||
mønsteret regelen unngår. **Ufanget forblir, uttalt:** en ugrunnet identifikator som kun står i
|
||||
agent-/debatt-prosa og aldri blir en `affected_item`-kode (2 av 4 på P6, 2 av 4 på S7c, 1 av 2 på
|
||||
P4). Testene leser SPOREDE fixturer (`tests/fixtures/p7-grounding/`, de tre genererings-promptene
|
||||
ORDRETT) — opptakene ligger i `scratchpad/`, som `git archive HEAD` ikke bærer, så en test som
|
||||
leste dem ville felt handover-gaten. Kjent-positiven `Krav 3.3.1—13` (EM-DASH; bindestrek-varianten
|
||||
scorer 0/6) flagges IKKE, med KONTROLLEN `CRS-01` på SAMME opptak. Load-bearing MÅLT
|
||||
(`tests/test_identifier_grounding_loadbearing.py`, 15 armer, **9 røde / 2 grønne FØR regelen**),
|
||||
**ti mutasjoner alle røde mot HELE suiten** + grønn kontroll **1558/5** (fra 1543/5, supersett,
|
||||
0 fjernet) og golden `demo-transcript.stdout` BYTE-UENDRET (`shasum -a 1` av INNHOLDET =
|
||||
`ea8c534773acdbe41ae68f2c55724d69aaf8be4f`): M1 regelen finner aldri noe (10) · M2 regelen flagger
|
||||
alt (72, inkl. kjent-positiven OG golden-transkriptet) · M3 grunnen navngir bare første (3) ·
|
||||
M4 stadiet bak `baseline is not None` (9) · M5 detach `generate.py`-wiringen (3) · M6 `run_project`
|
||||
erklærer ingen levert input (33, de fleste eldre) · M7 bygg fra `bundle.files` (1, den armen
|
||||
alene) · M8 dropp baselinens koder (1) · M9 dropp prosjektets kostlinjer (15, alle i eldre tester
|
||||
— kilden har ingen egen arm, og det ER dens vitne) · M10 prompten blir bevis igjen (2).
|
||||
**Tre eksisterende fixturer endret, ingen gate svekket** — mest av alt
|
||||
`test_s40_cost_baseline_loadbearing::test_pre_amendment_bundle_runs_unchanged`, som sendte den
|
||||
SAMME FABRIKKERTE koden og påsto at den validerte: økt-108-hullet skrevet ned som en FORVENTNING.
|
||||
Den bærer nå en kode basen navner. **Ærlighets-grenser, uttalt:** ingen betalt kjøring bekrefter
|
||||
at regelen endrer utfallet levende (tre opptak, ÉN modell, ETT deployment — structured-output-
|
||||
grensens klasse); `assumptions`-nøkler sjekkes ikke (en nøkkel uten `affected_item` samples aldri
|
||||
av Monte Carlo, så den kan ikke flytte dommen); de tre andre `validate_proposal`-kallstedene er
|
||||
BEVISST urørt (`self_repair` er en ren hjelper, `run.py:450` bygger kandidaten FRA baselinen og
|
||||
kan strukturelt ikke fabrikkere — økt 82s M7-grense — og `quick_validate` er nivå 1, rådgivende);
|
||||
den hostede flaten er urørt (feltet er i ingen av hostings tre sett); og
|
||||
`--require-cost-baseline` er IKKE gjort til default (F4/D-3). Måling:
|
||||
`docs/2026-09-09-p7-forankrede-identifikatorer.md`.
|
||||
- **STATE.md er local-only** (gitignored). Voyage session-state er efemert; STATE.md er kanonisk kontinuitet.
|
||||
- Prosess: Voyage-plugin (`/trekbrief → /trekplan → /trekexecute → /trekreview`) per større fase.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue