Insights Goal D1: post-merge baseline, calendar-guard expression coverage, opus-5 as a selectable generator (2026-09-08)
Branch `insights/goal-d1` from `origin/main` 094cf05e (the merge of PR 98). Every measurement uses the goal-3 method: the frozen fixture, the sealed holdout v11-r2 or the Goal C real-usage sample, the goal-3 scorer, the clock anchor 2026-09-06 12:00 UTC in the Europe/London calendar, two workers, and an application snapshot frozen from Git blobs. Denominators: holdout 100 supported first turns, 250 attempts, 50 conversations; real usage 86 supported first turns, 101 attempts, 5 conversations. The noise floor is the Goal B control arm's spread over three repeats of one code snapshot; a difference smaller than it is not a finding.
Headline
- Step 0. The post-merge baseline on the holdout sits inside the control noise on every metric except correct completed (28/250 against the control's 33 to 39): first-turn errors 59/100 (original 60, control 54 to 57), correct first turns 14/100, precision 44.4%, silent wrong 35/250. Against the control repeats 0 of 17 stable-correct cases were lost; 22/36 original correct completions were retained (Goal A saw 26 and 24 of 36 on its two runs). On the real-usage sample the same code refused 23 of 86 first turns through the calendar guard, more than Goal C's 13 to 15, because PR 98's real physical-type loader now feeds the typed check that previously skipped.
- Step 1. The refused SQL had eight expression forms. The guard now proves aggregates (MIN/MAX with FILTER), branch expressions (COALESCE, GREATEST, LEAST, NULLIF, CASE) over same-typed timestamps, interval and integer date arithmetic, date spines cast to naive timestamps, ::date and DATE_TRUNC chains, CTE-, derived-table-, LATERAL- and subquery-derived timestamps, and generate_series spines, each with real-PostgreSQL tests on the London bucket, the spring skip, the autumn repeated hour and the month boundary. A date spine pushed through AT TIME ZONE stays refused: PostgreSQL resolves it as timestamptz in the session zone and the bound lands an hour off in BST on real rows, which the tests pin. Calendar refusals on the real-usage first turns went from 23/86 to 2/86 (target: at most 3). Every R08 counterexample still fails; on the holdout the calendar guard refuses the same multi-timezone questions as before (10 of 250 against 9), and the clean guard-head holdout run sits inside the control noise: first-turn errors 57/100 against the step-0 run's 59, correct first turns 17 against 14, precision 57.1% against 44.4%, silent wrong 30 against 35; against the control repeats 0 of 17 stable-correct cases were lost and 4 gained. No executed statement in any D1 run failed with an AT TIME ZONE chain in it.
- Step 2. With claude-opus-5 as the configured generator (the benchmark adapter now inside the application: pinned slot, tools proven disabled per call, empty working directory, file-backed transport, absolute deadline with kill and reap, no API key, fail-fast budget gate), the holdout over 3 repeats gives first-turn errors 39.7 [39.0 to 40.0] per 100 against the step-0 baseline's 59 (paired difference against the Goal B control -16.0 [-24.0 to -8.3]), correct first turns 25.3 [25.0 to 26.0] against 14 (10.3 [4.3 to 17.0]), precision 50.9% [50.0% to 51.8%] against 44.4% (0.2% [-12.9% to 13.3%]), silent wrong 55.7 [55.0 to 57.0] against 35 (21.3 [4.7 to 37.7]), full conversations 4.7 [4.0 to 5.0] against 2. On the real-usage sample opus-5 made 8/86 first-turn errors, 0/86 correct first turns, 35/101 silent wrong and 1/86 calendar refusals.
- Step 3. A fresh sealed slice (122 distinct questions, 31 Goal C families, 122 attempts) is sealed in the evaluator-only directory with seal SHA-256 d54a61d06882a38a9be0b2f4321688758cab15e585357329b75cee3bdce68067; 0 duplicate texts against 1496 prior texts. Not run.
1. Step 0: post-merge baseline (main 094cf05e, glm control, temperature 0, seed 42, two workers)
Holdout v11-r2
| run | First-turn execution errors | Correct first turns | Precision (correct / answered) | Silent wrong | Correct completed | Refusals | Comparison unverified | Full conversations | provider-class errors |
|---|
| original e479e81 (goal 3) | 60/100 | 14/100 | 53.7% (36/67) | 31/250 | 36/250 | 4/250 | 18/250 | 1/50 | 0 |
| Goal A run 2 | 54/100 | 16/100 | 53.6% (37/69) | 32/250 | 37/250 | 17/250 | 12/250 | 4/50 | 0 |
| Goal A run 3 | 58/100 | 14/100 | 46.5% (33/71) | 38/250 | 33/250 | 16/250 | 10/250 | 1/50 | 0 |
| Goal B control r1 (glm, ff3e669e) | 56/100 | 16/100 | 54.9% (39/71) | 32/250 | 39/250 | 14/250 | 14/250 | 2/50 | 0 |
| Goal B control r2 (glm, ff3e669e) | 57/100 | 15/100 | 45.9% (34/74) | 40/250 | 34/250 | 11/250 | 10/250 | 2/50 | 0 |
| Goal B control r3 (glm, ff3e669e) | 54/100 | 14/100 | 51.6% (33/64) | 31/250 | 33/250 | 17/250 | 15/250 | 3/50 | 0 |
| D1 step 0: main 094cf05e, glm | 59/100 | 14/100 | 44.4% (28/63) | 35/250 | 28/250 | 13/250 | 13/250 | 2/50 | 1 |
| D1 step 1: guard head bb7e3938, glm (r1, zai 429s) | 64/100 | 15/100 | 59.6% (34/57) | 23/250 | 34/250 | 13/250 | 13/250 | 2/50 | 16 |
| D1 step 1: guard head, glm (r2) | 57/100 | 17/100 | 57.1% (40/70) | 30/250 | 40/250 | 16/250 | 13/250 | 3/50 | 0 |
| D1 step 2: opus-5 r1 (9fa89bcb) | 39/100 | 25/100 | 50.9% (59/116) | 57/250 | 59/250 | 11/250 | 12/250 | 5/50 | 0 |
| D1 step 2: opus-5 r2 | 40/100 | 25/100 | 50.0% (55/110) | 55/250 | 55/250 | 12/250 | 12/250 | 5/50 | 0 |
| D1 step 2: opus-5 r3 | 40/100 | 26/100 | 51.8% (59/114) | 55/250 | 59/250 | 12/250 | 11/250 | 4/50 | 0 |
| noise floor (control spread) | 3.0 | 2.0 | 9.0% | 9.0 | 6.0 | 6.0 | 5.0 | 1.0 | |
Stable-case view against the Goal B control repeats (a case is lost only if it was correct in all three control repeats and wrong or error in the candidate):
| run | stable-correct in control | lost | correct to wrong | correct to error | gained correct | retained original correct | original correct to wrong | original correct to error |
|---|
| D1 step 0: main 094cf05e, glm | 17 | 0 | 0 | 0 | 1 | 22/36 | 7 | 3 |
| D1 step 1: guard head bb7e3938, glm (r1, zai 429s) | 17 | 1 | 1 | 0 | 0 | 26/36 | 4 | 4 |
| D1 step 1: guard head, glm (r2) | 17 | 0 | 0 | 0 | 4 | 29/36 | 4 | 3 |
| D1 step 2: opus-5 r1 (9fa89bcb) | 17 | 0 | 0 | 0 | 11 | 32/36 | 1 | 2 |
| D1 step 2: opus-5 r2 | 17 | 0 | 0 | 0 | 8 | 31/36 | 2 | 1 |
| D1 step 2: opus-5 r3 | 17 | 0 | 0 | 0 | 10 | 33/36 | 0 | 2 |
| opus-5 (all repeats) | 17 | 0 | 0 | 0 | 7 | | | |
Calendar-guard refusals on the holdout, with their reason strings:
- D1 step 0: main 094cf05e, glm: 9 calendar refusals of 250 (4 on supported first turns); refusal guards {'-': 1, 'CalendarSemanticsError': 9, 'UNKNOWN-GOLD-COLUMN': 3}; reasons: 9 × 'SQL still failed CalendarSemanticsError enforcement after regeneration: Unverified calendar semantics: more than one requested timezone'
- D1 step 1: guard head bb7e3938, glm (r1, zai 429s): 10 calendar refusals of 250 (4 on supported first turns); refusal guards {'-': 1, 'CalendarSemanticsError': 10, 'UNKNOWN-GOLD-COLUMN': 2}; reasons: 10 × 'SQL still failed CalendarSemanticsError enforcement after regeneration: Unverified calendar semantics: more than one requested timezone'
- D1 step 1: guard head, glm (r2): 10 calendar refusals of 250 (4 on supported first turns); refusal guards {'-': 1, 'CalendarSemanticsError': 10, 'UNKNOWN-GOLD-COLUMN': 5}; reasons: 10 × 'SQL still failed CalendarSemanticsError enforcement after regeneration: Unverified calendar semantics: more than one requested timezone'
- D1 step 2: opus-5 r1 (9fa89bcb): 10 calendar refusals of 250 (4 on supported first turns); refusal guards {'-': 1, 'CalendarSemanticsError': 10}; reasons: 10 × 'SQL still failed CalendarSemanticsError enforcement after regeneration: Unverified calendar semantics: more than one requested timezone'
- D1 step 2: opus-5 r2: 10 calendar refusals of 250 (4 on supported first turns); refusal guards {'-': 1, 'CalendarSemanticsError': 10, 'UNKNOWN-GOLD-COLUMN': 1}; reasons: 10 × 'SQL still failed CalendarSemanticsError enforcement after regeneration: Unverified calendar semantics: more than one requested timezone'
- D1 step 2: opus-5 r3: 10 calendar refusals of 250 (4 on supported first turns); refusal guards {'-': 1, 'CalendarSemanticsError': 10, 'UNKNOWN-GOLD-COLUMN': 1}; reasons: 10 × 'SQL still failed CalendarSemanticsError enforcement after regeneration: Unverified calendar semantics: more than one requested timezone'
Real-usage sample (Goal C corpus, 101 attempts)
| run | First-turn execution errors | Correct first turns | Precision (correct / answered) | Silent wrong | Correct completed | Refusals | Comparison unverified | Full conversations | calendar refusals (first turns) | provider-class errors | infrastructure failures |
|---|
| Goal C original r1 | 16/86 | 4/86 | 12.9% (4/31) | 27/101 | 4/101 | 2/101 | 48/101 | 0/5 | 0/86 | 0 | 0 |
| Goal C original r2 | 14/86 | 5/86 | 14.7% (5/34) | 29/101 | 5/101 | 2/101 | 48/101 | 0/5 | 0/86 | 0 | 0 |
| Goal C landed r1 | 9/86 | 2/86 | 11.1% (3/27) | 24/101 | 3/101 | 18/101 | 45/101 | 0/5 | 13/86 | 0 | 0 |
| Goal C landed r2 | 10/86 | 4/86 | 14.7% (5/34) | 29/101 | 5/101 | 19/101 | 34/101 | 0/5 | 15/86 | 0 | 0 |
| Goal C claude-opus-5-cli r1 (bench adapter) | 3/86 | 0/86 | 0.0% (0/31) | 31/101 | 0/101 | 21/101 | 45/101 | 0/5 | 17/86 | 0 | 0 |
| D1 step 0: main 094cf05e, glm | 11/86 | 2/86 | 10.5% (2/19) | 17/101 | 2/101 | 27/101 | 40/101 | 0/5 | 23/86 | 0 | 0 |
| D1 step 1: guard head, glm (r1, 409 cascade) | 17/86 | 4/86 | 13.8% (4/29) | 25/101 | 4/101 | 3/101 | 40/101 | 0/5 | 0/86 | 0 | 13 |
| D1 step 1: guard head, glm (r2, zai 429s) | 21/86 | 2/86 | 9.4% (3/32) | 29/101 | 3/101 | 5/101 | 37/101 | 0/5 | 2/86 | 15 | 0 |
| D1 step 1: guard head, glm (r3) | 12/86 | 2/86 | 8.6% (3/35) | 32/101 | 3/101 | 5/101 | 46/101 | 0/5 | 2/86 | 0 | 0 |
| D1 step 2: opus-5 (r1, 409 cascade) | 9/86 | 0/86 | 0.0% (0/33) | 33/101 | 0/101 | 2/101 | 48/101 | 0/5 | 0/86 | 0 | 12 |
| D1 step 2: opus-5 (r2) | 8/86 | 0/86 | 0.0% (0/35) | 35/101 | 0/101 | 3/101 | 53/101 | 0/5 | 1/86 | 1 | 0 |
2. Step 1: calendar-guard expression coverage
The forms found in the refused generated SQL (Goal C landed r1/r2 lost their SQL text: Goal C retained prompt hashes only; the opus r1 CLI transcripts and the D1 step-0 text trace retain it), what the extended guard now proves, and what stays refused:
| expression form found in the refused SQL (node named by the pre-extension guard) | opus r1 statements (now proved) | step-0 statements (now proved) | verdict |
|---|
| MIN/MAX of a physical timestamp (with or without FILTER, with or without an inner AT TIME ZONE chain) | 48 (47) | 23 (22) | proved: the aggregate keeps the column's physical kind; an inner chain hoists out (monotone map); localized at the use site |
| derived timestamp or date column (CTE/derived-table aggregate, LATERAL alias, unqualified name over a join, or a hallucinated column) | 0 (0) | 17 (13) | proved for real lineage (CTE and derived-table projections, LATERAL alias lists, an unqualified name carried by exactly one source); a hallucinated column or a misspelled table stays refused and is named |
| accepted by the pre-extension guard | 1 (1) | 3 (3) | the case was refused on another statement or on the final validation |
| CURRENT_DATE::timestamp or (CURRENT_DATE - INTERVAL)::timestamp date spine | 4 (4) | 0 (0) | proved: a calendar date cast to a naive timestamp is midnight on the same wall clock, not an instant |
| date spine converted through AT TIME ZONE as a window bound | 0 (0) | 4 (0) | stays refused, named: PostgreSQL resolves the spine as timestamptz in the session zone, so the bound is an hour off in BST on real rows; the reason points at the bare spine |
| date reinterpreted as an instant (CURRENT_DATE AT TIME ZONE z) | 1 (0) | 2 (0) | stays refused, named: session-dependent instant |
| date spine + integer days, then interval arithmetic | 1 (1) | 0 (0) | proved: date +/- integer stays a date; interval arithmetic keeps the kind |
| interval arithmetic on a derived date column | 1 (1) | 0 (0) | proved: the column resolves through the CTE projection to a date spine |
| COALESCE/GREATEST/LEAST/NULLIF/CASE over same-typed timestamps; scalar subquery timestamps; generate_series FROM sources | 0 | 0 | proved by the lineage tracer and pinned by real-PostgreSQL tests; no instance in the refused corpus |
| naive/aware mixing in a branch; ::timestamptz of a wall clock; clock_timestamp(), LOCALTIMESTAMP; an interval added after a conversion | 0 | 0 | stay refused by name; pinned by tests |
Transitions of the calendar-refused cases of the step-0 run after the guard change:
- guard-glm-real-r3: {'silent_wrong': 11, 'comparison_unverified': 8, 'task_error': 3, 'refusal_unverified': 1}
- guard-glm-real-r2: {'silent_wrong': 8, 'comparison_unverified': 7, 'task_error': 7, 'refusal_unverified': 1}
- guard-glm-real-r1: {'silent_wrong': 10, 'correct_completed': 1, 'comparison_unverified': 8, 'task_error': 3, 'infrastructure_failure': 1}
- opus-real-r2: {'comparison_unverified': 8, 'silent_wrong': 11, 'task_error': 4}
- opus-real-r1: {'comparison_unverified': 9, 'silent_wrong': 10, 'task_error': 3, 'infrastructure_failure': 1}
Calendar refusals on supported first turns of the real-usage sample: D1 step 0: main 094cf05e, glm: 23/86; D1 step 1: guard head, glm (r1, 409 cascade): 0/86; D1 step 1: guard head, glm (r2, zai 429s): 2/86; D1 step 1: guard head, glm (r3): 2/86; D1 step 2: opus-5 (r1, 409 cascade): 0/86; D1 step 2: opus-5 (r2): 1/86.
3. Step 2: claude-opus-5 as the configured generator
| metric | opus-5 mean [min to max] over repeats | D1 step 0 (main, glm) | D1 step 1 (guard head, glm) | control noise floor | paired difference vs Goal B control [95% CI] |
|---|
| First-turn execution errors | 39.7 [39.0 to 40.0] | 59 | 57 | 3.0 | -16.0 [-24.0 to -8.3] |
| Correct first turns | 25.3 [25.0 to 26.0] | 14 | 17 | 2.0 | 10.3 [4.3 to 17.0] |
| Precision (correct / answered) | 50.9% [50.0% to 51.8%] | 44.4% | 57.1% | 9.0% | 0.2% [-12.9% to 13.3%] |
| Silent wrong | 55.7 [55.0 to 57.0] | 35 | 30 | 9.0 | 21.3 [4.7 to 37.7] |
| Correct completed | 57.7 [55.0 to 59.0] | 28 | 40 | 6.0 | not a paired metric |
| Refusals | 11.7 [11.0 to 12.0] | 13 | 16 | 6.0 | not a paired metric |
| Comparison unverified | 11.7 [11.0 to 12.0] | 13 | 13 | 5.0 | not a paired metric |
| Full conversations | 4.7 [4.0 to 5.0] | 2 | 3 | 1.0 | 2.3 [0.0 to 5.3] |
Per-call generator statistics (CLI wall time includes the child's start-up and Claude Code's own request pipeline; runs overlapped on the host, so wall time is advisory):
| run | calls | failed | p50 ms | p95 ms | input tokens | output tokens | thinking tokens | served models | tools disabled every call | deadline kills | budget errors |
|---|
| main-glm-holdout-r1 | 473 | 2 | 7521.7 | 13633.0 | 3639374 | 134874 | 0 | {'glm-5.2': 471} | None | 0 | 0 |
| guard-glm-holdout-r1 | 476 | 38 | 7605.7 | 13969.1 | 3425730 | 122304 | 0 | {'glm-5.2': 438} | None | 0 | 0 |
| guard-glm-holdout-r2 | 484 | 0 | 6819.7 | 12374.9 | 3660271 | 141539 | 0 | {'glm-5.2': 484} | None | 0 | 0 |
| opus-holdout-r1 | 500 | 0 | 5425.3 | 7193.9 | 6371053 | 170147 | 0 | {'claude-opus-5': 500} | True | 0 | 0 |
| opus-holdout-r2 | 491 | 0 | 5440.2 | 7322.2 | 6333867 | 166892 | 0 | {'claude-opus-5': 491} | True | 0 | 0 |
| opus-holdout-r3 | 496 | 0 | 5464.2 | 7585.0 | 6383096 | 171866 | 0 | {'claude-opus-5': 496} | True | 0 | 0 |
| main-glm-real-r1 | 177 | 0 | 7571.8 | 13274.3 | 2023998 | 63734 | 0 | {'glm-5.2': 177} | None | 0 | 0 |
| guard-glm-real-r1 | 132 | 0 | 8494.6 | 13727.9 | 1509792 | 47659 | 0 | {'glm-5.2': 132} | None | 0 | 0 |
| guard-glm-real-r2 | 163 | 40 | 8342.6 | 15100.9 | 1433445 | 45635 | 0 | {'glm-5.2': 123} | None | 0 | 0 |
| guard-glm-real-r3 | 144 | 0 | 7805.4 | 14350.8 | 1688856 | 51038 | 0 | {'glm-5.2': 144} | None | 0 | 0 |
| opus-real-r1 | 128 | 0 | 7370.5 | 13481.0 | 2466513 | 81472 | 0 | {'claude-opus-5': 128} | True | 0 | 0 |
| opus-real-r2 | 146 | 2 | 7497.5 | 13452.9 | 2796061 | 93949 | 0 | {'claude-opus-5': 144} | True | 0 | 0 |
4. Step 3: fresh sealed slice
Revision fresh-v1, split fresh_slice: 122 distinct question texts (113 standalone cases and 3 three-turn conversations, 122 attempts) across 31 Goal C families; 7 expected answers are empty on the fixture; 0 duplicate texts against 1496 prior texts. Seal manifest SHA-256 d54a61d06882a38a9be0b2f4321688758cab15e585357329b75cee3bdce68067. Sealed at 2026-09-08T14:30:56.271778+00:00 in the evaluator-only directory; not run.
Families: F01, F02, F03, F04, F10, F11, F12, F13, F14, F16, F17, F19, F20, F22, F23, F24, F25, F26, F27, F31, F33, F34, F38, P01, P02, P03, P04, P05, X01, X02, X03.
5. Method
- Code: branch `insights/goal-d1`; step 0 ran the exact Git blobs of main 094cf05e; step 1 the guard head bb7e3938 (main plus the calendar-guard change and `bench_metrics.py`); step 2 the adapter head 9fa89bcb and 9d64c468 (identical application bytes; the later revision only changes the real-usage runner). Snapshot manifests (exact blob hashes) are in every run's receipt.
- Runtime: `scripts/insights_d1_runtime.py`, the sealed goal-3 runtime plus generated-text capture (evaluator-only) and a configurable generator: `zai` reproduces the sealed LiveProvider call byte for byte (glm-5.2 requested through the zai coding endpoint, thinking disabled, temperature 0, seed 42, 25 s deadline); `claude-cli` leaves generation to the application's own `RoutedLLMClient` with `LORE_BI_SQLGEN_PROVIDER=claude-cli` (claude-opus-5, slot 3, thinking disabled, 75 s deadline). Auxiliary (non-SQL) generation stays zai glm-5.2 in every run. The 3-minute job deadline is unchanged.
- Runner: the sealed `scripts/insights_goal2_eval.py` for the holdout (with Goal B2's optional budget gate); `scripts/insights_real_usage_eval.py` (Goal C's copy) for the real-usage sample. During step 1 a real follow-up drew HTTP 409 'the parent answer has an incomplete cohort' before any job ran; the sealed runner treated it as unknown server work and stopped every later admission, leaving 13 and 11 attempts unscored in the first guard and opus real-usage runs. The real-usage runner now scores such a pre-dispatch 4xx terminal projection as the product outcome it is and continues; both runs were repeated with the fixed runner and the repeats are the figures used. The holdout runner is untouched; the baseline real-usage run never met a 409.
- Method binding: every run's `method-manifest.json` hashes the worktree's scorer, runner, runtime, clock library, corpus and reconciliation by absolute path; the runner re-hashes them before starting. Sealed E5 files that differ from the goal-3 seal are the fixture control-39 correction landed by PR 98 (`phase0_fixture_data.py`, the two fixture scripts) and, for the holdout runner, the B2 budget-gate option; the frozen fixture database is unchanged (control-39 correction not applied).
- Concurrency: up to six runs overlapped on the 16-CPU host (load average 1 to 6); quality metrics are compared on identical scoring inputs; per-call wall time is advisory. The zai coding endpoint rate-limited the generator (HTTP 429, code 1302) once about six evaluations shared it: the first guard-head holdout run recorded 34 rate-limited generator calls (16 attempts scored as provider errors) and the second guard-head real-usage run 38 (15 attempts); a second guard-head holdout repeat started under the same load was stopped at 49 attempts after 4 rate-limited calls and set aside. The clean repeats ran with at most two glm-generation runs on the endpoint; every run's provider trace lists its failed calls, and the tables name which runs were contaminated. The step-0 holdout run recorded 2 rate-limited calls (1 attempt).
- Opus 5 safeguards: two generator calls in the opus real-usage repeat returned Claude Code's safeguard refusal (stop reason refusal, exit 1) on the security-probe question; they are scored as provider errors, which is the expected outcome for that case.
- Statistics: noise floor and stable-case rules as in Goal B; the paired interval is the Goal B 10,000-draw intent-family cluster bootstrap (seed 2026090611) of the opus repeats against the three Goal B control repeats (different code snapshot; the D1 glm runs are single runs).
6. Unverified
- Single runs: the step-0 baseline and each glm after-run are one run each; the provider is not deterministic at temperature 0 and seed 42 (Goal A), so per-case transitions between single runs carry the control's noise. Only the opus arm has repeats.
- The opus paired interval pairs against the Goal B control repeats, which ran on the pre-merge Goal B snapshot, not on main; the D1 glm runs share main's code but are single runs.
- Per-call wall time of the CLI generator was measured while other runs shared the host and includes Claude Code's start-up and request pipeline; it is not comparable with the API arms.
- The calendar guard's new proofs are pinned by real-PostgreSQL tests on synthetic rows around the DST transitions and the month boundary; correctness on the fixture is not production usefulness, and the frozen scorer marks many real answers unverified because the product adds columns.
- The fresh slice's expected SQL follows the ratified definitions and house defaults as recorded in Goal C; 7 of its 122 expected answers are empty on the fixture; it has not been run and its questions never entered the repository.
- Isolation of the CLI generator is proven per call from Claude Code's own transcript (tool list, tool-use blocks, working directory); network isolation of the child is not established by the CLI banner.
7. Evidence
- `docs/evidence/insights-goal-d1-2026-09-08/results.json`: every number in this report.
- `docs/evidence/insights-goal-d1-2026-09-08/runs/<label>/`: compact attempt records (outcomes, classes, timings; no question text, SQL or values), summaries, run receipts with snapshot revision, load averages and slot usage, method manifests, runtime contracts, provider traces (hashes, tokens, served model, exit codes, wall time, tool list) and budget logs.
- `docs/evidence/insights-goal-d1-2026-09-08/generator/`: the tools-disabled proof and the live in-process proof of the configured generator.
- `docs/evidence/insights-goal-d1-2026-09-08/fresh-slice/seal-receipt.json`: counts, families and hashes of the sealed slice.
- Evaluator-only (never committed): `/tmp/lore-goal3-eval/goal-d1/runs/` (full attempt records, server state, generated-text traces) and `/tmp/lore-goal3-eval/sealed-d1/` (the fresh slice).