Server-side realtime SSE on per-app pub/sub topics, plus the three
v1.1.5 follow-ups and the version bumps.
Realtime:
- topics registry (0021) + admin endpoints + Capability::AppTopicManage
(-> app:admin; no new scope).
- GET /realtime/topics/{topic} SSE endpoint (orchestrator-core data
plane): Host -> app, RealtimeAuthority gate (404 missing/internal,
401 bad/absent token), broadcast::Receiver stream + heartbeat.
- RealtimeBroadcaster / RealtimeEvent / RealtimeAuthority traits
(picloud-shared); InProcessBroadcaster + GC (orchestrator-core);
DB-backed RealtimeAuthorityImpl (manager-core). Publish path fans out
to in-process subscribers after the durable outbox commit (best-effort,
panic-isolated).
- HMAC subscriber tokens (subscriber_token.rs) + app_secrets table (0022)
+ pubsub::subscriber_token SDK (schema 1.6 -> 1.7). TTL clamp + env
overrides.
- Dashboard Topics tab (register/list/edit/delete, prominent external
badge, flip confirmation).
v1.1.5 follow-ups:
- Empty blobs accepted (NewFile/FileUpdate::validate) + round-trip test.
- Orphan *.tmp.* sweeper (spawn_files_orphan_sweep).
- Dispatcher e2e tests, one per trigger kind (DATABASE_URL-gated).
Versions: workspace 1.1.6, SDK 1.7, dashboard 0.12.0. Schema-snapshot
golden re-blessed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 lines
1.0 KiB
Rust
29 lines
1.0 KiB
Rust
//! Per-node event ingress and dispatch.
|
|
//!
|
|
//! Owns the data-plane request path:
|
|
//! inbound event → resolve script → call `ExecutorClient::execute`
|
|
//!
|
|
//! Does not import `executor-core` types in its public surface beyond the
|
|
//! transport DTOs (`ExecRequest`/`ExecResponse`). The `ExecutorClient`
|
|
//! trait is the seam that lets the orchestrator call executor logic
|
|
//! in-process (single-node) or over HTTP (cluster).
|
|
|
|
pub mod api;
|
|
pub mod client;
|
|
pub mod gate;
|
|
pub mod inbox;
|
|
pub mod realtime;
|
|
pub mod realtime_api;
|
|
pub mod resolver;
|
|
pub mod routing;
|
|
|
|
pub use api::{data_plane_router, user_routes_router, DataPlaneState};
|
|
pub use client::{ExecutorClient, LocalExecutorClient, RemoteExecutorClient, ScriptIdentity};
|
|
pub use gate::{AcquireError, ExecutionGate};
|
|
pub use inbox::InboxRegistry;
|
|
pub use realtime::{spawn_realtime_gc, InProcessBroadcaster, DEFAULT_BROADCAST_CAPACITY};
|
|
pub use realtime_api::{
|
|
heartbeat_secs_from_env, realtime_router, RealtimeState, DEFAULT_HEARTBEAT_SECS,
|
|
};
|
|
pub use resolver::{ResolverError, ScriptResolver};
|