DRAGONS CRACK

The making

Parameters, not baked assets

Proportions, pose, palette and polygon budget are values in a file. That is the whole claim, and it is worth making only if the pipeline that turns those values into a validated release is honest about what it has and has not proved.

What follows is the stack, the gates, and what each gate caught — including the ones that went green while the work was visibly wrong, which is most of what this project has learned.

Posts

Written from the records

Each post is about one piece of work, taken from the ledgers, handoffs and commits that recorded it. The day a post was written and the days of the work are given separately.

  1. A theme for every place, and an interface remade

    The game’s first music, twelve procedural themes with a calm bed and a lift, and the charcoal-and-copper interface pass of 26 and 27 September 2026.

  2. Four days of an agent auditing the game

    An autonomous coding agent audited the game from 24 to 27 September 2026 until its usage ran out: what it fixed, where it fell short, and how its gates closed.

  3. Five days, one drake, three visits

    The peoples’ game rebuilt on 21 September 2026: an audit found one press and a lot of standing, and 37 improvements turned a defense into a run of days.

  4. On the minimum laptop, heat decides

    Getting the prototype to run on its minimum-spec laptop: GPU skinning, a geometry cache, and why heat rather than frame cost decides the frame limit.

  5. The homelands, pass by pass

    The homeland art passes of 15 and 16 September 2026: authored layouts, a rejected first pass, the accepted V2, the Fens, and what V3 and V4 did not fix.

  6. Five homes, five answers to a drake

    Why the peoples stopped climbing into the dragons’ cave, and the five homeland defenses that replaced it, from the Human Toll to the Ork Red Hour.

  7. Twelve chambers, one way up

    How the dragons’ ascent became playable in September 2026: a cave built from the vent graph, spiral tunnels between bands, lore’s rules and five lineages.

  8. The egg breaks from inside

    The Western Drake’s hatch, reworked on 16 August 2026: a hatchling that pushes before it grows, and a shell that cracks instead of splitting into equal slices.

New posts also go to the devlog’s RSS feed.

The stack

Five layers, and the boundaries are provenance

Every canonical manifest hashes its complete foundation source tree. Extending v1 in place would invalidate all five static releases, so v2 and v3 are separate provenance boundaries rather than newer versions of the same thing.

dragonkitv1 static geometry, export and validation. A canonical GLB, OBJ/MTL, viewer and manifest, reparsed from disk before the manifest is committed.
dragonkit2Skeleton vocabulary and body plans, source-part provenance, geodesic voxel binding, clip primitives, IK and secondary motion.
dragonkit3LBS, DQS and centre-of-rotation deformation, bounded weight repair, bone roles and rolls, joint recovery, morphs and rigged GLB.
rigkitModel-facing binding, posing, clip checks, export, delivery verification and previews.
growthkitTopology-preserving lifecycle cages, eggs and fracture, growth morphs, and lifecycle-film helpers.

The gates

Green is a correctness oracle, never a quality oracle

Format, closure, topology and provenance all passed while a lifecycle shipped with the wrong-coloured egg, hidden ember vents, and 26,000 triangles of featureless charcoal. Every gate below exists because something got through the ones before it.

The appearance gate

appearance/

A gate that can fail because the model looks wrong. Twenty-six views — three rings of eight at 45° from below, level and above, plus straight up and straight down — at one radius fitted once and held for every model, so a measure reports the surface rather than the framing. Each view renders twice, on black and on white; an opaque pixel is identical in both, which gives an exact mask instead of an assumption about the palette.

Why: Every defect this collection found by looking was found from an angle nobody had rendered. Floors come from what the briefs and specs ask for, not from what the models currently score — a gate calibrated to the assets can only detect a regression, and the failure it exists for is a first build passing everything while looking wrong.

Clip checks

rigkit.clipcheck

Zeroed amplitudes, parent and child continuity, loop behaviour, the declared clip shape, and the direction the motion is supposed to go in.

Why: A loop closes only if every rate is whole, and nothing else can tell you a motion points the wrong way.

The merge test

tools/merge_check.py

