Squash of 39 work commits (Sep 1–9):
0d7185e asset chat: catalog SQL answers in-process, and the game brief stops teaching the y mistake
c18b7f4 game brief: railways are one call too
b7fe32c game brief: a destructible world, path-edited railways, and models that load now
0e94bba game brief: rivers, highways, junctions and gates are one call
c189b03 game brief: agents follow the rules by themselves — you never script a stop
c86a750 chat: a game session reads its doctrine first and is not the generation assistant
1ef6f59 game brief: on a diet and world.plan-first
e18cc69 chat: a tool call the model wrapped inside its own think block still executes
d7f9813 game brief: to change a map, edit the plan you were given; vegetation is a layer
876e3c4 game brief: buildings have insides — ask for a program at the door
47ac158 asset-client: portable primitives — completion transport, cache store, static-site config
9ae91ac asset-store: static export contract — versioned static index and a sanitized deterministic export-static tool
f233756 game brief: races, rings, mocap and biomes are one call each
942476f vj: the whole app type-checks for wasm32 — portable hub discovery and typed-unavailable client facades
2e48c5b asset-client: the static-store read mode and polled runtime
e2a262b asset-store: the portable core — embedded feature, page-store and CAS seams, a synchronous in-process API
9942e26 asset-store: the embedded module lives in its directory now (the browser-durability landing's deletion)
670cc76 asset-store: the platform storage API is a hard dependency on the web, where the embedded store is the only store
6b77318 chat: the in-game builder never asks before building
9630337 asset-store: export-static selects what the namespace holds and says why when it does not
0684b41 asset-store: export-static reads every content schema the server serves
5fdd5d5 vj: on the web the explorer lists the site store's music and a deck loads it with its stems
40e483f vj: the web music browse actually fires — proven on the live path
44b3a7f dj-pack + vj: every track carries its artist, licence and source, and the DJ UI shows them
cb75d36 asset client + store: no std clock on the web — the catalog worker no longer dies at start-up
78a1681 bounded_http: the store's HTTP/1.1 server parser is its own crate — the store keeps only its JSON response shim; flow-server is the second consumer
285bc98 asset-ui: workers from the runtime pool, the video player owns its frames and audio state
90c4f59 asset-store: bump the static-export golden snapshot for the new rights fields
b37b116 media_view: the video, audio, mesh and splat viewers leave asset-ui for one crate; flow-ui shows every media type on the Output card and in the modal viewer
88048aa assets: extend authoring pipelines and typed asset search
0ac0892 Expose bounded modeling tools and reference-image continuations
36121c3 Keep modeling conversations running until completion or manual stop
2cea218 asset: centralize library and store path resolution
72dbc5a asset-creator: run pipelines through Flow graphs
0047e77 asset-store: add guarded, alias-scoped atomic publish
e85e36a asset-store: refresh model-preview sessions with a lease
933d885 asset-chat: compact repeated image diagnostics; require 45-degree views
626e797 asset-importer: gate pack import to desktop Unix; add missing newest field
f5e136d asset-importer: shade world previews with vertex colours
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Add sandbox authoring effects and character/composite creation, improve creator submission handling, and extend publishing/search metadata. Update importer conversions and the asset UI integration.
Validation: 31 store search tests, ten composite tests and two author-policy tests passed in release mode.
Squashed from work; the fine-grained history is under tag archive/work-2026-08-29:
- mp* wave: mpwm window manager + the mp app family, WM API, theme bridge, PDF engine fix
- work: land the sources the last commits reference
- kenney: catalogue all 50 free 3D kits; Modal dismissed() never fired
- asset store: central vision-annotation queue; Kenney donate prompt
- asset-ai: vision domain — image + prompt -> text on every fleet node
- annotation runs the fleet's vision services through the normal job queue
- vj: responsive DJ mixer + Windows drag-and-drop, cherry-picked from PR #1199 (vjroger)
- store search: WordNet synonym expansion, query-side; per-term seeks
- video scheduling: a cold model pin never downloads past a warm one, and a dedicated box only serves its role
- an expansion can never lose a run — and `expand: true` finally means something
- fleet panel: a slow box is not a missing box
- h3: first+last keyframe conditioning (the weights were always FL2VA)
- registry: the three H3 FL2VA tiers name their real conditioning
- fleet scheduling: spread before stacking, and a stuck job moves
- a download never steals a job from a box that has the weights
- the faster GPU takes the tie: 6000 > 5090 > 4090
- an evicted flux model gives the card its VRAM back
- a job now records what each of its stages was handed
- open a stage in RUNS and read what it sent
- every expanded song was an instrumental: the lyrics had nowhere to go
- the writer never overwrites words the person wrote
- store: a dependent job's body is spliced from its deps' results at claim
- a fleet box's job row says what that job was asked for
- the store runs a whole pipeline, and one record says how far it got
- a client can declare a whole run, watch it, and stop it
- 100% now means published, and the expander is a job you can queue
- one card says what a spawned task is doing, everywhere
- a run that ends says so, instead of being noticed later
- when every box holding the model is busy, buy another copy
The asset store now uses libs/sqlite_query as its ONLY engine — not a feature
flag, not a fallback. That closes the Windows gap (the embedded store starts
there now, and a SHARED->EXCLUSIVE upgrade is handled rather than assumed
free) and takes the C dependency out of the build everywhere else.
Around it:
- store: a garbage collector, catalogued content that is referenced in place
instead of copied, the `vjeffect` kind, and host/chat routes that keep up
with the chat wire below.
- importer: the unified map contract reaches quake2, quake3, doom and duke —
world placement, nav, welding, prelit maps and glTF node handling shared
rather than reimplemented per game. Music import, billboards and stateful
props move to the data crate so readers stop linking the importer.
- ai: the serving side of multi-lane chat — per-lane conversations, honest
progress and acceptance reporting, penalties and a watchdog, context as a
per-box number that compacts instead of erupting, a realtime session mode,
and inpaint/flux2 backends. `chat_bench` measures the rate the way the
client meter computes it.
- client / chat / chat_ui: a publication can NAME a file instead of carrying
it; the wire says whether a turn is warm and whether it is thinking, so a
client stops guessing; transcript and feed widgets render history the way
the model wrote it. `SessionConfig::catalog_runtime` lets a host size the
catalog runtime's lanes itself — a browsing UI puts every listing, every
per-tile resolve and every thumbnail blob through that one runtime and
wants a wider fast lane than the shared default, while media lanes keep
it (a few big transfers, not a thousand small ones).
- widgets: the shared asset widgets — one video view (knobbed seek,
transport, bracket trim, rail playback) used everywhere, plus thumb,
preview, scene view, walk-world and the lyric reader.