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.
FIX pair_loop: commit the WHOLE package for forge deliverables (pyproject+config), not just the module — forge2 installability
goal
BLOCKER for forge2 landing INSTALLABLE packages. A forge-rewrite unit must produce a package that `pip install -e .` installs (standard #200). The worker DOES create the full package (module + pyproject.toml + config) in its worktree, and the auditor validates installability there — but pair_loop commits ONLY the single --deliverable file, so the pyproject.toml/config land as dropped strays. PROVEN: forge pilot #401 merged only forge2/artifact_tree_gen/add.py (849 loc); its pyproject.toml (a stray) never reached main, so the landed package is NOT installable. 68 sourced forge units would all land module-only.
FIX pair_loop.py: when the --deliverable path is under a package tree (specifically forge2/<repo>/...), commit the ENTIRE new/modified fileset of that package directory (git add the package root, e.g. forge2/<repo>/), not just the single deliverable file — so pyproject.toml, config, entry points, and any submodules land together. Keep the current single-file behavior for non-package deliverables (tags, tools) unchanged — gate the package-commit on the deliverable living under forge2/ (or add an explicit --package-commit flag the forge dispatch sets). The auditor already validates the whole worktree, so committing the whole package matches what was validated. Also surface the committed fileset in the commit log (replace the empty 'strays':[] with the actually-committed package files). ACCEPTANCE: re-run the forge pilot (or a new forge unit) and confirm forge2/<repo>/ lands with pyproject.toml present and `pip install -e .` succeeds from the merged tree. Deliverable: checkouts/current/congruency/tools/pair_loop.py. Do NOT change tag/tool single-file commit behavior.
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