Measures how far any arm vertex sits inside the torso or the head, per frame, across a whole film.

Why: It found 142 worker-frames with an arm inside a chest or a head in a cut that had already passed everything else.

Finger clearance

humanoidkit/hands.py

Measures phalanx against phalanx, and measures the rig’s own rest fan and droop at every call rather than assuming fingers start straight.

Why: A finger fault is a few pixels in any other film. Thrown on a wall at 2.4 times life size by the hand’s own triangles, it is the picture.

Delivery verification

store.kit.verify

Local structural checks on the shipped GLB, plus the Khronos glTF-Validator when it is available.

Why: A missing external validator is reported separately. It is not the same result as Khronos validation passing.

What is actually shipped

Release state is a vector

layerstatecurrent evidence
v1 staticpartialChecked 2026-09-27T15:04:34.483309+00:00. Source bytes only: westerndrake: stale; wyvern: current; easternlung: stale; crystalwyrmling: stale; babydragon: current. Artifact integrity, geometry validators and visual acceptance were not run.
v2 rig foundationstaleChecked 2026-09-27T15:04:34.483309+00:00. Source bytes only: westerndrake_v2: stale; wyvern_v2: stale; easternlung_v2: stale; crystalwyrmling_v2: stale; babydragon_v2: stale. Artifact integrity, geometry validators and visual acceptance were not run.
v3 deformation, clips, lifecyclepartialChecked 2026-09-27T15:04:34.483309+00:00. Source bytes only: westerndrake_v3: missing; wyvern_v3: stale; easternlung_v3: stale; crystalwyrmling_v3: stale; babydragon_v3: stale. Artifact integrity, geometry validators and visual acceptance were not run.

Fixtures

Craft studies

Fixtures built to expose one class of defect at the size it has to survive. Every fix they produced went back into the character kit, so the stories inherit it.

The Tool Study

One person and five hand tools in eleven beats: a spade dug, thrown and shouldered; a pick struck and prised; a knife whittling; a spear planted and thrust; a wheelbarrow walked and tipped. A fixture, not a story — built so hand faults have nowhere to hide.

Shadow Puppets

Someone sitting by a candle making shadow puppets on a wall: a dog, a goose, a rabbit, a cobra, a swan. It exists to look at fingers, which the wall shows at well over life size.

Version ladders

Each version came from reading the last one cold

Not from a note, and not from a test going green. Someone looked at the delivered frames, found the thing that was wrong, measured it, and fixed the cause rather than the symptom. Earlier cuts are retained and linked here; the current one is marked. A higher version number is not an approval.

The Feast

v3 solved every stance against the rig’s measured 0.477 m arm; v2 had assumed 0.56 m, so no hand ever arrived at what it held. v4 traced every stance snap to a threshold inside an otherwise smooth solver. v5 rebuilt the hand fold itself — fingers that twisted as they curled, a thumb that never opposed, and a wrist oriented after the fingers were folded, which silently unfolded them. v6 made the elbow pole hand-aware, taking 142 worker-frames with an arm inside a chest or a head down to three, at most 4.2 cm in.

The Tool Study

A fixture, not a story. Hand and limb defects are a few dozen pixels in a narrative film, which is how a hand closed on the hole in the middle of a D-handle and a wheelbarrow carried with its wheel half a metre in the air both survived five versions of the feast. v2 fixed feet skating under a body solved per frame; v3 a pick swung like a shovel and a knife held into the chest; v4 re-authored every stroke from the tool’s contact with the world rather than from hand positions; v5 added the merge test.

Shadow Puppets

It exists to look at fingers. Each puppet is thrown on the wall at 2.4 times life size by the hand’s own triangles, so a finger that crosses its neighbour is the picture. v1’s stag read as a splayed hand and its swan sat in the corner of a mostly empty frame; v2 aims each performing lens at the measured centre of that puppet’s shadow and keeps the elbow at the flame’s height, where its shadow lands beside the hand’s.

The Farm Battle

v1’s dragons appeared to spin fiercely, its defenders read as inactive, and the single casualty was not visually clear. v2 still corkscrewed and used proxy figures rather than the project’s own characters. v3 routes three exact-length, nearly straight planar spines through open attack lanes, casts every defender from the production humans, and gives the casualty a dedicated insert.

