Files
session-history/dev-claude-plugin/0015/SESSION-0015.0-TRANSCRIPT-2026-06-05T06-29--2026-06-05T06-34.md

5.4 KiB

Session 0015.0 — Transcript

App: dev-claude-plugin Start: 2026-06-05T06-29 (PST) End: 2026-06-05T06-34 (PST) Type: coding Goal: Fix the wart the operator noticed ("why are we saving to multiple places?") — publish-transcript.sh left the local staging copy behind after publishing, so stale --INPROGRESS placeholders accumulated in ~/.wgl/transcripts/. Outcome: Shipped. PR #8 merged to main (merge 0a7b658); plugin 0.13.0 → 0.14.0. Finalized publish now cleans the session's local staging scratch; checkpoints and dry-runs are untouched.

Plan

Add local-staging cleanup to skills/wgl-session-common/scripts/publish-transcript.sh:

  • After a finalized publish (push succeeded, or idempotent no-changes exit), remove the session's local staging copies — the finalized file + any superseded same-ordinal --INPROGRESS placeholder — scoped strictly to the staging dir.
  • No-op for --INPROGRESS checkpoints (session still live, needs its working copy) and for --dry-run.
  • TDD: offline fixture (local bare repo as remote) proving the wart, then the fix, then green. Bump plugin.json. Edit SOURCE only (per CLAUDE.md), let the operator re-install.

Pre-session state

Conversation context: this followed two engineering sessions (0002 digest sweep, 0003 the flotilla-only-provisioning rule). The operator asked why transcripts appear "in multiple places"; the answer surfaced a genuine wart — the remote session-history repo is the one record, the local ~/.wgl/transcripts/<app>/ dir is an ephemeral buffer, but publish never cleaned the local buffer, so it accumulated (confirmed: 6 stale files in engineering's dir, 25 in dev-claude-plugin's). Plugin on clean main at 0.13.0; no other plugin sessions in flight.

Turn-by-turn arc

  1. Q&A → wart. Explained the three locations (durable remote record / local staging buffer / ephemeral temp clone) and named the real redundancy: publish leaves the local buffer behind. Operator: "Oh, fix that please."
  2. Brainstorming invoked (the fix had a real design nuance). Key nuance surfaced: cleanup must NOT delete the working copy during an --INPROGRESS checkpoint re-publish — only on a finalized publish.
  3. Claim plugin session 0015 (dd9f875); branch fix/publish-transcript-clean-local-staging.
  4. TDD. Wrote an offline fixture (/tmp/test-publish-cleanup.sh) — fake remote = local bare repo, --sessions-remote/WGL_APP_NAME overrides. Ran it against the unfixed script: 3/6 fail (finalized publish leaves both local copies), 3/6 pass (checkpoint-keeps + scoping already hold).
  5. Implement. Added clean_local_staging() (guards --dry-run + --INPROGRESS; find … -name SESSION-<sid>-TRANSCRIPT*.md within the staging dir; rm -f), wired at both the no-changes early-exit and after the push; updated the header docs. Re-ran fixture: 6/6 pass; bash -n clean.
  6. Ship. plugin.json 0.13.0→0.14.0; commit (Co-Authored-By) → push → PR #8 via Gitea API → merge (HTTP 200) → sync main, delete branch. Confirmed 0.14.0 + the fix on main.
  7. Finalize. Updated plugin memory; wrote this transcript and published it through the fixed SOURCE script (dog-fooding: it auto-cleaned 0015's own local staging copy); then hand-swept the pre-fix orphan staging files.

Deferred decisions

Low-confidence autonomous calls made without operator input:

  • Version bump = minor 0.14.0, not patch 0.13.1. Treated the cleanup as an observable behavior change (it now deletes local files) worth a minor; a patch would also be defensible for a pure bugfix.
  • Cleanup removes the finalized local copy too, not just the --INPROGRESS placeholder. Rationale: the staging dir is wholly ephemeral once the record is durably on the remote. Alternative was to remove only the placeholder and keep the finalized file locally.
  • Did not commit the fixture test. The repo has no test-harness convention yet; adding one (a tests/ dir) would set a new convention without discussion. Kept the fixture as ad-hoc verification (the team's existing "exercised against a fixture" pattern). A real test-harness is a candidate follow-up.

Cut state (end of session)

Repo Branch Commits State
wiggleverse-dev-claude-plugin main c60c076 (fix) → 0a7b658 (merge of PR #8) merged, pushed; local main synced; feature branch deleted

publish-transcript.sh +27 lines; plugin.json 0.13.0→0.14.0. Working tree clean on origin/main.

What lands on the operator's plate

  • Operator re-install to make 0.14.0 live (the cache still lags — the running session used the 0.12.0 cache for the claim; the publish of this transcript dog-fooded the fixed source script directly).
  • The pre-existing carry-over follow-up is unchanged: align the plugin skills to the new engineering flotilla-only-provisioning rule (§8.5) — see memory.

Prompt the operator can paste into the next session

/goal Align the plugin skills to the flotilla-only-provisioning rule (engineering §8.5): make scaffold-gcp-project / wgl-gitea-admin (repo-creation path only) / wgl-session-coding-init's DEPLOY-FLOTILLA card defer INITIAL provisioning to the launch-app/flotilla suite (hand the operator the flotilla command(s) rather than hand-provisioning); keep ad hoc Gitea/gcloud ops unchanged. Bump plugin.json. See plugin project memory.