docs: #000037 §20+§17.1 refresh + #000025 Phase 1f closure + cookbook harvest section

Three coordinated doc landings tying together fox's evening
#000037#000025 closed-loop work (commits f625cac through
ff1752c + 8999b55):

== #000037 §20 Status — stale prose refresh ==

§20 said "open · awaiting go/no-go" but file header + TICKETS.md
both say "in progress" with phases 0/1/1.b/2 all landed. Refresh
§20 to reflect actual state with per-phase commit anchors:

- Phase 0 (doc): landed; David review applied per §21
- Phase 1 (pure-function controller): f625cac
  (arborist/substrate/prometheus.py + test_prometheus.py)
- Phase 1.b (gap-close): f9f5ae4 (§14 row 4 Hermes-saturation
  guard, §13 step 11 falsification-fixture proposal, §15 entropy
  + memory gates weight-tunable, ESCALATE > QUARANTINE > REJECT
  priority cascade)
- Phase 2 (advisory audit writes): a786d6d
  (prometheus_audit.py + controller_events sibling table; does
  NOT enter audit_events.event_hash preimage)
- §12 Trigger 2 fired 2026-05-10: divergence variance ratio
  0.575 > 0.5 with N=37 — Phase 1 opening is now empirically
  gate-satisfied per 8999b55
- Phase 3: deliberately NOT landed; replaced with read-only
  dry-run simulator surfacing five design findings (see §22)
- Closed-loop signal: 40 corpus-derived 5F fixtures harvested
  per ff1752c

== #000037 §17.1 — "78 atomic claim-pack records" → 92 ==

§17.1 said "#000031 Phase 2 has 78 atomic claim-pack records
that max out at ANCHOR-WARRANTED". #000031 closed at 92 records
(78 was an interim count during Phase 2). Refresh with the
journey (78 → 92) + AUTOCOUNT-tagged via db-where metric so
future drift fires immediately. Note the resolution context: all
92 now resolve via 74 citation-aliases + 13 term-aliases under
#000031 Phase 2.5 + B-1 + B-2. The unconscious sweep drains the
ANCHOR-WARRANTED → EVIDENCE-WARRANTED promotion backlog
(derivations.proof_blob rows still need computation even on
resolved chains).

== #000025 §11 Status — Phase 1f closure note ==

#000025 file header lists Phase 1a/1b.2/1c/1d/1e but the §11
Status section was frozen at "Open · awaiting go/no-go" — a
two-versions-old prose snapshot. Refresh with the per-phase
landing trail + add a Phase 1f section for the corpus-derived
falsification harvest that ff1752c shipped:

- Phase 1f closes the controller → 5F battery loop fox designed
  in #000037 §3 ("Divergence → candidate falsification fixture")
- bench/scripts/harvest_falsification_proposals.py reads qa.db,
  stratifies top-20-by-cache_key per audit_mode (HYBRID +
  UNGROUNDED), writes the 41-line JSONL pack (1 _meta + 40
  fixtures, AUTOCOUNT-tagged via fixture-rows)
- Every fixture row carries _harvest_meta with cache_key,
  witness_divergence at harvest time, audit_mode_at_harvest,
  harvest_threshold, source_ticket: "#000037 §13 step 11"
- 5F battery exercises them every test run;
  test_5f_falsification_harvested_pack_runs_clean asserts
  error_detection_rate == 1.0 by construction (every harvested
  row IS a falsification)
- Self-amplifying — coverage grows with corpus, not with
  hand-curation

Listed open items (§10.11 / 10.13 / 10.14) preserved verbatim
from file header so the index claim "still open" stays in sync.

== Cookbook: new "Adjacent: live-corpus → bench-fixture
   harvest" section ==

New section in warrant-substrate-cookbook.md between "Re-running
the substrate build" and "References" documenting the harvest
pattern. Three discipline patterns reused from the textbook
substrate noted explicitly:

1. Attribution metadata on every derived artifact (same shape as
   derivations.proof_blob carrying inclusion proofs back to
   source chunks)
