row 264a r7 (#1769): build notes for the rebase onto landed 277 (980cec88c, sage-2608) and the per-session thread.claims; DEFERRED entry binds row 272 to make 274's user reply check session-scoped (sage-2591)

This commit is contained in:
jason.woltje committed 2026-10-22 06:25:43 -05:00
1 parent fa4f4dcdc8
commit a23afbf95a
2 files changed
+36

No files matched your search

+27
View File
@@ -309,6 +309,33 @@ moved from 47a35bf43 by cherry-pick. broker.mjs is the only path both rows chang
- schema.sql, the migrations, store.mjs and the fixtures are unchanged from round 5, and so are
the touched test files: 19.
### Round 7 on landed 277 (980cec88c)
Row 277 (thread.claims, #1782) landed at 62f53b1e0, after row 256 (f12441d4f), and refactor was
980cec88c (sage-2608). The round 6 commits moved from 0165be266 by cherry-pick with no conflict, and
the range-diff is `=` for all eleven.
- 256 changes `packages/bus/src/runtime.mjs`, `packages/business/src/instance-settings.mjs` and
`packages/webui/src/public/agents.js`. None is a manifest path and none of their changed lines
names a thread, a session, `message_threads` or `thread_claims`. Three touched tests load these
modules (bus chief-of-staff and tester-writes, cli thread-launch), so the whole-file runs cover
256's code.
- 277's `thread.claims` took the latest `thread_claims` row per thread. With sessions that is the
last claim of any session, so a second held session would hide the first (duckworth-0123 N3,
sage-2591). It now joins `sessions` and takes each session's latest row, as `#threadHolders`
does, ordered by thread then session. The result keeps 277's five keys: two rows of one thread
differ by `holder_run`, and `mosaic agents` prints each as its own thread line. Adding the
session id to the row is left to the slice that shows sessions to the owner.
- thread-claims.test (277's) makes its threads by hand, so each now gets the default session the
migration gives an old thread (C5, :47), and its T5 message names that session (:111). T6 holds
two sessions of one thread, sees both rows, releases one and sees the other (C4). M4 swaps the
query back to 277's per-thread latest row and must fail T6.
- 274's thread-scoped user reply check binds row 272 (264e) in `docs/plans/DEFERRED.md`, written
here (sage-2608): a slice that lets a user add sessions makes it session-scoped.
- 277's other tests: message-filter.test's claim pin reads thread.claims for a thread made with
its default session, and the cli format and tester tests use stub rows or no threads.
- Touched test files: 20 (thread-claims.test joins). Mutants M1-M4.
## Runs
None yet. Every run waits for Sage's CLEAR.
+9
View File
@@ -460,6 +460,15 @@ at every gate. Started 2026-09-12 during the control board MVP.
changes `packages/cli/tests/tester.test.mjs`: add the resolve pin so M8
dies on an assertion. (2026-10-22)
- **Row 274's user reply check is scoped to the thread, not the session.**
(Row 264a r6, sage-2591.) In `packages/bus/src/broker.mjs`, the check that
a run answers a user only in reply to that user's message in its thread
joins `message_threads` by thread. That holds while a user's thread has
only its default session: a user can't call `session.create`, and
`#thread` refuses anyone but the owner. Binds row 272 (264e, #1777), or
any row that lets a user add sessions: make the check session-scoped and
test it with two sessions. (2026-10-22)
## Queue
Moved to `docs/plans/QUEUE.md` on 2026-09-13. This file holds only gaps.