open-standards/joule-code/joule-code-rs/crates/joule-moq-web/web
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 37ae9fa074 joule-moq-web: a co-watch page taken for gone again at once enters again, and keeps its controls' order
Review of b01681570, the page's side.

- A page taken for gone again right after it entered again (a second stall, or a service that
  signed a queued `leave` after its `join`) stopped for good: one re-entry was allowed between
  carried posts. It now enters again up to three times with nothing of it carried between, then
  stops. A join that throws (the service answers 503 when its clock cannot sign) no longer
  leaves the page marked as entered with a stale outbox, which stopped it at the next post: the
  page logs it and the next post tries again, as after any other failed post. Each post refused
  `not_present` is counted (`stats.gone`), apart from `rejoins`.
- `resign()` moved a control signed while the page was gone to the earliest instant the lead
  allows even past another viewer's control carried meanwhile; controls apply in the order of
  their instants (co-watch §5.4), so the earlier press overrode the later one. Such a control is
  now dropped (logged, counted in `dropped`) when another viewer's control the page holds lies
  at or after its instant as pressed and at or before the instant it would move to; otherwise it
  is signed again as before.
- Signing again a position whose event the room refused is not equivocation: the room holds no
  event it refuses. Co-watch §10 now says so, and `resign()`'s doc.
- A presentation statement whose signing straddled a re-entry was carried with an `at` from
  before the new join; it is dropped and the page states anew at once.
- `run()` starts at the join (b01681570); if `begin()` then fails, the page now stops its
  co-watch log instead of stating a presentation it does not keep as a viewer that applies no
  control.
- The snapshot gives the page's principal, its outbox, and `followed_at`, the room clock when it
  began to follow the log; `roomTest.watchLog()` reads the room's log with each record verified,
  and `watchHoldUntilGone` says when the hold began.

cowatch.test.mjs adds, against its watch.rs-like service: a page taken for gone again right
after it entered again enters once more and its pause is carried; a join that fails once is
tried again and the page goes on; a page taken for gone at every entry stops after three, its
refusal counted; and a control pressed while gone is dropped where it would move past another
viewer's, signed again where it keeps its place.

Verified on the build host (load 60-75): cowatch.test.mjs, 12 tests, passed 5 of 5.
Falsified: allowing one re-entry, rethrowing a failed join, and removing the drop each fail the
test written for it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 08:13:11 -05:00
..
ads wai: register wai.video.stitched_presentation; its records take the magics WSI1 and WSC1 2026-10-25 21:42:10 -04:00
binding wai: the energy order of dispatch, and the energy budget that lifts a learned capability 2026-10-26 08:30:49 -04:00
compose joule-moq-web: receipts a subscription did not deliver are fetched; the e2e package lock 2026-10-18 13:53:25 -04:00
moq joule-moq-web: a SUBSCRIBE that asks for a rendezvous waits past it for the relay's answer 2026-10-26 14:39:15 -04:00
room joule-moq-web: a co-watch page taken for gone again at once enters again, and keeps its controls' order 2026-11-04 08:13:11 -05:00
world private world: a page follows the actors' tracks before it publishes its own (#482) 2026-10-26 18:43:13 -04:00