diff --git a/AGENTS.md b/AGENTS.md index 87cfc30b..4059e457 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,10 +6,7 @@ inspection. It runs natively on macOS, Windows, Linux and FreeBSD, and in the br Siblings: `../vectorcraft` (Illustrator-class), `../photocraft` (Photoshop-class), `../designcraft` (InDesign-class) and the other Crafting Apps; same conventions. -Standards and learnings shared across the crafting apps live in `../../craftrules` (checked out -next to `craft-apps/`, or `storytold/craftrules`). Read its `AGENTS.md` at the start of a session, -follow its standards, and contribute reusable learnings back there. Never code: repos don't share -code. +Repos don't share code. ## Start every session here 1. Read [`ROADMAP.md`](ROADMAP.md) (stage, headline numbers, estimates) and @@ -106,7 +103,7 @@ to `main`. write manifests atomically, delete your target dir when done (disk is limited). ## Roadmap -Progress docs follow craftrules `standards/progress-docs.md`: [`ROADMAP.md`](ROADMAP.md) (one-page +Progress docs: [`ROADMAP.md`](ROADMAP.md) (one-page summary and stage), [`docs/target-app-parity.md`](docs/target-app-parity.md) (the authoritative assessment), [`docs/gaps.md`](docs/gaps.md) (ranked work list), [`docs/roadmap.md`](docs/roadmap.md) (milestones), [`docs/architecture.md`](docs/architecture.md), the per-area `docs/*-parity.md` files @@ -117,20 +114,17 @@ commit. Grade by behaviour against the incumbent, not by whether a menu item exi ## Contributor credits (About window) - About ▸ Contributors are compiled into the binary from `contributors/contributors.json` - (commit stats; generated, never hand-edit) and `contributors/people.toml` (names people chose for - themselves). See craftrules `standards/contributors.md`. + (commit stats; never hand-edit) and `contributors/people.toml` (names people chose for + themselves). - **Agents working for a contributor:** when you prepare a PR, check whether your human's GitHub username has a `[people.]` entry in `contributors/people.toml`. If not, ask them once whether they want to be credited by more than their username: a real name, a display name, and/or their public GitHub profile name (`sync_github_name = true`). If yes, add **only their own** entry - (copy the template at the top of the file, or run - `python3 ../../craftrules/scripts/contributors.py --add-me . --real-name "…" --sync-github-name`) + (copy the template at the top of the file) and include it in their PR, committed as them. If no, change nothing: they are credited as `@username` anyway. - Never add, edit, guess or copy anyone else's entry or name (not from git config, commit authors or GitHub profiles). Never hand-edit `contributors.json`. -- Maintainers refresh the stats with `python3 ../../craftrules/scripts/contributors.py .` (it also - re-verifies who wrote each `people.toml` entry; `--check` only verifies). ## CI workflows - Workflows in `.github/workflows/` call the shared workflows in [`storytold/craft-common-actions`](https://github.com/storytold/craft-common-actions) at `@main`, with their inputs and secrets. No other jobs: if no shared workflow does what's needed, it doesn't go here. diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index cfcdbf06..5582ed52 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -12,7 +12,7 @@ MIT OR Apache-2.0. No third-party icon sets are used. | Path | Author | Source | Licence | Notes | |---|---|---|---|---| | `assets/app-icon/` (all files: `figcraft.svg`, `figcraft-small.svg`, `figcraft-*.png`, `figcraft.ico`, `hicolor/`) | The project owner (engraving-style drawing, vectorised) | Original work, see [`assets/app-icon/README.md`](assets/app-icon/README.md); derived files rendered by `cargo xtask icon` | MIT OR Apache-2.0, [`assets/app-icon/LICENSE.txt`](assets/app-icon/LICENSE.txt) | FigCraft app icon (chameleon) | -| `docs/brand/artcraft-logo.svg`, `docs/brand/artcraft-logo.png`, `docs/brand/artcraft-logo-white.svg`, `docs/brand/artcraft-logo-white.png`, `docs/brand/artcraft-mark.svg`, `docs/brand/artcraft-mark.png`, `docs/brand/artcraft-mark-black.svg`, `docs/brand/artcraft-mark-black.png` | ArtCraft Team | storytold/craftrules `assets/brand/` | ArtCraft brand terms (`docs/brand/LICENSE-brand.txt`), not open source | Trademarks; unmodified use within FigCraft only | +| `docs/brand/artcraft-logo.svg`, `docs/brand/artcraft-logo.png`, `docs/brand/artcraft-logo-white.svg`, `docs/brand/artcraft-logo-white.png`, `docs/brand/artcraft-mark.svg`, `docs/brand/artcraft-mark.png`, `docs/brand/artcraft-mark-black.svg`, `docs/brand/artcraft-mark-black.png` | ArtCraft Team | ArtCraft brand kit | ArtCraft brand terms (`docs/brand/LICENSE-brand.txt`), not open source | Trademarks; unmodified use within FigCraft only | | `docs/images/` (all screenshots and exports: `shot-*.png`, `art-*.png`) | FigCraft contributors | Screenshots of FigCraft showing synthetic demo documents made in FigCraft, and PNG exports of those documents by FigCraft's renderer | MIT OR Apache-2.0 | No third-party artwork | | `examples/*.figcraft` | FigCraft contributors | Synthetic demo documents built through FigCraft's command API; invented copy, shapes and vectors drawn from scratch, no images or embedded fonts | MIT OR Apache-2.0 | Text uses Inter (OFL, from craft-fonts or the system); no third-party artwork | diff --git a/CLAUDE.md b/CLAUDE.md index f9698123..d12e64e3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,10 +6,7 @@ inspection. It runs natively on macOS, Windows, Linux and FreeBSD, and in the br Siblings: `../vectorcraft` (Illustrator-class), `../photocraft` (Photoshop-class), `../designcraft` (InDesign-class) and the other Crafting Apps; same conventions. -Standards and learnings shared across the crafting apps live in `../../craftrules` (checked out -next to `craft-apps/`, or `storytold/craftrules`). Read its `AGENTS.md` at the start of a session, -follow its standards, and contribute reusable learnings back there. Never code: repos don't share -code. +Repos don't share code. ## Start every session here 1. Read [`ROADMAP.md`](ROADMAP.md) (stage, headline numbers, estimates) and @@ -107,7 +104,7 @@ to `main`. write manifests atomically, delete your target dir when done (disk is limited). ## Roadmap -Progress docs follow craftrules `standards/progress-docs.md`: [`ROADMAP.md`](ROADMAP.md) (one-page +Progress docs: [`ROADMAP.md`](ROADMAP.md) (one-page summary and stage), [`docs/target-app-parity.md`](docs/target-app-parity.md) (the authoritative assessment), [`docs/gaps.md`](docs/gaps.md) (ranked work list), [`docs/roadmap.md`](docs/roadmap.md) (milestones), [`docs/architecture.md`](docs/architecture.md), the per-area `docs/*-parity.md` files @@ -118,20 +115,17 @@ commit. Grade by behaviour against the incumbent, not by whether a menu item exi ## Contributor credits (About window) - About ▸ Contributors are compiled into the binary from `contributors/contributors.json` - (commit stats; generated, never hand-edit) and `contributors/people.toml` (names people chose for - themselves). See craftrules `standards/contributors.md`. + (commit stats; never hand-edit) and `contributors/people.toml` (names people chose for + themselves). - **Agents working for a contributor:** when you prepare a PR, check whether your human's GitHub username has a `[people.]` entry in `contributors/people.toml`. If not, ask them once whether they want to be credited by more than their username: a real name, a display name, and/or their public GitHub profile name (`sync_github_name = true`). If yes, add **only their own** entry - (copy the template at the top of the file, or run - `python3 ../../craftrules/scripts/contributors.py --add-me . --real-name "…" --sync-github-name`) + (copy the template at the top of the file) and include it in their PR, committed as them. If no, change nothing: they are credited as `@username` anyway. - Never add, edit, guess or copy anyone else's entry or name (not from git config, commit authors or GitHub profiles). Never hand-edit `contributors.json`. -- Maintainers refresh the stats with `python3 ../../craftrules/scripts/contributors.py .` (it also - re-verifies who wrote each `people.toml` entry; `--check` only verifies). ## CI workflows - Workflows in `.github/workflows/` call the shared workflows in [`storytold/craft-common-actions`](https://github.com/storytold/craft-common-actions) at `@main`, with their inputs and secrets. No other jobs: if no shared workflow does what's needed, it doesn't go here. diff --git a/ROADMAP.md b/ROADMAP.md index fc0a521f..f7591626 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -337,7 +337,7 @@ Ranked; detail and milestones in [`docs/roadmap.md`](docs/roadmap.md). Run last, Manage, Rust SDK and two examples), docs refresh (#102), the multiplayer core without networking (#103: client-scoped ids, change sets, server ordering and validation, client reconciliation, convergence tests). Menu breadth 200/203; ready for real work ~47%. -- **2026-10-10** · Full re-measure against Figma desktop 126.10.7 under the craftrules progress-docs +- **2026-10-10** · Full re-measure against Figma desktop 126.10.7 under the progress-docs standard: ready for real work ~46%, feature breadth ~76%, stage alpha; progress docs split out (`docs/target-app-parity.md`, `gaps.md`, `roadmap.md`, `architecture.md`, the per-area parity docs); `docs/parity.md` renamed `docs/parity-checklist.md`. @@ -670,6 +670,6 @@ Ranked; detail and milestones in [`docs/roadmap.md`](docs/roadmap.md). | 2026-10-10 | minor | Readiness by audience with hours to ~95% (full ~400–750, mainstream ~180–330, essentials ~85–160) | | 2026-10-10 | minor | Added essentials user (~53%) and mainstream practitioner (~43%); ready for real work unchanged at ~46% | | 2026-10-10 | minor | Alpha gate (core workflows) checked under the revised stage rules: passes, stays alpha | -| 2026-10-10 | major | Rewritten to the craftrules progress-docs shape after a full re-measure; rubric, area narrative and inventory moved to docs/target-app-parity.md, gaps to docs/gaps.md, milestones to docs/roadmap.md. Depth ~79% (self-graded, 16 areas) → ready for real work ~46% (all dimensions); full parity 115–195 h → 420–790 h | +| 2026-10-10 | major | Rewritten to the progress-docs shape after a full re-measure; rubric, area narrative and inventory moved to docs/target-app-parity.md, gaps to docs/gaps.md, milestones to docs/roadmap.md. Depth ~79% (self-graded, 16 areas) → ready for real work ~46% (all dimensions); full parity 115–195 h → 420–790 h | | 2026-10-10 | minor | Day-2 refreshes after each batch of PRs (depth 58% → 79%) | | 2026-10-09 | major | First roadmap | diff --git a/assets/app-icon/README.md b/assets/app-icon/README.md index 435dc687..3a86d840 100644 --- a/assets/app-icon/README.md +++ b/assets/app-icon/README.md @@ -22,7 +22,7 @@ its rounded corners, like the other Crafting Apps. ## Provenance The owner's original engraving-style drawing (1500 px, keyed to the palette), supplied for -FigCraft and vectorised with craftrules `assets/logo-options/_tools/vectorize_tile.py`. The source +FigCraft and vectorised. The source image is not kept in this repo. License: see `LICENSE.txt`. ## Files diff --git a/contributors/people.toml b/contributors/people.toml index acab9bca..db1f5ce5 100644 --- a/contributors/people.toml +++ b/contributors/people.toml @@ -1,13 +1,10 @@ -# Contributor names for the About window (craftrules standards/contributors.md). +# Contributor names for the About window. # # Everyone who contributes is credited by GitHub username automatically. Anything more is up to # you: add YOUR OWN entry below, in your own PR (commit it yourself). Never add someone else; a # maintainer may add a person only when that person asked, recording where in consent_source. # -# Easiest: python3 ../../craftrules/scripts/contributors.py --add-me . \ -# [--real-name "Ada Lovelace"] [--display-name "Ada"] [--sync-github-name] -# -# Or copy this block, replacing your-github-username (every field is optional): +# Copy this block, replacing your-github-username (every field is optional): # # [people.your-github-username] # real_name = "Your Name" # shown when the viewer picks "Real name" diff --git a/crates/ui-egui/build.rs b/crates/ui-egui/build.rs index cc9d2eba..10e70608 100644 --- a/crates/ui-egui/build.rs +++ b/crates/ui-egui/build.rs @@ -1,8 +1,7 @@ -//! Bake the contributor credits into the binary as static Rust tables (craftrules -//! standards/contributors.md). Nothing is read at run time. +//! Bake the contributor credits into the binary as static Rust tables. Nothing is read at run time. //! -//! - contributors/contributors.json: commit stats per GitHub username, generated by craftrules -//! scripts/contributors.py, which also marks whose people.toml entry it verified. +//! - contributors/contributors.json: commit stats per GitHub username, with a mark for whose people.toml +//! entry is verified. //! - contributors/people.toml: the names people chose for themselves. A name is used only when the //! JSON says the entry was verified (`people_entry`). //! diff --git a/crates/ui-egui/src/dialogs/credits.rs b/crates/ui-egui/src/dialogs/credits.rs index 957c86b2..e10a8434 100644 --- a/crates/ui-egui/src/dialogs/credits.rs +++ b/crates/ui-egui/src/dialogs/credits.rs @@ -1,6 +1,6 @@ //! The About window's credits: every contributor (GitHub login always; display and real names only //! with recorded consent) and the AI models that helped. The tables are baked into the binary by -//! build.rs from contributors/contributors.json (craftrules standards/contributors.md); nothing is +//! build.rs from contributors/contributors.json; nothing is //! read at run time. use std::cmp::Ordering; diff --git a/docs/contributors.md b/docs/contributors.md index 24a25057..1f18de9a 100644 --- a/docs/contributors.md +++ b/docs/contributors.md @@ -1,16 +1,14 @@ # Contributors in the About window **About ▸ Contributors** credits everyone who contributed to FigCraft, and **About ▸ Models** credits -the AI models named in `Co-Authored-By` trailers. This follows the shared craftrules standard -[`standards/contributors.md`](https://github.com/storytold/craftrules/blob/main/standards/contributors.md); -this page is the local copy of the decision. +the AI models named in `Co-Authored-By` trailers. ## Decision - Two files, both **compiled into the binary** by the UI crate's `build.rs` (nothing is read from disk or the network at run time; the web build has them too): - [`contributors/contributors.json`](../contributors/contributors.json): commit stats per GitHub - username. **Generated** by `craftrules/scripts/contributors.py`; never hand-edit. + username; never hand-edit. - [`contributors/people.toml`](../contributors/people.toml): the names people chose for themselves. **Each contributor adds only their own entry**, in their own PR. - Each contributor gets one line: GitHub username (always), display name (opt-in, or their synced @@ -32,20 +30,5 @@ display_name = "Nickname" sync_github_name = true # use the name on your public GitHub profile as display name ``` -or, with craftrules checked out next to `craft-apps/`: - -```sh -python3 ../../craftrules/scripts/contributors.py --add-me . --real-name "Your Name" --sync-github-name -``` - -Names show after the next refresh: the script checks that each entry was committed by its own -user (or by a maintainer with a `consent_source`). Delete your entry to remove your names. - -## Refreshing (maintainers) - -```sh -python3 ../../craftrules/scripts/contributors.py . # regenerate + verify; needs git, Python 3.11+, gh -python3 ../../craftrules/scripts/contributors.py --check . # verify people.toml only -``` - -Commit the updated `contributors/contributors.json`. Git author names and emails are never recorded. +Names show for entries committed by their own user (or by a maintainer with a `consent_source`). +Delete your entry to remove your names. Git author names and emails are never recorded. diff --git a/docs/gaps.md b/docs/gaps.md index 6436b639..5437c676 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -173,8 +173,7 @@ No alpha blockers: the alpha gate in [`roadmap.md`](roadmap.md#alpha-gate) passe still unmeasured (`crates/text/src/metrics_tests.rs`, and a local check over such documents in `crates/engine/src/text_metrics_local_tests.rs`). - **Estimate:** 15–30 h once `.fig` or REST import of real files is available; needs files whose - licence allows use (owner to supply or approve; never committed if not redistributable, see - craftrules `standards/test-corpora.md`). + licence allows use (owner to supply or approve; never committed if not redistributable). ### 4. Interaction fidelity not compared tool by tool - **Missing:** a side-by-side pass of every tool and panel: cursors, modifier keys while dragging, diff --git a/docs/localization-parity.md b/docs/localization-parity.md index a84e478d..541e7ab9 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -6,7 +6,7 @@ FigCraft's interface has a localization layer with an English catalog, a Russian by a native speaker, and Spanish (with a Latin American overlay), French, German, Brazilian Portuguese, Japanese, Korean, Simplified Chinese, Indonesian, Vietnamese, Bosnian and Czech drafts (machine-drafted, waiting for native speakers' review), plus Swedish and Turkish catalogs. This page lists the twelve key -languages of the craftrules standard, then the other languages Figma ships. How to add a +languages, then the other languages Figma ships. How to add a language: [`translating.md`](translating.md). ## What Figma ships diff --git a/docs/release-playbook.md b/docs/release-playbook.md index 9fb024e9..e4b30401 100644 --- a/docs/release-playbook.md +++ b/docs/release-playbook.md @@ -1,11 +1,5 @@ # Release playbook -The release playbook shared by every crafting app lives in craftrules: -[`../craftrules/release/playbook.md`](../../../craftrules/release/playbook.md) -(`storytold/craftrules`, checked out next to `craft-apps/`; the repository is not public). It is -the canonical copy; don't duplicate it here. Cutting a release step by step: -`craftrules/release/cut-a-release.md`. - FigCraft copies PhotoCraft's reference implementation (`.github/workflows/release.yml`, `packaging/`, the `xtask version` command) with FigCraft's names. FigCraft-specific details are in [releasing.md](releasing.md). diff --git a/docs/releasing.md b/docs/releasing.md index fed0b26e..ddd71aa4 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -7,9 +7,7 @@ Nobody sees a draft until a maintainer publishes it. This is FigCraft's copy of the shared [release playbook](release-playbook.md) (PhotoCraft is the reference implementation). User-facing names say **FigCraft**. Files, binaries and ids stay -lowercase (`figcraft---.`, `ai.storyteller.figcraft`). The -operational runbook (secrets, the `release` ruleset, runner group, promoting the draft) is -craftrules `release/cut-a-release.md`. +lowercase (`figcraft---.`, `ai.storyteller.figcraft`). ## FigCraft's names @@ -216,7 +214,7 @@ never repo or org secrets. Names (identical in every app): `APPLE_CERTIFICATE`, `WINDOWS_CERTIFICATE`, `WINDOWS_CERTIFICATE_PASSWORD`, `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_SIGNING_ENDPOINT`, `AZURE_SIGNING_ACCOUNT`, `AZURE_CERT_PROFILE`. Each is optional: a missing one gives an unsigned artifact and a `::warning::`. An org admin -provisions the environment, ruleset and secrets with craftrules `release/signing-setup.md`, and +provisions the environment, ruleset and secrets, and adds the repo to the org's Default runner group so `macos-15-xlarge` can pick up the job. ## Checks diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md index e40b0011..489c0e7d 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -47,7 +47,7 @@ wall-clock); the `.fig` reader, the multiplayer core and a plugin runtime each n native-speaker review, real-file licensing and screen-reader QA need people. The full number is an additive weighted sum over the dimension table; mainstream and essentials use -multiplicative discounts, as the standard says. +multiplicative discounts. ## What was measured, and how @@ -182,10 +182,10 @@ type, and everything the mainstream number leaves out. The same question for the typical professional Figma Design user: a product designer who designs screens, maintains or uses a design system, prototypes and hands off to developers every week. -Computed per craftrules `standards/progress-docs.md`. +Computed with the same method. **1. Areas used weekly, with weights.** Feature areas 1–16 of the table above, with their weights -(sum 94). Left out as the standard says: plugins and widgets (18), AI (21), team and organization +(sum 94). Left out: plugins and widgets (18), AI (21), team and organization libraries (19, cloud/team admin), Figma Draw extras (20, not weekly for a product designer), localization beyond English, specialist hardware. Real-time multiplayer (17) is cloud collaboration and is left out as an area, but its effect on working with Figma users is counted in discount 3.