Skip to content

Commit 3c82b03

Browse files
gustavobertoiclaude
andcommitted
docs: update status — M2 differentiator core landed
Records the M2 progress (ledger CRUD, docker network/compose driver, provisioning, ref-counting/reconcile, `shared status`) and the two items remaining for M2: the up/down saga + `shared gc` (daemon orchestration, needs the integration lane), and the design call that the shared Postgres needs a ledger-allocated published host port so host-side pgx provisioning can connect. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 352fb0b commit 3c82b03

1 file changed

Lines changed: 25 additions & 8 deletions

File tree

CLAUDE.md

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -165,16 +165,33 @@ implemented and green (`make ci` + `make determinism`):
165165
(shared engines) + `php.nginx``php.laravel.nginx` (extends) + `node.vite`.
166166
- `internal/lock` — the flock spine (with a concurrency test).
167167
- `internal/state` — modernc SQLite ledger, WAL/busy_timeout/foreign_keys, versioned
168-
migrations + backup, the spec-08 tables, keyed by Docker context.
168+
migrations + backup, the spec-08 tables, keyed by Docker context. **M2 CRUD layer**
169+
(`ledger.go`): ref-counting, port allocation, the provisioning ownership ledger,
170+
shared-service rows + reconcile/orphan queries — all under the flock.
169171
- `internal/xdg` — XDG paths, WSL2 detection, `/mnt/*` refusal, 9p/networked-FS detection.
170-
- `internal/docker` — read-only `Client` interface (+ `MockClient`), moby-backed impl,
171-
compose≥2.20 / git≥2.30 preflight.
172+
- `internal/docker` — read-only `Client` (+ `MockClient`), moby-backed impl,
173+
compose≥2.20 / git≥2.30 preflight. **M2**: `EnsureNetwork`/`NetworkExists`/
174+
`ListManaged` (label-filtered, All=true, one-offs excluded) + the `Compose` CLI
175+
driver (up/down/stop/build via an injectable `Runner`; `CmdError` carries cmd+code+stderr).
176+
- `internal/provision` *(M2)* — idempotent per-project Postgres role/db via guarded
177+
SQL behind a testable `Conn` interface; pgx/v5-backed impl + DSN builder (D8).
178+
- `internal/workspace` *(M2, the differentiator)* — resolves shared instances per
179+
`(engine,major)`, ref-counting register/unregister, self-healing reconcile from
180+
live containers, `shared status` projection, and host-port allocation (ledger ∪
181+
bind-test ∪ Docker-published union). Unit+race tested with the mock client.
172182
- `internal/alias` — registry + symlink installer; `internal/version` — ldflags target.
173-
- CI (`.github/workflows/`), `.goreleaser.yaml`, `Makefile`.
174-
175-
**Build order follows the ROADMAP**: M0 spine → M1 config+templating+generation →
176-
M2 shared services + workspace lifecycle (the differentiator) → M3 multi-repo git →
177-
then secrets (M4) / networking (M5) / onboarding+doctor+health+hooks (M6) / GA (M7).
183+
- CI (`.github/workflows/`: ci + release + installer + release-dryrun + determinism),
184+
`.goreleaser.yaml`, `Makefile`, `install.sh` (curl|sh installer). Tagged **v0.1.0**.
185+
186+
**Build order follows the ROADMAP**: M0 spine ✅ → M1 config+templating+generation ✅
187+
→ M2 shared services + workspace lifecycle (the differentiator) — **core landed**
188+
(ledger CRUD, docker network/compose driver, provisioning, ref-counting/reconcile,
189+
`shared status`); **remaining**: the `up`/`down` saga + `shared gc` (daemon
190+
orchestration — needs the dind/integration lane to build responsibly), and one
191+
design call to resolve first: **provisioning runs pgx from the host, so the shared
192+
Postgres needs a ledger-allocated published host port** (the default is no host
193+
ports) — wire that into generation + the up saga. → M3 multi-repo git → secrets
194+
(M4) / networking (M5) / onboarding+doctor+health+hooks (M6) / GA (M7).
178195
Anything that mutates shared state goes through `internal/lock` from its first commit.
179196

180197
## Conventions specific to this repo

0 commit comments

Comments
 (0)