Files
summercms/.planning/phases/05-data-layer-full-fidelity/05-VALIDATION.md
2026-09-18 15:47:30 +02:00

4.3 KiB

phase, slug, status, nyquist_compliant, wave_0_complete, created
phase slug status nyquist_compliant wave_0_complete created
5 data-layer-full-fidelity draft false false 2026-09-18

Phase 5 — Validation Strategy

Per-phase validation contract for feedback sampling during execution.


Test Infrastructure

Property Value
Framework Go stdlib testing + testify (assert/require) + testcontainers-go modules/postgres v0.44.0
Config file none — plain func TestX(t *testing.T); TestMain pattern per lagoon/postgres_test.go and fonoteka.go/parity
Quick run command go vet ./... && go test ./... -short (run in the repo the task writes to)
Full suite command go test ./... in summercms.go and in ../fonoteka.go (real Postgres via testcontainers)
Estimated runtime ~20 s quick, ~120 s full

Sampling Rate

  • After every task commit: Run go vet ./... && go test ./... -short
  • After every plan wave: Run go test ./... in both repos
  • Before /gsd:verify-work: Full suite green in both repos, including the D-02 schema-diff test
  • Max feedback latency: 120 seconds

Per-Task Verification Map

Task IDs are filled in by the planner; the requirement → test mapping below is the contract.

Task ID Plan Wave Requirement Threat Ref Secure Behavior Test Type Automated Command File Exists Status
TBD TBD TBD DATA-03 — Cascading soft delete runs in one transaction integration go test ./plugins/golem15/fonoteka/... -run TestCollectionBeforeDeleteCascadesAlbums ❌ W0 ⬜ pending
TBD TBD TBD DATA-04 — N/A integration go test ./plugins/golem15/fonoteka/... -run TestAlbumArtistsOrderRoundTrip ❌ W0 ⬜ pending
TBD TBD TBD DATA-05 — Untranslatable rule fails loudly; 422 map Laravel-shaped unit + integration go test ./lagoon/... -run TestValidate ❌ W0 ⬜ pending
TBD TBD TBD DATA-06 TBD Unknown / server-owned keys never persisted integration (fuzz) go test ./lagoon/... -run TestFill and go test ./plugins/golem15/fonoteka/... -run TestAlbumWriteServiceFillFuzz ❌ W0 ⬜ pending
TBD TBD TBD DATA-07 TBD Ciphertext at rest, redacted marshal, plaintext only via Reveal(); money never float64 unit + integration go test ./lagoon/... -run TestEncrypted; go test ./plugins/golem15/fonoteka/models/... -run TestMoneyString ❌ W0 ⬜ pending
TBD TBD TBD DATA-08 — Force delete removes blobs only after commit unit + integration `go test ./lagoon/attach/... -run 'TestThumbFilename TestFileLifecycle'` ❌ W0
TBD TBD TBD DATA-09 — N/A integration go test ./parity/... -run TestSchemaMatchesPHPSnapshot ❌ W0 ⬜ pending
TBD TBD TBD DATA-10 — N/A unit go test ./lagoon/... -run TestPaginate ❌ W0 ⬜ pending
TBD TBD TBD DATA-11 — N/A integration go test ./plugins/... -run TestCrossPluginCallback ❌ W0 ⬜ pending
TBD TBD TBD CLI-03 — Rollback touches only the named plugin's history integration go test ./cmd/summer/... -run TestRollbackScopedToPlugin ❌ W0 ⬜ pending

Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky


Wave 0 Requirements

  • fonoteka.go/parity/testdata/php_schema_snapshot.sql — committed D-02 golden snapshot of the PHP final schema
  • lagoon/fill_test.go, lagoon/validate_test.go, lagoon/encrypted_test.go, lagoon/paginate_test.go — tests for the new lagoon primitives
  • lagoon/attach/ package (File model, blob wiring, Thumb()) — does not exist yet
  • Existing test infra (lagoon/postgres_test.go TestMain, fonoteka.go/parity TestMain) is reused, not rebuilt

Manual-Only Verifications

All phase behaviors have automated verification.


Validation Sign-Off

  • All tasks have <automated> verify or Wave 0 dependencies
  • Sampling continuity: no 3 consecutive tasks without automated verify
  • Wave 0 covers all MISSING references
  • No watch-mode flags
  • Feedback latency < 120s
  • nyquist_compliant: true set in frontmatter

Approval: pending