Skip to content

Commit 4274d51

Browse files
authored
Merge pull request #11 from cardmagic/agent/refresh-roadmap
docs: bring the roadmap up to 0.7.1
2 parents e890b7f + 3537eff commit 4274d51

1 file changed

Lines changed: 27 additions & 6 deletions

File tree

docs/roadmap.md

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,41 +17,60 @@
1717
- One-shot and recurring reminders with `:latest` or `:all` catch-up
1818
- Durable observable invalidations, scalar Turbo replacement, keyed ERB
1919
components, signed component locals, and authorized replace or morph refresh
20+
- Batched component refreshes: components sharing a signed `batch:` collapse to
21+
one browser request per revision, served as HTML frames in a JSON envelope
22+
- Personalized state payload broadcasts computed per subscriber under that
23+
subscriber's authorization context, fenced by actor revision
2024
- Reconciliation read APIs
2125
- Installation doctor, authorization reference, fit guide, and legacy-state
2226
migration cookbook
2327
- Handler Active Record write isolation, same-database commit actions, ambient
24-
transaction rejection, adapter lock/query deadlines, structured sync timeout
25-
diagnostics, and result recovery
28+
transaction rejection, adapter lock/query deadlines, bounded SQLite lock
29+
retries outside those deadlines, structured sync timeout diagnostics, and
30+
result recovery
2631
- Bounded message/process pruning, actor-type opt-in instance expiration,
2732
graceful caller shutdown, committed state snapshots, and an opt-in Minitest
2833
helper
2934
- SQLite, PostgreSQL, and MySQL integration suites
3035
- Inline RBS generation/validation, Steep, Standard Ruby, Solid Queue's exact
3136
RuboCop policy, and a warning-free Brakeman scan
37+
- A JavaScript suite covering the state payload and batched refresh browser
38+
modules, run in CI with Node's test runner and jsdom, with every GitHub
39+
Actions reference pinned to a commit SHA
3240

3341
## Partially implemented
3442

3543
- Supervisor: starts and drains thread roles, but does not replace a crashed
3644
role or run periodic maintenance automatically.
3745
- Wake-up strategy: in-process signaling plus durable polling and injection are
3846
implemented; PostgreSQL `LISTEN/NOTIFY` and optional Redis adapters are not.
47+
Signaling cannot cross process boundaries, so a commit in a web process does
48+
not wake a broadcast executor in a worker process; that delivery waits up to
49+
`polling_interval`, 100 ms by default. This is the largest remaining term in
50+
reactive update latency, and neither batching nor state payloads reduce it.
3951
- Realtime: scalar and dependency-driven keyed ERB component replacement or
4052
morphing, personalized refresh authorization, revision fencing, coalescing,
41-
and reconnect convergence are implemented; application-directed Turbo
42-
append intents are not.
53+
reconnect convergence, batched refreshes, and personalized state payloads are
54+
implemented; application-directed Turbo append intents are not. Batch
55+
coalescing happens in the browser rather than the broadcast executor, so one
56+
commit still sends one Action Cable message per changed observable even
57+
though it costs one browser request.
4358
- Backpressure: mailbox/payload/state/result caps and fair yields exist;
4459
distributed per-actor rate limits and global admission control do not.
4560
- Administration: actor and dead-letter views plus policy hooks exist; richer
4661
filtering, audit records, and bulk-safe tools do not.
62+
- Browser module coverage: the state payload and batched refresh modules have
63+
JavaScript tests; `component_refresh.js`, which drives individual morph
64+
refreshes, does not.
4765
- Outboxes use portable status rows with polling indexes; future versions may
4866
introduce narrow ready/claimed membership tables for very large outboxes.
4967

5068
## Next milestones
5169

5270
1. Add automatic supervisor role replacement and periodic dead-process cleanup.
5371
2. Add PostgreSQL notification and optional Redis wake-up adapters with latency
54-
benchmarks and polling-race tests.
72+
benchmarks and polling-race tests, removing the cross-process polling delay
73+
rather than shrinking it with a smaller `polling_interval`.
5574
3. Add result lookup by request ID and broader deadlock retry classification.
5675
4. Add scheduled retention and stale-process maintenance.
5776
5. Add database/server-version checks and MySQL InnoDB verification at boot.
@@ -61,7 +80,9 @@
6180
8. Expand security scanning and run compatibility CI across supported Rails and
6281
Ruby versions.
6382
9. Benchmark all workloads under documented hardware/database settings and
64-
publish adapter-specific adoption measurements.
83+
publish adapter-specific adoption measurements. Throughput, synchronous
84+
latency, query counts, and the three reactive delivery paths are measured on
85+
SQLite; adapter-specific and end-to-end browser measurements are not.
6586

6687
No production-ready claim should be made until these hardening milestones have
6788
operational soak evidence.

0 commit comments

Comments
 (0)