7.6 KiB
Dependency-graph triage — 2026-10-03
Evidence for CUST-WP-0075. Two views of the same open set, both taken
2026-10-03 against the primary (railiance01).
| File | Source | What it answers |
|---|---|---|
scan_workplan_files.py → file-view.txt |
every registered repo's workplans/*.md (145 repos, 1128 workplans) |
authoritative: satisfied waits, mis-statused workplans, gate roots by transitive fan-in, cycles, human gates |
graph_hub_view.py → hub-view.txt |
GET /workplans/, /tasks/, /workplans/{id}/dependencies/ |
what the read model currently carries (201 unique edges) |
Run with TRIAGE_SCRATCH=<dir> holding repos.json, wps.json, waits.json,
tasks_todo.json, tasks_progress.json, deps.json from the API.
Headline numbers (file view)
- 108 open workplans: 100 blocked, 5 active, 2 proposed, 1 backlog.
- 232
waittasks, 44todo, 4progressinside them. - 8 wait tasks whose every
depends_ontarget is already terminal. - 4 blocked workplans with no wait task; 3 non-blocked workplans whose only open tasks are waits; 1 blocked workplan with zero open tasks.
- 69 human gates (
needs_human: true). Zero carry adecision_id, although the standard (canon/standards/task-wait-qualifiers_v0.1.md) and C-40 rule 4 already support clearing a task when its decision resolves. - No cycles among open nodes.
- Top roots by transitive fan-in:
SAND-WP-0015-T04(7 workplans),SECRETS-WP-0009-T03(5),GLAS-WP-0012(4),NK-WP-0040(4),FEP-WP-0002-T03(4, atodo— not blocked at all),RAPPS-WP-0014-T03(3).
Repeatable monitor (CUST-WP-0075-T05)
From the Custodian checkout, with Python and PyYAML installed:
python3 scripts/monitor_dependency_triage.py --output /tmp/dependency-triage
The monitor makes GET requests only. It captures the repository registry,
scans available owner files, compares every open non-residual wait's status
and qualifiers with its hub projection, and records the three T06 handoffs.
monitor.json contains counts and actionable findings; file-view.txt contains
the graph analysis. Raw registry and file indexes stay in the scratch directory.
No schedule, worker injection, owner-file change, or decision resolution is enabled.
unavailable_checkouts and parse_warnings make coverage limits explicit.
The scanner now reads YAML lists and quoted text correctly; historic task
fences containing prose use a reported fallback. The detailed file view includes
residuals for observation; the monitor's actionable counts exclude them.
Terminal predecessors are candidates for review: independent human and owner
gates remain binding. Replies newer than a proposal are candidates, not evidence
of acceptance; reviewed owner workplan IDs or declines still belong in T06.
The refreshed snapshot is monitor-2026-10-03.json. It supersedes the earlier headline counts for the visible checkouts. Four new unrouted human gates, sixteen unqualified waits, and twelve qualifier differences need follow-up through T05; the earlier T02/T03 completion records are historical. Six registered checkouts were unavailable. The sixteen degraded parses are in historic Vergabe workplans. These results do not establish fleet-wide completeness.
Focused regression checks:
python3 -m unittest discover -s tests -p test_dependency_triage.py
Repository workers and reviewed handoffs
The founder authorized repo workers for the continuation. Dispatch and results are tracked in worker-dispatch-2026-10-03.json. Assignments cover owner proposal dispositions, qualifier reconciliation, and review of terminal predecessors. Workers preserve human gates and residuals; source preparation and owner handoff do not establish production acceptance.
After reviewing an owner's proposal reply, record its disposition in
owner-handoff-receipts.json, keyed by the original proposal message UUID:
{
"original-message-uuid": {
"reply_message_id": "owner-reply-uuid",
"disposition": "accepted",
"reason": "Concrete proposal disposition and remaining scope",
"owner_workplan_id": "OWNER-WP-NNNN",
"owner_task_ids": ["OWNER-WP-NNNN-T01"]
}
}
The monitor reads this file by default, or accepts --handoff-receipts <path>.
Accepted and partially accepted dispositions require a non-residual owner plan
and actual task records; a decline requires a reason. The reply must name the
right owner, recipient and proposal thread. Unreviewed or unrelated replies
leave the case waiting. A satisfied case closes the proposal handoff only;
implementation tasks retain their statuses and authority boundaries.
The registry has stale or missing paths for four locally available checkouts. Use explicit overrides to cover them without changing registry authority:
python3 scripts/monitor_dependency_triage.py --output /tmp/dependency-triage \
--repo-path access-engine=/home/worsch/access-engine \
--repo-path repo-manager=/home/worsch/repo-manager \
--repo-path railiance-bootstrap=/home/worsch/railiance-bootstrap \
--repo-path railiance-hosts=/home/worsch/railiance-hosts
registry.json preserves the returned registry; repos.json is the effective
local scan input. The report records overrides explicitly. The expanded scan
found three additional unrouted Access Engine gates, assigned to its worker.
inter-hub and markitect-project remain unavailable locally.
2026-10-04 worker close
The closing snapshot is monitor-workers-2026-10-04.json, with its authoritative graph view. Across 146 registered repos and 144 available checkouts, the visible non-residual view has 106 open plans, 241 waits and 86 human gates. It has zero unrouted human gates, unqualified waits, terminal-predecessor waits or qualifier differences. All three proposal handoffs have reviewed original-thread dispositions and owner records. These are point-in-time results; continuing human/owner gates remain binding.
Dispatch results name 19 affected repo scopes. Selected UUID verification records 28 qualifier/dependency rows; six human routes and three Activity/User waits were separately verified against their actual source blocks. Monitor regressions: 11 pass. State Hub checker/CLI: 182 pass. Warden routing/plan: 118 pass. Platform renderer: 7 pass; existing suite retains one unrelated catalog exact-set failure (52/53), and its broad audit retains three historical C07 failures.
The two unavailable checkouts are inter-hub and markitect-project. Sixteen historical Vergabe task-fence fallback warnings remain. The original snapshot and earlier headline counts are historical evidence, not closing results.
Activity Core normal registrar sync remains blocked on historical labels and
unsafe receiving derivation: see read-only proof
and owner recommendation.
Current ACTIVITY0042 task UUIDs match source after the direct checker; that does
not restore historical receiving preservation. The prepared registrar-only patch
was not applied. Owner request 6bf8ca98-ada1-43ab-83e7-207d4ab195fe and
ACTIVITY-WP-0042-T08 retain that blocker. The checker also reports three rejected
historical self-dependency writes; no legacy repair is claimed.
Live continuing records: STATE-WP-0094-T03/T04/T05, RPF-WP-0050-T02/T03/T04, WARDEN-WP-0041-T02/T03, and the unpromoted cadence residual CUST-WP-0076-T01. No schedule, custody choice, provisioning session or runtime rollout is inferred.