docs(_plans): record Phase C1-C5 status (C3 deferred pending product call)

This commit is contained in:
Dan Sutton
2026-05-20 17:26:49 +01:00
parent 0183e43677
commit 6d04414bc7
+6 -1
View File
@@ -20,7 +20,12 @@
| **Phase B5 — mutateWithFallback helper** | ✅ **Done** | `dea1c7c0d` | Discriminated outcome (pg/snapshot/not_found/timed_out); never throws Response so it's route-agnostic and unit-tested in isolation |
| **Phase B6a — buffer idempotency primitives** | ✅ **Done** | `0c7c07dd0` | accept SETNXes lookup; ack DELs it; new lookupIdempotency + resetIdempotency methods. accept return shape now discriminated `AcceptResult` |
| **Phase B6b — trigger/reset integration** | ✅ **Done** | `51b471c12` | IdempotencyKeyConcern checks both stores; ResetIdempotencyKeyService clears both; mollifyTrigger handles `duplicate_idempotency` race-loser case. resumeParentOnCompletion deliberately skipped (waitpoint needs PG row) |
| **Phase B complete** | ✅ | — | Phase C (mutation endpoints — cancel, tags, metadata PUT, reschedule, replay) is next |
| **Phase B complete** | ✅ | — | |
| **Phase C1 — cancel** | ✅ **Done** | `d4f734213` | `engine.createCancelledRun` + drainer bifurcation + route via mutateWithFallback. Q4 design |
| **Phase C2 — tags** | ✅ **Done** | `3534f1330` | Closes the live 500 the parity script flagged. MAX_TAGS skipped on buffer side (matches today's pre-buffer trigger semantics) |
| **Phase C3 — metadata PUT** | ⏸️ Deferred | — | The operations API (`operations` / `parentOperations` / `rootOperations` in `FlushedRunMetadata`) needs a product decision for buffered runs — operations are deltas against a materialised TaskRun, so they don't translate cleanly to snapshot patches. The simple replace (`body.metadata` only) case could land via `set_metadata`, but isolating that branch from the operations path requires a route restructure. Pending |
| **Phase C4 — reschedule** | ✅ **Done** | `0183e4367` | `set_delay` patch; PG-side `RescheduleTaskRunService` still enforces non-DELAYED rejection via wait-and-bounce |
| **Phase C5 — replay** | ✅ **Done** | `0183e4367` | Read-fallback after PG miss; SyntheticRun-as-TaskRun cast (B4 work) feeds existing `ReplayTaskRunService`. Also tightens PG lookup to env-scoped findFirst |
| Phase C — mutation endpoints | ⏳ Pending | — | cancel first (drives B), then tags/metadata-put/reschedule/replay |
| Phase D — dashboard internals | ⏳ Pending | — | reuse C paths |
| Phase E — listing endpoints | ⏳ Pending | — | Q1 design |