135 lines
7.4 KiB
Markdown
135 lines
7.4 KiB
Markdown
# 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 `engineering` as 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:
|
|
|
|
1. **Register engineering as an app first.** It had no `app.json`, so the
|
|
session-claim tooling could not resolve where its transcripts live. Created
|
|
`engineering/app.json` (One Name `engineering`; sessions → the shared
|
|
`wiggleverse/session-history` repo, subdir `engineering`, numeric /
|
|
folder-per-session / public).
|
|
2. **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 runs `doctor` + `git-ssh`.
|
|
`self-update` auto-discovers the local engineering clone and `git pull`s 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 stdlib `unittest` suite, the `ShellExecutor` DI 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.
|
|
- `engineering` was unregistered (no `app.json` anywhere).
|
|
- A concurrent session held the shared engineering checkout on
|
|
`slice3-provision-vm-scaffold-gitea`.
|
|
|
|
## Turn-by-turn arc
|
|
|
|
1. **Session init.** Computed start (16-59 PST). The claim script could not
|
|
resolve the app — `engineering` had no `app.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.)
|
|
2. **Read the SPEC/ROADMAP + the whole v0.1 package** to ground the design.
|
|
3. **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*.
|
|
4. **Registered engineering**: relocated the worktree under `~/git` so the new
|
|
`app.json` was discoverable, wrote it, dry-ran then **claimed session 0001**
|
|
(pushed the placeholder to `wiggleverse/session-history`).
|
|
5. **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 the `self-update` verb; §1.3 updated to admit
|
|
`self-update` as a mutating verb. ROADMAP → v0.2 shipped.
|
|
6. **Build**: `tools/amalgamate.py` (inlines the `devenv` modules **verbatim** via
|
|
a `sys.meta_path` finder + embeds the bootstrap subset → `dist/wgl-devenv`);
|
|
`devenv/bootstrap.py` (single-file orchestration + runbook resolution: override
|
|
→ local clone → cache → embedded); `devenv/selfupdate.py` (`git pull` through
|
|
the executor seam); `devenv/__main__.py` (makes `python3 -m devenv` work — a
|
|
latent v0.1 README/bug gap); README + pyproject + .gitignore (track only
|
|
`dist/wgl-devenv`).
|
|
7. **Tests**: +16 (amalgamation drift/round-trip, runbook resolution, self-update
|
|
via `FakeExecutor`) → **48 green**; `subprocess` still only in `executor.py`.
|
|
Smoke-tested the single file copied to `/tmp`: `doctor` 2/2 PASS,
|
|
`run git-ssh --dry-run`, `self-update` fail-loud remediation. (One real-git
|
|
end-to-end smoke test of `self-update` was denied by the sandbox; covered
|
|
instead by the FakeExecutor unit tests + the proven SubprocessExecutor path.)
|
|
8. **Push + PR #7** (SSH-only, push-before-review). Created via the Gitea API
|
|
helper (this is Gitea, not GitHub).
|
|
9. **Finalize (this wrap-up).** `main` had advanced — PR #6 ("retire the per-app
|
|
operator-cli repo role") merged while this work was in flight. Checked: it
|
|
touched only `README.md`; the schema `contains` enum still has `operator-cli`,
|
|
so the `app.json` tag stayed valid. Gitea recomputed `mergeable` → 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-bootstrap` deleted (remote + local),
|
|
worktree `engineering-v0.2` removed.
|
|
- `main` is at `9ae325d`; 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-gitea` checkout 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-devenv` is on
|
|
`main`, but no public HTTPS URL is published yet. To actually hand a bare laptop
|
|
the `curl -fsSL <url>/wgl-devenv` line, 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 `engineering` repo root has
|
|
no `CLAUDE.md` importing `@~/.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).
|
|
```
|