* 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.
4.9 KiB
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.mdbefore 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.txtonly 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/kerneluses 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,
modlines, 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.txtonly shrinks):skills/solidcraft-commands/SKILL.md. - New UI strings go in
assets/locales/pending/<slug>.json, ATTRIBUTION rows inattribution/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 cibefore every commit.cargo xtask skillskeeps this file andskills/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 |