Adopt the validation-rules discipline that every public type is either validated or excluded, enforced mechanically rather than by review. A new gate enumerates the public surface from the compiler symbol graph and fails the build, naming the type, if any public type is missing from the coverage manifest or any manifest entry is no longer public. scripts/validation-coverage.tsv classifies all 58 public types: the value models with the mapping-key-uniqueness runtime invariant are validated, and the namespaces, closed sum types, data-transfer values, error types, and engine machinery are excluded with a one-line reason each. The gate runs in check-all.sh and CI; a planted unclassified type was confirmed to fail it. This is the coverage-first phase of moving the validation layer to the type-directed Validation idiom; the framework backing the validated entries, the de-duplication of the Tagged validator machinery, and the exhaustive tests follow.
84 lines
5.4 KiB
Plaintext
84 lines
5.4 KiB
Plaintext
# Public-type validation coverage manifest (validation-rules.md).
|
|
# Every public type in the PureYAML target is classified exactly once.
|
|
# Columns (tab-separated): <fully.qualified.Type> <validated|excluded> <one-line reason>
|
|
# `validated`: carries a runtime invariant the type system does not enforce; backed by a
|
|
# Validation<Subject> in the framework phase.
|
|
# `excluded`: a caseless namespace, a closed sum type whose illegal states are unrepresentable,
|
|
# a pure data-transfer type, an error value, or engine/machinery that is not a validated subject.
|
|
# scripts/check-validation-coverage.sh fails the build if a public type is missing here or a line
|
|
# here is no longer public.
|
|
|
|
# --- namespaces (caseless enums) ---
|
|
PureYAML excluded caseless namespace; holds no instances or state
|
|
PureYAML.Decoding excluded caseless namespace; holds no instances or state
|
|
PureYAML.Emitting excluded caseless namespace; holds no instances or state
|
|
PureYAML.Encoding excluded caseless namespace; holds no instances or state
|
|
PureYAML.Model excluded caseless namespace; holds no instances or state
|
|
PureYAML.Parsing excluded caseless namespace; holds no instances or state
|
|
PureYAML.Stream excluded caseless namespace; holds no instances or state
|
|
PureYAML.Tagged excluded caseless namespace; holds no instances or state
|
|
PureYAML.Validation excluded caseless namespace; holds no instances or state
|
|
|
|
# --- model ---
|
|
PureYAML.Model.Value validated core YAML value; mapping-key uniqueness and merge/alias shape are runtime invariants
|
|
PureYAML.Model.Mapping validated mapping keys must be unique within a mapping
|
|
PureYAML.Model.Pair excluded data-transfer key/value pair; no invariant beyond its components
|
|
PureYAML.Model.Key excluded closed sum type (string/sequence/mapping); illegal states unrepresentable
|
|
|
|
# --- stream ---
|
|
PureYAML.Stream.Document excluded wraps a validated Model.Value plus an index; no own invariant
|
|
PureYAML.Stream.Issue excluded diagnostic data-transfer type
|
|
PureYAML.Stream.Issue.Collection excluded error aggregate; data-transfer
|
|
PureYAML.Stream.Result excluded diagnostic result data-transfer type
|
|
|
|
# --- parsing ---
|
|
PureYAML.Parsing.ParseError excluded error enum; cases are unrepresentable-illegal, carries diagnostics only
|
|
PureYAML.Parsing.Parser excluded parsing engine; produces values, is not itself a validated subject
|
|
|
|
# --- emitting ---
|
|
PureYAML.Emitting.Dumper excluded emitter engine; not a validated subject
|
|
PureYAML.Emitting.Options excluded emitter configuration; no cross-field invariant
|
|
PureYAML.Emitting.CollectionStyle excluded closed enum; illegal states unrepresentable
|
|
PureYAML.Emitting.ScalarStyle excluded closed enum; illegal states unrepresentable
|
|
|
|
# --- decoding / encoding (Codable machinery) ---
|
|
PureYAML.Decoding.Decoder excluded Codable decoding machinery; not a validated subject
|
|
PureYAML.Decoding.Error excluded error enum; data-transfer
|
|
PureYAML.Encoding.Encoder excluded Codable encoding machinery; not a validated subject
|
|
PureYAML.Encoding.Error excluded error enum; data-transfer
|
|
|
|
# --- tagged node subsystem ---
|
|
PureYAML.Tagged.Node validated tagged node tree; mapping-key uniqueness is a runtime invariant
|
|
PureYAML.Tagged.Mapping validated tagged mapping keys must be unique
|
|
PureYAML.Tagged.Pair excluded data-transfer key/value pair
|
|
PureYAML.Tagged.Scalar excluded data-transfer scalar (value + tag)
|
|
PureYAML.Tagged.Sequence excluded data-transfer ordered nodes
|
|
PureYAML.Tagged.Tag excluded data-transfer tag identifier
|
|
PureYAML.Tagged.NodeKind excluded closed enum; illegal states unrepresentable
|
|
PureYAML.Tagged.Document excluded wraps a validated Tagged.Node
|
|
PureYAML.Tagged.Context excluded construction context data-transfer type
|
|
PureYAML.Tagged.ConstructionContext excluded construction context data-transfer type
|
|
PureYAML.Tagged.ConstructionError excluded error enum; data-transfer
|
|
PureYAML.Tagged.Constructor excluded tag-construction engine; not a validated subject
|
|
PureYAML.Tagged.Rule excluded validation machinery; duplicates Validation.Rule, slated for de-dup (principle 10)
|
|
PureYAML.Tagged.Validator excluded validation machinery; duplicates Validation.Validator, slated for de-dup (principle 10)
|
|
|
|
# --- validation framework's own types ---
|
|
PureYAML.Validation.Validator excluded validation machinery; not a validated subject
|
|
PureYAML.Validation.Rule excluded the Validation<Subject> analog; a rule type, not a subject
|
|
PureYAML.Validation.Context excluded validation context passed to checks; not a subject
|
|
PureYAML.Validation.Issue excluded validation error data-transfer type
|
|
PureYAML.Validation.Issue.Collection excluded error aggregate; data-transfer
|
|
PureYAML.Validation.Result excluded validation result data-transfer type
|
|
PureYAML.Validation.Severity excluded closed enum; illegal states unrepresentable
|
|
PureYAML.Validation.Path excluded coding-path data-transfer type
|
|
PureYAML.Validation.Path.Component excluded coding-path element; closed enum
|
|
PureYAML.Validation.Report excluded diagnostic report data-transfer type
|
|
PureYAML.Validation.ReportError excluded error type; data-transfer
|
|
PureYAML.Validation.SourceReport excluded diagnostic report data-transfer type
|
|
PureYAML.Validation.Source excluded source descriptor data-transfer type
|
|
PureYAML.Validation.BatchReport excluded diagnostic report data-transfer type
|
|
PureYAML.Validation.Diagnostic excluded diagnostic data-transfer type
|
|
PureYAML.Validation.DiagnosticKind excluded closed enum; illegal states unrepresentable
|
|
PureYAML.Validation.PreflightScanner excluded pre-parse scanner engine; not a validated subject
|