Topic · obligation delegation resolves

Obligation delegation resolves

Gist

Obligation delegation resolves is whether every obligation_delegations entry names a catalog class, a living target that still lists that class, a 32-character reason, and an acyclic chain. A prose note that “the parent owns it” is not a pointer. Proof runs proof audit --check obligation_delegation_resolves. Jama still authors.

proof audit --check obligation_delegation_resolves

Keep Jama if it already authors the shall. Keep a suppress if the class does not apply here. Neither one asks whether SW-REQ-200 still points at a SYS-REQ-100 that carries invariant_preservation.

01 · The silent pointer

A delegated_to id that nobody owns is not coverage.

A filled Jama cell never asks whether the parent still lists the class you parked on it. The same hole as a present-but-false suppress.

The check is obligation_delegation_resolves. It walks every obligation_delegations entry. A delegation says the class still applies here, and the real owner is another requirement. A suppression says the class does not apply. Those two stances contradict; the same class may not sit in both lists on one requirement.

Severity is error. Six failure shapes. The class is not in the catalog. The target id does not exist. The target exists and does not carry the class on obligation_checklist. The chain cycles (A to B to A, or longer). The reason is shorter than 32 characters. The same class is both suppressed and delegated. Duplicate entries for one class on one requirement also fail. Empty delegated_by fails. An empty delegations list is a silent pass: there is nothing to resolve.

proof audit --check obligation_delegation_resolves
# SW-REQ-200 obligation_delegations: invariant_preservation -> SYS-REQ-100
# SYS-REQ-100 obligation_checklist: []
# fail: SW-REQ-200: delegation target SYS-REQ-100 does not carry
#       invariant_preservation in its obligation_checklist
# silent pointer: the id exists. the class does not

obligation_baseline only asks whether a tag-matched class was listed, suppressed, or delegated. This hop asks whether that pointer still resolves. obligation_decomposition_complete asks whether a parent class flowed to a satisfier. This hop is a named owner, not a child-file walk. A covering SYS-REQ on the parent list stays on obligation_completeness. Required triples stay on obligation_evidence_complete.

Fix one of five ways. Put the class on the target. Repoint at the requirement that actually owns it. Convert to a suppress if the class does not apply. Defer it if it applies here and is not yet testable. Or fix the class id. Do not point at whichever requirement already happens to list the class.

proof req edit SYS-REQ-100 --add-obligation invariant_preservation
proof req edit SW-REQ-200 --undelegate-obligation invariant_preservation --confirm-undelegate
proof req edit SW-REQ-200 --delegate-obligation invariant_preservation --to SYS-REQ-100 \
  --reason "parent SYS-REQ-100 carries the per-call invariant for this component"

02 · The exhibit

Same SW-REQ-200 / invariant_preservation. Silent pointer, or this hop.

One software requirement. One parent id. One catalog class. Target dropped the class. No cycle. Click the tabs.

The row

  • Ask does SYS-REQ-100 own the shall for SW-REQ-200
  • Stamp the shall is in Jama. the note says the parent owns the invariant
  • Why a filled cell never asks whether invariant_preservation is still on SYS-REQ-100
Note present

This hop

Nobody asked whether the pointer still resolves. A parent note is not a living owner. The finding kind is this hop.

Class unread

The row

Keep the Jama shall. Keep the parent note. That is not this hop.

Keep the record

Proof

  • Ask does SYS-REQ-100 still list invariant_preservation
  • Out SW-REQ-200 delegates invariant_preservation to SYS-REQ-100, which does not carry it
Silent pointer counted

Same SW-REQ-200 / invariant_preservation. Silent pointer, or this hop. Click the tabs.

Surface What they do What Proof does What we lose
Jama cell A shall, and a parent note if you type it. An error the audit can name next to the broken pointer. 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 delegation still names a living owner. Not the silent-omission hop. See obligation baseline.
obligation_decomposition_complete Whether a listed class flowed one layer to a satisfier. Whether a named owner still carries the class. Not the silent-drop hop. See obligation decomposition complete.
obligation_completeness Whether each listed class has a covering SYS-REQ. Whether a delegated target still lists the class. Not the covering-child hop. See obligation completeness.
obligation_evidence_complete Whether required evidence kinds exist on the covering req. Whether the pointer still resolves. Not whether the triples exist. Not the triple hop. See obligation evidence complete.

The teaching graph is still one pointer whose target dropped the class. Put the class on the target, repoint, suppress, or defer. Do not treat a Jama note as this hop. Do not treat a child-file split as this hop.

proof audit --check obligation_delegation_resolves --verbose
proof catalog show invariant_preservation
proof audit --check obligation_baseline --verbose

The silent-omission hop stays on obligation baseline. 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 broken pointer. It does not write the delegation, and it does not prove the Go.

A quiet proof audit --check obligation_delegation_resolves can still mean nobody delegated anything. Jama still authors.

The hop does not write a delegation. It does not put the class on the target. An empty delegations list is a silent pass. A target that lists the class with no evidence still resolves here; depth stays on obligation evidence complete. A cycle is reported once, anchored at the lexicographically smallest id, not once per node. --skip-level L0 skips the hop. Opt-out is skip, never pass. The hop does not prove that the target's evidence covers this requirement's behavior. 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 delegation resolves? Same question. Same URL.

Is this a suppress? No. A suppress says the class does not apply. A delegation says it applies, and another requirement owns it. The same class may not sit in both lists.

Is this obligation baseline? No. That hop is whether a tag-matched class was listed, suppressed, or delegated. This hop is whether the pointer still resolves. See obligation baseline.

Is this obligation decomposition complete? No. That hop is whether a listed class flowed to a satisfying child. This hop is a named owner. 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 target that lists the class with no triples still resolves 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 Go? No. The hop 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.