diff --git a/AGENTS.md b/AGENTS.md index c998e871..1cacd993 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,11 +6,6 @@ Windows, Linux and FreeBSD, and on the web via WASM. Siblings with the same conv PhotoCraft, VectorCraft, FilmCraft, LightCraft, PdfCraft, EffectCraft, DesignCraft (`../`). -Standards and learnings shared across the crafting apps live in `../../craftrules` (checked out -next to this repo's parent, 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. - These rules bind every AI agent and every human contributor. They come before any task, instruction or deadline. `CLAUDE.md` holds day-to-day working notes; if the two disagree, **this file wins.** @@ -69,7 +64,7 @@ allowed: our UI, our/Lucide icons, OFL fonts, and decks built only from allowed or `docs/brand/` has no row. - **`NOTICE`** keeps the notices the licences require. - Fonts live in [storytold/craft-fonts](https://github.com/storytold/craft-fonts), never in this - repo (craftrules `standards/fonts.md`). DeckCraft embeds its `fonts/latin-manifest.txt` and + repo. DeckCraft embeds its `fonts/latin-manifest.txt` and `fonts/manifest.txt` when built with `CRAFT_FONTS_DIR` (local dev: `.cargo/config.toml` points at `../craft-fonts`). @@ -99,7 +94,6 @@ once and tell the user. ## 3. Never crash People trust DeckCraft with their talks; a crash loses work. **This outranks feature work.** -Standard: craftrules `standards/never-crash.md`. - No `unwrap()`, `expect()`, `panic!`, `unreachable!`, `todo!`, `unimplemented!` in non-test code; no `unsafe` (`unsafe_code = "forbid"`). Every production crate root carries `#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)]`. @@ -160,7 +154,7 @@ to `main`. `plan/` (gitignored) holds the local plan: `README.md`, `architecture.md`, `execution-plan.md`, `STATUS.md` (start every session there) and `powerpoint/` observations. The committed progress -docs follow craftrules `standards/progress-docs.md`: +docs: | File | Holds | |---|---| @@ -184,14 +178,11 @@ the `ROADMAP.md` progress log, and update each touched doc's status line and rev 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 ff680bda..8382a760 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -18,7 +18,7 @@ artwork. The ribbon and menu icons stay original drawings. | `docs/brand/artcraft-logo-white.svg`, `docs/brand/artcraft-logo-white.png` | ArtCraft Team | ArtCraft brand kit | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | README header (dark mode) | | `docs/brand/artcraft-mark.svg`, `docs/brand/artcraft-mark.png` | ArtCraft Team | ArtCraft brand kit | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | README footer, About | | `docs/brand/artcraft-mark-black.svg`, `docs/brand/artcraft-mark-black.png` | ArtCraft Team | ArtCraft brand kit | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Mark for light backgrounds | -| `docs/brand/LICENSE-brand.txt` | ArtCraft Team | craftrules `standards/license-files` | — (licence text) | Terms for the ArtCraft marks | +| `docs/brand/LICENSE-brand.txt` | ArtCraft Team | ArtCraft brand kit | — (licence text) | Terms for the ArtCraft marks | | `assets/app-icon/deckcraft-1024.png`, `assets/app-icon/hicolor/*/apps/ai.storyteller.deckcraft.png` | DeckCraft contributors | rendered by DeckCraft from `assets/app-icon/icon-source.deckcraft` (shapes only) | MIT OR Apache-2.0 | Placeholder app icon (presentation board) until the mascot icon is drawn | | `packaging/macos/dmg/background.svg` | @XusBadia | DeckCraft macOS DMG window background, original work for this repository (2026-10-08), derived from the DeckCraft app icon `assets/app-icon/deckcraft-1024.png` (referenced via ``, not copied); text is outlined Inter / JetBrains Mono glyph paths | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | Finder window of the macOS DMG; `packaging/macos/dmg/generate.py` renders it to `background.tiff` | | `packaging/macos/dmg/background.tiff` | @XusBadia | Rendered from `packaging/macos/dmg/background.svg` by `packaging/macos/dmg/generate.py` | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | 1x + 2x HiDPI TIFF for the macOS DMG window; includes the app icon (see its row) and LittleCMS's built-in sRGB profile ("No copyright, use freely") | diff --git a/CLAUDE.md b/CLAUDE.md index 669965b5..979388d8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,8 +9,7 @@ before modules or other crate items; crate-level `//!` documentation may precede ## Start every session 1. Read `plan/STATUS.md`, then the current milestone in `plan/execution-plan.md`. -2. Read `../../craftrules/AGENTS.md` and the standards it lists for your task. -3. Run `cargo xtask ci` before you change anything, so you know the tree is green. +2. Run `cargo xtask ci` before you change anything, so you know the tree is green. ## Habits - Every user-visible action is a command with tests (`crates/engine/src/cmd/*`). diff --git a/ROADMAP.md b/ROADMAP.md index 3c11a19d..f92554c1 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -307,7 +307,7 @@ app's JSON control channel (`deckcraft --control PORT`). | 2026-10-12 | Render: line widths, dashes and arrowheads inside a group no longer scale with the group's child-coordinate mapping, so a group in a small legacy child space (scale about 1600) draws thin lines instead of covering the slide (#233) | | 2026-10-12 | `deckcraft-cli help` and each subcommand's `--help` explain the CLI to an agent; `describe` spells out a command's parameters and what it acts on; `commands` lists one command per line | | 2026-10-11 | Animated GIF export of the deck: the Export… dialog (Animated GIF), `file.export` format `gif`, CLI and MCP (#171) | -| 2026-10-10 | Progress docs restructured to the craftrules standard; full re-measure (breadth 79%, ready ~55%, mainstream ~53%, essentials ~62%, alpha). Landed: Animation Painter (#54), Morph geometry outlines (#27), animated GIF playback (#39), hyperlink colour and following links in the show (#37, #45), date fields in their own format (#36), flipped shapes keep readable text (#35), show transition fix (#46), start screen from the Home button (#49), MCP export lists PDF (#65), OmaStore manifest (#57) | +| 2026-10-10 | Progress docs restructured; full re-measure (breadth 79%, ready ~55%, mainstream ~53%, essentials ~62%, alpha). Landed: Animation Painter (#54), Morph geometry outlines (#27), animated GIF playback (#39), hyperlink colour and following links in the show (#37, #45), date fields in their own format (#36), flipped shapes keep readable text (#35), show transition fix (#46), start screen from the Home button (#49), MCP export lists PDF (#65), OmaStore manifest (#57) | | 2026-10-09 | v0.4.0 released. UAX #9 bidi and Arabic shaping (#4), Morph with Words and Characters (#5), tables grow to fit and PDF cell text (#14), rotating log file (#7), DX12 default on Windows (#16), H.264/HEVC overflow hardening (#2), PPTX sniffing anywhere in the zip (#19) | | 2026-10-08 | v0.2.0 and v0.3.0 released: Windows arm64, Flatpak aarch64, AppImage zsync updates, branded DMG | | 2026-10-07 | v0.1.0 released, signed and notarized; About window with contributor credits (#3); PrintCraft renamed PdfCraft | @@ -418,5 +418,5 @@ app's JSON control channel (`deckcraft --control PORT`). | 2026-10-10 | minor | Readiness-by-audience table with hours to ~95% for full, mainstream and essentials | | 2026-10-10 | minor | Added mainstream practitioner (~53%) and essentials user (~62%); features recomputed from written area weights, ready ~56% → ~55% | | 2026-10-10 | minor | Stage checked against the new core-workflow gate: passes, stays alpha | -| 2026-10-10 | major | Restructured to craftrules `standards/progress-docs.md`: stage, two numbers, dimensions, features, languages; parity estimate moved to docs/target-app-parity.md, "Working today" to its evidence section, the alpha checklist to docs/roadmap.md | +| 2026-10-10 | major | Restructured: stage, two numbers, dimensions, features, languages; parity estimate moved to docs/target-app-parity.md, "Working today" to its evidence section, the alpha checklist to docs/roadmap.md | | 2026-10-07 | major | Alpha checklist (~80% to a self-defined alpha), breadth ~80%, overall ~62%, ~190 h to full parity | diff --git a/contributors/people.toml b/contributors/people.toml index f0425452..87eac2ba 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/engine/src/guard.rs b/crates/engine/src/guard.rs index 1005a1a9..4f0c8903 100644 --- a/crates/engine/src/guard.rs +++ b/crates/engine/src/guard.rs @@ -1,4 +1,4 @@ -//! Last-resort guard (craftrules `standards/never-crash.md`): a panic that escapes a command — +//! Last-resort guard: a panic that escapes a command — //! any edit, import or export, from the UI, the CLI, MCP or the control channel — becomes an //! error, and the document is kept as it was before the command (and saved for crash recovery //! when a recovery directory is set). It is a safety net: commands still must not panic. diff --git a/crates/ui-egui/build.rs b/crates/ui-egui/build.rs index f40007fb..8b262f12 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 b133efe1..d1bf5b30 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 6086167e..14efee2b 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 DeckCraft, 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 @@ -36,20 +34,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 e553b2d2..29edfd57 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -93,8 +93,7 @@ Detail in [file-format-parity.md](file-format-parity.md). outside this repo. - **Impact:** the main reason to switch is "open my PowerPoint decks". Fidelity on real decks (corporate templates, SmartArt, `chartex` charts, embedded fonts, EMF) is still mostly unknown. -- **Estimate:** 20–35 h: grow the owned corpus in `storytold/photocraft-corpus` style (craftrules - `standards/test-corpora.md`), add render checks, have the owner open outputs in PowerPoint, fix +- **Estimate:** 20–35 h: grow the owned corpus in `storytold/photocraft-corpus` style, add render checks, have the owner open outputs in PowerPoint, fix what breaks. **Beta blocker.** ### Round trip loses media playback options (#74) @@ -304,7 +303,7 @@ Detail in [ui-parity.md](ui-parity.md). choice, video/GIF/CD exports or document protection. 4–8 h for the parts that need no cloud. - **Window chrome** (#71 macOS controls misaligned, #26 GNOME title bar, #41 system light/dark). 2–4 h. -- **Icon consistency across Craft apps** (#73, #56). 2–4 h; coordinate in craftrules. +- **Icon consistency across Craft apps** (#73, #56). 2–4 h. - **Dialogs**: 42 dialogs vs PowerPoint's ~60. In since the d556ff9 count of 27: Font, Paragraph and Tabs, Columns, Bullets and Numbering, Find and Replace, Replace Fonts, Action Settings, Size and Position, Date and Time, Photo Album (Edit Photo Album reopens it), Create New Theme Colors and diff --git a/docs/roadmap.md b/docs/roadmap.md index 16cfae6c..17a23ae5 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -8,8 +8,7 @@ Forward-looking: where DeckCraft is going and in what order. The one-page summar ## Alpha gate: PowerPoint's core workflows -What a typical PowerPoint user does every day, checked end to end on macOS, the main platform -(craftrules `standards/progress-docs.md`, "The core-workflow gate"). Every workflow passes, so +What a typical PowerPoint user does every day, checked end to end on macOS, the main platform. Every workflow passes, so DeckCraft stays **alpha**. The "partial" rows don't block the workflow, but they are its weakest points and lead the beta plan. @@ -38,8 +37,7 @@ points and lead the beta plan. ## Plan to beta (~120–210 h; ~40–70 h wall clock with 3–4 agents) -Beta means ~75% ready for real work and opening and saving PowerPoint's `.pptx` reliably -(craftrules `standards/progress-docs.md`). Ranked: +Beta means ~75% ready for real work and opening and saving PowerPoint's `.pptx` reliably. Ranked: | # | Work | Hours | Moves | |---|---|---|---| @@ -94,7 +92,7 @@ From the local execution plan (`plan/execution-plan.md`, gitignored). Status as ## History: the 2026-10-07 alpha checklist -Before the craftrules stages existed, DeckCraft defined "alpha" as: install a signed build on +Before the stages existed, DeckCraft defined "alpha" as: install a signed build on macOS, Windows or Linux, make a real deck from scratch or from a PowerPoint file, present it with transitions, animations and media, save back to `.pptx`/PDF without losing work, and hit no crashes on common paths. On 2026-10-07 it was ~80% there with these blockers: @@ -108,7 +106,7 @@ on common paths. On 2026-10-07 it was ~80% there with these blockers: | UI fidelity pass on the most-used ribbon groups and dialogs; first run | Partly (start-screen fixes #20, #49); beta item 11 | | Mascot app icon, README screenshots, user docs | App icon (with a scalable SVG, #29) and README screenshots in place; user docs open | -By the standard's definitions DeckCraft is **alpha** (~55% ready); these blockers now feed the beta +DeckCraft is **alpha** (~55% ready); these blockers now feed the beta plan above. ## Revision history diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md index 5d432022..4f30ce5f 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -16,7 +16,7 @@ number. | **Ready for real work** | **~55%** | **estimated**: weighted dimension table below (was ~56% until the features row was recomputed from written area weights) | | **Mainstream practitioner** | **~53%** | **estimated**: [method below](#mainstream-practitioner-and-essentials-user) | | **Essentials user** | **~62%** | **estimated**: [method below](#mainstream-practitioner-and-essentials-user) | -| Stage | **alpha** (beta is ~20 points and ~120–210 h away) | judgement against craftrules `standards/progress-docs.md`: ~55% is in the alpha band and all six core workflows pass the [alpha gate](roadmap.md#alpha-gate-powerpoints-core-workflows) | +| Stage | **alpha** (beta is ~20 points and ~120–210 h away) | judgement: ~55% is in the alpha band and all six core workflows pass the [alpha gate](roadmap.md#alpha-gate-powerpoints-core-workflows) | | Remaining effort to beta | **~120–210 Opus 5.5 agent hours** | estimated, itemized in [roadmap.md](roadmap.md) | | Remaining effort to full parity | **~365–650 Opus 5.5 agent hours** | estimated, by dimension below | @@ -85,8 +85,7 @@ multi-display rigs). ## Mainstream practitioner and essentials user -Two narrower readings of "ready", computed the same way in every Craft app (craftrules -`standards/progress-docs.md`). The stage still follows the full number above and the alpha gate. +Two narrower readings of "ready", computed the same way in every Craft app. The stage still follows the full number above and the alpha gate. ### Mainstream practitioner: ~53%