Semantic editing
An edit in Artifact Forge is never mesh surgery. It is a typed patch against the YAML source, previewed CAD-free, and — on apply — a full rebuild whose preserve contract is verified: the parameters and features you said must survive are checked to have survived. The Cockpit’s REGION / EDIT lens is the front end of this machinery.
Step 1 — target a region
Section titled “Step 1 — target a region”Click a region in the viewport, or pick one from the Target region selector. The selector is honest about what is editable:
- listed and selectable — editable regions that have compatible modifiers;
- listed but disabled, under protected — not editable — mounting surfaces, fastener keepouts, high-stress roots, contact surfaces. Clicking one in the viewport is rejected with “protected — not a valid edit target”.
- — auto — lets the engine pick the target when it is unambiguous.
You never edit region geometry directly. An editable region is a canvas for modifiers; a protected region is a keepout every modifier must respect.
Step 2 — say what you want
Section titled “Step 2 — say what you want”Three ways, all producing the same thing: a typed patch/v1.
Intent buttons. Four deterministic, engine-defined edits:
| Intent | What it actually does |
|---|---|
make_support_free | migrates to a support-free sibling archetype when one exists (e.g. the molded clip → its side-print variant), otherwise switches to a self-supporting cavity roof; refuses if neither applies |
make_stronger | bumps the thickness-family parameters the archetype actually has (wall +0.8 mm, plate/flange +1 mm); refuses if none exist |
make_biomorphic | a style patch (organic surface sliders) that preserves every functional parameter |
remove_perforation | removes field modifiers; refuses if there are none |
“Refuses” is literal: an intent that cannot honestly do its job on this product returns a finding, not a best-effort guess.
The natural-language box. Type “make it stronger” or “сделай без поддержек” and hit Propose patch:
- LLM OFF — bilingual keyword matching onto the four intents; no match is an honest failure (“LLM OFF and no known intent matched — use an intent button or a patch”).
- LLM ON — the model returns either a known intent or a typed patch, but it is schema-constrained to real parameter names, real modifier ids and the compatible-region enum (your selected region pins the target). The server re-grounds everything and the result still goes through the same preview — LLM output is never trusted raw and never touches geometry.
A hand-written patch (via Create from YAML or the CLI) — the same
patch/v1 document:
schema: patch/v1type: functional # functional | manufacturing | structural | stylereason: wider bundlepreserve: [mounting_flange, screw_spacing]params: bundle_d: +10mm # absolute, ±delta, or expr(...) — percentages are rejectedmodifiers: update: - id: add_hex_perforation params: {cell_d: 6mm}Modifier operations are add / remove / update (update merges parameters
of an already-present modifier — “more voronoi” is a bump, not a duplicate).
A patch may migrate the product to a sibling archetype of the same object
class; a cross-class migration is rejected as a new product, not an edit.
Step 3 — preview
Section titled “Step 3 — preview”Preview is CAD-free and mandatory. The panel shows the patch as YAML, the edited product’s validation verdict, and the honest warnings:
- NO-OP — the patch changes nothing; apply is disabled;
- field cells before → after — with a warning when cells dropped: “fewer cells — likely the OPPOSITE of the intent”;
- did-you-mean — a modifier aimed at a non-existent region gets a Fix target → 〈region〉 button that rewrites the patch and re-previews;
- a failing validation disables Apply: “applying would fail the build with these findings”.
Step 4 — apply, rebuild, verify
Section titled “Step 4 — apply, rebuild, verify”Apply patch (rebuild + verify preserve) runs as a job: build the before state, apply the patch, rebuild, and verify the preserve contract — the listed parameters must come out numerically identical and the listed features still validator-built. A violated preserve fails the edit; it is checked, not promised. The report shows what was preserved (verified), what changed, and the support/overhang situation before → after; on success the workspace switches to the edited product.
Where the intents live
Section titled “Where the intents live”The four intents and the patch grammar are engine code (repair/), not UI
sugar — forge edit --intent make_support_free from the
CLI runs exactly the same path.