Check reference

Remove cycles from requirement dependency links

A requirement should not depend on itself through a chain of parent relationships. circular_deps_clean reports cycles so the intended direction of responsibility can be restored.

What the check observes

The workflow runs the requirement gap analyzer's cycle analysis over the satisfies subgraph and reports the detected chains. The check concerns relationships in the specification graph. It does not diagnose ordinary runtime loops, recursive functions, or service call cycles. Read the reported path to see which requirement references close the loop before deciding which relationship is wrong.

Example: two split requirements became each other's parent

Illustrative case. A broad rule was split into A and B. During the edit each was marked as satisfying the other, obscuring the actual higher-level promise. The repair is to recover the intended hierarchy, not to remove whichever edge is easiest.

Incorrect relationship:
  SYS-REQ-042 → SYS-REQ-073 → SYS-REQ-042

Possible reviewed hierarchy:
  SYS-REQ-042 satisfies STK-REQ-007
  SYS-REQ-073 satisfies STK-REQ-007

The right shape depends on what each requirement actually promises.

Resolve the finding

  1. Read every requirement in the reported cycle and identify the intended parent or prerequisite for each.
  2. Distinguish a decomposition relationship from a cross-reference or a shared interface concern. Use the appropriate relationship rather than reciprocal parent links.
  3. Correct the mistaken edge, then review affected children and evidence. Preserve legitimate dependencies instead of flattening the graph merely to eliminate the cycle.

Run and interpret

proof audit --check circular_deps_clean --verbose

This is a specification-stage error check. The detailed gap report can help inspect the chain; a focused result covers the analyzed requirement graph under the current project configuration.

An acyclic graph can still have the wrong parents, missing links, inconsistent requirements, or invalid assumptions. Cycle detection provides one structural invariant, not proof that the hierarchy correctly models the system. Do not infer runtime correctness or complete trace coverage from an empty cycle list.

Continue from here

Inspect the dependency shape. Review conflicting promises.

Bring a cyclic requirement chain and the change that introduced it. Bring a change to Proof.