Commit graph

1,738 commits

Author SHA1 Message Date
Void
b091f65cea Name inside the pose pill wraps instead of ellipsising
Username carries its own nowrap + ellipsis, which still clipped long names
("Heimdall o...") inside the widened pill. On phones the name now wraps.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 10:08:18 +00:00
Void
8ac43bd73f Name pill shows the full name on phones, wraps when long
The pill was capped at a percentage of the bubble column and clipped with an
ellipsis; a short bubble's column is narrower than its own name, so names read
as "E..." and "V...". It is now max-content up to a viewport-based cap and wraps.
Demo fixtures gain a long display name to keep this honest.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 10:05:02 +00:00
Void
58df7b833c phone: pill clears the portrait, portrait bubbles keep a text floor, status block collapses
Some checks failed
Build pull request / Build pull request (pull_request) Failing after 3m31s
- the name pill is at most bubble width minus portrait minus 30px, so it cannot reach the face
- a bubble with a portrait is at least portrait + 170px wide, so text beside a right portrait
  no longer wraps into a ~100px column
- <=480px: the pose status block shows only the newest mood plus "+N more" on one line, tap to
  expand; the read-receipt line is hidden and its slot is an 8px margin under the composer

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 17:41:04 +00:00
Void
a1aece7d36 preview-demo test: fake document carries what the in-flow banner uses
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 17:20:31 +00:00
Void
16cc05a33b phone text flow: portrait width floor, list markers, in-flow preview banner, pretend-server notice
- portrait on phones is min(38vw,160px), was min(50vw,210px): at 390px the text column beside
  it was ~85px
- outside list markers ignored the portrait silhouette and landed under the art; inside markers
  wrap with the text
- Jump to Latest sits 8px (was 16px) above the timeline's lower edge
- preview banner is in flow above the app, not fixed over the room header and connection strip
- on the pretend server the training line and the registration checkbox say nothing is trained
  (trainingNoticeText); the real sentence and its wording are unchanged and still await Meta's
  legal read

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 17:20:13 +00:00
Void
636cad9655 phone layout: text wraps the traced portrait outline; status lines no longer sit under the composer
Some checks failed
Build pull request / Build pull request (pull_request) Failing after 2m59s
shape-outside: url() sizes the image at its natural size and anchors it at the margin box, which the
phone layout's -82px top margin moves down by the overhang, so the exclusion was the wrong size and
in the wrong place and long-post words ran under the art. PoseAvatar now traces the displayed art's
alpha (0.35, as before) into a polygon in border-box pixels, retraced on load and resize.

