mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-12 17:01:05 +00:00
## Summary - Puts the shared house-rules blocks at the top of `AGENTS.md`, copied from craft-contrib `dde09ea31e2e457f5b4653a6e76f7cdf55944bdf`. - Adds `.github/workflows/house-rules.yml`, which calls the shared check. Artcraft is the Tauri product, so it gets the core block only. The Rust rules are for native Craft apps and shared Rust libraries. - `CLAUDE.md` was a symlink to `AGENTS.md` and is now `@AGENTS.md`. - No local paragraph was removed. The Tauri and TypeScript description stays. ## Sizes - Core block: 3,052 bytes. - Root `AGENTS.md`: 6,934 bytes.
99 lines
6.8 KiB
Markdown
99 lines
6.8 KiB
Markdown
<!-- craft-house-rules:start core source=dde09ea31e2e457f5b4653a6e76f7cdf55944bdf sha256=540e6cea75d12d0710c3dca89658328e81e508ecef102446ca5bb95b7c0b92bb -->
|
|
## House rules
|
|
|
|
These apply in every Craft repository. A later rule may be stricter, not weaker. The source is `standards/house-rules-core.md` in `storytold/craft-contrib`. Propose changes there, not in a copy.
|
|
|
|
1. **A person is accountable.** Whoever runs an agent answers for what it opens and for its review comments.
|
|
2. **Check, then claim.** Before writing code, read the issue comments, search pull requests for `#N` and the keywords, and check recent commits on `main`. Comment on the issue first. Release a claim you will not finish.
|
|
3. **Verify, don't guess.** Open a definition before using it. Confirm the cause in the code, even when someone names a location.
|
|
4. **Keep fixes narrow and tested.** Fix what the issue describes, where the bug is. Add a test that fails without the fix.
|
|
5. **Review the diff before opening a pull request.** Identifiers exist as used, the test fails without the fix, nothing unrelated changed, and the description is true.
|
|
6. **Look for a better pull request.** If another fixes the same thing, close yours when it is better or equal, and say why.
|
|
7. **Report only what ran.** Say what you tested and what you could not run. Without a local build or test, say so and rely on CI before marking ready.
|
|
8. **`main` changes through a pull request.** Do not push to it. Branch protection enforces this. There is no exception.
|
|
9. **Stop and ask only about** licensing outside the allowlist, publishing, releases, a new remote, secrets, spending money, destructive git, and anything else hard to undo. Otherwise keep working. `plan/` is a gitignored notebook, not rules. Without it, do not ask for it and do not stop.
|
|
10. **Keep secrets and personal details out** of the repository, logs and requests.
|
|
11. **CI stays shared.** Workflows call `storytold/craft-common-actions`. Do not change CI in a feature or fix pull request. If CI cannot cover a change, open an issue there.
|
|
12. **Guards say why.** A check that looks removable says what it prevents. Read that before changing it.
|
|
13. **Instructions must be readable by everyone.** No notes about one machine, and no links to files a reader cannot open. `craftrules` is retired. Do not link to it.
|
|
14. **Keep pull requests moving.** Concurrent pull requests are fine; unanswered actionable feedback is not. Respond in 7 days, a reminder at 14, closure eligible at 30, from when an actionable request waits on the author. Suggestions and unconfirmed bot findings do not start the clock. A fix, explanation or agreed plan resets it; unrelated activity does not. Waiting on a reviewer or maintainer pauses it and does not count against the author. A maintainer decides closure; it is never automatic. Reuse search results, do not poll, and stop at a rate limit.
|
|
15. **No agent attribution.** A pull request does not say an agent wrote it. A repository rule may not require that.
|
|
<!-- craft-house-rules:end -->
|
|
|
|
# AGENTS.md
|
|
|
|
This file provides guidance for coding agents when working with the Artcraft monorepo.
|
|
|
|
## Project Overview
|
|
|
|
Artcraft is a public-facing Tauri desktop app for generating AI images and video.
|
|
It uses Rust and TypeScript. Backend services, company tooling, and website builds
|
|
live in the separate `artcraft-services` repository.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
artcraft/
|
|
├── _database/sql/artcraft_migrations/ # Embedded SQLite task database migrations
|
|
├── .sqlx/ # SQLite query metadata for offline builds
|
|
├── crates/
|
|
│ ├── desktop/artcraft/ # Tauri app, configuration, capabilities, icons
|
|
│ ├── api_clients/ # Desktop provider clients and shared API types
|
|
│ ├── lib/ # Desktop support libraries
|
|
│ ├── schema/database/sqlite_tasks/ # Desktop task persistence
|
|
│ ├── schema/public/ # Shared wire-format enums and identifiers
|
|
│ ├── testing/ # Shared test helpers
|
|
│ └── vendor/tauri-plugin-http/ # HTTP plugin fork with cookie access
|
|
├── frontend/
|
|
│ ├── apps/artcraft/ # Tauri app frontend and public resources
|
|
│ └── libs/ # Shared frontend libraries
|
|
├── script/artcraft/ # Desktop development and build scripts
|
|
├── test_data/ # Fixtures used by retained crate tests
|
|
└── Cargo.toml # Desktop dependency workspace
|
|
```
|
|
|
|
Keep `external/` and `secrets/` untouched. Repository pruning must preserve
|
|
untracked and ignored local files; delete only Git-tracked paths unless the user
|
|
explicitly authorizes a cache cleanup.
|
|
|
|
## Code Style
|
|
|
|
- Rust with no minimum supported version
|
|
- SQLx for SQLite; prefer `sqlx::query!` / `sqlx::query_as!` compile-time checked macros over runtime `sqlx::query()` whenever possible
|
|
- A mix of wreq and reqwest for Rust HTTP clients
|
|
- Never use `println!` or `eprintln!` outside of tests; use `log` crate macros instead
|
|
- When two crates export the same type name, alias imports with a suffix: `use foo::Bar as BarFoo;`
|
|
- Prefer `use` imports over inline fully-qualified paths; only qualify inline for true one-offs or std collisions
|
|
- TypeScript with Nx, React, Vite, Zustand, and Three.js
|
|
- Use two spaces for indentation
|
|
- Each Tauri command belongs in its own file module, named after the command. Keep shared state, types, and helpers in separate support modules; see the [Storyteller command conventions](crates/desktop/artcraft/src/services/storyteller/commands/AGENTS.md).
|
|
|
|
### File Layout
|
|
|
|
Organize for top-to-bottom reading. Important things first, details later.
|
|
|
|
- **Constants** at the top (after imports)
|
|
- **Structs/enums** next; outer structs above inner sub-structs
|
|
- **API types** in order: Request, Response, Error
|
|
- **In impl blocks**: constructors first, then public methods, then private helpers
|
|
- Private helpers go *below* the methods that call them
|
|
- Among helpers: meatier logic above leaf-level formatters
|
|
- **In test modules**: constants first, then test cases (grouped into sub-modules when 2+), then helper functions last
|
|
|
|
## Markdown
|
|
|
|
- **Tables must be space-padded so columns align in plain text.** Markdown
|
|
tables are read raw (terminals, diffs, editors) at least as often as
|
|
rendered, and condensed tables are unreadable there. Pad every cell to its
|
|
column width:
|
|
|
|
```markdown
|
|
| Model | Configuration | Credits | Speed | Score |
|
|
|--------------|---------------|--------------------|---------|
|
|
| Meshy 6 | text or image | 104 | 80.0 | +24 |
|
|
| Rodin 2.5 | text or image | 13 | 10.0 | +3 |
|
|
```
|
|
|
|
Not: `| Model | Configuration | Credits | Speed | Score |` packed tight
|
|
with varying widths per row.
|