2. Determinism via sort-and-cap (same shape as citation-alias
   cascade's "top 5 AND-join then top 3 OR-join" stratification)
3. Pin the metadata contract in tests (same shape as the
   cookbook appendix's discipline pins — silent regression
   becomes loud test failure)

Plus the reusable recipe for any controller emitting Proposal
records: define the dataclass, write a harvester filtering +
stratifying, pin metadata in tests, wire a make target.

References section gets four new entries pointing to #000037,
#000025, the harvest script, and the fixture pack.

== Drift caught + refreshed during this commit ==

While editing the cookbook, the AUTOCOUNT regression test
(from fc5ba50 / 6c6defb) caught two stale counts from fox's
in-flight prometheus work:

- test_prometheus.py: 36 → 42 (fox's uncommitted +6 for
  Phase 1.c sweep weight profile)
- test_prometheus_audit.py: 14 → 17 (fox's uncommitted +3)

Refreshed both inline + in the test/code-density table
(prometheus row test LOC also bumped 804 → 955 to match wc -l).

This is the harness firing exactly as designed — fox's
uncommitted tests changed live state and my doc claims went
stale within minutes. The test message named the file + line
+ claimed-vs-live, refresh was a 60-second turnaround.

== Verification ==

  $ pytest tests/test_doc_counts.py
  3 passed in 2.92s

  $ pytest tests/ -q
  2337 passed, 37 skipped in 107.43s

Hygiene: only docs/ paths staged. fox's in-flight changes to
arborist/qa/runner.py + arborist/substrate/prometheus.py +
tests/test_prometheus.py + tests/test_prometheus_audit.py
remain in their working tree, untouched by this commit.
This commit is contained in:
russell@unturf.com 2026-05-10 18:04:24 -04:00
parent 8999b55c78
commit 3b301267ff
No known key found for this signature in database
3 changed files with 183 additions and 20 deletions

View file

@ -578,10 +578,43 @@ against real workload), §10.14 (threshold handoff to #000012).
## 11. Status
**Open · awaiting go/no-go.** Larger surface than #000023 / #000024
(five sub-batteries vs three / four remaining). Recommended
sequencing: ship Phase 1a in one push (seed fixtures + non-stub
runners), Phase 1b expands.
**As of 2026-05-10: in progress.**
- **Phase 1a** (Function + Finetuning seed): landed.
- **Phase 1b.2** (Falsification curated fixtures): landed.
- **Phase 1c** (5F synthetic side expanded 10 → 30): landed
2026-05-09 per #000025 §10.11 cross-reference.
- **Phase 1d** (synthetic side 30 → 50): landed 2026-05-09.
- **Phase 1e** (falsification motif coverage 50 → 62 covering
every documented failure-motif tag): landed 2026-05-10, closes
§10.12.
- **Phase 1f** (corpus-derived falsification harvest): landed
2026-05-10 in commit `ff1752c`. Closes the controller → battery
loop fox designed in #000037 §3: Phase 1 controller emits
`FalsificationFixtureProposal` records from high-divergence
`providence_cache` rows (witness_divergence ≥ 0.5);
`bench/scripts/harvest_falsification_proposals.py` stratifies
top-20-by-cache_key per audit_mode and writes
`bench/fixtures/5f/falsification-harvested-v1.jsonl`
(<!--AUTOCOUNT:fixture-rows:bench/fixtures/5f/falsification-harvested-v1.jsonl-->41<!--/AUTOCOUNT-->
rows = 1 `_meta` header + 40 fixtures, stratified 20 HYBRID +
20 UNGROUNDED). The 5F battery exercises them every test run;
`test_5f_falsification_harvested_pack_runs_clean` asserts
`error_detection_rate == 1.0` (every harvested row IS a
falsification by construction). Self-amplifying coverage —
the pack grows with the corpus + controller, not with
hand-curation. Every fixture row carries `_harvest_meta` with
source `cache_key`, `witness_divergence` at harvest time,
`audit_mode_at_harvest`, `harvest_threshold`, and
`source_ticket: "#000037 §13 step 11"` for full traceability.
Regenerate via `make bench-5f-harvest`.
**Still open** (carried in file header):
- §10.11 — real shard finetuning chains
- §10.13 — Feedback Loop latency/efficiency calibrated to real workload
- §10.14 — threshold handoff to #000012
Larger surface than #000023 / #000024 (five sub-batteries vs three / four).
The synthesis statement that justifies 5F's existence as a distinct
axis:

View file

@ -999,10 +999,15 @@ These are the right guardrails for the pure-function layer.
### 17.1 Warrant-promotion integration (#000031)
#000031 Phase 2 has 78 atomic claim-pack records that max out at
`ANCHOR-WARRANTED` until cited textbooks are ingested and
`derivations.proof_blob` rows are computed. The unconscious sweep
(§3.1, Target B) drains exactly this backlog. Controller scoring
#000031 closed at <!--AUTOCOUNT:db-where:documents?source_type=claim_pack-->92<!--/AUTOCOUNT-->
atomic claim-pack records (started at 78, reached 92 by 2026-05-09
under Phase 2.5). All 92 records now resolve to at least one
textbook substrate via the 74 citation-aliases (#000041) + 13
term-aliases (#000042) shipped under #000031 Phase 2.5 + B-1 + B-2.
The unconscious sweep (§3.1, Target B) drains the residual
ANCHOR-WARRANTED → EVIDENCE-WARRANTED promotion backlog —
`derivations.proof_blob` rows still need to be computed even on
records that have resolved warrant chains. Controller scoring
includes `WarrantPromotionGain_i` (§4.1) so a branch that turns
many anchor-only claims into evidence-warranted claims is
high-value even if it doesn't move bench scores.
@ -1103,16 +1108,58 @@ the decision to the Phase 2 ticket.
## 20. Status
Phase 0 (this ticket): open · awaiting go/no-go · David review
2026-05-10 applied.
**As of 2026-05-10:** in progress.
When fox approves: this ticket flips to `in progress · Phase 0
landed in commit <sha>` with no code change — the doc itself is
the deliverable.
- **Phase 0** (this ticket): landed; David review (`response_ticket-
000037-...txt`, 2026-05-10 06:37 Asia/Kuala_Lumpur) applied per §21.
- **Phase 1** (pure-function controller): landed in `f625cac`
`arborist/substrate/prometheus.py` (893 LOC) implementing §13
steps 1-9 + 12, §5 numerically-stable softmax fork-selection, §6
eight-class hard-veto order, §7 Kelly-bounded allocation + four
safety guards, §7.1 EMA-smoothed difficulty update, §14 exception-
matrix dispatch, §15 three weight profiles. Test surface:
`tests/test_prometheus.py` (36 tests including the §16.2
named-contract pins).
- **Phase 1.b** (gap-close pass): landed in `f9f5ae4` — §14 row 4
Hermes-saturation guard (`utilization >= budget` → DEFERRED +
HERMES_SATURATED advisory event), §13 step 11 falsification-fixture
proposal emission, §15 entropy + memory gates moved to
weight-tunable `ControllerWeights` fields, veto-class cascade
hardening (ESCALATE > QUARANTINE > REJECT priority pins).
- **Phase 2** (advisory audit writes): landed in `a786d6d`
`arborist/substrate/prometheus_audit.py` (200 LOC) + 54 LOC store
integration. `controller_events` sibling table with three event
kinds (`controller_decision`, `controller_difficulty`,
`controller_budget_allocation`), idempotent on
`(event_kind, body_hash)` UNIQUE constraint. **Does not enter
`audit_events.event_hash` preimage** — audit chain semantics
unaffected by advisory writes. Test surface:
`tests/test_prometheus_audit.py` (14 tests).
- **§12 Trigger 2 fired 2026-05-10**: divergence variance ratio
0.575 > 0.5 with N=37 samples — Phase 1 opening is now backed
by empirical gate satisfaction, not speculative implementation.
- **Phase 3** (sleep-sweep scheduler): **deliberately not landed**.
Replaced with a read-only dry-run simulator
(`bench/scripts/prometheus_sigma_sweep_dryrun.py`) driving the
Phase 1 controller against real shard data; surfaces five design
findings (chunk-size dominates Kelly; capital_cost split needed;
τ_qa per audit_mode; Target B canonical-shape headline; quarantined-
row veto exercises end-to-end). See §22 for details. The dry-run
is the calibration substrate the eventual Phase 3 implementation
will reference.
- **Closed-loop signal**: 40 corpus-derived 5F fixtures harvested
from Phase 1 `FalsificationFixtureProposal` records via
`bench/scripts/harvest_falsification_proposals.py`
`bench/fixtures/5f/falsification-harvested-v1.jsonl` (commit
`ff1752c`). Stratified 20 HYBRID + 20 UNGROUNDED, top-by-cache_key
for determinism. The 5F battery exercises them every test run
with `error_detection_rate == 1.0` (every harvested row IS a
falsification by construction).
Phase 1 opens when §12 trigger fires. Phase 2 (advisory audit
writes) and Phase 3 (unconscious sweep) gate sequentially on
Phase 1 having landed plus their own §12 trigger renewal.
Phase 3 (the actual scheduler) gates on a renewed §12 trigger
plus a Phase 3 ticket. Until then the closed loop runs at
test-suite cadence: Phase 1 emits proposals → harvester writes
fixtures → 5F battery exercises → coverage grows with the corpus.
---

View file

@ -432,6 +432,80 @@ arborist warrant-resolve --use-aliases --write
# + 13-term-alias state (counts as of 2026-05-10)
```
## Adjacent: live-corpus → bench-fixture harvest
The textbook substrate above gives the cookbook a static surface
— 18 hand-curated, license-validated, deterministically ingested
sources. A parallel pattern landed 2026-05-10 in `ff1752c` under
#000037#000025 that does the opposite: **grow bench fixtures
from live corpus state, not hand-curation**. Worth documenting
here because the discipline patterns (attribution metadata,
determinism via stratification, fail-loud regen) carry across
both surfaces.
### Pattern
```
#000037 Phase 1 controller (arborist/substrate/prometheus.py)
emits FalsificationFixtureProposal records when
witness_divergence (n_unverified / n_quotes) >= 0.5
bench/scripts/harvest_falsification_proposals.py reads qa.db,
filters live providence_cache rows, stratifies top-20 per
audit_mode (HYBRID + UNGROUNDED), writes JSONL
bench/fixtures/5f/falsification-harvested-v1.jsonl
(<!--AUTOCOUNT:fixture-rows:bench/fixtures/5f/falsification-harvested-v1.jsonl-->41<!--/AUTOCOUNT--> rows = 1 _meta header + 40 fixtures)
tests/test_bench_batteries.py:test_5f_falsification_harvested_pack_*
exercises every test run; error_detection_rate == 1.0
by construction (every harvested row IS a falsification)
```
### Three discipline patterns reused from the textbook substrate
1. **Attribution metadata on every derived artifact** — same
discipline as `derivations.proof_blob` carrying inclusion
proofs back to source chunks. Each harvested fixture row
carries `_harvest_meta` with `cache_key`,
`witness_divergence` at harvest time, `audit_mode_at_harvest`,
`harvested_from`, `harvest_threshold`, and `source_ticket:
"#000037 §13 step 11"`. Regeneration provenance auditable.
2. **Determinism via sort-and-cap** — same discipline as
citation-alias cascade tuning's "top 5 AND-join then top 3
OR-join" structure. The harvester sorts top-by-cache_key per
audit_mode bucket + caps at 20 per mode. Same `qa.db` state →
byte-identical fixture file across regenerations.
3. **Pin the metadata contract in tests**
`test_5f_falsification_harvested_pack_runs_clean` asserts
every row carries the meta. Same shape as the cookbook
appendix's discipline pins: a future regeneration that drops
attribution fires a test failure, not a silent regression.
### Where to use this pattern
Anywhere a controller emits Proposal records that should become
real fixtures. The recipe:
- Define the Proposal dataclass on the controller side (see
`arborist/substrate/prometheus.py:FalsificationFixtureProposal`).
- Write a harvester script under `bench/scripts/` that reads
the source state (`qa.db`, `~/.arborist/shards/*.db`),
filters + stratifies, and emits a JSONL fixture pack.
- Pin the metadata contract in `tests/test_bench_batteries.py`
(or the equivalent battery test file).
- Wire `make <battery>-harvest` so regen is one command.
The 18-textbook substrate is the static foundation; the
harvested-fixture pattern is how that foundation gets exercised
against current corpus state on every test run. Both live in
this cookbook because the discipline rules — attribution,
determinism, fail-loud — are identical.
---
## References
- `#000031` — surface-ingest cited textbooks
@ -441,6 +515,15 @@ arborist warrant-resolve --use-aliases --write
proprietary candidates: Hilbert-Ackermann 1928, Mendelson,
Enderton, Jech, Goldstein, Barendregt, Stanley, Brualdi, Knuth;
the substrate substitution pattern is the workaround)
- `#000037` — Prometheus-Σ recursive falsification controller;
source of the `FalsificationFixtureProposal` records the
harvest pattern consumes
- `#000025` — 5F battery; sink for the harvested falsification
fixtures (§11 Phase 1f)
- `bench/scripts/harvest_falsification_proposals.py` — harvester
script (266 LOC) reading qa.db + emitting stratified fixtures
- `bench/fixtures/5f/falsification-harvested-v1.jsonl`
current harvested pack (regenerate via `make bench-5f-harvest`)
- `bench/results/full-warrant-resolution-2026-05-10.md` — the
bench journal that closed 84% → 100%
- `bench/fixtures/textbooks/manifest-v1.jsonl` — license-validated
@ -542,7 +625,7 @@ than waiting for bench-time STRICT-rate drift to surface it.
- `tests/test_pi_star_protocol_and_registry.py`<!--AUTOCOUNT:tests:tests/test_pi_star_protocol_and_registry.py-->21<!--/AUTOCOUNT--> tests for
`PiStar` Protocol contract + registry mutation discipline
(no public unregister; `name@version` content-pinned).
- `tests/test_prometheus.py`<!--AUTOCOUNT:tests:tests/test_prometheus.py-->36<!--/AUTOCOUNT--> tests for the Prometheus-Σ
- `tests/test_prometheus.py`<!--AUTOCOUNT:tests:tests/test_prometheus.py-->42<!--/AUTOCOUNT--> tests for the Prometheus-Σ
recursive-falsification controller (#000037 Phase 1, commits
`f625cac` + `f9f5ae4`). Verifier-style discipline (NOT
calculator pattern — it's a state machine, not closed-form
@ -551,7 +634,7 @@ than waiting for bench-time STRICT-rate drift to surface it.
Hermes-saturation guard, §13 step 11 falsification-fixture
proposal, §15 weight-tunable entropy + memory gates,
ESCALATE > QUARANTINE > REJECT priority ordering.
- `tests/test_prometheus_audit.py`<!--AUTOCOUNT:tests:tests/test_prometheus_audit.py-->14<!--/AUTOCOUNT--> tests for the
- `tests/test_prometheus_audit.py`<!--AUTOCOUNT:tests:tests/test_prometheus_audit.py-->17<!--/AUTOCOUNT--> tests for the
`controller_events` sibling table (#000037 Phase 2, commit
`a786d6d`). Pins migration idempotency, no-chain-mutation
invariant (advisory writes never enter `audit_events.event_hash`
@ -594,8 +677,8 @@ than waiting for bench-time STRICT-rate drift to surface it.
| qa/prompts.py | 153 | 207 (<!--AUTOCOUNT:tests:tests/test_qa_prompts.py-->20<!--/AUTOCOUNT--> tests) | 1.35 |
| concepts/extract.py | 288 | 278 (<!--AUTOCOUNT:tests:tests/test_concepts_extract.py-->20<!--/AUTOCOUNT--> tests) | 0.97 |
| textbooks_manifest.py | 236 | 463 (<!--AUTOCOUNT:tests:tests/test_textbooks_manifest.py-->43<!--/AUTOCOUNT--> tests) | 1.96 |
| substrate/prometheus.py | 893 | 804 (<!--AUTOCOUNT:tests:tests/test_prometheus.py-->36<!--/AUTOCOUNT--> tests) | 0.90 |
| substrate/prometheus_audit.py | 200 | 388 (<!--AUTOCOUNT:tests:tests/test_prometheus_audit.py-->14<!--/AUTOCOUNT--> tests) | 1.94 |
| substrate/prometheus.py | 893 | 955 (<!--AUTOCOUNT:tests:tests/test_prometheus.py-->42<!--/AUTOCOUNT--> tests) | 1.07 |
| substrate/prometheus_audit.py | 200 | 477 (<!--AUTOCOUNT:tests:tests/test_prometheus_audit.py-->17<!--/AUTOCOUNT--> tests) | 2.39 |
Pattern: small contract-defining modules (weights, prompts,
warrant_chain) get 1.4-3.6× test LOC because they're foundation;