docs(11): create phase plan
This commit is contained in:
@@ -634,24 +634,26 @@ func (d Daily) Next(now time.Time) time.Time {
|
||||
| A6 | `webpush-go` legitimacy/maintenance | Alternatives | Not recommended; irrelevant if hand-rolled |
|
||||
| A7 | Production Centrifugo is v6 (inferred from `.env.example` naming `client.token.hmac_secret_key`, `http_api.key`) | Pattern 8 | Header/proxy format is identical across v4–v6 per docs; low risk |
|
||||
|
||||
## Open Questions
|
||||
## Open Questions (RESOLVED)
|
||||
|
||||
1. **SC-1 wording vs `NewWithPgxListener`.**
|
||||
All seven were settled by the user at the plan-count checkpoint on 2026-09-29.
|
||||
|
||||
1. **SC-1 wording vs `NewWithPgxListener`.** RESOLVED: use `NewWithPgxListener`; ROADMAP SC-1 reworded (a1ed5b3).
|
||||
- What we know: River now ships an official single-driver LISTEN split, and the River GORM docs recommend it.
|
||||
- What's unclear: whether the user accepts it as meeting "a separate `riverpgxv5` client".
|
||||
- Recommendation: use `NewWithPgxListener`, state the mapping in the plan, and keep the timed test identical.
|
||||
2. **Where the River job id lives.**
|
||||
2. **Where the River job id lives.** RESOLVED: internal nullable `river_job_id BIGINT` column on `summer_jobs`.
|
||||
- What we know: D-04 needs `JobCancel(riverID)`. The D-01 column list has no slot for it.
|
||||
- Recommendation: add an internal nullable `river_job_id BIGINT` column. It is additive; cutover rows get NULL. The alternative is `JobList().Metadata('{"summer_job_id":N}')`, which is `[VERIFIED: job_list_params.go:362]` but slower.
|
||||
3. **Web Push scope (D-15).**
|
||||
3. **Web Push scope (D-15).** RESOLVED: port the seams as recommended (Pusher, stdlib VAPID, generate-vapid-keys, health, test-push via SubscriptionSource).
|
||||
- What we know: there is no PHP subscription store or dependency in Płytarium, and the Nuxt side has push seams only.
|
||||
- Recommendation: port the `Pusher` interface, the VAPID driver (RFC 8291/8292, tested with the RFC vector), `websockets:generate-vapid-keys` (P-256 via `crypto/ecdh`, base64url) and `websockets:health`. `websockets:test-push` takes subscriptions through an app-provided `SubscriptionSource` interface and reports "no subscription source" when none is registered. Confirm with the user.
|
||||
4. **tide capture mechanism (D-10 says "subscribe").**
|
||||
4. **tide capture mechanism (D-10 says "subscribe").** RESOLVED: fake Centrifugo HTTP recorder.
|
||||
- Recommendation: point PHP `CENTRIFUGO_API_URL` at a tide-owned fake Centrifugo HTTP recorder on loopback. The parity README already runs PHP with `QUEUE_CONNECTION=sync`, so `BroadcastEventJob` runs inline. Record `{path, Authorization-present, body}` as goldens with `timestamp`/`actor` normalised and the apikey redacted. No WebSocket dependency, and it captures channels. The Go side diffs its Centrifugo driver requests against a `httptest` fake the same way.
|
||||
5. **Schedule entry for a command that ships in Phase 14.**
|
||||
5. **Schedule entry for a command that ships in Phase 14.** RESOLVED: warn and skip unknown commands, with a test asserting the warning.
|
||||
- Recommendation: the scheduler logs a warning and skips unknown commands (no boot failure), and a test asserts the warning. Alternatively, land the fonoteka schedule entry in Phase 14.
|
||||
6. **ws-api ordering (Pitfall 11).** Confirm `jwt.auth` before `throttle:ws-api` on the token route. It only changes throttling of invalid-token spam.
|
||||
7. **Payload parity for created/updated** (Pitfall 15). Record the goldens now and assert the `album` subtree in Phase 12.
|
||||
6. **ws-api ordering (Pitfall 11).** RESOLVED: `jwt.auth` before `throttle:ws-api`. Confirm `jwt.auth` before `throttle:ws-api` on the token route. It only changes throttling of invalid-token spam.
|
||||
7. **Payload parity for created/updated** (Pitfall 15). RESOLVED: record goldens now; assert the `album` subtree in Phase 12. Record the goldens now and assert the `album` subtree in Phase 12.
|
||||
|
||||
## Environment Availability
|
||||
|
||||
|
||||
Reference in New Issue
Block a user