Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,3 @@ results/
downloads/

temp/

# Internal planning notes and campaign documents — never shipped to template
# consumers (v0.11.0 already removed them once before open-sourcing). They live
# in the workspace wip repository instead; anything left here stays local.
/wip/
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ The full project guide for AI coding agents is [`CLAUDE.md`](CLAUDE.md) — read
- **No hand-written output shapes.** Narrow a run's `main_stuff` with the generated model (`ExtractedEntities.model_validate(main_stuff)`), and read a plural output through `widget/outputs.py`'s `list_items` rather than declaring which of its two wire shapes arrived.
- **The project-name placeholder is an ordinary English word, so never write that word in ordinary prose.** `/bootstrap` substitutes every occurrence of the template's stand-in name and aborts the whole run if any survives, so a sentence using that word in its generic sense fails a user's bootstrap. The plural aborts too, and deliberately: no substitution rule matches it, so the survivor check is what stands between a stray plural and a half-renamed project. Say "the package", "the project" or "the CLI" instead. In `pyproject.toml` the bar is higher still: a bare occurrence there is refused rather than guessed at, since the file puts both name forms in bare-string positions, so name a path (`widget/methods`) or a module (`widget.cli`) and never the token alone.
- **Do not move or delete the `# add-method:imports` and `# add-method:commands` anchors** in the three mode files. `make add-method` inserts at them, the prose after each token is free to reword, and `tests/unit/test_add_method.py` reads the real files so a lost anchor fails the suite.
- **`wip/` is gitignored here, so a campaign document written into it is never committed.** This repository is consumed through "Use this template", and anything it tracks is copied into somebody's new project — internal planning notes included. The workspace convention puts a repo-scoped campaign's documents in that repo's own `wip/<topic>/`; this repository is the exception, and its durable home is the workspace wip repository (`wip/<topic>/` at the workspace root) instead. Use the local `wip/` for scratch you are willing to lose.
- **Never commit a planning note or campaign document to this template.** It is consumed through "Use this template", so anything it tracks is copied into somebody's new project. The template's own campaign documents live in the workspace wip repository (`wip/<topic>/` at the workspace root), and the workspace guard refuses a write into a `wip/` here.

A method that lives **on the platform** (a catalog id) or **in a published package** (an address) is wired in with `make add-method METHOD=<mt_… | github.com/owner/repo[/package][@tag]>` rather than by hand — see [`docs/add-method.md`](docs/add-method.md). A method whose bundle you have on disk goes under `widget/methods/<name>/` and through `make codegen` instead.

Expand Down
Loading