aboutsummaryrefslogtreecommitdiffstats
path: root/CLAUDE.md
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-10-05 01:16:12 +0200
committerChristophe Besson <cbesson@gmail.com>2026-10-05 01:16:12 +0200
commit243bcf017b4957237b3ddf556bd0a37296eb8798 (patch)
tree7d0820796737aad4dcfb89de7bec1e7271759af6 /CLAUDE.md
parentac8ed437659d765120d1b0cc9f83e942549b479f (diff)
downloadmeshbay-243bcf017b4957237b3ddf556bd0a37296eb8798.tar.gz
feat(cast): photos on the TV, and a television chosen once for the session
A cast button in Videos' toolbar, at the top of Photos, in an album's bar and in the lightbox, in a group and in Search alike. A television chosen there is kept for the session: a film opened plays on it with the player as its remote from the start, and a photo opened in the lightbox is shown on it, scaled to 1920x1080, upright, as JPEG. The lightbox gains a slideshow. The relay serves one photo at /image behind the stream's token, on the desktop and on Android; the shell, not the page, decides that the receiver loads it as a picture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md12
1 files changed, 12 insertions, 0 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 4f39e36..32ffc25 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -921,6 +921,16 @@ do. Read them before writing anything that touches the same mechanism.
machine could. The receiver was half-crashed; a power cycle fixed it. A
machine that reaches the receiver proves nothing about the phone
+- **The default media receiver will not start a stream that arrives at real
+ time.** Casting the interface as live video, it stayed on BUFFERING until the
+ end of the file — with or without audio, at any bitrate. It started only with
+ an audio track *and* the first seconds delivered faster than real time, and
+ then kept that lead as five seconds of latency. A film meets both conditions
+ by construction, which is why films cast. Before that was found, a receiver in
+ a bad state had made single runs contradict each other for an hour: power-cycle
+ it, prove a real film casts, repeat every case, and run a known reference
+ first and last
+
**Corrections that used to live here** — `punch_nat()` is not a traversal stack,
the node keystore's Argon2id parameters, what group chat actually uses, and what
is sealed on the wire — are now design statements in `docs/MESHBAY_DESIGN.md`
@@ -1023,6 +1033,7 @@ here are kept only where they are a rule about *editing* the code.
| Where the hub is | `platform.js` — `hubBase()` | **the only file allowed to decide this** (§8.3) |
| Downloads, decrypt pipeline | `file-utils.js`, `downloads.js`, `sw.js` | §8.5 |
| Video player | `video-player.js` — `pump()` is the only place credit is granted | §8.5 |
+| The television a session casts to, photos on it | `cast-session.js` | §11.4 |
| Transfers widget | `transfers.js` | §5.5 |
| Cross-group merge | `source-merge.js`, `group-name.js` | §9.11 |
| Node page | `node-page.js` | §6.7 |
@@ -1057,6 +1068,7 @@ when `ANDROID_HOME` is set (`test_android_shell.py`).
| An invitation answered on the home page (accept, decline), in both engines | `packages/meshbay-hub/tests/harness/invitation_probe.py` |
| A group owner's invited list and host approvals, in both engines | `packages/meshbay-hub/tests/harness/group_hosts_probe.py` |
| A show's modal and the player, walked episode to episode | `packages/meshbay-hub/tests/harness/video_series_probe.py` |
+| A television chosen once, then photos and a film sent to it, in both engines | `packages/meshbay-hub/tests/harness/cast_session_probe.py` |
| A lazily loaded view whose module answers 404 (a tab older than the deploy) | `packages/meshbay-hub/tests/harness/lazy_failure_probe.py` |
## meshbay.org server (target state)