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.

guaranteed Deterministic and blocking. Implemented, and a behavioural test proves it.

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.

Provenance

defined in
read it on this site · docs/PLANNING.md
implemented in
lib/project.awk
proved by
test/cases/42_dag_waves.sh
claim id
dag-validation

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