5.2 KiB
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
-runtests plusgo vetin the touched repo - After every plan wave:
go test ./...in both repos plusTestParityCorpus/TestFonotekaNuxtFlows - Before
/gsd-verify-work:scripts/check-phase14.sh --allmust 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.shwith updatedEXPECTED_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: trueset in frontmatter
Approval: pending