Files
Homero Thompson 06a8a9b7d2 AGENTS.md and the contributing skill: say how to work as an agent (#8059)
* AGENTS.md and the contributing skill: say how to work as an agent

Two rules that the loop's own agents follow but the repository never
wrote down, so every agent that reads it had to rediscover them:

* The code, the comments, the commit messages and the docs are in English,
  always. A comment in another language is a defect: the people who
  maintain the code cannot review it. A user-visible string is not inline
  in the code either; it goes to the message catalogs, and the UI text
  skill says how to name and translate it.
* Parallel work runs in parallel, and dependent work stays sequential.
  One subagent per independent part, with a self-contained brief, and no
  two subagents writing the same file. A fix and the test that proves it,
  a refactor and the callers it breaks: those stay in order.

AGENTS.md is the router, so it gets the two rules in one line each, and
skills/solidcraft-contributing/SKILL.md gets the "Working as an agent"
section with the detail.

* AGENTS.md: fit the two agent rules under the router cap

`cargo xtask skills` reads the router as a router: one line per rule,
with the detail in the skill the line points at. The two new lines
broke that contract twice over. They carried their own detail (a
comment in another language is a defect; one subagent per part, no two
writing the same file) instead of pointing at the "Working as an
agent" section that already holds it, and the file grew to 5361
characters, over the 5000 a router may have.

So the two lines shrink to what a router line is, and five clauses
that repeated a rule the pointed-at skill already states in full give
up their place:

* "Act when the code, docs and rules settle a question" is in the
  contributing skill, in more detail.
* The unsafe allowlist is the crash-safety skill's own list.
* "No second PR for an issue a lower-numbered one closes" and "never
  force-push main, no pushes just to catch up with main" are the
  contributing skill's claim and push rules.
* "Do not switch branches while the gate runs" is in the contributing
  skill too.

No rule is lost: each one still has exactly one place that states it,
and that place is a skill. The router is 4970 characters.
2026-11-05 02:25:46 +00:00

4.9 KiB

SolidCraft: instructions for agents

SolidCraft is a clean-room, pure-Rust parametric 3D CAD app (sketch solver, feature timeline, B-rep kernel, an egui UI that agents drive). This file is a router: the hard rules, then the skill to read for your task. Humans: CONTRIBUTING.md.

Start here

Work: ROADMAP.md, "Where help is wanted most" in CONTRIBUTING.md, issues labelled help wanted, good first issue, needs-triage; architecture in docs/architecture.md. Local plan/ notes are optional.

Hard rules (what enforces each)

  • Independent: never copy another product's code, icons, text or templates; never drive or take data from commercial CAD. skills/solidcraft-ground-rules/SKILL.md.
  • No GPL/LGPL/AGPL code, not even reading it (OpenCASCADE, FreeCAD, SolveSpace, CadQuery, LibreCAD, QCAD): cargo xtask licences --check.
  • Every asset is original or openly licensed with a row in ATTRIBUTION.md; read assets/AGENTS.md before icon work: cargo xtask assets, cargo xtask icons.
  • Never crash: no unwrap/expect/panic/unsafe in non-test code, errors are Result, input is hostile: clippy -D warnings, hostile_params_never_panic.
  • Model decisions (what an operation does, which bodies it touches, which face or edge a point or name means, depths, nearness) use exact geometry; a mesh is for display, export, previews and mesh bodies (xtask/mesh-decisions.txt only shrinks): cargo xtask mesh-decisions.
  • New kernel cases go to solidcore: cargo xtask lists.
  • Everything is a command and programmatic calls never open dialogs: skills/solidcraft-commands/SKILL.md.
  • Layering (geom, sketch/kernel/render, doc, io, engine, ui-egui, apps); only crates/kernel uses truck: cargo xtask layers.
  • One outer UI container, one camera path (navigation::handle), colours from theme tokens: cargo xtask ui-containers.
  • Application code is Rust only and builds for wasm: cargo xtask wasm, cargo xtask web-offline-test.
  • The product name is SolidCraft; the old name lives only in docs/compatibility.md.
  • Sorted lists (message catalogs, mod lines, languages) stay sorted: cargo xtask lists. Never edit generated files (docs/features.md, THIRD-PARTY-LICENSES.txt) in a PR.
  • A design-format change is ONE new file in crates/doc/src/format/pending/: scripts/test-format-pending.sh.
  • A command has input and output schemas (will become required; schema/unconverted.txt only shrinks): skills/solidcraft-commands/SKILL.md.
  • New UI strings go in assets/locales/pending/<slug>.json, ATTRIBUTION rows in attribution/pending/<slug>.md: cargo xtask lists.
  • A changed default keeps the old behaviour behind a preference and fills the PR's Changes a default: line: pr-checks.yml.
  • A regression test goes in the area's existing test file, never a per-bug file (#3226).
  • Look at open PRs first, claim with a draft PR (lowest number wins), one topic per PR: skills/solidcraft-contributing/SKILL.md.
  • A PR's title and first sentence make sense to someone who never saw your chat or the issue: skills/solidcraft-contributing/SKILL.md.
  • Code, comments, commit messages and docs are in English, always: skills/solidcraft-contributing/SKILL.md ("Working as an agent").
  • Independent work runs in parallel, dependent work stays sequential: skills/solidcraft-contributing/SKILL.md ("Working as an agent").
  • Show observable changes with real screenshots or a recording, captured yourself.
  • Run cargo xtask ci before every commit. cargo xtask skills keeps this file and skills/ honest.

Working on X: read the skill first

Working on Read
A PR, a claim, review, CI or evidence skills/solidcraft-contributing/SKILL.md
Licences, assets, clean-room, the name skills/solidcraft-ground-rules/SKILL.md
Non-test Rust, hostile input, a crash report skills/solidcraft-crash-safety/SKILL.md
A command, a crate boundary skills/solidcraft-commands/SKILL.md
A dialog, panel, camera, icon, colour skills/solidcraft-ui/SKILL.md
Labels, messages, translations skills/solidcraft-ui-text/SKILL.md
Saving something new in a design, import, export skills/solidcraft-file-formats/SKILL.md
Preferences, a changed default skills/solidcraft-preferences/SKILL.md
Writing or running tests skills/solidcraft-tests/SKILL.md
Slow work, the window thread, wasm skills/solidcraft-performance/SKILL.md
Releases, installers, packages skills/solidcraft-packaging/SKILL.md
Running the app, control channel, MCP tools skills/solidcraft-agent-tools/SKILL.md
Building a part over MCP skills/solidcraft-modeling/SKILL.md
Changing an existing design skills/solidcraft-editing/SKILL.md
A bug report, a crash, a wrong result skills/solidcraft-reporting/SKILL.md
Checking, porting, designs in git skills/solidcraft-checking/SKILL.md
Assemblies, joints, motion skills/solidcraft-mechanisms/SKILL.md