Commit 2ef513a
fix(gate): hollow-results guard + bound the execution outer loop (both crossings were fake)
STATUS AFTER A DAY: 449 projects at in_progress, 2 "crossed" — and BOTH crossings
were hollow. The gate let them through and the fleet was starving.
1. HOLLOW RESULTS (execution/hollow_guard.py — new deterministic gate)
The gate's bar was `bool(produced)`: "did a file appear?". It NEVER looked inside.
PROJ-179 ("The Influence of Metacognitive Awareness") reached research_complete
having run on the IRIS FLOWER dataset (150 rows, 105/45 split) and written:
primary_analysis.json {"correlation_coefficient": null, "p_value": null}
correlation_metrics.json {"d_prime": NaN}
robustness_analysis.json []
validation_report.json {"status": "PASS"} <- self-certified
Its confidence_rating column — the study's KEY measure — was blank in all 150 rows.
fabrication_guard catches numbers that were FAKED; this catches numbers that were
never COMPUTED. Both mean "not a real measurement" and both now hard-fail the gate.
Tuned for HIGH PRECISION: 0.0 and negatives are real values and are never flagged.
2. NO DURABLE EVIDENCE (same module)
PROJ-256 advanced to research_review on ONE artifact —
data/processed/null_fpr_metrics.json — which is GITIGNORED. Nothing was committed:
no result a reviewer can open, nothing a paper can cite. Its entire empirical
contribution had already evaporated. A run whose every artifact is gitignored now
fails. Durability is decided by git itself (the .gitignore stays the SSoT).
Both projects are reset to in_progress with the truth recorded. Honest count: 0.
3. UNBOUNDED OUTER LOOP (state/execution_status.py + graph.py)
reset_fix_loop wiped BOTH fix_rounds and model_tier, so a project whose analysis
cannot run climbed the whole ladder (12 rounds x every tier), re-planned to a
clean slate, and climbed it AGAIN — forever, with no memory. Two monotonic
counters now survive the resets: `total_attempts` and `replan_rounds`. Past
MAX_REPLAN_ROUNDS the honest outcome is terminal VALIDATOR_REJECTED — the
analysis is not executable here — not another lap. (Still autonomous; never
human_input_needed.)
4. CHURNERS MONOPOLISED THE MATRIX (scheduler.py)
A failed execution re-opens only a handful of tasks, so a hopeless project sits at
~6 remaining FOREVER and shortest-remaining-first re-picked it every tick.
PROJ-029 took 843 implementer calls in ONE day; 12 churners ate ~4,000 of the
day's 5,111 while 400 projects got NONE. Distance-from-done now includes
EXEC_CHURN_PENALTY * total_attempts, so churn falls behind healthy work without
being banished (it still needs attempts to reach the re-plan cap). Live effect:
the in_progress workers now pick healthy projects instead of the six churners.
scripts/backfill_execution_churn_counters.py replays git history to seed both
counters on the 36 existing records (PROJ-586: 38 attempts; PROJ-843: 33/2 replans)
— without it, both new guards would have been blind to the churn already burned.
5. FLAPPING TEST (tests/unit/test_data_contract.py)
It asserted against LIVE state (state/execution_status/PROJ-262.json + the live
project tree), which the pipeline rewrites every tick. The evidence moved out from
under it and it failed while the detector it guards was fine. The REAL evidence
(404a05f) is now frozen in tests/fixtures/proj262/ — verbatim, assertions
unchanged, no longer a moving target.
Full offline suite: 6436 passed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 30f559b commit 2ef513a
41 files changed
Lines changed: 3693 additions & 15 deletions
File tree
- scripts
- src/llmxive
- agents
- execution
- pipeline
- state
- tests
- fixtures
- proj262
- code
- analysis
- attribution
- cleanup
- data
- training
- utils
- results
- unit
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
14 | 19 | | |
15 | 20 | | |
16 | 21 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
108 | 114 | | |
109 | 115 | | |
110 | 116 | | |
| 117 | + | |
111 | 118 | | |
112 | 119 | | |
113 | 120 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
| 69 | + | |
69 | 70 | | |
70 | 71 | | |
71 | 72 | | |
| |||
327 | 328 | | |
328 | 329 | | |
329 | 330 | | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
330 | 335 | | |
331 | 336 | | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
332 | 351 | | |
333 | 352 | | |
334 | 353 | | |
335 | 354 | | |
336 | 355 | | |
337 | 356 | | |
| 357 | + | |
| 358 | + | |
338 | 359 | | |
339 | 360 | | |
340 | 361 | | |
341 | 362 | | |
342 | 363 | | |
343 | 364 | | |
344 | 365 | | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
345 | 373 | | |
346 | 374 | | |
347 | 375 | | |
| |||
372 | 400 | | |
373 | 401 | | |
374 | 402 | | |
| 403 | + | |
375 | 404 | | |
376 | 405 | | |
377 | 406 | | |
| |||
0 commit comments