Skip to content

linestatus.rs carries two security-relevant signed fields and is not in the mutation gate (18 survivors) #126

Description

@avrabe

Found while adding the first-contact floor for REQ-FIRSTCONTACT-001.

What is true today

crates/varve-core/src/linestatus.rs is not in the required cargo mutants gate, and running it over the file leaves 18 surviving mutants:

132 mutants tested: 18 missed, 78 caught, 36 unviable

All 18 are pre-existing — none are in code added for the floor — and they cluster in two functions:

  • known_layers_in_layout_dirs — += → -= / *=, and a doc.line == line match guard replaceable with true
  • LineStatus::check_layer_refs_against — + → *, a referenced == 0 guard replaceable with false, += → *=

A guard replaceable with true is the one worth looking at first: doc.line == line is what stops a validly-signed status for one line being counted for another, and nothing currently distinguishes it from the constant.

Why this file now deserves the gate

When the gate list was drawn, this file carried advisories and yank markers. It now carries two fields that are load-bearing for security decisions, both read from a DSSE-signed document:

  • support-until — the horizon varve status reports and warns on (REQ-SUPPORTUNTIL-001)
  • min-counter — the per-line floor that closes the first-contact rollback window (REQ-FIRSTCONTACT-001)

Both are consumed by code that is gated (rollback.rs, install.rs, both at zero survivors), which makes the current arrangement lopsided: the decision is mutation-tested, and the document the decision is read from is not.

Suggested scope

  1. Kill the 18 survivors — the two match guards first, since those are the ones that make a check vacuous rather than merely arithmetic.
  2. Add -f crates/varve-core/src/linestatus.rs to the varve-core shard in .github/workflows/ci.yml.

Not urgent and nothing is known to be broken. Filed rather than fixed inline because it is a bounded piece of test work with no bearing on the v0.32.0 requirements, and folding it in would have meant the release carrying an unrelated 18-survivor cleanup.

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