# R1.4 — RAB SPEC v0.1.1 / Scenario-S1 gap table (2026-06-10)

> **Pre-registered**: PR #766 (commit `ae27955` / squash `8a35dee`,
> `docs/research/r1-4-preregistration-2026-06-10.md`).
> Adapters, CLI, artifacts in this PR.
>
> **Headline = the gap table** (SPEC §5 / §6.5 / pre-reg §2.1). This
> doc is NOT a JAMES-wins announcement; it's the first 3-SUT data point
> on what audit-native vs default-logging looks like on a benchmark
> whose spec was frozen before measurement.

## Gap table

| SUT | AC overall | AC INGEST | AC UPDATE | AC SUPERSEDE | AC DELETE | AC ANSWER | RF-exact | RF-graded | RF-cost (s/1k) | PC | n_events |
|---|---|---|---|---|---|---|---|---|---|---|---|
| **reference** (self-verify gate) | **1.000** | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | **1.000** | 1.000 | small | **1.000** | 80 |
| **JAMES** (audit-native) | **1.000** | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | **1.000** | 1.000 | small | **1.000** | 80 |
| **Baseline-0** (floor) | **0.275** | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 | **0.000** | 0.000 | 0.0 | **0.000** | 40 |

Raw artifacts (this PR's `reports/rab/`):

* `reference-S1-20260610T093809Z.{result.json,log.jsonl,mapping.json}`
* `james-S1-20260610T093820Z.{result.json,log.jsonl,mapping.json}`
* `baseline0-S1-20260610T093817Z.{result.json,log.jsonl,mapping.json}`

All three result.json files carry `spec=v0.1.1`,
`scenario_sha=efb2811b…`, `sut_version=8a35dee…`, and per-SUT
`log_sha` / `mapping_table_sha` (SPEC §4 re-verification triple).

## What the gap shows

* **AC INGEST = 1.0 for all three.** A vanilla quickstart's "indexed
  document X" log records ARE sufficient to match INGEST ops under the
  Baseline-0 mapping table. The floor isn't zero — it's "the obvious
  thing logged, nothing else".

* **AC UPDATE / SUPERSEDE / DELETE / ANSWER = 0 for Baseline-0.** A
  vanilla logger doesn't distinguish update from ingest, has no
  supersede taxonomy, often doesn't log deletes, and emits no ANSWER
  event. RAB AC drops to 27.5% accordingly. This is the unfilled half
  the SPEC §6 honesty clauses pin: **default logging covers add-doc;
  audit-native covers the lifecycle**.

* **RF-exact / RF-graded = 0 for Baseline-0.** Vanilla logs carry the
  string `"Indexed document nb-doc-001"`, not the document title or
  body. So a replay-from-log-only function has nothing to fold and
  returns the empty state — every checkpoint mismatches. This is the
  bolt-on tax SPEC §2.2 measures: tracing-as-strings ≠ event-sourced
  log.

* **PC = 0 for Baseline-0.** No `parent_id`. The SPEC §2.3 chain
  (ANSWER → SYNTH → RETRIEVE → INGEST|SUPERSEDE) cannot be walked.

* **JAMES = Reference on this scenario.** Both adapters emit RAB
  canonical events natively (mapping table is the identity map), so
  both hit 1.0×3. The reference adapter is a perfectly-audited
  in-memory SUT specifically constructed for self-verification; JAMES
  matches it on the same SPEC, on the same scenario, while exercising
  the **real** `core.lifecycle.replay_audit.emit_lifecycle_event`
  code path that ships in production (cross-verified by
  `test_james_supersede_emits_lifecycle_event` and
  `test_james_reconstruct_graph_at_agrees_on_supersede_chain`).

## Honest tier (pre-reg §2.5)

⭐⭐ **scenario-S1 audit-native vs floor gap confirmed** (deterministic,
re-runnable from artifacts).

* The pre-reg ceiling for ⭐⭐⭐ = "cross-scenario confirmation" remains
  ungated until R1.5+ ships additional scenarios.
* JAMES = reference on S1 is **expected** per SPEC §6.5 ("the benchmark
  author's system scoring well is expected and is not the headline").
  The audit-native vs floor delta IS the headline.
* `engine_mode=false` for the JAMES run (deterministic token-overlap
  retrieval). A `--engine` mode (real `ReasoningEngine` LLM call)
  exists in the CLI for future measurements; not used here because
  it doesn't change AC/RF/PC structure on S1 — the audit shape is
  what RAB measures.

## What this is NOT

(reaffirming pre-reg §4 prohibitions before publication)

1. Not a compliance certification. RAB operationalises Art. 10/12/19
   concepts (SPEC §6.3); it does not certify regulatory compliance.
2. Not a JAMES-wins press piece (SPEC §6.5 / pre-reg §4.5).
3. Not auto-evidence for the mid-June joint piece
   (`feedback_eval_cycle_vs_collab_arc_separation` — 4-question gate
   must be passed first).
4. Not a Baseline-0 improvement project: Baseline-0's score IS the
   floor. Adding tracing / OTel → that's Baseline-1, a future SUT.
5. Not novel architecture work: ActiveGraph (arXiv 2605.21997) is the
   independent co-invention; **the contribution is the benchmark**, not
   the audit-native runtime (R1.0 prior-art finding,
   `project_r1_replayable_audit_benchmark`).

## Where this slots in

```
R1.0 prior art + EU AI Act anchors        ✅
R1.1 SPEC v0.1.1 FROZEN                   ✅
R1.2 scenario-S1 fixture                  ✅
R1.3 driver + scorer + reference adapter  ✅ (14 tests)
R1.4 JAMES adapter + Baseline-0 + measurement + gap table ✅ THIS PR (31 tests)
R1.5 Zenodo release (spec + scenario + scorer + scores + artifacts)
R1.6 replication invites (separate collab scope)
```

## Replication recipe

```
git checkout <commit>
python -m pytest tests/test_rab_benchmark.py tests/test_rab_baseline0.py \
    tests/test_rab_james_adapter.py        # 31 tests green
python scripts/research/rab_run.py --sut reference
python scripts/research/rab_run.py --sut baseline0
python scripts/research/rab_run.py --sut james
# inspect reports/rab/*.result.json — numbers must match
# the artifacts in this PR bit-for-bit (SPEC §4 determinism).
```

The driver/scorer is deterministic over a fixed set of artifacts
(per `test_scoring_is_deterministic`). Re-running adapters yields
new timestamps but identical AC/RF/PC numbers.
