The file header has claimed this model "comes to ~0.75 m with a real anvil
stump" for as long as it has existed, while shipping a 0.34 m anvil on its
own, lying on the floor. An anvil is bedded into the end grain of a log:
the block kills the ring, and it puts the face at the smith's knuckle. The
stump is its own part, so anyone wanting the bare anvil for their own bench
hides `parts.stump` -- the same arrangement the bell's frame uses.
Two things went wrong on the way in, and the second corrects the first.
Passing `woodTint('oak', ...)` and `woodTint('oakEnd', ...)` as two
arguments of one call hands the callee the same object twice: the tinter
returns one Color and mutates it, which its own docstring warns about. The
block was painted end-grain on every face. That is a real bug and the fix
stands -- but it was not why the stump looked wrong, and the measurement is
what said so. Against the bench and the table on the same oak slot our
stump is LESS saturated, not more (0.35 against 0.45 and 0.49), so the
colour handling was never anomalous.
The actual gap was in one axis: value 0.54 against the reference's 0.28. A
chopping block is old, split and weathered nearly black, which is a
genuinely darker piece of wood than fresh oak, not a rendering artefact.
Sweeping the lift and measuring lands at hue 30 / saturation 0.28 / value
0.34, against 31 / 0.29 / 0.28.
The block is also wider than first drawn. The anvil overhung it, and a
block the anvil overhangs looks like it would go over the first time
anyone swung at it.
27 models, 18517 triangles, all checks pass, 0 floating cases, build clean.
The kit is going public, so everything a reader sees is now English:
27 model sources, the core vocabulary, meta.ts (titles, descriptions and
every slider label), the viewer UI, all script output, REFERENCE.md and
the READMEs.
Rules applied: only comments, doc comments and human-facing strings were
touched. Identifiers, numbers, logic, registry item ids, part names and
material slot names are unchanged — those are a published contract and
were already English.
Verified rather than assumed: for all 53 changed .ts files the code
skeleton (source with comments stripped and string contents replaced by a
placeholder) is byte-identical before and after. Full gate is green —
typecheck, registry conformance, ~510 model checks, GLB round trip and a
production build.
Also fixed here:
- index.html and viewer.html were missed by the translation pass because
the file list only covered .ts/.md/.css. Both had lang="tr" and Turkish
titles.
- The viewer formatted triangle counts with toLocaleString('tr-TR'), which
prints 15.425 rather than 15,425.
- REFERENCE.md's model table header did not match what
scripts/catalog-table.ts emits, so the next regeneration would have
silently changed it. Aligned to the generator.
- Removed scripts/probe.ts and scripts/zdiag.ts; they were throwaway
diagnostics that got committed by accident.
Modeller (13 → 26): chest, bench, torch, lantern, bell, sign, hay bale,
sack, broom, tankard, book, phial, coin pouch. Kürek, çapa ve yaba
render'lara bakılarak yeniden yazıldı.
core:
- createKitModel artık tipli `actions` ve `update(dt)` taşıyor
- BuiltPart.extras: bir parça birden çok materyal yuvası kullanabiliyor
(sandığın kapağı = meşe tahta + demir kayış, birlikte dönmek zorunda)
- BuiltPart.origin: parça başına dönme merkezi (menteşe, sarkaç)
- bendGeometry / roughenGeometry / mottleGeometry
- 5 yeni materyal yuvası: steel, brass, straw, cloth, leather, glass
- bandGeometry({ inner }) — serbest halkalar kapalı katı olabilsin
my-registry/meta.ts: katalog metadata'sı artık build.ts ve viewer için
tek kaynak. Doğrulama modelle metadata'nın uyuştuğunu denetliyor ve bu
eklendiği gün dört modelde gerçek bir sapma yakaladı.
Doğrulama (~500 kontrol):
- metadata uyumu, eylem semantiği, kare hızı bağımsızlığı
- scripts/render.ts: tarayıcısız yazılım rasterleyici. Bütün doğrulama
geometrikti; "bu kürek küreğe benzemiyor" diyebilmek için modele
bakmak gerekiyordu
- scripts/verify-glb.ts: dışa aktar → geri oku → karşılaştır
GLB dışa aktarımı: viewer düğmesi ve toplu CLI aynı kodu kullanıyor.
Viewer:
- parça paneli (solo/izole) ve materyal yuvası paneli (canlı renk override)
- kit görünümü: 26 model tek sahnede, ölçek ve ton tutarlılığı için
- configure() sonrası gölge bayraklarının düşmesi düzeltildi