Expand description
Events track, slice 3c (#980): the cross-build schema registry’s
reconciliation logic — verifying a project’s live event shapes against a
committed bynk.schema.lock, keyed by qualified event name, storing each
event’s field shape (name, type, whether the field has a default) and its
current schema version. Every build reconciles the live shape against the
stored one and either leaves the version alone, bumps it (a purely
additive change), or fails the build (a change that isn’t safely
additive).
P4.0 (#1113, [DECISION A]): the document shape itself — SchemaRegistry,
EventEntry, FieldShape, and their parse/serialize — moved to
bynk_project::schema_registry; bynk-emit/src/project/schema_registry.rs
re-exports it there, unchanged, for every existing schema_registry::X
call site in project.rs.
P5.3 (design/tracks/semantics-in-the-checker.md §6): reconcile and
its helpers moved here from that same bynk-emit module — category 1 of
bynk-check/src/analysis.rs’s own seven-category residual-gap accounting
(“gap in name only” at the time: reconcile only ever ran under
SchemaLock::On, and the analyse path always passed SchemaLock::Off, so
relocating it changed nothing observable — see that module’s doc for why
R3.5 still required the move; #2081 later gave the analyse path the
caller’s lock). bynk-emit’s run_checks is now this function’s caller, not its
owner, the same way P4.0/P4.1 turned project.rs into a caller of
bynk-project/bynk-check throughout.
P5.5 (§6, §3.2’s “eighth site”): parse_or_diagnose moved here too —
bynk.project.schema_registry_corrupt, a real CompileError::new
construction the seven-category accounting above didn’t cover (it isn’t a
whole-project check, it’s the read step immediately before
reconcile), found and scoped by name in §3.2 rather than left for a
future sweep to rediscover. bynk_project::schema_registry::parse itself
— the document-shape parse — stays in bynk-project (P4.0); only the
diagnostic construction on its error path moves, the same split
reconcile’s own move drew between document shape and checking.
Structs§
- Agent
Versions - The two facts the emitter needs to stamp and check an agent’s stored
state (state-migrations S1, #2211 Decision B): the class’s lock
version, and the oldest stored version it reads forward without a migration step. - Migration
Step - What the emitter needs to run one
migrate from Nstep (#2224 Decision D).
Functions§
- parse_
or_ diagnose - Parse
bynk.schema.lock’s content, diagnosing a corrupt file asbynk.project.schema_registry_corruptrather than handing the caller a bareStringto wrap itself.existing/project_rootare exactlybynk_project::schema_registry::parse’s own parameters —None(no lock file yet) always succeeds with a fresh, empty registry. - reconcile
- Reconcile every event across every unit against the given registry.
Returns the updated registry document and the effective schema version
for each event, keyed the same way as the document itself
(
<unit>.<EventName>). Diagnostics for a mismatched@schema(N)or a non-additive change are pushed ontoerrors. - reconcile_
agents - Reconcile every agent class across every unit against
existing, writing each class’s entry intoupdated(the documentreconcilealready rebuilt for events). Diagnostics go ontoerrors; a refused change keeps the class’s stored entry untouched, as a refused event change does.