Skip to content

sweep: reconcile shipped-but-unwrapped tasks + close the crashed-ship detection gap - #242

Merged
Jammy2211 merged 3 commits into
mainfrom
claude/pyautomind-completed-tasks-cleanup-ng94r7
Aug 19, 2026
Merged

sweep: reconcile shipped-but-unwrapped tasks + close the crashed-ship detection gap#242
Jammy2211 merged 3 commits into
mainfrom
claude/pyautomind-completed-tasks-cleanup-ng94r7

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

The sweep (2026-08-19)

The dashboard was carrying completed tasks that were never wrapped up. This PR reconciles all of them:

  • version-stamp-sync-guards — all six PRs merged 2026-08-17T22:03Z (Nerves#148, Array#447, Fit#1488, Galaxy#573, Lens#698, Hands#236; verified on each main) but the shipping session died after posting the "Shipped" comment on PyAutoHands#235: no record, issue left open, active.md stale with a wrong-PR pointer (Lens#700 belongs to positions-lh-penalty-accumulation). Record written (complete/2026/08/version-stamp-sync-guards.md), entry retired, prompt folded; Hands#235 closed with the evidence trail.
  • Five pre-migration leftovers retired from active/ subdirectories (invisible to check/orphans, which scan active/*.md only): two prompts whose records have existed since May, the morning-status prompt (record since July), plus retroactive records for imaging-mge-pytree-migration and rectangular-spline-adapt-image-jit-fix (delivered by the jax_profiling/gradient restructure — verified on autolens_workspace_developer main c5cccb8).
  • The two retired kxs ground-truth scripts shelved to complete/archive/shelved/.
  • complete/index.md + dashboard.md regenerated (In flight 5 → 1 with the sibling PyAutoBrain dashboard fix).

Prevention

Root cause: the ship bookkeeping (record + retire + issue close) runs after the merge, and when the session dies in between, the tracking issue never closes — so lifecycle.py issues (issue-state only, gh-only) stayed green and never ran in CI anyway.

  • issues PR leg — every registry status: pr-open PR is cross-checked; merged (or closed-unmerged) on a pending entry = drift. The merged PR is the one signal that survives a crashed ship.
  • gh-free fallback — state reads fall back to stdlib HTTPS (GITHUB_TOKEN/GH_TOKEN honoured), so the leg runs in CI and cloud sessions; an all-unreadable run reports "cannot run" (exit 2) instead of fake drift.
  • Hermetic strays gate in check — anything under active/ that is not a top-level prompt .md is drift.
  • lifecycle_drift.yml — daily scheduled reconcile job runs the online leg with the runner token.

Tests

python3 -m pytest tests/139 passed (46 in test_lifecycle_check.py, incl. new PR-leg drift/quiet/closed-unmerged cases, status-field-only ref parsing, pulls argv with the merged_at jq, HTTP fallback on missing gh, and the strays gate). lifecycle.py check and index --check green on the tree.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AS2MB8X4vW3s27YW1ncviK


Generated by Claude Code

claude added 3 commits August 19, 2026 00:46
…sks sweep)

- version-stamp-sync-guards: all six PRs merged 2026-08-17T22:03Z
  (Nerves#148, Array#447, Fit#1488, Galaxy#573, Lens#698, Hands#236) but the
  shipping session died after posting the "Shipped" comment on Hands#235 —
  no record, issue left open, active.md stale with a wrong-PR pointer
  (Lens#700 belongs to positions-lh-penalty-accumulation). Record written,
  entry retired, prompt folded; Hands#235 closed with evidence.
- Retire five pre-lifecycle-migration leftovers from active/ subdirectories
  (invisible to lifecycle check/orphans, which scan active/*.md only):
  imaging_delaunay_jax_profiling.md + visualization_profiling_cluster.md
  (records exist, complete/2026/05), morning_status_and_daily_release_rehearsal.md
  (record exists, complete/2026/07), and retroactive records for
  imaging-mge-pytree-migration + rectangular-spline-adapt-image-jit-fix
  (delivered by the jax_profiling/gradient restructure; verified on
  autolens_workspace_developer main c5cccb8).
- Shelve the two retired kxs ground-truth scripts (headers say RETIRED
  2026-07-09, historical) to complete/archive/shelved/.
- Regenerate complete/index.md + dashboard.md (in flight 5 -> 4).

Co-Authored-By: Claude <[email protected]>
Claude-Session: https://claude.ai/code/session_01AS2MB8X4vW3s27YW1ncviK
Prevention follow-up to the 2026-08-19 completed-tasks sweep, which found
version-stamp-sync-guards fully merged (six PRs, 2026-08-17) while its issue
stayed open and its active.md entry still read pr-open. Root cause: the ship
bookkeeping (record + retire + issue close) runs after the merge, and when the
shipping session dies in between, the tracking issue is never closed — so
`lifecycle.py issues` (issue-state only) stays green, and it could not run in
CI or cloud sessions anyway (gh-only).

- issues: new PR leg — every registry `status: pr-open` PR is cross-checked;
  a merged (or closed-unmerged) PR on a pending entry is drift. The merged PR
  is the one signal that survives a crashed ship.
- issues: gh-free fallback — when gh is missing, state reads go through
  stdlib HTTPS (GITHUB_TOKEN/GH_TOKEN honoured), so the leg now runs in CI
  and cloud sessions; an all-unreadable run reports "cannot run" (exit 2)
  instead of fake drift.
- check: new hermetic strays leg — anything under active/ that is not a
  top-level prompt .md is drift. Five completed leftovers (three with
  months-old records) hid in active/ subdirectories exactly because every
  guard scans active/*.md only.
- lifecycle_drift.yml: daily scheduled `reconcile` job runs the online leg
  with the runner token; a red run means finished work is still listed as
  pending.
- tests: PR-leg drift/quiet/closed-unmerged, status-field-only ref parsing,
  pulls argv with merged_at jq, HTTP fallback on missing gh, strays gate
  (46 passing).

Co-Authored-By: Claude <[email protected]>
Claude-Session: https://claude.ai/code/session_01AS2MB8X4vW3s27YW1ncviK
The privacy leg of CI rightly rejected a schedule: trigger in
lifecycle_drift.yml — it is the ONE workflow shipped into the fresh-slate
template (spawn rule 9a), and nothing shipped may auto-run on a fresh org.
The daily online leg now lives in registry_reconcile.yml as instance
automation with an explicit rule-9c DROP in scripts/spawn.py, mirrored in
the spec table and the template-contract tests; lifecycle_drift.yml is
restored byte-identical to main.

Co-Authored-By: Claude <[email protected]>
Claude-Session: https://claude.ai/code/session_01AS2MB8X4vW3s27YW1ncviK
@Jammy2211
Jammy2211 merged commit 9d60db2 into main Aug 19, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants