feat(supervisor): S4 delivery edge (where_is → cast) — S4 mechanism complete#577
Conversation
…cast), S4 complete Completes S4 on top of #576's owner-advance actor. New in lance-graph-supervisor::kanban_actor: - parse_kanban_step("kanban.<mailbox>.<phase>") -> (mailbox, KanbanColumn) (snake_case phase vocabulary). - deliver_kanban_step(step_type): resolve the mailbox via the actor system's OWN name registry (ractor::registry::where_is) and cast KanbanMsg::Advance; relay the owner's try_advance_phase result. Address source = the step string + the registry — no bespoke bridge registry, no UnifiedStep field (the codex-#574-corrected design). - KanbanRouteError: BadStepType / NoMailbox (routing miss, not a no-owner case) / Illegal (relayed RubiconTransitionError) / Rpc. +2 tests (4 total green): parse shapes + delivery (legal advance via where_is, unknown mailbox -> NoMailbox, illegal edge -> Illegal, malformed -> BadStepType). clippy clean (fixed unnecessary_to_owned) + fmt; light build, no disk/symbiont. S4 mechanism is now COMPLETE end-to-end (owner-advance + delivery edge); only the S2/S3 drivers that SEND Advance remain, composing on top. AGENT_LOG cont.32. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
|
Warning Review limit reached
More reviews will be available in 13 minutes and 32 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
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 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d1aa360dcc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let cell = ractor::registry::where_is(mailbox) | ||
| .ok_or_else(|| KanbanRouteError::NoMailbox(mailbox.to_string()))?; | ||
| let actor: ActorRef<KanbanMsg> = cell.into(); | ||
| let inner = ractor::call!(actor, |reply| KanbanMsg::Advance { to, reply }) |
There was a problem hiding this comment.
Validate registry hits before sending KanbanMsg
Because the ractor name registry is untyped, this lookup can return any actor registered under the supplied string, not necessarily a KanbanActor. In this crate the supervisor already registers non-kanban actors under names like consumer_g_{g}, so a step such as kanban.consumer_g_2.cognitive_work would coerce that actor cell to ActorRef<KanbanMsg> and send it a message of the wrong type, which ractor treats as a runtime message-type failure instead of the NoMailbox/Rpc miss this API promises. Use a kanban-specific namespace or a typed kanban registry before sending the RPC.
Useful? React with 👍 / 👎.
S4 delivery edge —
deliver_kanban_step(where_is → cast); S4 completeCompletes S4 on top of #576's owner-advance actor — same light
lance-graph-supervisorcrate, real + tested.What landed (
kanban_actor)parse_kanban_step("kanban.<mailbox>.<phase>") → (mailbox, KanbanColumn)— snake_case phase vocabulary;Nonefor malformed.deliver_kanban_step(step_type)— the delivery edge: resolve the mailbox via the actor system's own name registry (ractor::registry::where_is) →cast(KanbanMsg::Advance { to })→ relay the owner'stry_advance_phaseresult. The target is recovered from the step string + the registry — no bespoke bridge registry, noUnifiedStepfield (the codex-docs(capstone): S4 ractor-owner correction — no owner-registry, no no-owner test (operator override) #574-corrected design).KanbanRouteError:BadStepType/NoMailbox(a routing miss — distinct from the impossible "no owner": a live mailbox is always owned) /Illegal(relayedRubiconTransitionError) /Rpc.Verified
--features supervisor: owner-advance, illegal-edge-no-mutation,parse_kanban_step_shapes, anddelivery_edge_resolves_via_registry_then_advances(legal advance viawhere_is; unknown mailbox → gracefulNoMailbox; illegal edge →Illegal; malformed →BadStepType).unnecessary_to_owned), fmt clean; light build (no disk/symbiont gate).Net
S4's mechanism is now complete end-to-end — owner-advance (#576) + delivery edge. Only the S2/S3 drivers that send
Advance(the MUL gate, the live version tick) remain, and they compose on top of this. Your model — every SoA is ractor-owned; the owner advances itself; addressing via the actor registry — is now real, tested code.Changes
crates/lance-graph-supervisor/src/kanban_actor.rs— delivery edge + 2 tests.claude/plans/capstone-out-leg-wiring-v1.md— S4 → COMPLETE.claude/board/AGENT_LOG.md— cont.³²🤖 Generated with Claude Code
Generated by Claude Code