factory.wedd.au — a reproducible workshop

Nothing reaches the printer without ahuman reading the report first.

A workshop that used to live in my head — rough dimensions in a note, a slicer profile I half-remembered tuning — rebuilt so it's reproducible. Every project starts as aproject.yaml. Every output is generated from it. Every part clears its gates before a person approves the print.

factory — zsh
# build, validate, render, report — never print
$ uv run factory report projects/house/trickypossum-avatar
wrote reports/report.md
→ ready_for_human_print_review (awaiting a human)

the pipeline

A part travels through gates and stops at the human. Agents do everything up to the checkpoint; advancing past it is a person's call, every time.

01
idea / photo
02
project.yaml
03
CAD · build123d
04
STEP / STL
05
validate mesh
06
slice · dry run
07
report.md
▮ locked
Human approval
the boundary
08
print

the safety boundary

Fail-closed by design. The split between what an agent may do and what it may never do isn't a guideline — it's enforced by the absence of code paths. There is no --send, no--upload, no --start anywhere in the codebase.

Agents may

  • +write CAD
  • +export STEP / STL
  • +validate geometry
  • +render previews
  • +slice as a dry run
  • +estimate time & filament
  • +write reports
  • +commit to git

Agents must not

  • ×start a print
  • ×heat the nozzle or bed
  • ×move any axis
  • ×resume a print
  • ×cancel a print
  • ×upload to the printer
  • ×modify safety settings

Permanently denied until built.Upload and print-start require explicit human approval through a workflow that does not yet exist — so both are treated as denied, not merely gated.

on the bench

all projects →
TrickyPossum avatar figurine, front view, five-colour

trickypossum-avatar

awaiting review

A Roblox avatar rebuilt as one watertight figurine from the real game mesh — texture-derived face, shades, cap and hair, five-colour AMS paint at 180 & 120 mm. Voxel-union geometry with the gothic cross preserved at full texture resolution, gated on a hash-bound human review of the front render.

voxel-uniontexture bake5-colour AMSface-forward gate

from the log

all dispatches →
#1essaytr8s-low-stand

Starting out

Why I built a 3D printing pipeline instead of just printing the thing.