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.
Build recursive ingest — index nested containers (tar in qcow2 in tar...) deduping across levels (spec: docs/recursive-ingest-spec.md)
goal
Implement per docs/recursive-ingest-spec.md. Opt-in --recursive [--max-depth N] [--max-expand BYTES]: a member/guest-file that sniffs by bytes as a container (tar family, img/qcow2) is ingested as its own artifact and referenced via a new nested pointer added to BLOB_POINTER_KEYS. Whole container blob still stored at each level (outer pull byte-identical; recursion index-only). MUST also fix _add_tar_gz to STREAM members (currently buffers all payloads) via put_file so recursion is memory-safe. Safety: loud depth_capped, --max-expand vs decompression bombs, corrupt nest degrades to opaque still-pullable (diskforge MemberIndexError pattern). Ship the 7 acceptance pins with RED negative controls; resolve Q1-Q5. Reuse detect_kind/imgfmt.sniff_image_kind, diskforge.wire.index_image_members, put_file/get_blob_to_path (#497), blobs_referenced_by, fsck. Homes: GitHub dudezilla/omni-git + GitLab omni-git-entry-claude. Related #497 (streaming), #498 (export-git closure follows nested).
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