feat(watch): close the three operator watch gaps #2006

Merged
sean merged 1 commit from feat/w2-watch-gaps into trunk 2026-08-07 17:52:44 +00:00
Owner

W2. G3 (Environment/Target), G5 (projected twin), G9 (provision Job) all converted; G7 and G8 stay deferred with reasons.

Four mutations proved the tests load-bearing — one showed my first test was NOT pinning what its name claimed (the inner name check, not the entry guard, was excluding the self-map). Strengthened to two declared intents sharing project+version, where a missing guard makes each status write re-enqueue its partner forever.

127/127 guards, 14/14 packages.

W2. G3 (Environment/Target), G5 (projected twin), G9 (provision Job) all converted; G7 and G8 stay deferred with reasons. Four mutations proved the tests load-bearing — one showed my first test was NOT pinning what its name claimed (the inner name check, not the entry guard, was excluding the self-map). Strengthened to two declared intents sharing project+version, where a missing guard makes each status write re-enqueue its partner forever. 127/127 guards, 14/14 packages.
feat(watch): close the three operator watch gaps
All checks were successful
pipeline/ci CI green @ 48a47d46c656
48a47d46c6
W2 of RELEASE-TRAIN-AND-EVENT-TRIGGERS.md.

G3: PipelineEnvironment and PipelineTarget were watched by nothing, so flipping
an environment from manual to automatic converged only through the ten-minute
approval requeue. Two Watches with generation predicates now wake the deploys
held on the affected targets. The fan-out reuses deploysForRelease's filter: a
deploy that already owns a workflow is driven by its own workflow's events.

G5: the projected twin a declared intent follows was watched by nothing --
For() sees only the intent itself -- so the twin-appears wait ran on a 60s
requeue and the status mirror on a 5s one. A mapper closes both, and the mirror
returns to being a backstop.

G9: the provision Job was watched by nothing, so both Provisioning waits were
short requeues that could only discover completion by looking again. A label
mapper plus a terminal-transition predicate delivers it as an event, and the
waits become provisionSettleBackstop. No Owns(), so no ownerReference changes.
The 2m failed-Job self-retry stays bounded, as AGENTS.md requires.

G7 and G8 stay deferred with their reasons recorded.

Four mutations proved the tests load-bearing, and one of them showed my own
first test was not pinning what its name claimed: the inner name check, not the
entry guard, was excluding the self-map. The test now uses two declared intents
sharing a project and version -- the case that actually distinguishes them, and
the one where the missing guard makes each status write re-enqueue its partner
forever.
sean merged commit 48a47d46c6 into trunk 2026-08-07 17:52:44 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sean/pipelines!2006
No description provided.