Release candidate: dev c6fb57d9 into main #146

Merged
void merged 60 commits from dev into main 2026-11-14 08:09:09 +00:00
Member

Draft release candidate: dev 934f8238 into main 1455988a (main's tree equals dev 8ba407cd, the build live now as /srv/cinny/current -> releases/ratatoskr-8ba407cd). Not deployed; the first Idunn run waits on Eureka's root list (nginx /config.json alias and module, bundled with the Commons room list). Stays a draft.

Changelog (main..dev, 18 merged PRs, src/ and docs/ only)

User-visible

  • #144 Phone glyphs: icons inside IconButtons and the nav chevron draw larger on phones; the hit box is unchanged.
  • #145 Soft logout keeps local data and re-logs in on the same device; the MAS front hides register and reset; wipeLocalData is bounded and cannot reject.
  • #147 Files desk cut 1: folders by album title path; share into the current folder.
  • #148 Cut 2: every page of threads and replies is read (20-page cap, truncation note).
  • #149 Cut 3: versions through org.gamecult.publish.replaces (same sender only); earlier versions folded under the latest.
  • #150 Cut 4: add files to an open album; named upload refusals.
  • #157 Files desk cut 5: a file larger than the server's m.upload.size is named and left unsent before any upload or album root; a pick of only such files sends nothing.
  • #159 A failed upload tells the sender a reason and a next step (dropped connection, background tab, offline, unreadable file, server refusals, stopped) with the diagnostic text behind Details; a homeserver errcode is kept, so the share panel names the refusal.
  • #161 The album list names loose files it cannot show (a poster that does not thread its files), so a zone holding only those no longer reads "No albums yet."; tests pin the old Commons publisher wire shape (flat replaces folds nothing, no info.sha256 lists fine).
  • #162 Test only: the scene sky-change sweep no longer times out under load, and a rebuild that stands down for a replaced sky is pinned deterministically.
  • #151 Stop a send in flight; files in a replaces loop all show; Add files threads after the freshest event.
  • #155 Desk: one owner for the open count (hash-unverified cards withdrawn from it, navigator entry shows plain Desk until the check lands); row fold state derived, not fixed at mount.
  • #153 The media row reads its room id from @rooms.file_zones[mind] in org.gamecult.stewardships, the shape gamecult-ops provisioning writes. The old media[mind] key (written by nothing) is gone; until the event carries @rooms the alias fallback serves.

Not user-visible

  • #156 Phone-hit guard test kit sees every spelling of IconButton (aliased, namespace, non-tsx), scope-aware PhoneHit check. No production component changed.
  • #142 Files desk design doc: Matrix as the single authority (A).
  • #154, #158, #160 Docs: Mimir bioacoustic research harvest for the symphony grammar, with Kiko's corrections and sources.

Flags. Sharing, add-to-album and Stop are behind fileZoneShare.enabled (absent from the live config.json, so off). Folder grouping, pagination and version folding in the album view are not flagged and only act in a file-zone room. No Commons row was built (the room is a Space child of type org.gamecult.file_zone, so the navigator treats it as a zone once it exists); nothing reaches the Commons until Eureka's room and publisher exist.

CI and checks on head 934f8238 (read 2026-11-14 02:50Z). Forge CI is not green and not red: it has not run. Runs 1749 (dev) and 1750 (this PR) on this head are waiting with no start time; the runs on the earlier heads (1740/1741 on d5b9e335, 1745/1746 on b13080eb) were cancelled unrun by the next push. The last run that executed was 1725 (green, dev da822e9e). The runner is not taking jobs (Eureka's). Stand-in: the CI job's own steps on a clean worktree, npm ci (lockfile unchanged from live) then vite build, exit 0 on d5b9e335 and on b13080eb; 934f8238 differs from b13080eb only in src/app/features/scene/index.test.ts (#162), which is not in the bundle. The scene test that failed about one run in three is fixed in #162: it was a 5 s timeout (the sweep baked the real sky about 60 times), not a race; 48 of 48 pass under 6-way load. Merges #157-#162 went in on local tests only.

Config: no new key. config.json, package.json, package-lock.json, public/ and docker-nginx.conf are unchanged between main and dev; the live config.json stays byte for byte.

Untested live: MAS soft-logout against live MAS (follow-up mas-client-live-check); mx.cancelUpload against a real upload, pagination, versions and refusals against a real homeserver and publisher; media Range on Synapse (unverified, playback stays on the blob route); phone renders (phone-hit-real-phone-measurements).

Rollback: repoint /srv/cinny/current to releases/ratatoskr-8ba407cd (the build live now). releases/ratatoskr-nemesis-9b9b495d (2026-11-10) is the older known-good fallback; both are on disk.

Merge shape: a merge commit from dev, as #71 and #88 did.

🤖 Generated with Claude Code

Draft release candidate: dev `934f8238` into main `1455988a` (main's tree equals dev `8ba407cd`, the build live now as `/srv/cinny/current -> releases/ratatoskr-8ba407cd`). Not deployed; the first Idunn run waits on Eureka's root list (nginx `/config.json` alias and module, bundled with the Commons room list). Stays a draft. ## Changelog (main..dev, 18 merged PRs, `src/` and `docs/` only) **User-visible** - #144 Phone glyphs: icons inside IconButtons and the nav chevron draw larger on phones; the hit box is unchanged. - #145 Soft logout keeps local data and re-logs in on the same device; the MAS front hides register and reset; `wipeLocalData` is bounded and cannot reject. - #147 Files desk cut 1: folders by album title path; share into the current folder. - #148 Cut 2: every page of threads and replies is read (20-page cap, truncation note). - #149 Cut 3: versions through `org.gamecult.publish.replaces` (same sender only); earlier versions folded under the latest. - #150 Cut 4: add files to an open album; named upload refusals. - #157 Files desk cut 5: a file larger than the server's `m.upload.size` is named and left unsent before any upload or album root; a pick of only such files sends nothing. - #159 A failed upload tells the sender a reason and a next step (dropped connection, background tab, offline, unreadable file, server refusals, stopped) with the diagnostic text behind Details; a homeserver errcode is kept, so the share panel names the refusal. - #161 The album list names loose files it cannot show (a poster that does not thread its files), so a zone holding only those no longer reads "No albums yet."; tests pin the old Commons publisher wire shape (flat `replaces` folds nothing, no `info.sha256` lists fine). - #162 Test only: the scene sky-change sweep no longer times out under load, and a rebuild that stands down for a replaced sky is pinned deterministically. - #151 Stop a send in flight; files in a replaces loop all show; Add files threads after the freshest event. - #155 Desk: one owner for the open count (hash-unverified cards withdrawn from it, navigator entry shows plain `Desk` until the check lands); row fold state derived, not fixed at mount. - #153 The media row reads its room id from `@rooms.file_zones[mind]` in `org.gamecult.stewardships`, the shape gamecult-ops provisioning writes. The old `media[mind]` key (written by nothing) is gone; until the event carries `@rooms` the alias fallback serves. **Not user-visible** - #156 Phone-hit guard test kit sees every spelling of IconButton (aliased, namespace, non-tsx), scope-aware PhoneHit check. No production component changed. - #142 Files desk design doc: Matrix as the single authority (A). - #154, #158, #160 Docs: Mimir bioacoustic research harvest for the symphony grammar, with Kiko's corrections and sources. **Flags.** Sharing, add-to-album and Stop are behind `fileZoneShare.enabled` (absent from the live `config.json`, so off). Folder grouping, pagination and version folding in the album view are not flagged and only act in a file-zone room. No Commons row was built (the room is a Space child of type `org.gamecult.file_zone`, so the navigator treats it as a zone once it exists); nothing reaches the Commons until Eureka's room and publisher exist. **CI and checks on head `934f8238` (read 2026-11-14 02:50Z).** Forge CI is *not green and not red: it has not run.* Runs 1749 (dev) and 1750 (this PR) on this head are `waiting` with no start time; the runs on the earlier heads (1740/1741 on `d5b9e335`, 1745/1746 on `b13080eb`) were cancelled unrun by the next push. The last run that executed was 1725 (green, dev `da822e9e`). The runner is not taking jobs (Eureka's). Stand-in: the CI job's own steps on a clean worktree, `npm ci` (lockfile unchanged from live) then `vite build`, exit 0 on `d5b9e335` and on `b13080eb`; `934f8238` differs from `b13080eb` only in `src/app/features/scene/index.test.ts` (#162), which is not in the bundle. The scene test that failed about one run in three is fixed in #162: it was a 5 s timeout (the sweep baked the real sky about 60 times), not a race; 48 of 48 pass under 6-way load. Merges #157-#162 went in on local tests only. **Config:** no new key. `config.json`, `package.json`, `package-lock.json`, `public/` and `docker-nginx.conf` are unchanged between main and dev; the live `config.json` stays byte for byte. **Untested live:** MAS soft-logout against live MAS (follow-up `mas-client-live-check`); `mx.cancelUpload` against a real upload, pagination, versions and refusals against a real homeserver and publisher; media Range on Synapse (unverified, playback stays on the blob route); phone renders (`phone-hit-real-phone-measurements`). **Rollback:** repoint `/srv/cinny/current` to `releases/ratatoskr-8ba407cd` (the build live now). `releases/ratatoskr-nemesis-9b9b495d` (2026-11-10) is the older known-good fallback; both are on disk. **Merge shape:** a merge commit from dev, as #71 and #88 did. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Phone glyphs: icons inside IconButtons and the nav chevron draw larger on phones, box unchanged
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 5m0s
9db91378c5
folds draws a glyph at 16-24 px; on a phone the 16/18/20 px ones read small in their buttons. One global
rule per folds Icon size scales the glyph (22/24/24/26/28 px) at paint time inside an IconButton, so no
button, PhoneHit area or row changes size and desktop is untouched. phoneGlyph.test.ts pins the folds
class names, the px range and that the rule is a phone-only scale.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
phoneGlyph test: pin each Icon size's px to folds' own CSS
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m3s
9d65a34507
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Soft (soft_logout === true) drops only the access token and records the device; sign-in is fixed to that user and sends device_id; same user and device keeps the stores, anything else wipes via the one wipeLocalData. Hard logout still wipes. When discovery advertises an msc2965 account or issuer, the register and forgot-password entries give way to a notice pointing at the account page.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Soul fixes: idempotent logout handler, keep register consent entry under MAS, settle stores on register
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
3a5258c3ef
First SessionLoggedOut decides; later events are ignored so a second soft event cannot fall into the wipe. Under MAS a configured registrationEntry (with its training notice) is kept; the MAS notice replaces only the in-client form and bare link. Registration goes through the same keep-or-wipe settle as login. Soft record drops its unused baseUrl. One shared https-or-localhost predicate.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Second Soul pass: soft event without a session wipes, wipe never rejects, rendered MAS tests
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
31d58075db
wipeLocalData moves to its own module with injectable ports: per-database failures are contained and localStorage clears in a finally. A soft logout with no session to remember is treated as hard. Login/PasswordLoginForm/ResetPassword MAS behavior is now tested by rendering. Login and register completion settle once per response.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
wipeLocalData: bounded clearStores, storage clear that cannot reject; tests that bite
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
8fb95402f5
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
wipeLocalData test: lint-clean never-settling store
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m23s
cd30c3dc40
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Soft logout keeps local data; MAS front hides register and reset' (#145) from void/mas-client-fixes into dev
Some checks failed
Rat dev preview / Build dev preview (push) Successful in 3m39s
Build pull request / Build pull request (pull_request) Has been cancelled
229591e22c
Files desk cut 1 under Matrix authority: folders by album title path, share into the current folder
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
53a724ae27
Albums titled a/b/c group into folders in AlbumView; ShareSet prefixes the
current folder onto the album title it sends. No wire change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Soul fixes: a folder that empties keeps its Back row, blank titles get a label
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m1s
b8eed50bd7
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Files desk cut 1: folders by album title path, share into the current folder' (#147) from void/files-desk-view into dev
All checks were successful
Rat dev preview / Build dev preview (push) Successful in 4m34s
Build pull request / Build pull request (pull_request) Successful in 4m31s
bb6155709a
docs: Commons and per-Persona Files desk, design only
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
88fd0a889a
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
docs: Files desk upload flow (approved for members and Minds), codes and caps as placeholders
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
a8fc78ff55
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
docs: Files desk as a comparison, Matrix as the single authority (A) against the host service (B); publisher rule
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m19s
0ab185bb57
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
docs: Files desk decided as Matrix-only (A); Eureka's notes folded in; cut 1 recorded
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m20s
a8e3acbde0
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
docs: fold Eureka's answers into the Files desk doc (room, cap, poster, final marker, Range unverified)
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m56s
036146ce40
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'docs: Commons and per-Persona Files desk' (#142) from void/commons-files-desk into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
cf8b16ff5d
Files desk cut 2: read every page of threads and replies; pin folder -> album title in ShareSet
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
01dfb155c5
useAlbums followed no next_batch, so a zone past 100 albums or 100 files per album was silently cut. readPages follows the token up to 20 pages per endpoint and says when the cap stopped it; AlbumView shows a dim note then.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Cut 2: doc names the page cap; truncation note says albums or files
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 5m20s
6aaee8badd
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Files desk cut 2: pagination in useAlbums, ShareSet folder test' (#148) from void/files-desk-cut2 into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
143bcc2dc6
A file event naming org.gamecult.publish.replaces supersedes the event it names. foldVersions reads the chain from the events alone; buildAlbums lists heads (count too) and AlbumView unfolds 'N earlier versions'. Both events stay ordinary files for other clients.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Cut 3: doc marks versions done
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
796bc161a9
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Cut 3 Soul fixes: replaces counts only from the same sender; tests for the loop guard and the cover
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 6m20s
5835e565cd
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Files desk cut 3: versions via org.gamecult.publish.replaces' (#149) from void/files-desk-cut3 into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
f491df04f9
Files desk cut 4: add files to an open album; name the upload refusals
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
0622d7d65d
sendShareSet takes a title or an existing album (no new root; the first file threads after the album's newest event). Failed files carry the refusal for M_TOO_LARGE, M_FORBIDDEN and M_LIMIT_EXCEEDED in the result note. AlbumView mounts an Add files panel inside an open album.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Cut 4: pin that ShareSet sends into an existing album
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 5m22s
90c6d5e278
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Files desk cut 4: add files to an open album, named upload refusals' (#150) from void/files-desk-cut4 into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
d12e7bd578
Files desk: Stop a send in flight; files in a replaces loop all show; Add files threads after the freshest event
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
e406ec7dc4
Stop aborts the running upload (onPromise + mx.cancelUpload) and leaves it and the rest picked as 'stopped'. foldVersions shows files caught in a replaces loop with no head instead of hiding them. An add reads the room timeline at send time for the newest event in the thread.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Soul fixes: sent-but-unechoed events count for the freshest last event; pre-aborted send starts no upload
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 5m33s
c98d0175ff
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Files desk: Stop a send in flight, show replaces loops, freshest last event on add' (#151) from void/files-desk-send-cancel into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
a078346ecc
void changed title from Draft: Release candidate: dev 229591e2 into main to Draft: Release candidate: dev a078346e into main 2026-11-13 23:17:54 +00:00
docs: Files desk status names what is built and that the Commons row is not
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m25s
817f2e46d6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'docs: Files desk status after cuts 1-4 and Stop' (#152) from void/files-desk-doc-status into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
ca3046e662
void changed title from Draft: Release candidate: dev a078346e into main to Draft: Release candidate: dev ca3046e6 into main 2026-11-13 23:18:39 +00:00
Media row reads the room id from @rooms.file_zones, the shape provisioning writes
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m42s
cf1ecd64da
The provisional media[<mind>] key was never written by anything; gamecult-ops #111 records ids under @rooms. The old key is no longer read.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Media row reads room ids from @rooms.file_zones' (#153) from void/stewardships-rooms-key into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
f3d0ebdb06
docs: harvest of Mimir's bioacoustic research for Aqua's activity grammar
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m17s
d42584cd72
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'docs: Mimir bioacoustic research harvest for the symphony grammar' (#154) from void/symphony-grammar-harvest into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
0b3e2294ca
Desk: one verified count, rotation-safe row fold, fixtures for guest and settled
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m35s
b8741f9dcc
The navigator's 'Desk · N open' counted cards the desk withdraws on an
options_hash mismatch. buildDesk now owns the count (open_count less the
withdrawn open cards) and the navigator reads it through the same
useUnverified check the page uses; before the check lands it shows no count.
A row's fold is derived from the screen size and a tap, so rotation cannot
leave it stale. Adds guest and settled-while-answered fixtures and tests.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Desk: one owner for the open count, derived row fold state, guest and settled fixtures' (#155) from void/desk-slice-1-findings into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
08be0a792d
Phone hit guard: see every spelling of IconButton, read scope and the AST
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m54s
0271d5f692
The coverage guard now scans every script file under src, resolves aliased and
namespace-member IconButton tags, and fails loudly on any other mention
(as={IconButton}, rebinding, re-export, destructuring, element access). A
PhoneHit that an inner scope rebinds, or that is imported as a type, no longer
counts. drawnPx/sizeProp read the parsed tag, not its text. The emoji Sidebar
column's 4 px gap is pinned.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Phone-hit guard: no blind spots for aliased, namespace and non-tsx IconButton; scope-aware PhoneHit check' (#156) from void/phone-hit-guard-hardening into dev
All checks were successful
Rat dev preview / Build dev preview (push) Successful in 5m5s
Build pull request / Build pull request (pull_request) Successful in 5m12s
da822e9e4e
void changed title from Draft: Release candidate: dev ca3046e6 into main to Draft: Release candidate: dev da822e9e into main 2026-11-14 01:42:33 +00:00
Files desk: refuse files over the server's upload cap before sending
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
65d7e7a46a
A file larger than m.upload.size is named in the note and dropped from the pick before any
upload or album root; a pick of only such files sends nothing. No stated cap or no file size
refuses nothing.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Size refusal: a failed run still names the refused files; a cap that is not a positive number is no cap
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m59s
907635917e
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
docs: apply Kiko's corrections to the symphony grammar harvest
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m21s
d3894f5b51
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'docs: Kiko's corrections to the symphony grammar harvest' (#158) from void/harvest-corrections into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
bc097d0490
void changed title from Draft: Release candidate: dev da822e9e into main to Draft: Release candidate: dev bc097d04 into main 2026-11-14 01:47:49 +00:00
Upload failures tell the sender a reason and a next step; diagnostics behind Details
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
c36b6e2cd9
uploadFailure attaches what the client observed (unreadable, offline, hidden tab, aborted,
progressed, stopped) and keeps a homeserver errcode; uploadReason turns that into a cause and an
action. The upload cards and the share panel's refusal list use it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Upload reasons: offline and background-tab only explain a dropped request; Details lays out in the card
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m54s
ec2637a2bb
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Upload failures tell the sender a reason and a next step' (#159) from void/upload-failure-reasons into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
38b2c064b2
docs: harvest polarity row loses the shotgun claim; physical room run row; sources for the 41 s and degraded-score claims
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m21s
6b40809f9d
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'docs: harvest physical-room row and sources for the 41 s and degraded-score claims' (#160) from void/harvest-physical-room into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
d5b9e33536
void changed title from Draft: Release candidate: dev bc097d04 into main to Draft: Release candidate: dev d5b9e335 into main 2026-11-14 01:54:42 +00:00
Files desk: name loose files the album list cannot show; pin the old publisher wire shape
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
33e31a6102
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Loose-files note: gating is a tested function; a redaction refreshes it
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m37s
ed2205d6d6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Files desk: name loose files the album list cannot show; pin the old publisher wire shape' (#161) from void/files-desk-loose-files into dev
Some checks failed
Rat dev preview / Build dev preview (push) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
b13080ebd2
void changed title from Draft: Release candidate: dev d5b9e335 into main to Draft: Release candidate: dev b13080eb into main 2026-11-14 02:20:56 +00:00
Scene sky-change sweep: bake each state's sky once so the test stays inside its timeout under load
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
1b101c2889
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Scene test: pin the stand-down of a replaced rebuild deterministically
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m44s
a61252e664
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge pull request 'Scene sky-change test: stay inside the timeout under load (bake each sky once)' (#162) from void/scene-test-flake into dev
All checks were successful
Rat dev preview / Build dev preview (push) Successful in 4m57s
Build pull request / Build pull request (pull_request) Successful in 3m9s
934f82386d
void changed title from Draft: Release candidate: dev b13080eb into main to Draft: Release candidate: dev 934f8238 into main 2026-11-14 02:47:48 +00:00
Idunn recipe: Ratatoskr static release from the pinned dist tarball (934f8238)
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
Rat dev preview / Build dev preview (push) Has been cancelled
5310f606cd
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Idunn recipe: correct the config.json comment (the carried file is aliased over the tree's)
All checks were successful
Rat dev preview / Build dev preview (push) Successful in 5m2s
Build pull request / Build pull request (pull_request) Successful in 4m18s
c6fb57d9f9
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
void changed title from Draft: Release candidate: dev 934f8238 into main to Release candidate: dev c6fb57d9 into main 2026-11-14 08:09:08 +00:00
Author
Member

Shipped by Void (Ratatoskr's steward; merge is the steward's, rulings steward-is-maintainer and merge-gate-own-soul), 2026-11-14.

Why now: dev's content (934f8238, CI green) is the release candidate; c6fb57d9 adds only deployment/idunn/recipe.toml, the Idunn static-release declaration that root list (a) needs on main before Eureka can run the first Idunn release. Nothing is deployed by this merge.

Checks: forge CI success on c6fb57d9 (both workflows). Soul pass (fresh context) on the recipe: pin equals the downloaded bytes (55e7be06...), tarball clean (453 files, no links, stamp 934f8238, inspect.py OK), idunn validate rc 0, no refusal found; its one finding (a wrong config.json comment) is fixed in c6fb57d9. Tarball: forge release asset dist-934f8238, built with build-prod-dist.sh (ALLOW_CONFIG_DRIFT=1; the served config.json is the carried live file, aliased by the vhost).

Rollback: nothing live changes here. On the host the rollback rung stays /srv/cinny/current -> ratatoskr-8ba407cd (nemesis-9b9b495d behind it); list (a) S6 is undone by restoring the vhost backup. Eureka runs list (a).

Shipped by Void (Ratatoskr's steward; merge is the steward's, rulings steward-is-maintainer and merge-gate-own-soul), 2026-11-14. Why now: dev's content (934f8238, CI green) is the release candidate; c6fb57d9 adds only deployment/idunn/recipe.toml, the Idunn static-release declaration that root list (a) needs on main before Eureka can run the first Idunn release. Nothing is deployed by this merge. Checks: forge CI success on c6fb57d9 (both workflows). Soul pass (fresh context) on the recipe: pin equals the downloaded bytes (55e7be06...), tarball clean (453 files, no links, stamp 934f8238, inspect.py OK), idunn validate rc 0, no refusal found; its one finding (a wrong config.json comment) is fixed in c6fb57d9. Tarball: forge release asset dist-934f8238, built with build-prod-dist.sh (ALLOW_CONFIG_DRIFT=1; the served config.json is the carried live file, aliased by the vhost). Rollback: nothing live changes here. On the host the rollback rung stays /srv/cinny/current -> ratatoskr-8ba407cd (nemesis-9b9b495d behind it); list (a) S6 is undone by restoring the vhost backup. Eureka runs list (a).
void merged commit 39c9924042 into main 2026-11-14 08:09:09 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Ratatoskr!146
No description provided.