Skip to content

A cycle, a self-dependency and a dependency on an issue that does not exist are each refused by name

The dependency graph is validated, not trusted. Each malformed shape produces its own finding with the issue that caused it: cycle, self_dependency, unknown_dependency, duplicate_dependency, unknown_milestone, premature_execution. A failing finding makes majordomus plan validate and majordomus doctor exit non-zero; majordomus watch reports the same violation as drift.

declared statusdeclared status: guaranteed Declared deterministic and blocking, implemented, and naming the behavioural test that is to prove it. Whether a recorded run supports it is the evidence verdict, shown beside it.

recorded evidencerecorded evidence: not run Declared guaranteed, and not supported by a recorded run: the test is named, and no passing run of the current inputs is recorded. how evidence is recorded

Kahn layering; the issues that never leave the graph are the ones reported. A malformed graph fails doctor and is reported by watch as drift.

What it means

The dependency graph is validated, not trusted. Each malformed shape produces its own finding with the issue that caused it: cycle, self_dependency, unknown_dependency, duplicate_dependency, unknown_milestone, premature_execution. A failing finding makes majordomus plan validate and majordomus doctor exit non-zero; majordomus watch reports the same violation as drift.

How it works

lib/project.awk removes issues whose dependencies have all been removed, one layer at a time. Issues that never leave are in a cycle or downstream of one, and those are the issues the finding names. Edge errors are detected while the edge list is built, so an unknown dependency is reported as an unknown dependency rather than becoming an invisible cycle.

How to see it

majordomus plan validate
# FAIL cycle       graph — a dependency cycle prevents these issues from ever becoming ready: I0006 I0007

What it does not cover

The graph is validated for shape, not for judgement. An edge that nobody needed is a valid edge; the tool will happily serialise work that could have run in parallel.

Why it exists

A dependency list without validation is a suggestion. A cycle nobody detects is a set of issues that can never become ready, with no message explaining why.

Detail rendered from docs/claims/dag-validation.md.

From the statement to the proof

  1. 1 · the public statement

    A cycle, a self-dependency and a dependency on an issue that does not exist are each refused by name

    Made on Planning, Plan.

  2. 2 · the canonical claim

    dag-validationdeclared status: guaranteed in docs/CLAIMS.yaml

    Defined in read it on this site · docs/PLANNING.md

  3. 3 · the implementation

    lib/project.awk

  4. 4 · the test and the scenarios

    Test: test/cases/42_dag_waves.sh

    Executed in Deliver issues in waves the graph computes, and take the next one, Keep the plan as milestones and issues the tool can validate.

  5. 5 · the recorded runs

    recorded evidence: not run how evidence is recorded

Verify it yourself

The test runs in a disposable temporary repository and asserts the behaviour, not a string in the source.

from a clone of the repository
bash test/run.sh 42_dag_waves

Where this claim is used

Related claims same implementation

The moments this answers

Searches the titles and descriptions of every page this site publishes.