#000046 Phase 1 — HARD live-path Falsification tier (first below-ceiling pack)
Closes the "everything is at rate 1.0 so fork_score's bench-Δ terms are inert" gap the #000025 §10.14 calibration surfaced — at least on the 5F/falsification axis. bench/fixtures/5f/falsification-hard-v1.jsonl — 12 near-misses, each a FALSE/unsupported claim whose correct verdict is UNGROUNDED (recorded in expected_reason). 8 of 12 are over-grounded by arborist.qa.verify.verify_quotes at HEAD — its paraphrase token-coverage strategy returns STRICT_PARAPHRASE, its entity-proximity strategy returns HYBRID_ENTITY, both matching on incidental overlap (shared entities/numbers, the same key terms stated in the opposite direction) — so those tasks fail by design; the other 4 the verifier handles correctly. Rate at HEAD = 4/12 = 0.333, stable (verify_quotes is pure-lexical / deterministic). Built around the pre-documented gap 5f-fal-live-003. make bench-5f-falsification-hard runs the pack; make bench-fork-baseline-hard pins it to bench/results/baseline-falsification-hard.json. Both targets `|| true` past the runner's nonzero-on-failures exit (8 fixtures fail by design; the JSON is still written). tests/test_bench_batteries.py — test_5f_falsification_hard_pack_below_ceiling (pins rate 4/12, source=live, every fixture asserts UNGROUNDED, the 8 fails are over-grounds not abstentions) + test_fork_score_positive_gamma_5f_on_hard_falsification_improvement (the worked example: fork_score(parent={5f/falsification: 1/3}, child={5f/falsification: 1.0}) → gamma*Delta5f ≈ +0.133 > 0, verdict ACCEPT, no regression flags — the bench Δ-rate carrying signal it can't carry while every canonical pack is at ceiling). NOT in `make bench-5f` / `make bench-5s5t5f` / `make bench-fork-baseline` / `runner --all` — the hard pack is a separate, deliberately-failing artifact pinned on its own. #000046 flipped to "in progress · Phase 1 landed"; closure pending an actual verify_quotes tightening that lifts the rate (a separate, larger task). ticket-000012 §8 §4 + TICKETS.md row updated. Full suite: 2314 passed, 28 skipped.
This commit is contained in:
parent
a53afa6148
commit
01d697f961
7 changed files with 333 additions and 16 deletions
22
Makefile
22
Makefile
|
|
@ -35,6 +35,7 @@ SEARCH_Q ?= computer
|
|||
recrawl-check bench-qa bench-qa-smoke bench-qa-progressive-and \
|
||||
prometheus-trigger-probe bench-5f-threshold-calibration \
|
||||
bench-5f-selfmodel-snapshot bench-5f-finetuning-shardchain \
|
||||
bench-5f-falsification-hard bench-fork-baseline-hard \
|
||||
bootstrap-math clean clean-db clean-data help \
|
||||
textbooks-summary textbooks-urls fetch-textbooks textbooks-stats textbooks-verify \
|
||||
crawl-textbooks crawl-textbooks-stats textbook textbook-list
|
||||
|
|
@ -490,6 +491,27 @@ bench-5f-falsification-live: bootstrap ## 5F Falsification via real arborist.qa.
|
|||
|
||||
bench-5f-live: bench-5f-formulate-live bench-5f-feedback-loop-live bench-5f-function-live bench-5f-finetuning-live bench-5f-falsification-live ## all 5F Phase-1b.2 live wire-ups
|
||||
|
||||
# #000046 Phase 1 — HARD live-path Falsification tier. Every fixture is
|
||||
# a near-miss the correct verdict is UNGROUNDED on; verify_quotes
|
||||
# over-grounds 8 of 12 today → rate 4/12 = 0.333 at HEAD (a real
|
||||
# below-ceiling baseline). NOT part of bench-5f / bench-fork-baseline.
|
||||
# bench-fork-baseline-hard pins the below-ceiling rate so a future
|
||||
# verify_quotes tightening shows up as a positive gamma*Delta5f term.
|
||||
FORK_PARENT_HARD ?= bench/results/baseline-falsification-hard.json
|
||||
# The hard pack has its expected failures (8/12 over-grounds), so the
|
||||
# runner exits 1 — that's the below-ceiling baseline working as
|
||||
# designed, not a build error. `|| true` keeps the make target green;
|
||||
# the JSON / report is written regardless (the --out write precedes
|
||||
# the runner's nonzero-on-failures exit).
|
||||
bench-5f-falsification-hard: bootstrap ## #000046 — HARD Falsification near-miss pack (rate < 1.0 at HEAD by design)
|
||||
PYTHONUNBUFFERED=1 $(PY) -m bench.batteries.runner --battery 5f --sub falsification \
|
||||
--fixtures bench/fixtures/5f/falsification-hard-v1.jsonl || true
|
||||
bench-fork-baseline-hard: bootstrap ## #000046 — pin the below-ceiling hard-Falsification rate as a ForkScore parent
|
||||
@mkdir -p bench/results
|
||||
PYTHONUNBUFFERED=1 $(PY) -m bench.batteries.runner --battery 5f --sub falsification \
|
||||
--fixtures bench/fixtures/5f/falsification-hard-v1.jsonl --out $(FORK_PARENT_HARD) || true
|
||||
@echo ">> below-ceiling parent pinned: $(FORK_PARENT_HARD) (8/12 over-grounds expected → runner exits 1; the JSON is written)"
|
||||
|
||||
# #000025 §10.11 — persistent SelfModel-chain lineage. Each run of
|
||||
# bench-5f-selfmodel-snapshot runs the 5S/5T/5F embedded packs and
|
||||
# appends ONE chained snapshot (capability claims = the battery
|
||||
|
|
|
|||
13
bench/fixtures/5f/falsification-hard-v1.jsonl
Normal file
13
bench/fixtures/5f/falsification-hard-v1.jsonl
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{"_meta": {"battery": "5f", "sub_battery": "falsification", "version": "v1", "task_count": 12, "notes": "#000046 — HARD live-path Falsification tier. Every fixture is a near-miss: the claim is FALSE / unsupported, so the correct verdict is UNGROUNDED, and that is what `expected_reason` records. 8 of 12 are currently OVER-GROUNDED by arborist.qa.verify.verify_quotes — its paraphrase token-coverage strategy or entity-proximity strategy matches on incidental overlap (shared entities, shared numbers, the same key terms stated in the opposite direction) and returns STRICT_PARAPHRASE / HYBRID_ENTITY instead of UNGROUNDED — so those tasks FAIL at HEAD by design. The other 4 the verifier handles correctly. Rate at HEAD = 4/12 = 0.333... — a real below-ceiling baseline. A tightening of verify_quotes (stricter entity strategy / higher paraphrase coverage threshold / wider title-relevance check) lifts the rate toward 1.0 → a positive gamma*Delta5f term in fork_score. verify_quotes is pure-lexical / deterministic, so the rate is stable. NOT part of `make bench-5f`, `make bench-5s5t5f`, `bench-fork-baseline`, or `runner --all`; pinned separately via `make bench-fork-baseline-hard`. Pre-documented gap this builds around: 5f-fal-live-003 in falsification-live-v1.jsonl. See ticket #000046."}}
|
||||
{"id": "5f-fal-hard-001", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "Insulin was discovered by Alexander Fleming.", "context": "Penicillin was discovered by Alexander Fleming in 1928.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "OVER-GROUND at HEAD: HYBRID_ENTITY — substance swapped, but entity strategy matches on shared 'Alexander Fleming'."}
|
||||
{"id": "5f-fal-hard-002", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "The Eiffel Tower is in Berlin.", "context": "The Eiffel Tower is in Paris, designed by Gustave Eiffel.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "OVER-GROUND at HEAD: HYBRID_ENTITY — city swapped, entity strategy matches on 'Eiffel Tower'/'Eiffel'."}
|
||||
{"id": "5f-fal-hard-003", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "Mercury is the largest planet in the Solar System.", "context": "Jupiter is the largest planet in the Solar System; Mercury is the smallest.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "OVER-GROUND at HEAD: STRICT_PARAPHRASE — verifier claims STRICT on a false statement; paraphrase token-coverage matches 'largest planet in the Solar System'."}
|
||||
{"id": "5f-fal-hard-004", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "Water boils at 50 degrees Celsius at sea level.", "context": "Water boils at 100 degrees Celsius at sea level.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "OVER-GROUND at HEAD: STRICT_PARAPHRASE — number swapped (50 vs 100), but the rest of the sentence token-covers."}
|
||||
{"id": "5f-fal-hard-005", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "Albert Einstein developed the theory of evolution.", "context": "Albert Einstein developed the theory of relativity; Charles Darwin developed evolution.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "OVER-GROUND at HEAD: STRICT_PARAPHRASE — 'evolution' vs 'relativity' swapped; 'Albert Einstein developed the theory of' token-covers + 'evolution' appears in context (attributed to Darwin)."}
|
||||
{"id": "5f-fal-hard-006", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "The French Revolution began in 1889.", "context": "The French Revolution began in 1789, with the storming of the Bastille.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "OVER-GROUND at HEAD: HYBRID_ENTITY — year off by a century (1889 vs 1789); entity strategy matches on 'French Revolution'."}
|
||||
{"id": "5f-fal-hard-007", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "The speed of light is approximately 300 kilometers per second.", "context": "The speed of light is approximately 300,000 kilometers per second in a vacuum.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "OVER-GROUND at HEAD: STRICT_PARAPHRASE — magnitude wrong by 1000x (300 vs 300,000); 'the speed of light is approximately 300 kilometers per second' token-covers."}
|
||||
{"id": "5f-fal-hard-008", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "The Titanic sank in the Pacific Ocean.", "context": "The Titanic sank in the North Atlantic Ocean in 1912.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "OVER-GROUND at HEAD: HYBRID_ENTITY — ocean swapped (Pacific vs North Atlantic); entity strategy matches on 'Titanic'."}
|
||||
{"id": "5f-fal-hard-009", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "Shakespeare wrote War and Peace.", "context": "Tolstoy wrote War and Peace; Shakespeare wrote Hamlet.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "Correctly UNGROUNDED at HEAD — verifier does NOT over-ground this near-miss. PASSES today; kept as headroom marker (a regression that started over-grounding this would drop the rate)."}
|
||||
{"id": "5f-fal-hard-010", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "The mitochondria is the powerhouse of the nucleus.", "context": "The mitochondria is the powerhouse of the cell.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "Correctly UNGROUNDED at HEAD — 'nucleus' vs 'cell' swap is caught. PASSES today."}
|
||||
{"id": "5f-fal-hard-011", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "The capital of Australia is Sydney.", "context": "The capital of Australia is Canberra; Sydney is the largest city.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "Correctly UNGROUNDED at HEAD. PASSES today."}
|
||||
{"id": "5f-fal-hard-012", "battery": "5f", "sub_battery": "falsification", "version": "v1", "carrier": "providence_record", "domain": "claim_lattice", "pi_star_ref": "claim-lattice@v1", "answer_text": "Gold has the chemical symbol Ag.", "context": "Gold has the chemical symbol Au; silver has the symbol Ag.", "expected_reason": "UNGROUNDED", "verifier_method_root": "verify_quotes-v1", "expected": "pass", "note": "Correctly UNGROUNDED at HEAD — 'Ag' vs 'Au' swap is caught. PASSES today."}
|
||||
177
bench/results/baseline-falsification-hard.json
Normal file
177
bench/results/baseline-falsification-hard.json
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
{
|
||||
"schema_version": "bench-result-v1",
|
||||
"results": [
|
||||
{
|
||||
"battery": "5f",
|
||||
"sub_battery": "falsification",
|
||||
"fixture_path": "bench/fixtures/5f/falsification-hard-v1.jsonl",
|
||||
"fixture_digest": "6da602f624be3618d893201f4c47b8c3b411b7c3b5865f49655dc95f46968c43",
|
||||
"pass_count": 4,
|
||||
"fail_count": 8,
|
||||
"metrics": {
|
||||
"error_detection_rate": 0.3333333333333333
|
||||
},
|
||||
"per_task": [
|
||||
{
|
||||
"task_id": "5f-fal-hard-001",
|
||||
"passed": false,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"HYBRID_ENTITY"
|
||||
],
|
||||
"detected": false,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-002",
|
||||
"passed": false,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"HYBRID_ENTITY"
|
||||
],
|
||||
"detected": false,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-003",
|
||||
"passed": false,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"STRICT_PARAPHRASE"
|
||||
],
|
||||
"detected": false,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-004",
|
||||
"passed": false,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"STRICT_PARAPHRASE"
|
||||
],
|
||||
"detected": false,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-005",
|
||||
"passed": false,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"STRICT_PARAPHRASE"
|
||||
],
|
||||
"detected": false,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-006",
|
||||
"passed": false,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"HYBRID_ENTITY"
|
||||
],
|
||||
"detected": false,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-007",
|
||||
"passed": false,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"STRICT_PARAPHRASE"
|
||||
],
|
||||
"detected": false,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-008",
|
||||
"passed": false,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"HYBRID_ENTITY",
|
||||
"UNVERIFIED_QUOTE"
|
||||
],
|
||||
"detected": false,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-009",
|
||||
"passed": true,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"UNGROUNDED"
|
||||
],
|
||||
"detected": true,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-010",
|
||||
"passed": true,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"UNGROUNDED"
|
||||
],
|
||||
"detected": true,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-011",
|
||||
"passed": true,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"UNGROUNDED"
|
||||
],
|
||||
"detected": true,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task_id": "5f-fal-hard-012",
|
||||
"passed": true,
|
||||
"detail": {
|
||||
"source": "live",
|
||||
"expected_reason": "UNGROUNDED",
|
||||
"observed_violations": [
|
||||
"UNGROUNDED"
|
||||
],
|
||||
"detected": true,
|
||||
"verifier_method_root": "verify_quotes-v1"
|
||||
}
|
||||
}
|
||||
],
|
||||
"runtime_digest": "da5203214469cc5e682dd8c9edfcb0c95a758e1ba78567b4577b2c598c307951",
|
||||
"timestamp": 1778501548
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -93,7 +93,7 @@ Newest first. Update on every open/close.
|
|||
| ID | Title | Status | Opened | Directive |
|
||||
|----------|------------------------------------------------|-----------------------|------------|-----------|
|
||||
| #000047 | ForkScore `_delta_*` aggregator (mean vs max vs sum) | open · awaiting go/no-go · doc-only; parks until #000046 produces a below-ceiling baseline to bench against. Recommends: parameterize `delta_aggregator` (default `mean`), don't change the default without #000046 data. #000012-revision / #000025 §10.14 follow-up | 2026-05-11 | — |
|
||||
| #000046 | Harder 5S/5T/5F fixture tier (below-ceiling baselines) | open · awaiting go/no-go · doc-only; the bench Δ-rate terms in `fork_score` are inert while every pack runs at rate 1.0. Recommends a narrow live-path hard tier starting with 5F Falsification (`verify_quotes` near-misses). #000025 §10.14 follow-up; gates #000047 | 2026-05-11 | — |
|
||||
| #000046 | Harder 5S/5T/5F fixture tier (below-ceiling baselines) | in progress · **Phase 1 landed 2026-05-11** — `falsification-hard-v1.jsonl` (12 near-misses, rate 4/12 at HEAD; `verify_quotes` over-grounds 8 via paraphrase/entity matching), `make bench-5f-falsification-hard` / `bench-fork-baseline-hard`, worked-example test (`fork_score` γ·Δ5f → positive on a lift to 1.0). Closure pending an actual `verify_quotes` tightening that lifts the rate; Phase 2 (extend to Formulate / a retrieval-backed sub) optional. #000025 §10.14 follow-up; gates #000047 | 2026-05-11 | — |
|
||||
| #000045 | Prometheus-Σ Phase 3 sleep-sweep scheduler (gating ticket) | open · doc-only scaffold 2026-05-10; pins 8 governance parameters + 4 retrigger gates; opens implementation only after one retrigger fires | 2026-05-10 | — |
|
||||
| #000044 | AUTOCOUNT doc-drift discipline | closed · landed across `fc5ba50` / `03c0f6a` / `6c6defb` / `f5dbfab` / `3b30126` 2026-05-10 (mechanism + 4 metrics + 54 tags across 7 doc files; harness catches drift at test time, refresh is 60-second turnaround) | 2026-05-10 | — |
|
||||
| #000043 | Empirical tightening of T3 bound constants (#000036 Phase 2) | open · awaiting go/no-go (parks until v7 deployment surfaces measurement data) | 2026-05-10 | — |
|
||||
|
|
|
|||
|
|
@ -567,7 +567,13 @@ protocol must account for:
|
|||
is carried by the efficiency bonuses (`adaptation_efficiency` /
|
||||
`feedback_efficiency`) + the non-bench terms
|
||||
(`selfmodel_calibration_gain`, `audit_completeness`,
|
||||
`validator_diversity`, …), not by bench Δ-rate. Adding the
|
||||
harder tier is tracked as **#000046** (a #000025 follow-up,
|
||||
recommends a narrow live-path hard tier starting with 5F
|
||||
Falsification), not a #000012 blocker.
|
||||
`validator_diversity`, …), not by bench Δ-rate. The harder tier
|
||||
is tracked as **#000046** (a #000025 follow-up); its **Phase 1
|
||||
landed 2026-05-11** — `bench/fixtures/5f/falsification-hard-v1.jsonl`
|
||||
(12 near-misses, rate 4/12 ≈ 0.333 at HEAD, `verify_quotes`
|
||||
over-grounds 8) is the first below-ceiling pack, with a
|
||||
worked-example test showing `fork_score`'s `γ·Δ5f` going positive
|
||||
on a lift to 1.0. So the bench Δ-rate *can* now carry signal on
|
||||
the 5F/falsification axis; closing #000046 needs an actual
|
||||
`verify_quotes` tightening to lift the rate. Not a #000012
|
||||
blocker either way.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
# Ticket #000046 — Harder 5S/5T/5F fixture tier (below-ceiling baselines)
|
||||
|
||||
**Status:** open · awaiting go/no-go
|
||||
**Status:** in progress · **Phase 1 landed 2026-05-11** (Option A,
|
||||
narrow start — 5F Falsification hard pack: `bench/fixtures/5f/
|
||||
falsification-hard-v1.jsonl`, rate 4/12 ≈ 0.333 at HEAD, stable;
|
||||
`make bench-5f-falsification-hard` / `make bench-fork-baseline-hard`;
|
||||
worked-example test shows `fork_score`'s γ·Δ5f going positive on a
|
||||
lift to 1.0). Closure pending an actual `verify_quotes` tightening
|
||||
that lifts the rate (a separate, larger task) — see §5 + §7.
|
||||
**Opened:** 2026-05-11
|
||||
**Scope:** Give the 5S/5T/5F bench packs *headroom* — a fixture tier
|
||||
the runtime does **not** pass at rate 1.0 — so the ForkScore Δ-rate
|
||||
|
|
@ -155,21 +161,62 @@ testable only once there's a below-ceiling baseline to bench against.
|
|||
|
||||
## 5. Status
|
||||
|
||||
**Open · awaiting go/no-go.** Doc-only proposal. Opens when fox picks
|
||||
a strategy (recommendation: Option A / Falsification first). The
|
||||
implementation commit chain it gates: (1) author the first hard pack,
|
||||
(2) confirm rate < 1.0 and stable + add the pinning test, (3) `make
|
||||
bench-fork-baseline-hard`, (4) demonstrate a planted surface
|
||||
improvement lifting the rate + a positive ForkScore Δ term, (5)
|
||||
extend to the next sub-battery if the loop holds. Closure: ≥ 1 hard
|
||||
pack live with a below-ceiling stable rate AND a worked example
|
||||
showing the ForkScore bench-Δ term going positive on a real
|
||||
improvement.
|
||||
**In progress — Phase 1 landed 2026-05-11 (Option A, 5F Falsification
|
||||
hard pack).** Receipt:
|
||||
|
||||
- **Hard pack:** `bench/fixtures/5f/falsification-hard-v1.jsonl` — 12
|
||||
near-misses, each a *false / unsupported* claim whose correct
|
||||
verdict is `UNGROUNDED` (recorded in `expected_reason`). 8 of 12
|
||||
are over-grounded by `arborist.qa.verify.verify_quotes` at HEAD
|
||||
(paraphrase token-coverage → `STRICT_PARAPHRASE`, entity-proximity →
|
||||
`HYBRID_ENTITY`, on incidental overlap) so those tasks fail by
|
||||
design; 4 the verifier handles correctly. **Rate at HEAD = 4/12 =
|
||||
0.333…** — a stable below-ceiling baseline (`verify_quotes` is
|
||||
pure-lexical / deterministic). Built around the pre-documented gap
|
||||
`5f-fal-live-003`.
|
||||
- **Make targets:** `make bench-5f-falsification-hard` (runs the pack;
|
||||
the runner exits 1 because 8 fixtures fail by design — the targets
|
||||
`|| true` past that, the JSON is still written), `make
|
||||
bench-fork-baseline-hard` → `bench/results/baseline-falsification-hard.json`
|
||||
(pins the below-ceiling rate as a ForkScore parent artifact).
|
||||
- **Tests:** `tests/test_bench_batteries.py` —
|
||||
`test_5f_falsification_hard_pack_below_ceiling` (pins rate 4/12,
|
||||
source=live, every fixture asserts `UNGROUNDED`, the 8 fails are
|
||||
over-grounds not abstentions) + `test_fork_score_positive_gamma_5f_on_hard_falsification_improvement`
|
||||
(the worked example: `fork_score(parent={5f/falsification: 1/3},
|
||||
child={5f/falsification: 1.0})` → `γ·Δ5f ≈ +0.133 > 0`, verdict
|
||||
ACCEPT, no regression flags — the bench Δ-rate carrying signal it
|
||||
can't carry while every canonical pack is at ceiling).
|
||||
- **Not in** `make bench-5f` / `make bench-5s5t5f` / `make
|
||||
bench-fork-baseline` / `runner --all` — the hard pack is a
|
||||
separate, deliberately-failing artifact pinned on its own.
|
||||
|
||||
**Still open (the actual closure):** Phase 1 *proved the loop* with a
|
||||
synthetic child at rate 1.0. Closing the ticket needs a **real
|
||||
`verify_quotes` tightening** that lifts the hard-pack rate above
|
||||
0.333 (stricter entity strategy / higher paraphrase coverage
|
||||
threshold / wider title-relevance check) — a separate, larger task
|
||||
(it touches the live verifier surface, not the bench). When that
|
||||
lands, this ticket closes with the rate-improvement → ForkScore Δ
|
||||
demonstrated on an *actual* change, and Phase 2 (extend the hard
|
||||
tier to Formulate / a retrieval-backed 5S/5T sub) opens if the loop
|
||||
holds. Until then: Phase 1 stands, the hard pack pins the gap, and
|
||||
the next-step menu is (a) tighten `verify_quotes`, or (b) extend the
|
||||
hard tier to Formulate now without waiting for the verifier work.
|
||||
|
||||
---
|
||||
|
||||
## 6. References
|
||||
|
||||
- `bench/fixtures/5f/falsification-hard-v1.jsonl` — the Phase-1 hard
|
||||
pack (12 near-misses, rate 4/12 at HEAD). `make
|
||||
bench-5f-falsification-hard` runs it; `make bench-fork-baseline-hard`
|
||||
pins it to `bench/results/baseline-falsification-hard.json`.
|
||||
- `tests/test_bench_batteries.py` —
|
||||
`test_5f_falsification_hard_pack_below_ceiling` (pins the rate +
|
||||
the over-ground/abstention distinction) +
|
||||
`test_fork_score_positive_gamma_5f_on_hard_falsification_improvement`
|
||||
(the worked example).
|
||||
- `bench/scripts/fivef_threshold_calibration.py` +
|
||||
`bench/results/5f-threshold-calibration-2026-05-11.md` — the
|
||||
calibration that surfaced the ceiling-saturation problem.
|
||||
|
|
|
|||
|
|
@ -672,6 +672,58 @@ def test_5f_falsification_embedded_path_still_works():
|
|||
assert t.detail["source"] == "embedded"
|
||||
|
||||
|
||||
# --- #000046 Phase 1 — HARD live-path Falsification tier ----------
|
||||
|
||||
|
||||
def test_5f_falsification_hard_pack_below_ceiling():
|
||||
"""The hard pack is a deliberate below-ceiling baseline: 12
|
||||
near-misses whose correct verdict is UNGROUNDED, 8 of which
|
||||
verify_quotes over-grounds at HEAD → rate 4/12. verify_quotes is
|
||||
deterministic, so this is stable; if it shifts, the pinned value
|
||||
here fires (loud signal — either the verifier got better/worse, or
|
||||
the pack drifted)."""
|
||||
res = b_5f.run_falsification(F5F / "falsification-hard-v1.jsonl")
|
||||
assert res.pass_count == 4
|
||||
assert res.fail_count == 8
|
||||
assert res.metrics["error_detection_rate"] == pytest.approx(4 / 12)
|
||||
# All tasks route the live verifier; every fixture asserts UNGROUNDED.
|
||||
for t in res.per_task:
|
||||
assert t.detail["source"] == "live"
|
||||
assert t.detail["expected_reason"] == "UNGROUNDED"
|
||||
# The 8 that fail do so by over-grounding (STRICT_/HYBRID_), never
|
||||
# by the verifier saying UNGROUNDED — i.e. these are real
|
||||
# over-ground misses, not "the verifier abstained".
|
||||
for t in res.per_task:
|
||||
if not t.passed:
|
||||
obs = set(t.detail["observed_violations"])
|
||||
assert "UNGROUNDED" not in obs
|
||||
assert any(o.startswith(("STRICT_", "HYBRID_")) for o in obs)
|
||||
|
||||
|
||||
def test_fork_score_positive_gamma_5f_on_hard_falsification_improvement():
|
||||
"""Worked example for #000046 — the loop: with a below-ceiling
|
||||
parent (5f/falsification at the hard-pack rate) and a child that
|
||||
lifts it to 1.0, fork_score's γ·Δ5f term goes strictly positive
|
||||
and the verdict is ACCEPT. This is what a real verify_quotes
|
||||
tightening would produce — the bench Δ-rate carrying signal it
|
||||
can't carry while every pack is at ceiling."""
|
||||
from arborist.substrate.fork_score import fork_score
|
||||
|
||||
hard_rate = b_5f.run_falsification(
|
||||
F5F / "falsification-hard-v1.jsonl"
|
||||
).metrics["error_detection_rate"]
|
||||
assert hard_rate < 1.0
|
||||
parent = {"5s": {}, "5t": {}, "5f": {"falsification": {"error_detection_rate": hard_rate}}}
|
||||
child = {"5s": {}, "5t": {}, "5f": {"falsification": {"error_detection_rate": 1.0}}}
|
||||
sf = fork_score(parent, child)
|
||||
assert sf.breakdown["gamma_x_delta_5f"] > 0.0
|
||||
# Δ5f = (1.0 - hard_rate) averaged over the 5 5F subs (the other 4
|
||||
# subs absent ⇒ 0 - 0 = 0). With hard_rate ≈ 1/3 → Δ5f ≈ 0.133.
|
||||
assert sf.breakdown["gamma_x_delta_5f"] == pytest.approx((1.0 - hard_rate) / 5)
|
||||
assert sf.verdict == "ACCEPT"
|
||||
assert not any(f.startswith(("REGRESSION_", "NEG_INF_")) for f in sf.flags)
|
||||
|
||||
|
||||
def test_5f_falsification_covers_every_documented_motif():
|
||||
"""#000025 §10.12: Falsification fixtures must cover every documented
|
||||
failure-motif tag. Pins motif-coverage of the falsification-v1.jsonl
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue