Topic · variable drift

Variable drift

Gist

Variable drift is when a requirement's variables: list and its FRETish sentence name different facts. Proof runs proof audit --check variable_drift. A green gaps report is not agreement. Jama still authors.

proof audit --check variable_drift

Keep FRETish if the sentence already compiles. Keep Jama if it already holds the shall. Neither one joins the list to the sentence on that requirement.

01 · The list that did not match the sentence

Two statements. Every other gate reads only one of them.

You can keep SW-REQ-001 and still have a FRETish that constrains six names the list omits, while the list holds two the sentence no longer uses.

The check walks requirements that have both a FRETish sentence and a non-empty variables: list. It warns in two cases: a name the sentence constrains is missing from the list, or a name in the list is stale. The parser is the oracle. proof compile "<fretish>" --format json reports the true set under .semantics.variables. This hop calls the same parser. An empty list makes no claim, so it cannot disagree. A freeform or unparseable sentence yields no set to compare. Those are skipped. proof validate and variables_declared own those failure modes.

The example that keeps showing up is a uuid requirement whose FRETish uses uuid_generate_requested and uuid_output_nonempty, while the list still names uuid_operation_requested. proof validate --preflight reads the sentence and ignores the list. proof gaps reads the list, but per component, not per requirement. Nothing joined them, so the two could disagree with every gate green. One corpus approved 159 requirements in that state. proof gaps specs/software uuid printed "No gaps found · 100%".

Stale entries are the more dangerous half. Before this check they also masked orphan analysis: a dead declaration named by a stale list entry counted as referenced and never surfaced as declared_unused. Align the list, then rerun orphans. The compile hop stays on FRETish. The assumption hop stays on requirements assumptions.

proof audit --check variable_drift --verbose
proof compile "the uuid shall always satisfy uuid_generate_requested => uuid_output_nonempty" --format json
proof workflow check --stage spec --verbose
proof gaps specs/software --check orphans

Inspect the named id before you edit. Drop stale entries. Add the ones the sentence actually constrains. Do not empty the list to skip the stamp. An empty list is not agreement. It is a skipped hop.

02 · The exhibit

Same SW-REQ. A green gaps report, or this stamp.

SW-REQ-001 still exists. Click the tabs.

The list

  • Ask did gaps report 100%
  • List uuid_operation_requested
  • Why gaps reads the component, not the sentence
Stamp green

This hop

No variable_drift JSON. Missing and stale never ran.

No stamp

The list

Keep the list. Keep FRETish. That is not this hop.

Keep the sentence

Proof

  • Ask do the list and the sentence agree
  • Out SW-REQ-001 missing uuid_generate_requested, stale uuid_operation_requested
List/sentence disagree

Same SW-REQ. A green gaps report, or this stamp. Click the tabs.

Surface What they do What Proof does What we lose
FRETish compile The sentence parses. Preflight is green. Join that sentence to the authored list on the same requirement. We do not rewrite the sentence. An empty list is skipped, not failed.
Gaps / orphans Component-level unused or undeclared names. Per-requirement list vs parser set. Then you rerun orphans. A stale list can still mask declared_unused until you drop it.
Requirements assumptions Owner and review date on a boundary claim. Whether two statements about the variable model agree. Not that hop. See requirements assumptions.
Jama The authoring programme. Reviews if you put them there. Warn the merge when the list and the FRETish disagree. Not Jama's V&V. Jama still authors. We have not run a frozen Jama pack.

The teaching graph is still one SW-REQ next to its list and its sentence. Run the check. Read the id. Drop stale names. Add the ones the parser reports. Then rerun orphans. Do not empty the list to clear the stamp.

proof workflow check --stage spec --verbose
proof compile "the uuid shall always satisfy uuid_generate_requested => uuid_output_nonempty" --format json
proof audit --check variable_drift --verbose
proof gaps specs/software --check orphans

The FRETish hop stays on FRETish. Jama still authors. Proof vs Jama.

03 · The honest loss

Proof names the disagreement. It does not rewrite the list.

A green variable_drift is list/sentence agreement on eligible requirements. It is not a proof of the Go. Jama still authors.

The check skips an empty list and an unparseable sentence. Those are not clean. They are out of this hop. It does not judge whether the FRETish is the one you meant. It does not run the solver. Aligning the list can reveal orphans the stale names were hiding; that is a second hop, not this one. We have not scored this graph against a frozen Jama pack or a second human's V&V judgment. The loss is named, not scored.

The compile hop stays on FRETish. The engagement stays on software correctness audit. Jama still authors.

04 · Nearby questions

What people type next.

What is variable drift? Same question. Same URL.

Is this variable orphans? No. Orphans are declared-unused and undeclared-used on the component model. This hop is list vs sentence on one requirement. Stale list entries can mask orphans until you drop them.

Is this FRETish? No. That hop is whether the sentence compiles. This hop is whether the list matches the compiled set. See FRETish.

Is this requirements assumptions? No. That hop is owner and date on a boundary. See requirements assumptions.

Is Proof a Jama alternative for the shall? No. Jama still authors. Proof vs Jama.