diff --git a/dev-claude-plugin/0072/SESSION-0072.0-TRANSCRIPT-2026-06-12T00-43--INPROGRESS.md b/dev-claude-plugin/0072/SESSION-0072.0-TRANSCRIPT-2026-06-12T00-43--INPROGRESS.md index 7e915b3..8ceeb88 100644 --- a/dev-claude-plugin/0072/SESSION-0072.0-TRANSCRIPT-2026-06-12T00-43--INPROGRESS.md +++ b/dev-claude-plugin/0072/SESSION-0072.0-TRANSCRIPT-2026-06-12T00-43--INPROGRESS.md @@ -22,6 +22,48 @@ Resumed via /goal next from the memory Next-/goal field recorded at session 0071 ``` +## Plan + +> Anchor: design `specs/2026-06-11-design-handoff-design.md` (v1.0.0, graduated) · §7.2 SLICE-3 +> Anchor issues: #95 (storage/linkage — link step), #93 (spec field) · Eligibility: R2a (graduated Solution Design) — eligible, no override +> Worktree: `.claude/worktrees/session-0072-design-handoff-slice3` (branch `worktree-session-0072-design-handoff-slice3`) — isolated; ≥1 concurrent --INPROGRESS placeholder in flight + +SLICE-3 — the **link step** of `wgl-design-handoff` (PUC-1, PP-3): an idempotent +issue-body-upsert that writes a canonical `**Designs:** ` pointer line into +the tracking Gitea issue, so a homed bundle (SLICE-2) is discoverable from its +ticket. Independent of SLICE-2/SLICE-4. Offline + fixture-tested (§6.8). + +Deliverables (bottom-up, TDD): + +1. **`gitea-api.sh` extension** (§6.2/§6.4 — helper lives *in* gitea-api.sh): + - `upsert-body-line --label L --value V` — **PURE** transform: reads a body on + stdin, emits the body with the labelled line inserted/replaced/deduped on + stdout. No token, no network — the testable core carrying all INV-2 logic. + - `issue-body-upsert [--token-service S] --label L --value V [--dry-run]` + — network glue: GET issue body → run the pure transform → **no-op if + unchanged**, else PATCH `{body}`. Idempotency decision = `new == old`. + - Legacy ` ` passthrough untouched (30+ callers). +2. **Thin caller** `skills/wgl-design-handoff/scripts/link-design-issue.sh` + (modelled on `set-patchwatch-status.sh`): `--issue N --design PATH [--repo o/n] + [--host h] [--dir D] [--dry-run]`; resolves repo/host from git origin; token + `WGL_DESIGN_HANDOFF_TOKEN_SERVICE` (default `wgl-gitea-issues-readwrite-token`, + INV-5); hardcodes label `**Designs:**`; delegates to `issue-body-upsert`. +3. **Test** `test-design-issue-link.sh` (offline, hermetic): + A. pure transform vs fixture bodies — insert / replace / no-op-identical / + dedup-multiple / empty-body / preserve-other-lines / path with slashes. + B. thin caller vs stubbed `CLAUDE_PLUGIN_ROOT`/fake `gitea-api.sh` (test-typecheck + pattern) — correct delegation (label/issue/value), git-origin repo + resolution, --dry-run, usage errors. + C. `issue-body-upsert` integration vs fake `curl`+`security` on PATH — GET + fixture body → PATCH-when-changed, **no PATCH when unchanged** (INV-2 at the + API layer). +4. **Docs + ship:** TOKENS.md `WGL_DESIGN_HANDOFF_TOKEN_SERVICE` row; bump + `plugin.json` 0.53.0 → 0.54.0; `scripts/lint.sh --check-bump`; PR; merge. + +Pipeline (§9): no deployable runtime surface (plugin scripts only) → DoD = unit +tests + lint green, merged to `main`, version bumped. Live next session after +re-install (`update-plugin.sh` at finalize). + ## Deferred decisions _Autonomous-mode low-confidence calls the driver made and would have