Market stall: the agent's report
Round 2. Brief: a market stall scene about 12 units wide: a wooden stall with a striped awning on posts, a counter, crates of at least three kinds of fruit as repeated objects, a hanging sign with the stall's name, a chalkboard price sign, a stack of paper bags, a lantern with a glass shade, cobbles or a ground slab, at least eight materials, built with scene; check small parts with --focus; iterate until the beauty render is a presentable scene picture. The agent read only the skill, the two guides, the reference and three examples. Thirteen render iterations of fourteen.
What follows is the agent's report, verbatim. The "fixed" notes in the index (dogfood/README.md) say what changed in the tool because of it. market_stripes_probe.aix is the probe the agent wrote to measure the stripe direction.
1. The model
market.aix (105 lines) is a 14 × 8.7 × 9 unit scene of ten objects: a cobbled slab (tiles pattern), a stall of four oak posts and two beams carrying a 10°-sloped red/cream striped awning with a scalloped valance and an iron lantern bracket, a pine-topped counter with a grooved "wood" front, three tilted crates of apples, pears and lemons (each fruit a grid in two layers on a wooden prop), a fourth crate of oranges on the cobbles with three loose oranges via place, a walnut plank sign on iron chains with extruded cream lettering "PIP'S FRUIT", a leaning chalkboard with three white price lines, six paper bags stacked via place with small yaws, and a brass lantern with a hollow shell glass drum, candle and flame in the air inside, hung from the bracket. Nineteen materials (report line), grid 256 (cell 0.055), 621k triangles, 10 GLB nodes. It matches the plan; the one departure is the fourth crate, added because nothing under the awning is lit in the beauty render. Final beauty is beauty.png (1024 px); also there: sheet.png, steps.png, slices.png, focus_lantern_sheet.png, focus_lantern_slices.png, beauty_from_left.png, report.md. probe_stripes.aix is the probe I had to write (see below).
Times: check 0.9 s; --quick 1.5 s; full render at grid 256 27 s (mesh 7.3 s, exports 7.1 s, the rest is views/turntable/slices/steps); beauty 4.0 s at 512, 7.7 s at 768, 12.6 s at 1024; full + beauty at 1024 47 s; a full --focus render 36 s because it re-meshes the whole scene.
2. Friction
- Stripe direction is undocumented, and cost three renders and a probe file. Line
awning_sheet = box(12.8, 0.12, 5.4) | rotate(x=10) | move(0, 8.2, 0.05) | paint(canvas)gave bands along x (from the docs' "pattern is anchored to the paint frame" I could not tell why). I guessed z-stacking and wrotebox(5.4, 0.14, 12.8) | paint(canvas) | rotate(y=90) | ...: the sheet rendered plain cream with no stripes at all (a y-rotation does not move a y-stack, and a 0.14-thick flat sheet is inside one band); only the valance's red scallop tips hinted at the truth. I wroteprobe_stripes.aix(three slabs) to measure it: stripes stack along y of the paint frame, band width =scale. Fix:box(0.14, 12.8, 5.4) | paint(canvas) | rotate(z=90) | rotate(x=10) | .... Neither language.md nor the reference states the axis of any pattern (stripes, checker, tiles, brick), nor howrotatebetweenpaintand placement behaves beyond "moves with the part". - Thin-part warnings at scene scale are a wall of per-step noise with contradictory advice. First
checkat default grid (14 units → cell 0.109) printed 13 warnings; the same stroke produced five of them (chalk1,chalk2,chalk3,chalk,chalkboard: "has a wall, tube or stroke only 0.11 thick, 1.006 of the 0.109 cell") and each suggested a different grid (set grid 292,319,351,438,500,512). I had to pick 256 myself and thicken everything under 0.1.--quickthen re-warned 24 times against its own 0.219 cell ('plank' ... 0.731 of the 0.219 cell,'flame' ... 1.006), and the sheet title said "24 WARNINGS" although the file setsgrid 256where there are none. Guess I had to make: what grid a 14-unit scene with 0.1-unit detail needs, and what that costs (answer: 256, 27 s — fine, but nothing said so). --focuswith--quickis useless, and--focusdoes not reach the beauty render.render market.aix --quick --focus lanternproduced a sheet titledSCENE → LANTERN 1.31 × 2.81 × 1.31 CELL 0.219: the lantern was a blob of ~6 cells, unjudgeable, and the right view showed only the post in front of it. The docs recommend--focusfor "a small part of a large scene" without saying it only reframes; the cell stays the scene's. At full grid it is genuinely useful (36 s, and it also moves the slice planes to the object), but--focus lantern --beautywrote abeauty.pngpixel-identical to the unfocused one.--outis undocumented. Neither the skill nor agent-guide lists it; a second render of the same file overwritesout/market/, so I guessed--out focusand it worked. Without the guess I would have lost the main render every time I did a focus or alt-camera run.- The beauty light cannot be placed, and the docs do not say where it is. The awning shades the counter from every angle;
set light_size1.5 → 2.5 → 4 made no difference I could see in three renders (docs give "0.5 is a lamp", no range, no note that it only affects penumbra). I measured with--azimuth -30(beauty_from_left.png): the ground shadow still falls to the image's right-back, so the key is camera-relative, upper left. There is no fill/ambient setting and no emissive material, so the lantern's flame is a dark blob inside clear glass (flame = ... | paint("#ffd860")). Workaround: composition — a crate of oranges on the cobbles in front, in the light. - Report "Pieces" names volumes, not objects.
| Pieces | 3 (volumes 93.827, 0.213, 0.123) |. 0.213 is the candle + flame in the air inside the glass (expected); 0.123 appeared when the crates were tilted and I never found it — probably a top-layer lemon (one lemon is 0.061) floating a hair above the layer below. With 53 steps and 10 objects the report should say which step/object or where the piece is. Same forWatertight | no: 394 edges ...: no pointer to a step. - Ragged material seams that thickening does not fix. In
focus_lantern_sheet.pngthe brass/glass boundary at the collars (lantern_collar = cylinder(0.44, 0.1) ... | paint("brass"), a 0.08 step = 1.5 cells overlantern_glass = cylinder(0.36, 1.1) | shell(0.08)) is torn, and so is the red/cream stripe edge on the valance in the same sheet. I first read it as coincident surfaces and added collars (two iterations); it is evidently how a triangle straddling two materials gets one colour. Nothing in the docs' symptom tables describes it. Gave up. --quickhides what it drops without saying so on the picture. On the first quick sheet the sign plank (0.16 thick) vanished and only lettering fragments hung on the chains; I had to cross-check the warning list to know the mesh, not the model, was at fault. A "N steps thinner than this cell were dropped" line on the quick sheet would have saved the doubt.sceneis not in any of the worked examples I was allowed (garden, table, lamp); its one paragraph in language.md was enough, but the first-object slicing rule and "objects are separate pieces sopiecescounts them" are only implied.- Small ones: the cross-section captions say
X = 5.5but not "through lantern", so with ten objects you infer it;set size 1024also sets the beauty resolution, which is the useful bit and undocumented ("the pixel size of a view"); the top view in the focus sheet draws the lantern's cone as a ~20-gon silhouette at cell 0.055, which reads as a modelling fault until you remember the cell; the steps sheet for 53 steps is a 1381 × 3325 px, 2 MB image that has to be read at reduced scale. My own errors were reported well:line 51: place(): placements: expected a list, got a shapeplus the signature.
3. What worked and should stay
check in under a second with every step's box, and the fact that those numbers were always right — I placed forty parts by arithmetic and none missed. The four-view sheet with unit grids and the named steps sheet: every misplacement (beam poking through the sheet, bags hidden behind the lantern, crate corner off the slab) was visible in one read. Slices cutting the first scene object made the hollow lantern trivially verifiable. def + grid/array/place for crates, fruit and bags; text(...) | extrude(..., "z") legible at 0.38 size; material(preset, ...) overrides; CLI --azimuth overriding set azimuth; scene → one GLB node per object without any extra work; beauty render quality for 8–13 s.
4. Three changes, in order
- Document pattern orientation and give it a control: one line per pattern in the reference ("stripes: bands stacked along the paint frame's y,
scalewide"; likewise checker/tiles/brick), plus anaxis=orrotateonmaterial()so an awning does not need the stand-paint-rotate(z=90)trick. - Make
--focusa real close-up: re-extract only the focused object's box at its own grid (a lantern focus should take 2 s, not 36 s), apply the focus to the beauty render, and document--outnext to it. - Lighting and warning hygiene for scenes: a light azimuth/elevation (or
sun/cameramode), a fill or ambient level, and an emissive material for lamps; and fold the thin-part warnings per root cause with one suggested grid for the whole file, muted for--quickwhenset gridis already higher.