fix(fleet): keep adjacent dispatches reusable - #470
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review Requested for exact head |
Session-Id: 01a06e0f-f7a1-7902-b058-9129b9679596 Session-Id: 01a06e0f-f7a1-7902-b058-9129b9679596
Session-Id: 01a06e0f-f7a1-7902-b058-9129b9679596
be58cbd to
0b6df4e
Compare
|
@coderabbitai review Requested for exact head |
There was a problem hiding this comment.
All reported issues were addressed
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Session-Id: 01a06e0f-f7a1-7902-b058-9129b9679596
|
Addressed all four Cubic findings on head
Final focused suites: 112 passed; |
|
@coderabbitai review Requested for exact head |
There was a problem hiding this comment.
1 issue found across 4 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="src/fleet/control-plane-circuit.ts">
<violation number="1" location="src/fleet/control-plane-circuit.ts:221">
P2: When `resetTimeoutMs` is shorter than `rosterTimeoutMs`, a half-open mutation can join the stale pre-open probe instead of starting recovery. That probe rejects after the generation changes, so the mutation fails and no recovery roster probe runs. Make `probe()` ignore an in-flight request from an older open generation when starting half-open recovery.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| // half-open must run the recovery probe even if older evidence exists. | ||
| const admissionState = circuit.status().state | ||
| if (admissionState === 'open') circuit.assertMutationAllowed() | ||
| if (admissionState === 'half-open' || !hasFreshAdmissionEvidence()) await probeRoster(true) |
There was a problem hiding this comment.
P2: When resetTimeoutMs is shorter than rosterTimeoutMs, a half-open mutation can join the stale pre-open probe instead of starting recovery. That probe rejects after the generation changes, so the mutation fails and no recovery roster probe runs. Make probe() ignore an in-flight request from an older open generation when starting half-open recovery.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/fleet/control-plane-circuit.ts, line 221:
<comment>When `resetTimeoutMs` is shorter than `rosterTimeoutMs`, a half-open mutation can join the stale pre-open probe instead of starting recovery. That probe rejects after the generation changes, so the mutation fails and no recovery roster probe runs. Make `probe()` ignore an in-flight request from an older open generation when starting half-open recovery.</comment>
<file context>
@@ -204,9 +214,11 @@ export function guardFleetControlPlane(
+ // half-open must run the recovery probe even if older evidence exists.
+ const admissionState = circuit.status().state
+ if (admissionState === 'open') circuit.assertMutationAllowed()
+ if (admissionState === 'half-open' || !hasFreshAdmissionEvidence()) await probeRoster(true)
circuit.assertMutationAllowed()
try {
</file context>
Session-Id: 01a06e0f-f7a1-7902-b058-9129b9679596
|
Addressed Cubic’s follow-up P2 on head |
|
@coderabbitai review Requested for exact head |
There was a problem hiding this comment.
All reported issues were addressed across 2 files (changes from recent commits).
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
Session-Id: 01a06e0f-f7a1-7902-b058-9129b9679596
|
@coderabbitai review Requested for exact head |
|
Addressed Cubic’s latest P2 on exact head |
Summary
Why
A full fleet inventory can exceed the five-second admission boundary in a workspace with substantial historical node data. Repeating it between sequential implementer and reviewer placements can strand a half-created team. Separately, releasing only the runtime retains its create-only identity, so retrying the deterministic name collides.
The release metadata is included here so these required fixes can be deployed without merging the older release-only PR #460. Publication remains exclusively through the repository publish workflow and the next dist-tag.
Validation
d780d09)The complete local suite used an existing dependency tree because no install was performed: 2,468 tests passed; nine unrelated tests failed because that tree lacks the built dist artifacts and has an incompatible persona-kit export. Clean-runner CI is the merge gate.