The pose status lines sat in a shrinkable flex box (12px high, three 18px lines) and overflowed into
the composer; the box is shrink="No".

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 23:27:53 +00:00
fb4eabbf38 Merge pull request 'ridge scene behind the whole app, tight bubble wrap, sharper portraits, long-post fixtures' (#30) from void/ridge-scene-and-bubbles into dev
All checks were successful
Rat dev preview / Build dev preview (push) Successful in 2m41s
2026-11-07 19:51:23 +00:00
Void
7bdc512836 scene behind the whole app; bubble text wraps around the portrait, not beside it
Some checks failed
Build pull request / Build pull request (pull_request) Failing after 2m57s
Signed in, the shell is clear over the ridge scene (html[data-scene]): Background and Surface
container tokens are redefined on #root only, so menus, dialogs and tooltips in #portalContainer
keep their fills. Bubbles and the composer are the filled surfaces: their colour at 50% over a
12px blur. Avatar initials read the surface colour through a variable captured above the override.

On phones the message content (a flex column) formed its own block formatting context and sat
beside the floated portrait for the bubble's whole height, so text stayed as narrow as the gap
beside the portrait. It is a plain block there now: lines wrap around the silhouette and then
run the bubble's full width.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 19:50:59 +00:00
Void
d73599d2cf preview: portrait thumbs at 480px (were 160px), long-post demo fixtures
The demo pose thumbnails were 160px wide palette PNGs, about 4 KB, shown at up to 210 CSS px
on phones: 195 CSS px x DPR 3 = 585 device px from 160, a 3.6x upscale. They are now 480px
wide (about 2.5x the phone portrait at DPR 3, still 25-70 KB each), generated from
/opt/commons/cast-art/poses by scripts/make-pose-thumbs.mjs, and cover every pose the
catalogue lists for the three demo Minds.

The Ratatoskr demo room gains three long Mind posts with paragraphs, lists and code,
sent with formatted_body like the real Minds' Markdown.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 19:50:59 +00:00
d233344207 Merge pull request 'preview: pretend homeserver for the dev preview (in-page, off by default)' (#28) from void/preview-demo into dev
All checks were successful
Rat dev preview / Build dev preview (push) Successful in 3m7s
2026-11-07 19:02:48 +00:00
Void
2a249ddf68 preview-demo: fix test file, drop unused import
Some checks failed
Build pull request / Build pull request (pull_request) Failing after 2m53s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:58:15 +00:00
Void
0020f7f003 preview-demo: seed settings before the settings module reads them, short banner, quick first poll
Found driving Chrome: the pose setting was seeded after settings.ts had already read defaults;
the Connecting bar stayed until the first 15 s long poll returned.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:57:07 +00:00
Void
e7dfbd008b preview-demo: deliver submit events the sandbox would cancel
The host CSP sandbox lacks allow-forms; Chrome drops native submission before the submit
event fires, so the login button did nothing in a real browser (found driving Chrome).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:54:59 +00:00
Void
e3278a4d7e preview-demo: destructure origin
Some checks failed
Build pull request / Build pull request (pull_request) Failing after 3m22s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:52:30 +00:00
Void
df536f854e preview-demo: destructure open
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:52:15 +00:00
Void
0f1fc066e4 preview-demo: lint
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:51:07 +00:00
Void
8431827077 preview-demo: lint-clean router, prettier
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:50:52 +00:00
Void
4d09a33ec2 preview-demo: seed settings through the installed window's storage
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:50:15 +00:00
Void
7a896c5f93 preview: pretend homeserver for the dev preview, in-page and off by default
src/preview-demo answers a demo.invalid homeserver from fixtures through a guarded fetch;
own-origin requests pass, every other origin is refused (fetch, WebSocket, XHR, beacon).
Built in only with VITE_PREVIEW_DEMO=1 and switched on by previewDemo in config.json
(scripts/preview-config.js --demo, run by the dev workflow). Login prefills 'demo'.
Pose art: 24 downscaled thumbnails in preview-demo/poses, copied into dist by the workflow.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:49:59 +00:00
Void
0f3494217e ci: upload the dev preview with the v3 artifact protocol
All checks were successful
Rat dev preview / Build dev preview (push) Successful in 3m15s
The v4 client drops the /forge subpath of ACTIONS_RESULTS_URL; v3 uses ACTIONS_RUNTIME_URL.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:40:17 +00:00
Void
70ade6ef0e ci: print artifact service URLs (debug, no tokens)
Some checks failed
Rat dev preview / Build dev preview (push) Failing after 3m1s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:36:52 +00:00
Void
27d5bbaec5 ci: point the artifact uploader at the forge subpath
Some checks failed
Rat dev preview / Build dev preview (push) Failing after 3m4s
Run 170: CreateArtifact got an nginx 404 page; /twirp 404s at the host root and answers
(401 without a token) at /forge/twirp. Try the results URL with the subpath.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:33:35 +00:00
Void
2b3384ff5c ci: upload the dev preview artifact with forgejo/upload-artifact
Some checks failed
Rat dev preview / Build dev preview (push) Failing after 3m0s
actions/upload-artifact v4+ throws GHESNotSupportedError on this forge (run 169);
Forgejo's fork is the supported uploader.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:29:53 +00:00
Void
053a40038e ci: rerun rat-dev-preview (runner MemoryMax now 8 GiB)
Some checks failed
Rat dev preview / Build dev preview (push) Failing after 3m43s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:25:40 +00:00
538b96fd20 Merge pull request 'ci: build dev into rat-dev-dist artifact' (#27) from void/rat-dev-workflow into dev
Some checks failed
Rat dev preview / Build dev preview (push) Failing after 3m38s
2026-11-07 18:17:20 +00:00
Void
2b576f6a66 ci: build the dev branch into an rat-dev-dist artifact
Some checks failed
Build pull request / Build pull request (pull_request) Failing after 3m9s
Push to dev builds with base /void/rat-dev/, tier low, heap 3072 MB, and uploads dist.
No secrets. Consumed by gamecult-ops install-rat-dev-preview.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:12:04 +00:00
Void
39b20c9e65 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	config.json
2026-11-07 18:12:03 +00:00
Void
2759725a33 Merge commit '3f6d27a1' into void/preview-all 2026-11-07 18:04:57 +00:00
Nibu
3f6d27a1f9 auth: translucent bubble-style login card while the scene runs
Some checks failed
Build pull request / Build pull request (pull_request) Failing after 3m35s
CLA Assistant / CLAssistant (pull_request_target) Failing after 1s
Under html[data-scene] the card is a blurred 85% pane in the sky bubble colour
(--sky-bubble, fallback #0d1a26), message-bubble radius, no visible border, and
shorter padding/gaps so more scene shows on a phone. Tier off is unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:03:33 +00:00
Void
0f79ce2c4e Merge remote-tracking branch 'origin/nibu/scene-host' into void/preview-all 2026-11-07 18:03:10 +00:00
Void
d9b9c635c6 Merge remote-tracking branch 'origin/nibu/ridge-scene' into void/preview-all 2026-11-07 18:03:10 +00:00
Void
d2f5cef089 Merge remote-tracking branch 'origin/void/three-doors-look' into void/preview-all
# Conflicts:
#	README.md
2026-11-07 18:03:10 +00:00
Void
a8984fcbbd Merge remote-tracking branch 'origin/void/composer-spellcheck' into void/preview-all 2026-11-07 18:03:05 +00:00
Void
26e60fc9ec Merge remote-tracking branch 'origin/void/pose-catalogue' into void/preview-all
# Conflicts:
#	package.json
2026-11-07 18:03:05 +00:00
Void
7013fcf993 Merge remote-tracking branch 'origin/void/resume-sync' into void/preview-all 2026-11-07 18:02:59 +00:00
Void
469cd83c9f Merge remote-tracking branch 'origin/void/login-training-notice' into void/preview-all 2026-11-07 18:02:59 +00:00
Void
28a9af5fd7 Merge remote-tracking branch 'origin/void/brand-ratatoskr' into void/preview-all 2026-11-07 18:02:59 +00:00
Void
6b7f91aa3c Merge remote-tracking branch 'origin/void/sky-tokens' into void/preview-all 2026-11-07 18:02:59 +00:00
Void
7bb2ddab74 Merge remote-tracking branch 'origin/void/sky-sun' into void/preview-all 2026-11-07 18:02:59 +00:00
Nibu
0ab0e77a20 scene: mount the background scene at the app root
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Failing after 1s
Build pull request / Build pull request (pull_request) Failing after 3m7s
Check PR title / lint (pull_request_target) Failing after 1s
BackgroundScene hosts the scene behind the app (fixed, z-index -1, tier off
renders nothing); mountBackgroundScene owns the async start/dispose race and
calls login() when a session already exists. Signed-out screens go transparent
while a scene runs. build:preview sets backgroundScene.tier low in dist.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 17:34:12 +00:00
aa2eef089d Merge pull request 'ci: drop Cinny-upstream workflows that cannot run on the forge' (#25) from void/ci-drop-cinny-leftovers into main 2026-11-07 11:39:21 +00:00
void
d670fc5391 ci: drop Cinny-upstream workflows that cannot run on the forge
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Failing after 1s
Check PR title / lint (pull_request_target) Failing after 1s
Build pull request / Build pull request (pull_request) Failing after 3m37s
Docker check / docker-build (pull_request) Failing after 15s
Remove cla, pr-title, deploy-pull-request, netlify-dev and prod-deploy;
drop the deleted prod-deploy path from docker-pr's trigger filter.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 11:38:28 +00:00
Void
b9c5e3d1a5 auth: room notice version is bounded at 4294967295 (Heimdall's one version rule)
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
Check PR title / lint (pull_request_target) Has been cancelled
CLA Assistant / CLAssistant (pull_request_target) Failing after 1s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:31:31 +00:00
Void
c2673a698d auth: a room's notice is a state event (org.gamecult.notice), not a pinned message
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
Check PR title / lint (pull_request_target) Has been cancelled
Heimdall's ruling: type org.gamecult.notice, state_key '', content {version, scope}.
version is a positive integer, scope exactly show, study or train; absent or
malformed means no train line. ROOM_NOTICE_CONTENT_KEY becomes
ROOM_NOTICE_EVENT_TYPE; RoomTrainingLine reads the state event through useStateEvent.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 23:30:54 +00:00
Void
3fcf1cf9dd auth: train line comes from the room's pinned notice; drop browser-side acceptance
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
The collector reads the notice version from the room's pinned notice and takes
the member's first reply as the acceptance (Heimdall answer-collector-consent.md),
so a localStorage record at registration was a second, unread copy. Deleted it
and its unused re-ask helpers. RoomTrainingLine now reads the room's own pinned
notice and shows the train sentence only where that notice declares train; no
notice, no line (DMs included). The pinned event's encoding is not fixed by the
doc; the key is provisional and isolated in trainingNotice.ts.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 22:27:47 +00:00
Void
7b4aa2f184 sky: Midnight Sky and Noonday Sky baked from sun.js (albedo x irradiance)
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Check PR title / lint (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
Two themes replace the navy GameCult theme. Every colour is a bark, leaf, soil
or pigment albedo times the irradiance sun.js gives for a fixed moment (equinox
noon and midnight, 45N). scripts/bake-sky.mjs writes src/sky/baked.ts: the
terrain-free sky gradient used as the fallback background, folds tokens for
panels and buttons, chat bubble colours, link and name colours.
skyTokens.test.ts holds every text pairing to WCAG AA and fails if baked.ts is
stale.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 20:57:31 +00:00
Nibu
69d8ff3fa1 scene: analytic aerial perspective on the baked ridge layers
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
Per-layer Beer-Lambert transmittance exp(-k d) mixes each layer toward the haze colour, with
desaturation, 0-2 px edge softening (2D canvas filter, where supported) and an optional faint
warm sun-side in-scatter growing with distance. All at bake time; no per-frame work. Sky colours
still come only from skyColours() (gains optional sunAzimuth).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 20:50:41 +00:00
Void
e38ebda1c5 auth: training notice at registration only, versioned; one train line per room
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
Check PR title / lint (pull_request_target) Has been cancelled
Login no longer shows the notice. Registration shows the ruled sentence with a
plain tick, and records {noticeVersion, acceptedAt} on submit (newcomers only;
a changed TRAINING_NOTICE_VERSION is a fresh acceptance). Each room carries one
line above the composer. The Discord sentence and "on this server" are gone.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 19:52:07 +00:00
b48685b986 scene: ridge scene as the default background, no WebGL
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
Check PR title / lint (pull_request_target) Has been cancelled
Four ridge layers generated once on the CPU from CultMath value-noise fbm, each painted
once to an integer-size 2D canvas over a baked sky; CSS translate3d drift only. Pauses
hidden / reduced motion; falls back to a still image if rAF p95 > 33 ms over 2 s;
?probe=1 shows median/p95. Same createScene contract, tier flag still defaults off.
Ray-march scene stays behind backgroundScene.style = 'raymarch'.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 18:34:13 +00:00
Void
7c89bd0289 sky: sun.js, sun position and light colour for a place and moment
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Check PR title / lint (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
Dependency-free ES module: light({time,lat,lon,cloud_cover,precipitation})
-> {elevation, direct, diffuse, wetness}, linear RGB. Constants that were
tuned by eye are labelled EYEBALLED. Fixed-moment tests in
sun.node-test.js (plain node, not collected by vitest).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 18:20:49 +00:00