One decision worth writing down

The package is not the animal

The fifth family is built by a package called babydragon. Its lore name is the Thicket Dragonet, and LORE.txt section 6 is explicit about why: “It is not a baby dragon. It is a dragon that is small, which is a different and much more unpleasant thing.”

Until 20 September 2026 it was the Thicket Hatchling, and its adult looked like one. The adult was rebuilt as an adult and the name followed: a dragonet is a small dragon, and “hatchling” went back to being what every lineage’s first stage is called. Older posts and its film keep the name they were made under.

The same day, for the same reason, the Crystal Wyrmling became the Crystal Wyrm: a wyrmling is a young wyrm, and its adult, rebuilt heavy, low and long with a face it never had, is not one. Its package is still crystalwyrmling.

So the site ships the lore names and the package names stay in the engineering column. It is a small thing that would have leaked into every URL, nav label and filename if nobody had looked.

The record

26 recurring failure shapes, each with measurements

LEARNINGS.md is 25,263 words of cross-system synthesis. These are its section 2 headings — the shapes that turned up more than once, in more than one subsystem, and were named so they could be recognised the next time.

  • 2.1The proxy problem
  • 2.2Checks that cannot fail
  • 2.3Discontinuity is the artefact
  • 2.4Nothing should be authored in metres
  • 2.5Rigidity is the default; softness is the exception
  • 2.6Fixing the shape beats fitting the deformation
  • 2.7Green is a correctness oracle, never a quality oracle
  • 2.8A joint rotated without its descendants is a break, not a bend
  • 2.9A loop closes only if every rate is whole
  • 2.10Nothing else can tell you a motion points the wrong way
  • 2.11An effect is sized against the frame, not against the animal
  • 2.12The effects are a third of the work and have no contract at all
  • 2.13Two definitions of one envelope will drift
  • 2.14Count it before you claim it
  • 2.15Age is not size, and topology has to carry the anatomy
  • 2.16Connectivity by vertex index is not connectivity
  • 2.17Proximity is a guess about authorship
  • 2.18A contact is against the surface, never against a bone plus a number
  • 2.19A renderer's cost is the shape of a triangle, not the count of them
  • 2.20A causal verb needs causal state
  • 2.21A metric is trustworthy only after a failed witness
  • 2.22Camera correctness is visibility, not collision clearance
  • 2.23Representation sets the ceiling before tuning begins
  • 2.24The executable artifact is the evidence
  • 2.25Release state is a vector, not a boolean
  • 2.26Repository cleanup is dependency and lifecycle design

Downstream

What else the foundations carry

SurfaceKit

surfacekit/

Turns the surface-scoped mesh rows in ASSETS.txt into low-poly world props using the same part validator as the dragons.

HumanoidKit

humanoidkit/

Five peoples on one shared topology. The lightweight implicit path handles silhouettes and variants; the premium path deforms one stable CC0 topology and is what the films are cast from.

Fairy

fairy/

The sixth people on its own insect-scale flight body. It stays outside HumanoidKit because entering a dragon vent is its defining anatomy.

Store

store/

Downstream packaging. Reads validated canonical outputs and writes UVs, atlases, rigged files, LODs and manifests without touching a model’s canonical output directory.

Branding

branding/

The identity, generated from parameters: palette, fault, marks, surfaces, counted facts and copy written to platform limits.

systembuiltmeasurednote
SurfaceKit props321101,870 trisCounts describe the shipped manifest, not a fresh geometry run. Current variant selection uses stable digest-derived seeds; that does not revalidate older generated artifacts.
People models626 peoples61 HumanoidKit people and variant GLBs cover five shared-topology peoples, plus 1 separate Fairy GLB on its own insect-scale flight body.
Store products2--Eastern Lung is the complete delivery: textured static and rigged GLB, FBX, .blend, four LODs, 2048 and 4096 maps, previews, notices and a draft licence. The second product ships GLBs, maps and a manifest, and does not yet mirror that surface.