epiphany/spikes/editor-toolkit
Levi Neuwirth 93deb18ed6 Record the check-5 asymmetry, and refuse to guess its size
Packet 2A closed with an open question its criterion cannot answer. Check 5
(accessibility) is disqualifying and scored PASS/FAIL, and the recipe pins it
per platform so it does not encode one candidate's stack — but a neutral
criterion does not make the cost neutral. Two candidates can both read PASS
having paid different prices, and the cell has nowhere to say so.

Ruled 2026-07-29: check 5 stays candidate-neutral PASS/FAIL and is not
adjusted for who had further to walk; Packet 2B measures the cost on a
separate row; the final ruling weighs that cost without retroactively
relabelling a PASS.

My first draft of this entry stated the asymmetry as "C1 inherits an
accessibility tree, C2 must build one", and that overstates both sides. C1
inherits AccessKit and its platform bridge, but NOT correct semantic nodes for
custom-rendered text — a score canvas draws glyphs egui knows nothing about,
so the nodes carrying the source string, role and bounds are C1's to create
either way. Inheriting the bridge is not inheriting the semantics. C2 inherits
no accessibility integration from vello, but is free to integrate AccessKit or
another bridge, so it does not face a from-scratch stack; what it owns is the
additional integration and wiring. The delta is real, narrower than
"has it / doesn't have it", and concentrated in wiring rather than in the
semantic node construction both candidates must do regardless.

So 2B reports observed facts at that granularity — inherited vs candidate-owned
per part of the path, dependencies added over the Round 1 baseline, which
platform adapters are actually implemented (an adapter not built is scope not
covered, and is reported as such rather than absorbed into a PASS), the
integration each candidate writes itself, and the resulting maintenance
surface. It does not presume the magnitude: writing down a guess at the gap
and then confirming it is the same failure as choosing a tolerance after
seeing a candidate's output.

The general rule, for later rungs: an eligibility gate answers "may this
candidate proceed", not "what will this candidate cost". Merging the two into
one cell loses the second, and the second is the one the project lives with
after the ruling.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RSX4zSLgKvtiXaPjnMqLGz
2026-07-29 19:18:52 -04:00
..
a11y-verifier T4 round 0: iced is eliminated, and the probe that cleared it proved nothing 2026-07-28 19:01:51 -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-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 2A: the candidate-neutral text fixtures, emitter, and differential 2026-07-29 18:40:16 -04:00
Cargo.toml Packet 2A: the candidate-neutral text fixtures, emitter, and differential 2026-07-29 18:40:16 -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