You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found while adding a residual to FEAT-033 (#196). rivet validate --explain says:
INFO: [FEAT-033] field 'residual' is not defined in schema for type 'feature'
help: ... remove the 'residual' field, or rename it to a declared field
[acceptance-criteria, baseline, phase].
Measured: 17 features carry a fields.residual, and all 17 emit that INFO — 17 of the 31 INFO diagnostics rivet validate produces.
Why this matters more than the noise
residual is not a stray field. It is where this repo puts every honesty disclosure: what a feature does not do, what was measured and found wanting, what an assessor should not conclude from a green. FEAT-091's trailer limits, FEAT-093's ruleset-reset gap, FEAT-096's undetected asymmetric case, FEAT-097's four vacuous 100%s — all of it lives in a field the schema does not know exists.
Nothing validates it. A typo (residuals:, residual_notes:) is silently a different field — indistinguishable from absence.
The correct-by-house-pattern artifact is permanently nagged as possibly-a-typo, which trains the reader to skip INFOs.
What needs deciding
Can a local schema extension add a field to a built-in type?schemas/research-ext.yaml adds link types and explicitly notes it does so "without redeclaring any existing artifact type" — link types are documented as unioned by name. Whether fields merge the same way, or whether declaring feature locally replaces the built-in type, is unknown and needs testing before anything is written.
If it can, should residual be required for status: accepted features? That is the interesting question and the reason this is not just noise cleanup. A required residual is a mechanical honesty gate — but it is also trivially satisfiable with "none", so it would need FEAT-088's rule 2 shape (declared and meaningful) to be worth anything, and that may not be expressible in a schema.
Deliberately not acted on in #196 — the answer to (1) is unknown and (2) is a design decision, so bundling either into a PR about ASPICE scope would have been scope creep with an uncertain outcome.
Found while adding a residual to FEAT-033 (#196).
rivet validate --explainsays:Measured: 17 features carry a
fields.residual, and all 17 emit that INFO — 17 of the 31 INFO diagnosticsrivet validateproduces.Why this matters more than the noise
residualis not a stray field. It is where this repo puts every honesty disclosure: what a feature does not do, what was measured and found wanting, what an assessor should not conclude from a green. FEAT-091's trailer limits, FEAT-093's ruleset-reset gap, FEAT-096's undetected asymmetric case, FEAT-097's four vacuous 100%s — all of it lives in a field the schema does not know exists.Consequences today:
acceptedfeature with no residual validates identically to one with a thorough residual. FEAT-033 shipped with none for months, and that is precisely the defect FEAT-097: four coverage rules report 100% over an empty population #196 is fixing.residuals:,residual_notes:) is silently a different field — indistinguishable from absence.What needs deciding
schemas/research-ext.yamladds link types and explicitly notes it does so "without redeclaring any existing artifact type" — link types are documented as unioned by name. Whetherfieldsmerge the same way, or whether declaringfeaturelocally replaces the built-in type, is unknown and needs testing before anything is written.residualbe required forstatus: acceptedfeatures? That is the interesting question and the reason this is not just noise cleanup. A required residual is a mechanical honesty gate — but it is also trivially satisfiable with "none", so it would need FEAT-088's rule 2 shape (declared and meaningful) to be worth anything, and that may not be expressible in a schema.Deliberately not acted on in #196 — the answer to (1) is unknown and (2) is a design decision, so bundling either into a PR about ASPICE scope would have been scope creep with an uncertain outcome.
Refs: FEAT-097