Every ticket as the root of its provenance graph — goal, patch, approval, runs and (as the ticket-class build lands) mandate, manifestations, guarantees, journey, artifacts and children. Rendered through the <<<TicketGraphList>>> tag.
STOP: #454 superseded by #455 — it populated the registry but never required the DIRECTORY SERVICE (resolver #193) to actually find the VMs
goal
STOP brake for #454 (VM registry v1).
DEFECT: #454 required registering VMs via artifact.record, but never required verifying that the
universal resolver can SEE them. A populated table the directory service cannot query is not a
registry - it is a list. The operator's ask was explicitly 'that needs to be in our directory
services'.
MEASURED: resolver.py (#193, DONE) already probes 'forge-artifacts' for a sha256:
resolver.py cafa1a965b591b7c... -> kind: sha256 | probes: content-sha256, forge-artifacts,
git-object-db | resolved: 0 blob(s)
That sha IS config/vm/noble-arm64-base.img (586M), which also sits in config/forge/large-blobs
under that exact filename. The lookup path EXISTS; ticket_artifacts has 0 rows; so a live 586M VM
is invisible to the directory service.
SUPERSEDED BY #455, which adds the DIRECTORY-SERVICE GATE: after the run, resolver.py <that sha>
MUST resolve to a match naming noble-arm64-base.img via the forge-artifacts probe. A populated
table the resolver still cannot see is a FAILED ticket. It also records that
forge_refactor_ticketer.py's docstring is STALE - it claims #193/#194 are 'still REQUESTED - no
resolver module exists to import today', but both are DONE and on disk.
DO NOT dispatch #454.
patch
none
approval
unapproved
runs
no runs recorded
mandate (clauses)
not yet recorded — lands with the ticket-class build
manifestations
not yet recorded — lands with the ticket-class build
guarantees
not yet recorded — lands with the ticket-class build
journey (blunders & successes)
not yet recorded — lands with the ticket-class build
artifacts (forge)
not yet recorded — lands with the ticket-class build