Declare residual in a local schema so a typo stops reading as the real field - #200
Merged
Conversation
…eal field `residual` is where this repo puts every honesty disclosure -- what a feature does NOT do, what an assessor must 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 live in it. The `dev` schema never declared it, so all 18 uses were reported as possibly-a-typo (scry#197). THE POINT IS NOT THE SUPPRESSED DIAGNOSTICS. An undeclared field makes a TYPO INDISTINGUISHABLE FROM THE CORRECT SPELLING. Measured on an isolated probe carrying three artifacts -- `residual`, `residuals`, `residual_notes`: without this schema : all THREE reported identically with this schema : only the two typos reported A misspelled disclosure is silently a different field, i.e. silently absent, which is precisely the failure `residual` exists to prevent. FIELD MERGE VERIFIED BEFORE WRITING, NOT ASSUMED. #197 flagged the open question -- does naming an existing artifact-type in a local schema ADD to it or REPLACE it? Replacing would drop `acceptance-criteria` from every feature in the repo. Probed on an isolated project: it MERGES. `rivet schema show feature` afterwards lists phase, acceptance-criteria, baseline AND residual. Controlled in both directions -- disabling the schema brings the INFO back, enabling it removes it. Measured on this repo: INFO drops 32 -> 14, WARN unchanged at 188. It removes exactly these diagnostics and nothing else. DELIBERATELY NOT `required: true`, even for `status: accepted`. A required field is satisfiable with the word "none", so it would gate on the presence of a string rather than on disclosure -- a checkbox that reads as rigour and enforces nothing, which is this repo's documented dominant failure class. FEAT-088's rule 2 shape (declared AND justified) is what would be worth having and is not expressible as a field constraint. NOTE, unrelated and pre-existing: `rivet schema validate` reports two errors on the safety-case preset (`goal-has-support` and `goal-has-context` name required-backlinks `supported-by` / `scoped-by` that are not known link types). Verified identical with this schema disabled, so it is not introduced here. Investigating separately -- those are the two rules sitting at 40%. Refs: FEAT-088 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc
📐 rivet artifact deltaPR: #200 Base SHA: Validationhead — `rivet validate` resultbase — `rivet validate` result (for comparison)Artifact stats
full stats — headDiff (base → head)AADL model — headPosted by the |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
residualis where this repo puts every honesty disclosure — what a feature does not do, what an assessor must 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 live in it.The
devschema never declared it, so all 18 uses were reported as possibly-a-typo (#197).The point is not the suppressed diagnostics
An undeclared field makes a typo indistinguishable from the correct spelling. Measured on an isolated probe carrying three artifacts —
residual,residuals,residual_notes:A misspelled disclosure is silently a different field — i.e. silently absent — which is precisely the failure
residualexists to prevent.Field merge verified, not assumed
#197 flagged the open question: does naming an existing
artifact-typein a local schema add to it or replace it? Replacing would dropacceptance-criteriafrom every feature in the repo.Probed on an isolated project: it merges.
rivet schema show featureafterwards listsphase,acceptance-criteria,baselineandresidual. Controlled both directions — disabling the schema brings the INFO back, enabling it removes it.On this repo: INFO 32 → 14, WARN unchanged at 188. It removes exactly these diagnostics and nothing else.
Deliberately not
required: trueEven for
status: accepted. A required field is satisfiable with the word"none", so it would gate on the presence of a string rather than on disclosure — a checkbox that reads as rigour and enforces nothing, which is this repo's documented dominant failure class. FEAT-088's rule 2 shape (declared and justified) is what would be worth having, and it is not expressible as a field constraint.Unrelated, pre-existing, and being investigated separately
rivet schema validatereports two errors on the safety-case preset:Verified identical with this schema disabled, so not introduced here. Noting it because those are the two rules sitting at 40% — the ones the standing brief points at.
Refs: FEAT-088 · scry#197
🤖 Generated with Claude Code
https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc