Conversation
The owner becomes one module that owns the orchestrator, network namespace, credentials and endpoints, instead of a stack of nested service layers. Definition changes serialize through one gate that rejects work while draining, a failed creation rolls back credentials it introduced, and owner errors keep string messages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Sep 25, 2026
jgoux
marked this pull request as ready for review
September 25, 2026 21:39
Contributor
There was a problem hiding this comment.
🤖 AI Review
All three findings are confirmed. Saved definitions can become visible before live registration completes; a config restart can delay shutdown while waiting for prerequisite readiness; and a new architecture table attributes a lease to StackHost that the current code does not acquire.
Findings
| Severity | Location | Category | Sources | Claim |
|---|---|---|---|---|
| 🟠 MAJOR | packages/stack/src/Owner.ts:414 |
consistency |
codex | Concurrent get/list calls can return a newly saved service before the owner registers it, so start or status can fail for an ID that was just returned. |
| 🟡 MINOR | packages/stack/src/Owner.ts:591 |
concurrency |
claude | A config-changing restart holds the definition gate through prerequisite readiness, delaying shutdown and other definition changes if a prerequisite remains unhealthy. |
| ⚪ NIT | packages/stack/ARCHITECTURE.md:430 |
documentation |
claude | The new module table says StackHost owns a lease, but the current host acquires a control listener and has no separate stack lease. |
Stats
Claude findings: 2 · Codex findings: 1 · Confirmed: 3 · Refuted: 0 · Uncertain: 0
Models: claude-opus-5-5 + gpt-6-sol · Trigger: auto · Workflow run
This review runs once per PR. A maintainer can request another with a /ai-review comment.
…k-3-flatten-owner
- Describe StackHost exclusivity as the control-port claim in the module table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
AI review triage Fixed in eb6b2d2:
Deferred (valid, but out of scope for this PR; recorded here):
Every review thread on this PR has been answered and resolved. 🤖 Addressed by Claude Code |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The owner process had accumulated parallel structures:
Owner, with errors rewrapped through three types.Owner.ts.Definition changes ran on the caller's fiber. A client disconnecting mid-
createServicecould leave an instance instate.jsonthat the live owner didn't know about, or leak a network namespace so that the next destroy failed.Change
Ownerbuilds the RPC handlers directly, with one error mapping.OwnerError, the mirrored interface and the pass-through handlers are gone.host/Credentialsand shared routes tohost/Endpoints.Stack
Part 3 of 8 of the stack package simplification, based on #6835. Review and merge in order:
🤖 Generated with Claude Code