- 🎲 Random now grafts 1-2 catalog parts from distinct decorative categories
(props excluded) onto the picked Compendium template, so re-rolling the same
template still looks different (_graft_random_parts).
- Suggestion chips: every SUGGEST_POOL entry now resolves to a real catalog part
via edit_parser.match_part. Dropped the two body-shape phrasings that silently
mis-matched ("make it short and round" -> round ears, "make it tall and skinny"
-> a tophat), since the edit path can only ADD parts, not reshape the body.
- Bench input placeholder is randomized per open (GEN_EXAMPLE_POOL) and every
example maps to one of pick_exemplar's 6 body shapes via a recognized keyword
(no silent quadruped fallback), 2 per shape.
- New Lab top-right "✏️ Build from scratch" (scratch_open/scratch_fill): opens the
bench with both slots empty but KEEPS the current family (a splice adds to the
tree); distinct from the landing FreeLand which starts a fresh family.
- From-scratch panel cop…
chore: make tracked content English-only (keep CJK command-match table)
Translate cosmetic Chinese (comments, report title, spec mockup) to English.
Keep the load-bearing CJK synonym tables in fallback.py that let the offline
interpreter recognise Chinese command input.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(bench): big 3D scenes + Gemma-suggested hint bubbles in a halo arc
Splice Bench redesign from user feedback:
- Title centered to the VIEWPORT (Back pulled out of flow), not the row.
- Each side becomes a large 3D scene (440x380); the creature fills it and the
name is merged into the A/B header. The colour-swatch card is removed.
- The 4 quick-tweak chips become glassy hint bubbles floating in a halo arc
across the top of the scene (outer-low, inner-high; right side anchored with
right: so fixed-width pills never clip). Gentle float animation
(reduced-motion-aware). They keep the buddy-chip class, so clicks still route
through the existing buddyChip -> on_chip bridge (no JS change).
- Hints are full imperative sentences ("Add two curved horns"), shown verbatim
and sent as the tweak prompt.
- Hints are now AI-driven: first render samples a static pool; after EVERY tweak
on a side, Gemma regenerates that side's 4 hints for the new form
(runtime.suggest_tweaks + build_freeform_suggest_messages + TWEAK_SCHEMA;
fake runtime / model failure…
feat(freeform): route the whole main flow through the freeform path
Phase 1 of all-freeform: ancestors seed as freeform (exemplars, stopgap for the
compendium), AI Tweak edits box geometry via a new edit_creature path instead of
the recipe interpret_genome_command (which stripped boxes), splice already routes
to fuse_creatures for box parents, Draw-from-prompt moved into the Lab, warmup
fires the Gemma freeform model. Qwen recipe code kept dormant.
New: prompts.build_freeform_edit_messages, fallback.edit_boxes_fallback
(deterministic box editor), runtime.edit_creature (Protocol + Fake + LlamaCpp).
Verified end-to-end on the fake runtime (seed -> tweak -> splice -> reveal).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an opt-in freeform path where the model draws raw box-layout geometry
({name, boxes:[{x,y,z,w,h,d,color}]}) instead of the recipe, so creatures can
take cross-form shapes (five arms, a house on the head) the closed recipe
vocabulary cannot express. Gemma 4 12B (the model-selection spike winner),
grammar-enforced, seeded with a hand-authored reference exemplar.
Freeform creatures are first-class: they enter the family tree and breed. A
splice routes to a Gemma "merge two creatures" call when either parent carries
boxes (freeform x freeform and freeform x recipe both yield a box child);
otherwise the recipe fuse runs. Fallbacks (fake runtime / model failure) use a
reference exemplar or a deterministic box merge, so the app never renders empty.
- genome: optional Genome.boxes + freeform_genome(); round-trips, recipe
creatures stay box-free
- prompts: BOX_SCHEMA, build_freeform_messages, build_freeform_fuse_messages
- runtime: generate_creature / fuse_creatures on Gemma via per-cal…
feat: randomize starter ancestors and restyle the chick
- _new_session now draws two distinct random archetypes (with random seeds)
each session instead of the fixed chick + horse, so the opening pair
varies per visit.
- Recolor the chick's signature palette from white to a warm baby-chick
yellow, so it reads as our own creature rather than the Crossy-Road
white chicken.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: Build Buddy — voxel pet fusion (AI genetics engine)
Hatch two voxel ancestors, voice-tweak them, and let a small local model
splice their genomes into an unpredictable next-generation chimera that
joins the family tree. AI is the load-bearing genetics engine; a
deterministic voxelizer renders Crossy-Road-style animals from the
recipe-level genome the model produces.