Files
summercms/.planning/phases/14-domain-jobs-and-external-integrations/14-VALIDATION.md

5.2 KiB

phase, slug, status, nyquist_compliant, wave_0_complete, created
phase slug status nyquist_compliant wave_0_complete created
14 domain-jobs-and-external-integrations draft false false 2026-10-03

Phase 14 — Validation Strategy

Per-phase validation contract for feedback sampling during execution.


Test Infrastructure

Property Value
Framework go test (+ testify), testcontainers-go postgres, tide parity replay
Config file none (Go); gate script scripts/check-phase14.sh (Wave 0, modelled on check-phase13.sh)
Quick run command go -C ../fonoteka.go test ./plugins/golem15/fonoteka/... -count=1 -short
Full suite command go test ./... -count=1 && go -C ../fonoteka.go test ./... -count=1 -race && bash scripts/check-phase14.sh --all
Estimated runtime ~180 seconds

Sampling Rate

  • After every task commit: the task's named -run tests plus go vet in the touched repo
  • After every plan wave: go test ./... in both repos plus TestParityCorpus / TestFonotekaNuxtFlows
  • Before /gsd-verify-work: scripts/check-phase14.sh --all must be green
  • Max feedback latency: 180 seconds

Per-Task Verification Map

Req ID Behavior Test Type Automated Command File Exists Status
JOBS-02 CSV match job: 0/1/many, gate off, cancel, superseded, 429 re-dispatch delay, 240 s timeout value unit + Postgres go -C ../fonoteka.go test ./plugins/golem15/fonoteka -run '^TestCsvMatchJob' -count=1 -race ❌ W0 ⬜ pending
JOBS-02 CSV import job: overwrite/fill/create, write_failed row, canceled, bulk_updated publish once unit + Postgres go -C ../fonoteka.go test ./plugins/golem15/fonoteka -run '^TestCsvImportJob' -count=1 -race ❌ W0 ⬜ pending
JOBS-02 WR-02: racing commit vs mapping/row-edit/cancel queues at most one import job Postgres go -C ../fonoteka.go test ./plugins/golem15/fonoteka -run '^TestCsvWR02' -count=1 -race ❌ W0 ⬜ pending
JOBS-03 Digest: 30-min coalescing, sent count, queue row deleted, en/pl template unit + Postgres go -C ../fonoteka.go test ./plugins/golem15/fonoteka -run '^TestWishlistDigestJob' -count=1 -race ❌ W0 ⬜ pending
SRCH-02 reindex: zero collection_id-0 before/after, drop legacy index unit (fake engine) go -C ../fonoteka.go test ./plugins/golem15/fonoteka -run '^TestReindexCommand' -count=1 ❌ W0 ⬜ pending
CLI-05 prune-notifications + schedule entry; reindex; oauth-client unit + Postgres `go -C ../fonoteka.go test ./plugins/golem15/fonoteka -run '^(TestPruneNotifications TestSchedule)' -count=1` partial
INTG-01 Discogs limiter threshold, wait budget, retry-after, fake clock unit + Postgres go -C ../fonoteka.go test ./plugins/golem15/fonoteka/classes/discogs -count=1 -race ❌ W0 ⬜ pending
INTG-01 Discogs routes parity with upstream sidecars parity `go -C ../fonoteka.go test ./parity -run '^(TestParityCorpus TestCheckCorpusPortedCaseStatus)$' -count=1` partial
INTG-02 Adapters build PHP payloads; SSRF guard; admin trusted bypass unit + parity go -C ../fonoteka.go test ./plugins/golem15/golem/... -count=1 ❌ W0 ⬜ pending
INTG-02 Recognition retry, truncation, admin vision tier unit + parity go -C ../fonoteka.go test ./plugins/golem15/fonoteka -run '^TestRecognize' -count=1 ❌ W0 ⬜ pending
API-08 Feedback config/submit/options/me-hidden, origin gate, G15Office job via fake unit + parity go -C ../fonoteka.go test ./plugins/golem15/feedback/... -count=1 -race ❌ W0 ⬜ pending
framework fetchguard client modes; redact handler; tide sidecar replay unit go test ./modules/fetchguard/... ./modules/tide/... -count=1 ❌ W0 ⬜ pending

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


Wave 0 Requirements

  • fonoteka.go/parity/discogs_truth_tables.php — truth-table generator (csv_truth_tables.php pattern)
  • tide upstream sidecar loader + fake and the replay hook for *.upstream.yaml
  • Shared fake clock helper for limiter, client and job tests
  • Harness to run a conga worker function directly without a live River client
  • scripts/check-phase14.sh with updated EXPECTED_PORTED / EXPECTED_PENDING

Manual-Only Verifications

Behavior Requirement Why Manual Test Instructions
Live Discogs / Anthropic / OpenAI / G15Office exchanges INTG-01, INTG-02, API-08 CI makes no live vendor calls (D-15) Record sidecars once against PHP with real credentials; replay is offline
Feedback widget embed in the Nuxt app API-08 Browser rendering Load the Nuxt app against the Go backend, submit feedback with a screenshot

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 < 180s
  • nyquist_compliant: true set in frontmatter

Approval: pending