Skip to content

feat(supervisor): S4 delivery edge (where_is → cast) — S4 mechanism complete#577

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/jirak-math-theorems-harvest-rfii13
Jun 21, 2026
Merged

feat(supervisor): S4 delivery edge (where_is → cast) — S4 mechanism complete#577
AdaWorldAPI merged 1 commit into
mainfrom
claude/jirak-math-theorems-harvest-rfii13

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

S4 delivery edge — deliver_kanban_step (where_is → cast); S4 complete

Completes S4 on top of #576's owner-advance actor — same light lance-graph-supervisor crate, real + tested.

What landed (kanban_actor)

  • parse_kanban_step("kanban.<mailbox>.<phase>") → (mailbox, KanbanColumn) — snake_case phase vocabulary; None for 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's try_advance_phase result. The target is recovered from the step string + the registry — no bespoke bridge registry, no UnifiedStep field (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 (relayed RubiconTransitionError) / Rpc.

Verified

  • 4 tests green under --features supervisor: owner-advance, illegal-edge-no-mutation, parse_kanban_step_shapes, and delivery_edge_resolves_via_registry_then_advances (legal advance via where_is; unknown mailbox → graceful NoMailbox; illegal edge → Illegal; malformed → BadStepType).
  • clippy clean (fixed an 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

…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
@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@AdaWorldAPI, we couldn't start this review because you've reached your PR review rate limit.

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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b8e8a494-9801-446a-aac6-d9485da96ea6

📥 Commits

Reviewing files that changed from the base of the PR and between 26066a1 and d1aa360.

📒 Files selected for processing (3)
  • .claude/board/AGENT_LOG.md
  • .claude/plans/capstone-out-leg-wiring-v1.md
  • crates/lance-graph-supervisor/src/kanban_actor.rs

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AdaWorldAPI AdaWorldAPI merged commit 3e5c689 into main Jun 21, 2026
5 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +160 to +163
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 })

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants