From 5e62f4acfe696a454e5ed181cd7dfc384aa56f8b Mon Sep 17 00:00:00 2001 From: MechaCat02 Date: Tue, 23 Jun 2026 21:20:32 +0200 Subject: [PATCH] docs(design): mark Phase 1 shipped + record decisions/deferrals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fold the implementation outcome back into the project-tool spec (§11) as the design asks. Records what landed (init/pull/config/plan/apply/prune, env overlays, enabled lifecycle, trigger name+backfill, content-fingerprint bound-plan, apply lock) and the deliberate deferrals: tree-structure version → groups; vars/--explain → Phase 3; trigger upsert-by-name + the dashboard enabled toggle → tracked follow-ups beyond the §11 bullets. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/design/groups-and-project-tool.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/design/groups-and-project-tool.md b/docs/design/groups-and-project-tool.md index dd19cbf..5158628 100644 --- a/docs/design/groups-and-project-tool.md +++ b/docs/design/groups-and-project-tool.md @@ -813,6 +813,23 @@ Resolved items now live inline next to their topic. What genuinely remains: ## 11. Suggested phasing +> **Status (Phase 1): ✅ shipped.** `init`, `pull`, `config --effective`, manifest parse/validate, +> `plan` + `apply` (single-transaction desired-state write, post-commit route refresh, domains/files +> outside the tx), `prune`, secrets push, `.picloud/` link state, env-scoped overlays +> (`picloud..toml` base+overlay), the three-state `enabled` lifecycle on scripts/routes (runtime +> 404 + dispatcher fire-time re-check), the trigger `name` column + backfill, a coarse per-app apply +> lock, and in-flight-finish-no-kill all landed. +> +> The **bound-plan staleness check** is the **content-fingerprint** form (a `state_token` hash of the +> live state; apply 409s if it moved) rather than a persisted plan-artifact + serial — it delivers the +> §4.2 guarantee without a migration or interactive-write-path changes, and the token covers +> `enabled`/secret names so the **`enabled`/secrets conflict** is enforced on the plan→apply path. +> +> Deferred, with rationale: the **tree-structure version counter** is a no-op seam until groups exist +> (Phase 2); **`vars`** + multi-level/`--explain` resolution and the richer per-env overlay are Phase 3; +> trigger **upsert-by-name** (in-place Update; the diff still Create/Deletes by semantic identity) and +> the **dashboard enabled toggle** are tracked follow-ups beyond the §11 bullets. + 1. **Declarative project tool, single-app (no groups yet).** `init`, `pull`/`config --effective`, manifest parse/validate, `plan` (bound artifact), `apply` (**atomic desired-state write — requires the manager-core post-commit-refresh restructuring of §4.2, domains/files excluded from the