epiphany/spikes/editor-toolkit
Levi Neuwirth 775d7baced Pin-13 schema amendment 2: an inherited provider must actually name something
Appends to d76287c, which is left untouched.

That amendment justified IntegrationOwnership::Inherited's provider field
as a claim "a reader can check against the dependency graph rather than
take on trust" -- and then accepted "" and "   " for it, in Rust and
through serde alike. An unnamed provider is not a weaker claim of
inheritance. It is the same claim with its evidence removed, and it renders
as Inherited in every table it reaches.

Fixed the way this crate already fixed the identical hole in CheckOutcome's
reason strings: a checked constructor, plus a hand-written Deserialize over
a private wire shadow so the JSON path runs the same check. A hand-edited
report is exactly where an unnamed provider would arrive from, so guarding
only the Rust constructor would have guarded the path nobody takes.

Seven tests. Six fail when the check is reverted to `if false`, verified by
doing it and restoring: the constructor on empty and on whitespace-only,
the deserialize path on both, the same empty provider nested inside a whole
adapter row (the shape a real report carries it in, not just the enum
alone), and the accepting case for a real provider. CandidateOwned keeps
deserializing unchanged.

No candidate report changes: both candidates already name real providers,
so this closes a hole rather than correcting a value.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RSX4zSLgKvtiXaPjnMqLGz
2026-07-30 19:02:46 -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 2: an inherited provider must actually name something 2026-07-30 19:02:46 -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