Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions .agent/notes/04-14-break-this-up-pr-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# 04-14-break_this_up_wip_patches PR Split Plan

Base branch: `04-14-chore_engine_publish_engine_bases_in_ci`

## Proposed Stack

1. `fix(api): subscribe before namespace workflow dispatch`
Files:
- `engine/packages/api-peer/src/namespaces.rs`

2. `fix(guard): serialize gateway actor keys correctly`
Files:
- `engine/packages/guard/src/routing/pegboard_gateway/resolve_actor_query.rs`

3. `fix(pegboard): persist and replay hibernating requests`
Files:
- `engine/packages/pegboard/src/ops/actor/hibernating_request/delete.rs`
- `engine/packages/pegboard/src/ops/actor/hibernating_request/list.rs`
- `engine/packages/pegboard/src/ops/actor/hibernating_request/upsert.rs`
- `engine/packages/pegboard/src/workflows/actor/runtime.rs`
- `engine/packages/pegboard/src/workflows/actor2/runtime.rs`
- `engine/packages/pegboard-gateway/src/keepalive_task.rs`
- `engine/packages/pegboard-gateway/src/lib.rs`
- `engine/packages/pegboard-gateway/src/shared_state.rs`
- `engine/packages/pegboard-gateway2/src/keepalive_task.rs`
- `engine/packages/pegboard-gateway2/src/lib.rs`
- `engine/packages/pegboard-gateway2/src/shared_state.rs`
- `engine/sdks/rust/envoy-client/src/connection.rs`

4. `fix(rivetkit-native): expose full hibernation metadata to JS`
Files:
- `rivetkit-typescript/packages/rivetkit-native/index.d.ts`
- `rivetkit-typescript/packages/rivetkit-native/wrapper.js`
- `rivetkit-typescript/packages/rivetkit-native/src/bridge_actor.rs`
- `rivetkit-typescript/packages/rivetkit-native/src/envoy_handle.rs`
- `rivetkit-typescript/packages/rivetkit-native/src/lib.rs`
- `rivetkit-typescript/packages/rivetkit-native/src/types.rs`

5. `fix(rivetkit): restore hibernatable sockets and hydrate serverless starts`
Scope:
- Keep only the hibernation and socket restore work from the engine driver.
- Exclude the separate native-db envoy / separate SQLite pool work.
Files:
- `rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts`
Keep only:
- hibernating request hydration for serverless start payloads
- hibernatable socket binding and rebind logic
- dynamic runtime socket restore logic
- actor shutdown cleanup that is directly required by the socket restore path
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-conn-hibernation.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-sleep.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/gateway-routing.ts`

6. `test(rivetkit): re-enable gateway URL and direct-registry coverage`
Files:
- `rivetkit-typescript/packages/rivetkit/src/test/mod.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/mod.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/utils.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/raw-http-direct-registry.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/raw-websocket-direct-registry.ts`
- `rivetkit-typescript/packages/rivetkit/tests/driver-engine.test.ts`
- `rivetkit-typescript/packages/rivetkit/tests/driver-engine-ping.test.ts`
- `rivetkit-typescript/packages/rivetkit/tests/driver-registry-variants.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/warmup.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/actors/warmupActor.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/registry-static.ts`

7. `fix(test): stabilize lifecycle, sleep, queue, and run edge cases`
Files:
- `rivetkit-typescript/packages/rivetkit/src/actor/instance/queue.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/access-control.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/db-lifecycle.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/destroy.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/inline-client.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/queue.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/run.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/sleep-db.ts`
- `rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/start-stop-race.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-handle.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-lifecycle.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-queue.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-run.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-sleep-db.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/lifecycle-hooks.ts`

8. `fix(rivetkit): keep internal error exposure behavior consistent`
Files:
- `rivetkit-typescript/packages/rivetkit/src/actor/router-endpoints.ts`
- `rivetkit-typescript/packages/rivetkit/src/dynamic/isolate-runtime.ts`

## Rewrite Instead Of Copying

### Dynamic DB over the main transport

There is a real follow-up PR hiding in the DB/runtime changes, but it should be rewritten instead of copied from this WIP branch.

Keepable areas to revisit:
- `rivetkit-typescript/packages/rivetkit/src/db/config.ts`
- `rivetkit-typescript/packages/rivetkit/src/db/mod.ts`
- `rivetkit-typescript/packages/rivetkit/src/db/drizzle/mod.ts`
- `rivetkit-typescript/packages/rivetkit/src/actor/instance/mod.ts`
- `rivetkit-typescript/packages/rivetkit/src/actor/driver.ts`
- `rivetkit-typescript/packages/rivetkit/src/dynamic/runtime-bridge.ts`
- `rivetkit-typescript/packages/rivetkit/src/dynamic/isolate-runtime.ts`
- `rivetkit-typescript/packages/rivetkit/dynamic-isolate-runtime/src/index.cts`

Constraint:
- Do not create a separate SQLite pool.
- Do not create a separate native-db envoy connection.
- All SQLite KB traffic should go over the main endpoint and default SQLite pool.

## Discard

Discard these changes from the stack as currently implemented:

### Separate native-db envoy / separate SQLite pool work

Main files to exclude:
- `rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts`
Exclude:
- `#nativeDatabaseEnvoyHandlePromise`
- `#getOrCreateNativeDatabaseEnvoyHandle`
- `forceDisconnectNativeDatabaseTransportForTests`
- any `poolName: \`${this.#config.envoy.poolName}-native-db\``
- `rivetkit-typescript/packages/rivetkit/src/actor/driver.ts`
Exclude:
- `forceDisconnectNativeDatabaseTransportForTests`
- `rivetkit-typescript/packages/rivetkit/src/dynamic/runtime-bridge.ts`
Exclude:
- endpoint/namespace/token plumbing that exists only to create a second DB transport
- `rivetkit-typescript/packages/rivetkit/src/dynamic/isolate-runtime.ts`
Exclude:
- `rawDatabaseExecute` host bridge support as currently wired if it depends on a separate transport
- endpoint/namespace/token bootstrap plumbing for a second transport
- `rivetkit-typescript/packages/rivetkit/dynamic-isolate-runtime/src/index.cts`
Exclude:
- `startEnvoySync` native-db bootstrap path
- `getNativeSqliteConfig`
- `rawDatabaseExecute` path if it still opens a second transport
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-db.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/tests/actor-db-stress.ts`
- `rivetkit-typescript/packages/rivetkit/tests/driver-engine.test.ts`
Exclude the test-only native-db force-disconnect endpoint.

Keep in the stack instead of discarding:
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/mod.ts`
- `rivetkit-typescript/packages/rivetkit/src/driver-test-suite/utils.ts`
Reason:
- their current WIP hunks are test-harness and gateway plumbing, not separate-pool DB transport work

### Stray cleanup

- `scripts/ralph/CODEX.md`
Reason:
- merge-marker garbage, unrelated to the stack

### Probably keep out unless needed by the rewrite

- `Cargo.toml`
Reason:
- the `sqlite-native` workspace-member add looks tied to the DB transport work and should not be dragged into the stack unless the rewritten main-transport DB PR actually needs it
Loading
Loading