7.4 KiB
7.4 KiB
Session 0001.0 — Transcript
App: engineering Date: 2026-06-03 (PST) · Start 16-59 · End 18-27 Goal: ship dev-env v0.2 — the single-file HTTPS bootstrap (SPEC §8.3). Outcome: shipped + merged to main (PR #7, merge commit 9ae325d). Also registered
engineeringas an app (app.json) — this was the first session claimed through it.
This is the first session for the engineering app: registering it for session
tracking was a prerequisite, resolved at session start.
Plan
Working branch dev-env-v0.2-https-bootstrap off main, in an isolated worktree
(the shared engineering checkout was held on a slice3-* branch by a concurrent
session). Two operator decisions, resolved up front via AskUserQuestion:
- Register engineering as an app first. It had no
app.json, so the session-claim tooling could not resolve where its transcripts live. Createdengineering/app.json(One Nameengineering; sessions → the sharedwiggleverse/session-historyrepo, subdirengineering, numeric / folder-per-session / public). - Bootstrap shape = single file + local self-update. Build the amalgamated
single file (committed at
dev-env/dist/wgl-devenv, grabbable over HTTPS via a Gitea raw/ZIP mirror — no special host pinned). It embeds the bootstrap-subset runbooks (base-tools+git-ssh) so a bare laptop runsdoctor+git-ssh.self-updateauto-discovers the local engineering clone andgit pulls over SSH to refresh the full runbook set (the HTTPS-then-SSH carve-out, SPEC §8.3).
Pre-session state
- dev-env v0.1 was merged to
main(PR #4): the doc-as-program engine + 4 onboarding runbooks (base-tools→git-ssh→repo-layout→claude-context), 32-test stdlibunittestsuite, theShellExecutorDI seam, the secret-in-auto-fix lint, PASS/WARN/FAIL/SKIP, idempotency. - SPEC was at
v0.0.1; §8.3 deferred the single-file HTTPS bootstrap to v0.2. engineeringwas unregistered (noapp.jsonanywhere).- A concurrent session held the shared engineering checkout on
slice3-provision-vm-scaffold-gitea.
Turn-by-turn arc
- Session init. Computed start (16-59 PST). The claim script could not
resolve the app —
engineeringhad noapp.json. (Gotcha surfaced: the claim/publish scripts are now plugin-based at~/.claude/plugins/cache/wiggleverse-dev-claude-plugin/.../skills/wgl-session-common/scripts/, not the old~/.claude/skills/...path.) - Read the SPEC/ROADMAP + the whole v0.1 package to ground the design.
- Two operator questions (AskUserQuestion): (a) how to handle the unregistered app → register engineering first; (b) HTTPS hosting → the operator redirected to "expect the engineering repo locally and pull from that," so a third focused question locked the shape → single file + local self-update.
- Registered engineering: relocated the worktree under
~/gitso the newapp.jsonwas discoverable, wrote it, dry-ran then claimed session 0001 (pushed the placeholder towiggleverse/session-history). - Spec-first: SPEC →
v0.0.2— §8.3 two obtain-stories over one source of truth; §8.4 generated-not-forked single file + drift guard; §8.5 bootstrap subset + self-update; §5.6 theself-updateverb; §1.3 updated to admitself-updateas a mutating verb. ROADMAP → v0.2 shipped. - Build:
tools/amalgamate.py(inlines thedevenvmodules verbatim via asys.meta_pathfinder + embeds the bootstrap subset →dist/wgl-devenv);devenv/bootstrap.py(single-file orchestration + runbook resolution: override → local clone → cache → embedded);devenv/selfupdate.py(git pullthrough the executor seam);devenv/__main__.py(makespython3 -m devenvwork — a latent v0.1 README/bug gap); README + pyproject + .gitignore (track onlydist/wgl-devenv). - Tests: +16 (amalgamation drift/round-trip, runbook resolution, self-update
via
FakeExecutor) → 48 green;subprocessstill only inexecutor.py. Smoke-tested the single file copied to/tmp:doctor2/2 PASS,run git-ssh --dry-run,self-updatefail-loud remediation. (One real-git end-to-end smoke test ofself-updatewas denied by the sandbox; covered instead by the FakeExecutor unit tests + the proven SubprocessExecutor path.) - Push + PR #7 (SSH-only, push-before-review). Created via the Gitea API helper (this is Gitea, not GitHub).
- Finalize (this wrap-up).
mainhad advanced — PR #6 ("retire the per-app operator-cli repo role") merged while this work was in flight. Checked: it touched onlyREADME.md; the schemacontainsenum still hasoperator-cli, so theapp.jsontag stayed valid. Gitea recomputedmergeable→ True. Merged PR #7 (merge commit, delete branch), cleaned up the worktree + local branch, updated memory.
Cut state (end of session)
| Commit | Where | What |
|---|---|---|
6619c3b |
merged via #7 | Register engineering as an app (app.json) |
e4c06c6 |
merged via #7 | dev-env v0.2: the single-file HTTPS bootstrap |
9ae325d |
origin/main |
Merge commit for PR #7 |
- PR #7 merged, branch
dev-env-v0.2-https-bootstrapdeleted (remote + local), worktreeengineering-v0.2removed. mainis at9ae325d; v0.2 artifacts present (dev-env/dist/wgl-devenv,dev-env/tools/amalgamate.py,devenv/bootstrap.py,devenv/selfupdate.py,app.json).- The concurrent
slice3-provision-vm-scaffold-giteacheckout was left untouched. - 48 tests green at merge.
What lands on the operator's plate
- Nothing blocking. v0.2 is merged.
- Hosting is a deliberate ops detail (not wired):
dist/wgl-devenvis onmain, but no public HTTPS URL is published yet. To actually hand a bare laptop thecurl -fsSL <url>/wgl-devenvline, decide where a readable mirror exposes the file (a readable Gitea raw/ZIP URL, or a public mirror) and confirm that URL serves it. - Deferred follow-up (flagged as a task chip): the
engineeringrepo root has noCLAUDE.mdimporting@~/.claude/wiggleverse.md(the always-on org-context wiring). Left out to keep PR #7 focused; worth a tiny separate PR.
Prompt the operator can paste into the next session
Open dev-env v0.3 — the cloud + credentials runbooks. Run
/wgl-coding-session-init first (engineering is now a registered app — it'll claim
engineering/0002).
The dev-env CLI lives at engineering/dev-env/ on main (v0.1 + v0.2 shipped). Read
dev-env/SPEC.md (esp. §6.3 the hard-secrets rule, §2.3 `fix manual`) and
dev-env/ROADMAP.md (v0.3); see memory [[project_dev_env_cli]].
Goal: author two new runbooks — gcloud/ADC (the dedicated-profile-per-deployment
awareness, guide §8.4) and the Keychain Gitea-token runbook — both as `fix manual`
for the secret gestures (no secret bytes ever auto-run; the §5.5 lint enforces
it). The engine already supports them; this slice is runbook content + harvesting
the exact checks. Wire them into the `requires` DAG after git-ssh.
The single-file bootstrap subset stays base-tools + git-ssh; v0.3 runbooks are
full-set-only (fetched via self-update), so you only rebuild dist/wgl-devenv if you
change an embedded module or embedded runbook (a drift test enforces it). Keep the
suite green. Spec-first only if you touch invariants. Branch off main → PR (push
before review; SSH-only git). Use an isolated worktree (the slice3 session may
still hold the shared checkout).