Skip to content

The residual field carries every honesty disclosure in this repo and is not in any schema #197

Description

@avrabe

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.

Consequences today:

  • Nothing can require it. An accepted feature 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.
  • 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

  1. 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.
  2. 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.

Refs: FEAT-097

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions