fix(stack): preserve lazy lifecycle in detached mode - #6046
Conversation
e273d2d to
706b171
Compare
f1e0c43 to
64bea19
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 64bea19f14
ℹ️ 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".
706b171 to
a6e0729
Compare
64bea19 to
89af0f2
Compare
a6e0729 to
fad354d
Compare
89af0f2 to
e2dd44f
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e2dd44f795
ℹ️ 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".
fad354d to
4265a74
Compare
e2dd44f to
f130bfd
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f130bfd263
ℹ️ 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".
4265a74 to
c2cdb81
Compare
ce21004 to
fb58086
Compare
c2cdb81 to
ac00e70
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fb580862d7
ℹ️ 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".
ac00e70 to
3ea143a
Compare
fb58086 to
e4738fa
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e4738fa597
ℹ️ 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".
3ea143a to
1f4a18a
Compare
e4738fa to
d958c83
Compare
1f4a18a to
2bd9fd1
Compare
d958c83 to
67ad946
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 67ad946444
ℹ️ 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".
2bd9fd1 to
d96ca0e
Compare
67ad946 to
b9891e0
Compare
d96ca0e to
86c6a70
Compare
b9891e0 to
6b836fd
Compare
86c6a70 to
9f2f7d4
Compare
6b836fd to
e1d2245
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e1d2245753
ℹ️ 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".
9f2f7d4 to
868f236
Compare
e1d2245 to
f1319ef
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f1319efa81
ℹ️ 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".
868f236 to
1ebb475
Compare
f1319ef to
e532be6
Compare
1ebb475 to
cc5effc
Compare
eb66904 to
938ee92
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 938ee92d68
ℹ️ 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".
cc5effc to
9639149
Compare
938ee92 to
038fc01
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 038fc012de
ℹ️ 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".
9639149 to
8d6ede9
Compare
038fc01 to
d486dd6
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d486dd6436
ℹ️ 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".
| process.platform === "win32" ? tmpdir() : "/tmp", | ||
| "supabase-stack-managed-port-locks", | ||
| ); | ||
| const PRIVATE_LOCK_ROOT = join(homedir(), ".supabase", "stack-state-locks"); |
There was a problem hiding this comment.
Derive state-lock storage from the configured root
When $HOME is read-only or unavailable but the caller supplies a writable cacheRoot/state root, every detached state write or removal now attempts to create ~/.supabase/stack-state-locks and defects before touching the configured storage. This breaks daemon registration in container and system-service environments that intentionally redirect all writable state away from the home directory; derive the private lock directory from the corresponding configured state/runtime root instead.
Useful? React with 👍 / 👎.
| sseStream<LogEntry>(socketPath, `/logs/${encodeURIComponent(name)}`, (data) => | ||
| decodeLogEntryEvent(data), |
There was a problem hiding this comment.
Reject dot-only names before building log URLs
In detached Bun mode, subscribeLogs("..") and logHistory("..") still do not address the dot-segment case because encodeURIComponent("..") remains ..; the Bun client constructs a fetch() URL that normalizes these paths to / or /history, so the methods die on an unmatched-route response instead of streaming or returning the literal service's empty log set as the foreground implementation does. Validate dot-only segments or use a transport that does not embed arbitrary log names in URL paths.
Useful? React with 👍 / 👎.
| // A daemon generation owns its socket pathname for its entire lifetime. | ||
| // Reusing a fixed pathname lets a delayed shutdown unlink a replacement | ||
| // daemon's socket after the replacement has already bound it. | ||
| const socketPath = join(runtimeDir, `daemon-${randomUUID().slice(0, 12)}.sock`); |
There was a problem hiding this comment.
Remove the obsolete fixed socket-path API
After this switches each daemon to daemon-<generation>.sock, the exported Effect API StateManager.socketPath(name) still returns <runtimeDir>/daemon.sock, and the detach-mode documentation and state example advertise that same fixed pathname. Any Effect consumer using the path helper now receives a socket that no daemon binds; remove or reshape the inaccurate helper and update the socket lifecycle documentation to direct consumers to the persisted generation-owned StackState.socketPath.
AGENTS.md reference: AGENTS.md:L124-L126
Useful? React with 👍 / 👎.
Stack layer 6 of 7, based on #6045.
Makes daemon-backed stacks preserve foreground lazy lifecycle semantics: