From 0f7ba926ea1080326d2fc7b3d405aa361765bd00 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Thu, 17 Sep 2026 14:23:12 +0200 Subject: [PATCH] docs(phase-02): evolve PROJECT.md after phase completion --- .planning/PROJECT.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md index 82fdea0..894e70c 100644 --- a/.planning/PROJECT.md +++ b/.planning/PROJECT.md @@ -21,6 +21,12 @@ Validated in Phase 1: Framework kernel foundation - [x] A typed in-process event bus lets plugins subscribe to each other's events - [x] Console command framework with registration, dispatch and rich output (spinners, progress, tables, prompts), the design carried over from summer-bonfire; `summer make:plugin` / `plugin:add` shipped in Phase 1 (model, controller, migration, command, job scaffolds remain for Phase 4) +Validated in Phase 2: API parity harness bootstrap + +- [x] `summer parity:record`, `parity:replay` and `parity:proxy` on the Phase 1 bonfire kernel capture live PHP (154 routes plus real Nuxt and MCP flows) into versioned YAML fixtures with secrets scrubbed to placeholders +- [x] Replay-and-diff against an arbitrary HTTP backend reports JSON-path and byte-offset mismatches; the normalizer fails the named parity classes (nil vs `[]`, Carbon `Z` vs `+00:00`, tri-state booleans, envelopes, money string vs number) +- [x] App `go test ./parity` starts testcontainers Postgres; unported PHP routes stay pending and never count as a Go pass; `scripts/check-phase2.sh --fresh-php` is the sign-off gate + ### Active Framework kernel @@ -61,7 +67,7 @@ Admin Quality - [ ] `go vet` and `go test ./...` green at every commit; each phase ends with a unit-test plan bringing its code to full coverage -- [ ] An API parity test suite replays the Nuxt app's and MCP server's requests against both backends and diffs responses +- [ ] Cutover: the Phase 2 parity harness is green on all 154 routes against the ported Go backend (QA-05); the recorder/replayer itself is validated - [ ] Definition of done: `vue-fonoteka-app` and `fonoteka-mcp` run unchanged against the Go backend, in daily use ### Out of Scope @@ -129,7 +135,7 @@ Quality | koanf + YAML config, goccy/go-yaml everywhere | No maintained Go HOCON parser; `gopkg.in/yaml.v3` upstream archived April 2025; one YAML library for config and admin schemas | — Pending | | swaggo/swag for OpenAPI, not Huma | Comment annotations on plain net/http handlers keep 154 ported routes byte-compatible; Huma would reshape every handler | — Pending | | GORM + River share one `*sql.DB` (pgx stdlib) with a separate pgx pool for LISTEN/NOTIFY | River's documented GORM integration; transactional enqueue inside GORM transactions | — Pending | -| Parity harness is a day-one workstream | Fixture recording needs only the running PHP backend; it is the acceptance mechanism for every port phase | — Pending | +| Parity harness is a day-one workstream | Fixture recording needs only the running PHP backend; it is the acceptance mechanism for every port phase | ✓ Good (Phase 2, 2026-09-17: 154/154 PHP self-replay, Nuxt/MCP fixtures, testcontainers Go runner) | | Framework and application in two repos from day one (`summercms.go`, `fonoteka.go`) | Retrofitting the split later is more disruptive; shared stack plugins can be extracted for keios.eu without touching the framework; the framework never imports an app | — Pending (chosen 2026-09-16) | ## Evolution @@ -150,4 +156,4 @@ This document evolves at phase transitions and milestone boundaries. 4. Update Context with current state --- -*Last updated: 2026-09-16 after Phase 1 completion* +*Last updated: 2026-09-17 after Phase 2 completion*