Commit graph

1,917 commits

Author SHA1 Message Date
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
Nibu
b8f2bb462e auth: login card fill 50% with 18px blur and a faint edge
The blur flattens the sky and ridges behind the text, so the fill can be
half as opaque and let the scene show through. Text over the unblurred
horizon glow is 4.15:1 (4.5 needs 54%); measured over the real blurred
backdrop at 390x844 it is >= 4.94:1.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:22:19 +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
Void
4e2aeddb69 auth: training notice on login and registration; registration needs an acknowledgement
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) Failing after 1s
One TrainingNotice component above the submit button on both screens. Login
shows the notice only; registration adds a ticked checkbox that gates the
Register button.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 13:39:29 +00:00
Void
8774cbbe45 README: drop the OBS media receiver disambiguation
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Failing after 1s
Build pull request / Build pull request (pull_request) Failing after 2m57s
NPM Lockfile Changes / lockfile_changes (pull_request) Failing after 1s
Check PR title / lint (pull_request_target) Has been cancelled
Meta ruled 2026-11-06 that the streaming receiver is deprecated and
Ratatoskr is the chat client's name.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 12:39:02 +00:00
Void
1519f5a8ab README: disambiguate from the OBS media receiver also called Ratatoskr
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
NPM Lockfile Changes / lockfile_changes (pull_request) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 08:37:51 +00:00
Void
2255988866 brand: Ratatoskr README front door, package name, theme colour, contrib confs
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
NPM Lockfile Changes / lockfile_changes (pull_request) Has been cancelled
Check PR title / lint (pull_request_target) Has been cancelled
README names what the repo is, what is live versus planned and the entry
points; Cinny is credited as upstream and the AGPL notice and copyright are
kept. package name, HACKING/CONTRIBUTING titles, nginx/caddy examples and the
docker tag follow. manifest and theme-color use the mock-up navy #07111a.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 07:09:25 +00:00
14d9fa6246 Merge pull request 'brand: Ratatoskr replaces Cinny branding (do not merge)' (#11) from void/brand into main 2026-11-05 10:51:59 +00:00
3043690657 chat look: the three-doors mock-up in the bubble layout
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
NPM Lockfile Changes / lockfile_changes (pull_request) Has been cancelled
Pose portrait beside the bubble on wide screens and floating inside it on phones with
shape-outside; asymmetric bubble corner; own messages right-aligned in the accent colour;
first-appearance pop and rise, staggered, off under prefers-reduced-motion; Nunito in the
GameCult theme; package name and README move to Ratatoskr, Cinny credit and AGPL notice kept.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 10:49:54 +00:00
Void
4df22558bf Merge remote-tracking branch 'origin/void/brand' into void/three-doors-look 2026-11-05 10:44:31 +00:00
Void
db023bc033 Merge remote-tracking branch 'origin/void/pose-catalogue' into void/three-doors-look 2026-11-05 10:44:31 +00:00
68f10ce414 Merge pull request 'Estate navigator stack: background scene, soundscape, cone prepass (opt-in)' (#15) from ratatoskr/estate-navigator into main 2026-11-05 00:31:47 +00:00
7e632e8605 Merge pull request 'scene: cone prepass for pass 1, opt-in steps/pixel readout' (#12) from nibu/scene-trace-prepass into ratatoskr/estate-navigator
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
2026-11-04 22:56:29 +00:00
Void
56f360233a composer: spellcheck setting, off by default on touch devices
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
The composer's Editable set no spellCheck/autoCorrect/autoCapitalize/inputMode,
so the browser default (spellcheck on) applied. On Gboard that draws the red
underline and swaps the keyboard for a correction modal when the caret touches
a flagged word. Add 'Spellcheck in composer' (Settings > General > Editor),
defaulting to off when the primary pointer is coarse and on otherwise. Off also
sets autoCorrect=off, since spellCheck alone leaves the suggestion UI in place.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 22:08:22 +00:00
Nibu
293885089a scene README: createScene needs either float colour-buffer extension
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 20:39:58 +00:00
Nibu
7e05866437 scene: half-float prepass start target where EXT_color_buffer_float is missing; say why createScene is null
Some checks failed
CLA Assistant / CLAssistant (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
Phone Chrome without EXT_color_buffer_float returned null with one message. Rendering to
RGBA16F only needs EXT_color_buffer_half_float, and every other target is already a half, so
only the prepass start (RGBA32F) needed a fallback. In half mode the prepass writes
t*(1-2^-10) - 2^-15, which stays below t after the half rounds to nearest, so pass 1 still
starts at or before the true distance. W_FAR stays exact. onUnavailable names no-webgl2 vs
neither float extension; Scene.startFormat and options.halfStart (force, for tests and the
harness). The standalone page shows the reason, renderer, vendor, UA and extension list.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 20:39:22 +00:00
Nibu
50ffd90560 harness: demo page keeps hold of the canvas it swaps in, so the prepass switch works twice
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
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 18:47:12 +00:00
Nibu
12469671c9 scene: pack step bytes tightly; keep the hit tolerance clear at the far end of a prepass step
Soul pass on 87c9ca60: the R8 steps read used the default PACK_ALIGNMENT of 4, so
at widths not divisible by 4 the buffer was too small (readPixels fails) and padding
would be summed. Portrait runs read 0 steps/pixel. The prepass step now divides by
1.0006 so pass 1's tolerance, which grows with t, stays clear at the end of the step.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 18:35:11 +00:00
Nibu
b055b2a5af harness: trace and diff modes, standalone demo page with steps/pixel readout
trace: steps per pixel and pass ms at three fixed camera poses, PREPASS=0,1 arms.
diff: one frozen frame with and without the prepass, against a 512-step render.
bundle.cjs demo: full-window page with a prepass switch and the readout.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 18:26:23 +00:00
Nibu
87c9ca6030 scene: cone prepass starts pass-1 rays past empty space; opt-in steps/pixel readout
Pass 0 marches one ray per 8x8 tile of pass 1, each step shrunk by the widest
any ray of the tile strays from it, and stores the distance no ray of the tile
can have hit before (W_FAR when the whole tile climbs out above the highest
geometry). Pass 1 starts from it. The distance bound moves to sdf.glsl so both
passes step by the same function.

onTraceStats adds a step-count render target to pass 1 and reads it back every
8th frame through a pixel-pack buffer and fence, outside the timed span. Unset,
neither the output nor the target exists. prepass:false is the baseline.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 18:26:23 +00:00
Void
9e12f6cbe4 brand: Ratatoskr replaces Cinny in the user-facing surface
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
Squirrel logo, favicons and app icons generated from shapes by scripts/gen-brand.mjs;
titles, meta, manifest, device names, welcome, auth, splash and About are Ratatoskr.
About, the auth footer and the welcome page credit Cinny (AGPL-3.0) with source links.
LICENSE and notices untouched; storage keys and protocol names are unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 15:53:30 +00:00
Void
a1101e90a6 poses: read labels only from the catalogue; add a client-status pose line
Some checks failed
Check PR title / lint (pull_request_target) Has been cancelled
Build pull request / Build pull request (pull_request) Has been cancelled
CLA Assistant / CLAssistant (pull_request_target) Failing after 1s
The client's own SHARED_POSES/MIND_POSES lists and the committed webp art are gone.
catalogue.json (cast-art poses/catalogue.json, synced by npm run sync:poses) is the
only list of Minds, labels and art paths. RoomViewPoseStatus draws "Ratatoskr:
<Mind> is <pose>, since HH:MM" from the loaded timeline; it is never sent to a room.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 14:06:18 +00:00
Void
33e5f0ebf7 client: nudge sync on resume so a backgrounded tab stops waiting out the 30 s poll
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
On visible (after >=5 s hidden), pageshow(persisted) and online, call
retryImmediately; if sync is not Prepared/Syncing/Catchup 3 s later, one
non-overlapping stop/start. Debounced, listeners disposable, started once
after startClient.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 12:01:38 +00:00
95e24aadb5 Merge pull request 'scene: Phacelle bound says measured-not-proved; neutral creature draws nothing' (#8) from nibu/phacelle-7-neutral-creature into ratatoskr/estate-navigator 2026-11-03 11:37:05 +00:00