Remove the retired applications, asset-specific libraries and DJ pack tool
from Makepad, together with their workspace and launcher entries. All 981
removed source paths are accounted for in the private Stage repository.
Keep public AI chat generation through the AI Hub's generic job runner.
Extract shared SHA-256 and UDP binding into core_util so the public hub and
model crates no longer depend on the relocated asset libraries. Preserve
the retained public coverage in the split wasm validation script.
Validation on the exact cleanup tree in an isolated checkout:
- Release checks: core_util, model, aichat, WM and Builder.
- Release builds: aichat, WM and Builder.
- Existing tests: core_util 5, model 30, aichat 7, Builder 2 passed.
- Core/model checks: wasm32, Linux and Windows passed.
- No warnings in the successful checks, builds or tests.
Known baseline: WM library tests do not compile because the unchanged
style-transition assertion compares seven expected weights with eight.
The unrelated working-tree correction is intentionally outside this commit.
Taken from vjroger/work. A full merge of that fork fights this work branch
in widgets; this is the stems crate, vocal mel-band, span-cache lanes,
log_ring, output fence, midi inject, effect_doc, mp3 sniff, mp4 audio
edit, and audio-only file open. Stage on origin/main cargo-checks again.
A record filed as "Café del Mar" could not be found by anybody typing
"cafe". The tokenizer breaks a run at every non-ASCII character, so the
title indexed as `caf` + `e` and the query asked for `cafe` — three
terms that never meet. Which spelling a name happens to carry was
deciding whether it was reachable, and nobody decided that.
The two sides are now deliberately asymmetric, and the law is one line:
index(text) = tokenize(text) ∪ tokenize(fold(text))
query(text) = tokenize(fold(text))
so the index is a superset of what any query can ask, and folding is
idempotent, which means "café" and "cafe" ask exactly ONE question —
they have to, or the cursor fingerprint and the ranking would disagree
between two spellings of one word. The fold happens to the TEXT before
tokenization, because by the time there are terms the accent has
already split the word and there is no per-term place to hang a folded
form.
The fold is this repo's own twenty-arm Latin table, not canonical
decomposition: decomposition cannot tell you that 'ß' is "ss" or 'æ' is
"ae", and this repo already answered both, tested, inside the
importer's alias slugger. That table moves to the data crate so the
alias a record is filed under and the terms it is found by fold by
construction rather than by two tables happening to agree; the
slugger's own locked assertions pass untouched, which is the proof the
move changed nothing.
Two guards for the two ways this goes wrong quietly. An ASCII text
takes a fast path that provably tokenizes identically, so every
existing field indexes bit-for-bit as before. And a term both passes
find is counted at the HIGHER of the two frequencies, never their sum —
doubling a weight fails no assertion about which rows come back, only
about the order they come back in, so it would have shipped silently.
The index holds terms, not the rule that made them, so a catalog
written before this holds the wrong ones: schema 15 rebuilds every
posting row from the annotations that produced it. It is a
recomputation from data the store already has, not a repair, and it
takes the same builder the writer uses so the two cannot drift. It
deliberately does not enforce the index-term budget — these rows were
admitted under it already, and failing a migration on a budget would
leave a catalog nobody can open. Alias postings are untouched: an alias
is `[a-z0-9_-]` by construction, so the fold is the identity on every
one and rebuilding would be a whole-table cost for a guaranteed no-op.
Both openers carry it, the server's migration ladder and the embedded
one, and the embedded gate now admits a v14 root rather than refusing
it.
Verified against a real 3.2 MB catalog: it migrated 13 -> 15 on open,
after which "chloe" finds a track titled "…(Chloé Caillet mix)" and so
does "chloé"; "chlo", the truncation the old index held, still answers,
which is the superset law showing up as behaviour; and the ASCII
searches around it return exactly what they did before. The migration
was not perceptible on that catalog, but I could not isolate its cost
honestly — it commits inside the WAL and the store opens lazily — so no
number is claimed here.
The store's integration tests cannot link in this environment
(sqlite3.lib, pre-existing and unrelated), so the four end-to-end tests
added here are unrun locally; the tokenizer law itself is covered by
unit tests that do run.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
(cherry picked from commit d61b9dd4fe3c682c6e597e894f17c4c3a8b4e296)
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.
The 5090 listed flux2-dev ready (total VRAM passed the gate) then refused
every job (29696 + 2048 reserve > ~30510 usable); the flow picked it by
domain ETA and never retried. Nodes now publish vram_usable_mb and mark
un-admittable models too_small; the fleet gate uses usable VRAM; the
flow's gen executor picks admitted nodes for the requested model (ready
first), retries up to three nodes after an admission refusal, and when no
node can take the model its error says why per node (role, too small with
the numbers, waiting for VRAM). The flow's model listing drops (model,
node) pairs the node's fleet role bars, so the picker no longer counts the
chat-only PRO 6000 as ready for image; its label reads ready/absent/too
small with the GPUs named.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
44b3a7f02 added artist/artist_url/album/source_url/license/license_url to
the exported manifest.json search block, which is part of the hashed
snapshot payload -- the contract changed on purpose, so the deterministic
golden in deterministic_golden_rewrites_graph_and_indexes_every_route was
stale (expected 78d089..., actual 7331ed62...). Verified the export is
still deterministic (same hash across repeated runs) and updated the
golden constant, with a failure message that names the printed `left`
value as the new golden so the next bump is a one-liner.
gen.image{prompt} is a service inside the assistant: on a worker it
runs the creator pipeline for the image domain against the node the
runner picks (LAN discovery, ETA-ranked, the resident flux model wins),
streams the node's progress into the tool card, and writes the picture
under the makepad home's gen/ dir; the creator library gains
generate_bytes — the request, poll and fetch that generate_and_publish
now shares — so no second pipeline exists. photos.add{path} bakes that
one file into the open library (only from the gen dir or the person's
home), re-opens the wall and glides onto the new picture; the module
executor answers it later through the host's reply sink. The model
chains them, launching photos in between. A registry seam found on the
way: a call dispatched in the same event a link was adopted reached the
port before its Registered, so the registry now answers a leading
Register at once.
The wall gained a search box: every keystroke re-cuts the packing over
the matches (every word in a title or link; title beats link, a whole
word beats a substring), each picture flies from its drawn rect to its
target over 450 ms, dropped pictures shrink and fade, returning ones
grow back; Esc clears; ⌘F or a bare slash focuses the box; the status
reads "35 of 293 · ro". photos.filter{query} sets the same from the
pane; instances are rebuilt only while a flight runs, and the clock is
the platform's.
Proven on the fleet: "make me a picture of a red bicycle on the moon
and put it in photos" → the file in 40 s, photos launched, added and
shown among the comics; typing r, ro, rob re-packs the wall live; the
filter through the pane in a process tile and as a module. ai-services
39, aichat 5, photos 9, image_tiles 12, creator 9; aichat and photos
check for wasm32.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- libs/sim: DeckStrip (deck.rs) — every laid corridor registers its walk
deck; movers pin to it exactly instead of climbing 2.5 m slab kerbs;
feet inside a static box lift onto its top; the world composes floor,
terrain, materials and voxel in one sampler
- libs/sim + libs/render: camera_path_limit takes the filmed body and never
treats it as an obstruction (the coaster's ride boom was clamped to 1 m);
the shadow gate's settle test gets a hair of float slack
- libs/asset/chat: the in-game builder never asks before building; the
brief teaches game.driver and the race countdown, under budget
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
"make me a giant forest with roads" answered with a plan and "Want me to
go ahead and build it now?" — the player is holding a controller. The
agentic doctrine and the game brief now say it outright: a request is an
instruction, decide the open details, build in this turn, report in a
sentence; a turn that ends in a question is a failed turn.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- libs/sim: meshfloor.rs FloorRaster (one storey per column from a map's nav
graph); composed_surface_sample_at(floor, terrain, materials, voxel) is the
one seam nav, corridors and lots read; in-eval voxel ops no longer bump the
history revision
- libs/asset/chat: world.get_plan / world.set_plan (shape-validated, stale
revisions refused), the authoring state prefixed to every turn, map turns
routed to the plan tools; game.md: the foundation line, the capability kinds
verbatim, no order-independence claims
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The web feature no longer hides the native API; both transport adapters validate
responses through one upper layer with framing headers refused and redirects off;
the platform transport passes a body cap to makepad-network (honoured by the web
backend); the filesystem cache verifies before deduplicating; BaseUrl canonicalizes
and rejects dot segments; ClientLocation is authoritative.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WV6BzHQiJEvvK9EPc1d4ks
A completion-based Transport with the native TCP adapter and a platform-HTTP adapter over a
client-owned network runtime, a CacheStore seam with the filesystem cache and a memory
LRU, BlobContent / ClientLocation / Unavailable types, and native/web features so the
client builds for wasm32; static-site connect is a typed Unavailable until the runtime lane.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WV6BzHQiJEvvK9EPc1d4ks