Build the atom KIT "medieval-town" for a late-medieval northern European walled town (5,000 people): the parts that
make houses differ by WEALTH and TRADE, plus two pieces of square furniture. Reference: sheet.jpg here (pen drawings
from the video "How medieval towns actually looked": A patrician house, B tower house, C dormers, D chimney stacks and a
roof louvre, E shop signs, F craftsmen houses and cottages, G stone pillory, H well, I half-timber detail). Follow the
drawings' shapes and proportions; render them in the existing medieval kit look, not as line art.
Your dir: /root/fal-author/medieval-town-v1/ on gex44 (here: ~/forge-build/forge-assets/jobs/medieval-town-v1/).
The houses themselves are assembled by code (stone ground storey + generated half-timber upper storeys + tile roof
laid from tile strips). You make add-on atoms; the code places them. Atom frames: same conventions as the medieval kit
(~/forge-build/forge-assets/browse/kits/medieval/kit.json and jobs/medieval-atom-kit-v1/build_kit.py, read-only):
+Y up, metres, facade atoms face +Z out of the wall, wall outer plane at Z=0.

Atoms (name: size W x H x D in metres, origin rule). FROZEN: code is being written against these names right now.
- dormer_gabled: 1.3 x 1.8 x 1.9, small gabled dormer with a leaded window (sheet C right). Origin: centre of the
  dormer's front sill line where its front wall meets the roof surface; +Z points down-slope / out toward the street;
  the body runs back into a 55 degree roof (its cheeks and roof must bury into the slope, no gaps when placed on a
  55 degree plane passing through the origin along X).
- dormer_hipped: 1.3 x 2.6 x 1.9, same frame, steep hipped/conical roof with a finial spike (sheet C left).
- dormer_wall: 1.6 x 2.4 x 1.2, a stepped or pointed wall-gable dormer standing on the wall plane (sheet C middle):
  origin bottom centre of its front face at the eaves line, front face on Z=0.
- louvre_ridge: 1.2 x 0.7 x 1.0, a small ventilation louvre sitting on a ridge (sheet D bottom right). Origin: centre
  on the ridge line, ridge along X.
- chimney_cluster: 1.6 x 3.4 x 1.0, grouped stacks of a rich house (sheet D, brick or dressed stone, ornate tops).
  Origin bottom centre, same frame as chimney_stone (it is placed with its base 0.55 m below the ridge).
- chimney_twin: 1.2 x 2.8 x 0.8, two plainer stacks (sheet D middle). Same frame.
- sign_boot, sign_pig, sign_key, sign_pretzel: hanging trade signs on a wrought iron bracket (sheet E). Same frame as
  sign_smith in medieval-trades: wall bracket fixing point at [0,0,0], board/object hangs below, body +Z; about
  0.9 wide, 1.0 down, 0.6 out.
- oriel: 1.6 x 2.2 x 0.6, a timber box bay window on an upper storey with leaded glazing and a small tile roof
  (sheet B). Origin: bottom centre of its back face on the wall plane (Z=0) at the storey floor line; corbels below.
- door_arched_stone: 1.3 x 2.6 x 0.3, round-arched plank door in a dressed stone surround (sheet A right door). Same
  frame as door_plank (bottom centre of the clear opening, exterior plane Z=0; clear opening 1.1 x 2.3).
- door_cellar: 1.0 x 2.0 x 0.3, low arched plank door in rubble for an undercroft (used on slopes, where the ground
  falls away behind a house). Same frame as door_plank, clear opening 0.9 x 1.8.
- window_cellar: 0.6 x 0.5 x 0.25, small barred/oval opening of a stone ground floor (sheet A, the little openings
  beside the doors). Same frame as window_leaded.
- window_shuttered: 0.8 x 1.1 x 0.3, unglazed opening with open plank shutters (most windows were not glazed). Same
  frame and clear opening as window_leaded (0.7 x 1.0) so code can swap it in.
- finial: 0.25 x 1.0 x 0.25, a gable apex spike/cross (sheet A gables). Origin bottom centre.
- thatch_panel: 1.0 x 0.30 x 1.0 (X along the eaves, Y thickness out of the roof, Z down the slope): a piece of thick
  reed thatch laid as a grid on a 50-55 degree roof plane. Origin: centre of its UPPER edge on the rafter plane; +Z
  runs down the slope (same frame as tile_strip_a). Neighbouring panels must join seamlessly in X and Z (tileable
  texture, overlapping edges), and the bottom (eaves) and side (verge) edges must read as cut, bundled thatch.
- thatch_ridge: 1.0 x 0.45 x 0.9, a thatch ridge roll laid along X, origin centre on the ridge line (like
  ridge_tile_round).
- pillory: 1.0 x 6.0 x 1.0, the stone gothic pillory column with iron rings and chains on a stepped base (sheet G).
  Origin ground centre.
- well_wheel: 2.4 x 3.4 x 2.4, a covered well with a wooden roof and a big wheel winch (sheet H). Origin ground centre.

Triangle budget (overrides the contract numbers): whole kit <= 45k; pillory <= 6k; well_wheel <= 6k; chimney_cluster <=
3k; dormers <= 2.5k each; thatch_panel <= 300 (it is instanced hundreds of times; detail goes in the texture/normal
map); thatch_ridge <= 300; everything else <= 2k. The contract's roof-cover and eaves-system sections do NOT apply.
DETAIL LEVEL and MATERIALS: match jobs/medieval-atom-kit-v1/ and jobs/medieval-trades-v1/ (read their kit_sheet.png,
runtime_*.png, build_kit.py): reuse the shelf material NAMES (Rubble_stone, Oak_frame, Plaster_ochre/white, Clay_tile,
Dressed_limestone, Wrought_iron, Leaded_glass, Door_paint, Sign_paint); new ones only when needed (Thatch_reed,
Brick_old, Shutter_wood). Trim that sits on a wall (stone door surround, corbels) stands at least 15 mm proud of
Z=0 so it never z-fights the code's wall.
test_house.png: assemble one rich house corner (a plain box house with a 55 degree tile roof stand-in, two
dormer_gabled, one chimney_cluster, door_arched_stone, window_cellar, oriel, sign_boot) and one thatched cottage (a
3 x 2 grid of thatch_panel each side + thatch_ridge, window_shuttered, louvre_ridge) and render them, plus the pillory
and well_wheel side by side.
