epiphany/spikes/editor-toolkit
Levi Neuwirth d76287cd68 Pin-13 schema amendment: adapter rows carry typed integration ownership
Append-only amendment to 694d135. The oracle, the verifier, the scoring
rule, the PASS results and eligibility are all untouched; this changes only
what a cost row is able to say.

The first pair of real candidate reports proved the schema could not carry
what Packet 2B was chartered to record. Both candidates reached AT-SPI
through AccessKit -- C1 via the integration bundled with eframe, C2 via
wiring it wrote by hand -- and they reported that as opposite rows:

  C1:  NotBuilt     accesskit-0.24   "no separate AccessKit-native readback was built"
  C2:  Implemented  accesskit-0.24   "the in-process tree this binary constructs by hand"

C1's row was false as written. The AccessKit path was present and
exercised; every one of its five check-5 readbacks travelled it. NotBuilt
means uncovered scope, and that scope was covered.

Relabelling it Implemented would have fixed the falsehood and still lost
the measurement, because "inherited or candidate-owned?" would have
survived only as prose in notes -- which is precisely how the two
candidates diverged in the first place. So AdapterStatus::Implemented now
requires a typed integration_ownership: Inherited { provider } or
CandidateOwned. Inherited names its provider so the claim can be checked
against the dependency graph instead of taken on trust. NotBuilt keeps no
ownership field at all: a platform reached by any route is Implemented.

Inheriting an integration is not inheriting the semantics drawn on top of
it. A candidate that inherits a bridge still writes the accessible nodes
for whatever it painted itself, and that work is counted under
ReportPart::AccessibilityTreeConstruction, not here -- which is what makes
the two rows comparable rather than a single "has accessibility" flag.

Five tests, each of which fails if its guard is removed: the two-candidate
comparison the old schema could not express, Inherited carrying a
checkable provider, an Implemented row missing integration_ownership
refused at deserialize, NotBuilt refusing an ownership field, and a
round trip that must not alter a row.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RSX4zSLgKvtiXaPjnMqLGz
2026-07-30 18:46:52 -04:00
..
a11y-verifier Packet 2B apparatus: the neutral candidatekit and the check-5 oracle 2026-07-30 15:49:07 -04:00
probe-egui T4 round 0: iced is eliminated, and the probe that cleared it proved nothing 2026-07-28 19:01:51 -04:00
probe-iced T4 round 0: iced is eliminated, and the probe that cleared it proved nothing 2026-07-28 19:01:51 -04:00
probe-vello T4 round 0: iced is eliminated, and the probe that cleared it proved nothing 2026-07-28 19:01:51 -04:00
round0-evidence T4 round 0: iced is eliminated, and the probe that cleared it proved nothing 2026-07-28 19:01:51 -04:00
round1-candidates T4 round 1: both candidates render the compound paths, and the oracle now refuses to be edited into agreement 2026-07-29 10:59:49 -04:00
round1-evidence T4 round 1 record: both candidates PASS, and the two carry-forwards that outlive the verdict 2026-07-29 11:10:05 -04:00
round1-oracle T4 round 1: the precommitted fill oracle, and nothing has rendered against it 2026-07-28 21:25:07 -04:00
round2-a11y-oracle Packet 2B apparatus: the neutral candidatekit and the check-5 oracle 2026-07-30 15:49:07 -04:00
round2-candidatekit Pin-13 schema amendment: adapter rows carry typed integration ownership 2026-07-30 18:46:52 -04:00
round2-diff Packet 2A: the candidate-neutral text fixtures, emitter, and differential 2026-07-29 18:40:16 -04:00
round2-reference Packet 2A: the candidate-neutral text fixtures, emitter, and differential 2026-07-29 18:40:16 -04:00
round2-svgref Packet 2A: the candidate-neutral text fixtures, emitter, and differential 2026-07-29 18:40:16 -04:00
round2-textkit Packet 2A: the candidate-neutral text fixtures, emitter, and differential 2026-07-29 18:40:16 -04:00
.gitignore T4 round 0: iced is eliminated, and the probe that cleared it proved nothing 2026-07-28 19:01:51 -04:00
Cargo.lock Packet 2B apparatus: the neutral candidatekit and the check-5 oracle 2026-07-30 15:49:07 -04:00
Cargo.toml Packet 2B apparatus: the neutral candidatekit and the check-5 oracle 2026-07-30 15:49:07 -04:00
DECISIONS.md Record the check-5 asymmetry, and refuse to guess its size 2026-07-29 19:18:52 -04:00
FIXTURE_RECIPE.md T4 pin 7: the fixture recipe is approved, and the spike tree opens with it 2026-07-28 17:50:12 -04:00
ROUND2_TEXT_RECIPE.md Round 2 recipe: the precommitted stand-in, oracles, and differential 2026-07-29 18:39:52 -04:00