Topic · obligation suppression rationale

Obligation suppression rationale

Gist

Obligation suppression rationale is whether every obligation_suppressions reason is non-empty after trim and at least catalog.baseline.require_reason_min_chars long (default 32). A suppress with TODO looks like a decision and carries none. Proof runs proof audit --check obligation_suppression_rationale. Jama still authors.

proof audit --check obligation_suppression_rationale

Keep Jama if it already authors the shall. Keep a filled suppress cell if you typed one. Neither one asks whether the reason is still a sentence, or only four characters of placeholder.

01 · The silent placeholder

A suppress with TODO is not a recorded decision.

A filled Jama cell never asks whether the reason is still a sentence. The same hole as a four-character placeholder that CI never reads.

The check is obligation_suppression_rationale. It walks every ObligationSuppression on every requirement (STK, SYS, SW, INT). A suppression says the catalog class does not apply here. The reason is the evidence that the decision was deliberate. Empty after trim fails even if the project minimum is 1. Shorter than the minimum fails. Default minimum is 32 characters, set in proof.yaml.

Severity is warning, not error. Two failure shapes. The reason is empty or whitespace. The trimmed reason is shorter than require_reason_min_chars. An empty suppressions list is a silent pass: there is nothing to measure. The hop does not ask whether the sentence is true. A copied 40-character reason from another requirement still passes here.

proof audit --check obligation_suppression_rationale
# STK-REQ-014 obligation_suppressions: rate_limit_respected
# reason: TODO
# fail: STK-REQ-014: suppression "rate_limit_respected":
#       rationale length 4 < required 32 chars
# silent placeholder: the suppress exists. the decision does not

obligation_baseline only asks whether a tag-matched class was listed, suppressed, or delegated. This hop asks whether that suppress still carries a reason. A covering SYS-REQ on the parent list stays on obligation_completeness. Required triples stay on obligation_evidence_complete. A named owner stays on obligation_delegation_resolves. A separate reviewer at error severity is not this hop.

Fix by replacing the suppress with one that carries a complete reason. Unsuppress first if the old row is a placeholder. Do not pad TODO with spaces until it counts 32. Do not copy a reason from another requirement because it already passed length.

proof req edit STK-REQ-014 --unsuppress-obligation rate_limit_respected --confirm-unsuppress
proof req edit STK-REQ-014 --suppress-obligation rate_limit_respected \
  --reason "internal-only behind ZTNA gateway with platform-level rate limits"

02 · The exhibit

Same STK-REQ-014 / rate_limit_respected. Silent placeholder, or this hop.

One stakeholder requirement. One catalog class. Reason is TODO. No reviewer asked. Click the tabs.

The row

  • Ask does STK-REQ-014 still suppress rate_limit_respected
  • Stamp the shall is in Jama. the suppress cell says TODO
  • Why a filled cell never asks whether the reason is still a sentence
Note present

This hop

Nobody asked whether the reason still has 32 characters after trim. A placeholder is not a recorded decision. The finding kind is this hop.

Reason unread

The row

Keep the Jama shall. Keep the suppress cell. That is not this hop.

Keep the record

Proof

  • Ask is the trimmed reason at least 32 characters
  • Out STK-REQ-014 suppresses rate_limit_respected with rationale length 4
Silent placeholder counted

Same STK-REQ-014 / rate_limit_respected. Silent placeholder, or this hop. Click the tabs.

Surface What they do What Proof does What we lose
Jama cell A shall, and a suppress note if you type it. A warning the audit can name next to the short reason. Not Jama's V&V. Jama still authors. We have not run a frozen Jama pack.
obligation_baseline Whether a tag-matched class was listed, suppressed, or delegated. Whether that suppress still carries a reason of the required length. Not the silent-omission hop. See obligation baseline.
obligation_delegation_resolves Whether a named owner still carries the class. Whether a suppress reason is still a sentence. Not whether a pointer resolves. Not the silent-pointer hop. See obligation delegation resolves.
obligation_completeness Whether each listed class has a covering SYS-REQ. Whether a suppress reason meets the floor. Not whether a child covers it. Not the covering-child hop. See obligation completeness.
obligation_evidence_complete Whether required evidence kinds exist on the covering req. Whether the reason is long enough. Not whether the triples exist. Not the triple hop. See obligation evidence complete.

The teaching graph is still one suppress whose reason is TODO. Unsuppress, then write a complete reason. Do not treat a Jama note as this hop. Do not treat a 32-character copy as proof that the class does not apply.

proof audit --check obligation_suppression_rationale --verbose
proof catalog show rate_limit_respected
proof audit --check obligation_baseline --verbose

The silent-omission hop stays on obligation baseline. The silent-pointer hop stays on obligation delegation resolves. The silent-drop hop stays on obligation decomposition complete. The covering-child hop stays on obligation completeness. The triple hop stays on obligation evidence complete. The silent-no-op hop stays on obligation enforcement backed. Jama still authors. Proof vs Jama.

03 · The honest loss

Proof names a short reason. It does not write the suppress, and it does not prove the Go.

A quiet proof audit --check obligation_suppression_rationale can still mean nobody suppressed anything. Jama still authors.

The hop does not write a reason. It does not unsuppress. An empty suppressions list is a silent pass. Severity is warning, not error. Whitespace-only is empty. Length is counted on the trimmed string, not on meaning. A copied sentence that already meets 32 characters still passes here. The hop does not ask a second reviewer; that is a different check at error severity. --skip-level L0 skips the hop. Opt-out is skip, never pass. The hop does not prove that the class is truly inapplicable. The hop does not prove the Go. We have not scored this floor against a frozen Jama pack. The loss is named, not scored.

The child-file hop stays on requirements decomposition. The engagement stays on software correctness audit. Jama still authors.

04 · Nearby questions

What people type next.

What is obligation suppression rationale? Same question. Same URL.

Is this a suppress listing? No. Listing the class as suppressed is obligation baseline. This hop is whether the reason on that suppress is still a sentence.

Is this obligation baseline? No. That hop is whether a tag-matched class was listed, suppressed, or delegated. This hop is whether the suppress reason meets the floor. See obligation baseline.

Is this obligation delegation resolves? No. That hop is whether a named owner still carries the class. A suppress says the class does not apply. See obligation delegation resolves.

Is this obligation decomposition complete? No. That hop is whether a listed class flowed to a satisfying child. See obligation decomposition complete.

Is this obligation completeness? No. That hop is whether each listed class has a covering SYS-REQ. See obligation completeness.

Is this obligation evidence complete? No. That hop is whether required evidence kinds exist. A suppress with a 32-character reason and no triples still passes here. See obligation evidence complete.

Is this obligation enforcement backed? No. That hop is whether a listed class has a signal or any evidence. See obligation enforcement backed.

Does a green hop prove the reason is true? No. The hop counts length after trim. It does not execute a test. It does not prove the shall.

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