mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-31 13:56:54 -06:00
docs: tidy agent, contributor and asset docs
This commit is contained in:
@@ -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.<username>]` 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.
|
||||
|
||||
+1
-1
@@ -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 |
|
||||
|
||||
|
||||
@@ -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.<username>]` 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.
|
||||
|
||||
+2
-2
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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`).
|
||||
//!
|
||||
|
||||
@@ -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;
|
||||
|
||||
+4
-21
@@ -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.
|
||||
|
||||
+1
-2
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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).
|
||||
|
||||
+2
-4
@@ -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-<version>-<platform>-<arch>.<ext>`, `ai.storyteller.figcraft`). The
|
||||
operational runbook (secrets, the `release` ruleset, runner group, promoting the draft) is
|
||||
craftrules `release/cut-a-release.md`.
|
||||
lowercase (`figcraft-<version>-<platform>-<arch>.<ext>`, `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
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user