Topic · circular deps clean

Circular deps clean

Gist

Circular deps clean is a cycle in satisfies or derived_reqs. Proof runs proof audit --check circular_deps_clean. A green coverage number can be a loop the traversal walked once. Webpack circular imports are not this hop. Jama still authors.

proof audit --check circular_deps_clean

Keep the two requirements if both shalls are still true. Keep Jama if it already holds them. Neither one fails the merge when A parents B and B parents A.

01 · The silent loop

A cycle looks like 100% coverage if the walk short-circuits.

You can split one shall into two files. If each file claims the other as parent, the analyser has no fixed point. coverage_met may still print clean, depending on traversal order.

The check is circular_deps_clean. It is spec-stage. Severity of a cycle is error, not warn. There is no waiver. Break the loop. The inspect command is proof gaps specs/system --check circular.

It loads the requirement graph and looks for cycles in parent and derived links. A hit names the cycle, first node first: cycle:SYS-REQ-A->SYS-REQ-B->SYS-REQ-A. The JSON also carries those ids so a caller does not have to re-parse the prose. After five cycles the details stop and say how many more there are.

A refactor that split one requirement into A and B, then set A satisfies B and B satisfies A, is the case the help file teaches. The audit reported 100% coverage of L1. The traversal walked the loop once and stopped. The bug shipped because the audit looked clean.

# A.req.yaml
id: SYS-REQ-A
traces: { satisfies: [SYS-REQ-B] }
# B.req.yaml
id: SYS-REQ-B
traces: { satisfies: [SYS-REQ-A] }
# proof audit --check circular_deps_clean
# [SPECIFICATION] circular_deps_clean -- cycle: SYS-REQ-A -> SYS-REQ-B -> SYS-REQ-A
# silent loop: coverage still printed 100%

Pick the real parent. Usually that is a stakeholder or a higher-level system req. Point A at that parent. Point B at A. Then re-run the same check. Do not mint a Jama note to carry the cycle.

proof audit --check circular_deps_clean
proof gaps specs/system --check circular
proof workflow check --stage spec --verbose
proof audit --scope baseline --verbose

02 · The exhibit

Same two files. A silent loop, or this hop.

One split. Each file still names the other as parent. Click the tabs.

The two files

  • Ask did every row still have a parent
  • Stamp A satisfies B, B satisfies A
  • Why a loop is not a parent. coverage can still print 100%
Coverage green

This hop

Nobody asked whether the walk had a fixed point. A green coverage number is not a tree. The finding kind is this hop.

Cycle unread

The two files

Keep both shalls. Keep the Jama cell. That is not this hop.

Keep the record

Proof

  • Ask does satisfies or derived_reqs walk back into itself
  • Out cycle:SYS-REQ-A->SYS-REQ-B->SYS-REQ-A
Silent loop counted

Same two files. A silent loop, or this hop. Click the tabs.

Surface What they do What Proof does What we lose
Webpack / npm import cycle A module graph that imports itself. A requirement graph that parents itself. We do not parse Go, npm, or webpack imports. That graph is not this hop.
Requirements decomposition Whether a child actually refines a parent. Whether the parent walk is a tree at all. Not the decomposition hop. See requirements decomposition.
Traceability matrix Requirement, code, test in one cell. Whether two cells parent each other. Not the matrix hop. See requirements traceability matrix.
Every requirement covered A coverage number on the traced set. Whether that number came from a loop the walk short-circuited. Not the coverage hop. See every requirement covered.
Jama cell A shall, and a note if you type it. An error the audit can name next to the cycle. Not Jama's V&V. Jama still authors. We have not run a frozen Jama pack.

The teaching graph is still two files whose board called coverage done and whose satisfies still named each other. Close it by picking the real parent. Do not treat a Jama note as this hop. Do not treat a green coverage stamp as a tree.

# A.req.yaml
id: SYS-REQ-A
traces: { satisfies: [STK-REQ-007] }
# B.req.yaml
id: SYS-REQ-B
traces: { satisfies: [SYS-REQ-A] }
# proof audit --check circular_deps_clean
# circular_deps_clean 0 circular dependencies

The decomposition hop stays on requirements decomposition. The matrix hop stays on requirements traceability matrix. Jama still authors. Proof vs Jama.

03 · The honest loss

Proof names the cycle. It does not rewrite the YAML, and it does not prove the Go.

A quiet proof audit --check circular_deps_clean can still mean the graph loaded and had no cycle. Jama still authors.

Error, not warn. No waiver. If the requirements cannot load, the hop fails. A graph with no cycle passes with 0 circular dependencies. Details stop after five cycles. A dangling satisfies that points at an id that does not exist is not a cycle, and is not this hop. A self-citation in prose is not this hop. The hop does not parse import graphs. It does not rewrite the YAML. It does not pick the parent for you. It does not prove the Go. Copied live ids that form a tree still pass. We have not scored this floor against a frozen Jama pack or a ReqIF export. The loss is named, not scored.

The matrix hop stays on requirements traceability matrix. The engagement stays on software correctness audit. Jama still authors.

04 · Nearby questions

What people type next.

What is circular deps clean? Same question. Same URL.

Is this a circular import checker? No. Webpack, npm, and Go import cycles are a different graph. This hop reads satisfies and derived_reqs only.

Is this requirements decomposition? No. That hop asks whether a child refines a parent. This hop asks whether the walk is a tree. See requirements decomposition.

Can coverage_met still look green? Yes, if you do not run this hop. A loop can short-circuit a walk. That is why the check is error-severity.

Is a dangling parent a cycle? No. A missing target cannot close a loop. That is a different check.

Can I waive a cycle? No. Break the loop.

Does a green hop prove the code matches the shall? No. The hop observes the graph. It does not prove the Go.

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