From ffd5a4a22b7557723b5a1138bc73e98eafff9abc Mon Sep 17 00:00:00 2001 From: aiongg Date: Sat, 31 Oct 2026 04:17:15 +0000 Subject: [PATCH 1/3] docs: tidy agent, contributor and asset docs --- AGENTS.md | 18 ++++++------------ CLAUDE.md | 11 ++++------- README.zh-hans.md | 2 +- assets/ATTRIBUTION.md | 2 +- assets/app-icon/README.md | 5 ++--- contributors/people.toml | 7 ++----- crates/engine/src/fonts.rs | 2 +- crates/sysmem/Cargo.toml | 3 +-- crates/ui-egui/build.rs | 4 ++-- crates/ui-egui/src/dialogs/credits.rs | 2 +- docs/contributors.md | 25 ++++--------------------- docs/target-app-parity.md | 2 +- flake.nix | 2 +- 13 files changed, 27 insertions(+), 58 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 4044a6563..f10fedb20 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,8 +14,7 @@ LightCraft is a clean-room, open-source, pure-Rust photo library + non-destructi 4. **Pick work** from [`docs/gaps.md`](docs/gaps.md) (ranked by user impact; `B` marks beta blockers). The row-by-row tracker is [`docs/parity-checklist.md`](docs/parity-checklist.md) (one row per feature, menu item and shortcut). When you land a feature, update its row(s) and the gap entry in the same commit, and the numbers in `ROADMAP.md` / - `docs/target-app-parity.md` when a listed gap closes (bump each doc's *Last updated* line and revision history, per - craftrules `standards/progress-docs.md`); `cargo xtask parity` (part of `ci`) checks that every `cmd:`/`ctl:` id and + `docs/target-app-parity.md` when a listed gap closes (bump each doc's *Last updated* line and revision history); `cargo xtask parity` (part of `ci`) checks that every `cmd:`/`ctl:` id and path the tracker cites still exists, and `cargo xtask parity --write` refreshes its summary. 5. Follow the autonomous operation protocol (`plan/execution-plan.md` §7). Don't stop to ask unless §7 lists the decision as the user's. @@ -32,8 +31,7 @@ and often so a crash loses minutes, not hours. People trust LightCraft with their photo libraries and edits; a crash loses their work. A malformed raw/JPEG/XMP, a bad command, control or MCP argument, a corrupt catalog or settings file, or a full disk must produce an error the user (or agent) can act on, never a panic. Don't ship a feature by adding a panic path, and fix a crash before building on top -of it. Full standard: `../craftrules/standards/never-crash.md` -([storytold/craftrules](https://github.com/storytold/craftrules/blob/main/standards/never-crash.md)). +of it. - **Non-test code never panics:** no `unwrap()`, `expect()`, `panic!`, `unreachable!`, `todo!`, `unimplemented!`, and no `unsafe`. Return the crate's error type through `Result` and `?`; use `ok_or(..)?`, `let … else`, `if let`, or a fallback (`unwrap_or…`) only where it can't silently corrupt a document. An unfinished feature returns an @@ -86,8 +84,7 @@ of it. Full standard: `../craftrules/standards/never-crash.md` (`theme::font_definitions`) and the export watermark renderer use CJK faces (picked by script) as fallbacks after Inter. Unset, `CRAFT_FONTS` is empty: everything builds, tests and runs, but Chinese and Japanese text lack glyphs. Releases always build with it (`release.yml`, `CRAFT_FONTS_REQUIRED=1`) and ship the fonts' OFL licences. Tests that need these fonts skip - without it; the FreeBSD CI job runs them with it. Rules: craftrules - [`standards/fonts.md`](https://github.com/storytold/craftrules/blob/main/standards/fonts.md). + without it; the FreeBSD CI job runs them with it. - Icons drawn in code (e.g. `crates/ui-egui/src/icons.rs`) are original work and are recorded in `assets/ATTRIBUTION.md` as such; do not trace them from Adobe icons. - Demo/test images: generated procedurally by `lightcraft-scenes`, or CC0 downloads kept in the gitignored `corpus/` with their source recorded. Screenshots of Adobe apps live only in the gitignored `plan/` and are never committed or published. - **Enforced:** `cargo xtask assets` (in `ci`) fails when an image/icon/font/sound/video/raw/ICC/XMP file is not matched @@ -113,7 +110,7 @@ of it. Full standard: `../craftrules/standards/never-crash.md` - Shell gotcha: `mv`/`cp` are aliased interactive here — use `/bin/mv -f` / `/bin/cp -f`. - Parallel agents: separate git worktrees and `CARGO_TARGET_DIR=target/agent-`; each agent uses its **own control port** (pick one in 18000–19999, never the default 7980) and its own scratch subfolder (`//`) — never `rm -rf` shared paths; delete your target dir when done (disk is shared); keep every `Cargo.toml` valid at all times (the `crates/*` glob means one broken manifest breaks everyone). - Test corpora: `cargo xtask corpus --download` into `corpus/` (gitignored, CC0 only). Never commit media. -- Shared real-file test corpora (Photoshop-authored PSDs, etc.) live in [`storytold/photocraft-corpus`](https://github.com/storytold/photocraft-corpus), explained in [craftrules `standards/test-corpora.md`](https://github.com/storytold/craftrules/blob/main/standards/test-corpora.md). Never commit large binary fixtures to this repo; fetch them pinned by commit and sha256-verified, as PhotoCraft does with `cargo xtask corpus`. +- Shared real-file test corpora (Photoshop-authored PSDs, etc.) live in [`storytold/photocraft-corpus`](https://github.com/storytold/photocraft-corpus). Never commit large binary fixtures to this repo; fetch them pinned by commit and sha256-verified, as PhotoCraft does with `cargo xtask corpus`. ## Testing & performance (do this often) - Unit/property tests next to the code; end-to-end tests drive real binaries (`crates/mcp/tests/e2e.rs`, @@ -142,20 +139,17 @@ evaluates it (`.github/workflows/nix.yml`), so the build may lag behind the work ## Contributor credits (About window) - About ▸ Contributors/Models are compiled into the binary from `contributors/contributors.json` - (commit stats; generated, never hand-edit) and `contributors/people.toml` (names people chose for + (commit stats; never hand-edit) and `contributors/people.toml` (names people chose for themselves). See `docs/contributors.md`. - **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/CLAUDE.md b/CLAUDE.md index 9b384fc6c..0597cbf46 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,8 +14,7 @@ LightCraft is a clean-room, open-source, pure-Rust photo library + non-destructi 4. **Pick work** from [`docs/gaps.md`](docs/gaps.md) (ranked by user impact; `B` marks beta blockers). The row-by-row tracker is [`docs/parity-checklist.md`](docs/parity-checklist.md) (one row per feature, menu item and shortcut). When you land a feature, update its row(s) and the gap entry in the same commit, and the numbers in `ROADMAP.md` / - `docs/target-app-parity.md` when a listed gap closes (bump each doc's *Last updated* line and revision history, per - craftrules `standards/progress-docs.md`); `cargo xtask parity` (part of `ci`) checks that every `cmd:`/`ctl:` id and + `docs/target-app-parity.md` when a listed gap closes (bump each doc's *Last updated* line and revision history); `cargo xtask parity` (part of `ci`) checks that every `cmd:`/`ctl:` id and path the tracker cites still exists and that `docs/gaps.md` lists each gap once, and `cargo xtask parity --write` refreshes its summary. 5. Follow the autonomous operation protocol (`plan/execution-plan.md` §7). Don't stop to ask unless §7 lists the decision as the user's. @@ -33,8 +32,7 @@ and often so a crash loses minutes, not hours. People trust LightCraft with their photo libraries and edits; a crash loses their work. A malformed raw/JPEG/XMP, a bad command, control or MCP argument, a corrupt catalog or settings file, or a full disk must produce an error the user (or agent) can act on, never a panic. Don't ship a feature by adding a panic path, and fix a crash before building on top -of it. Full standard: `../craftrules/standards/never-crash.md` -([storytold/craftrules](https://github.com/storytold/craftrules/blob/main/standards/never-crash.md)). +of it. - **Non-test code never panics:** no `unwrap()`, `expect()`, `panic!`, `unreachable!`, `todo!`, `unimplemented!`, and no `unsafe`. Return the crate's error type through `Result` and `?`; use `ok_or(..)?`, `let … else`, `if let`, or a fallback (`unwrap_or…`) only where it can't silently corrupt a document. An unfinished feature returns an @@ -97,8 +95,7 @@ of it. Full standard: `../craftrules/standards/never-crash.md` (`theme::font_definitions`) and the export watermark renderer use CJK faces (picked by script) as fallbacks after Inter; the UI also falls back on the faces of other scripts (Thai, Arabic, …). Unset, `CRAFT_FONTS` is empty: everything builds, tests and runs, but Chinese and Japanese text lack glyphs. Releases always build with it (`release.yml`, `CRAFT_FONTS_REQUIRED=1`) and ship the fonts' OFL licences. Tests that need these fonts skip - without it; the FreeBSD CI job runs them with it. Rules: craftrules - [`standards/fonts.md`](https://github.com/storytold/craftrules/blob/main/standards/fonts.md). + without it; the FreeBSD CI job runs them with it. - Icons drawn in code (e.g. `crates/ui-egui/src/icons.rs`) are original work and are recorded in `assets/ATTRIBUTION.md` as such; do not trace them from Adobe icons. - Demo/test images: generated procedurally by `lightcraft-scenes`, or CC0 downloads kept in the gitignored `corpus/` with their source recorded. Screenshots of Adobe apps live only in the gitignored `plan/` and are never committed or published. - **Enforced:** `cargo xtask assets` (in `ci`) fails when an image/icon/font/sound/video/raw/ICC/XMP file is not matched @@ -127,7 +124,7 @@ of it. Full standard: `../craftrules/standards/never-crash.md` - Shell gotcha: `mv`/`cp` are aliased interactive here — use `/bin/mv -f` / `/bin/cp -f`. - Parallel agents: separate git worktrees and `CARGO_TARGET_DIR=target/agent-`; each agent uses its **own control port** (pick one in 18000–19999, never the default 7980) and its own scratch subfolder (`//`) — never `rm -rf` shared paths; delete your target dir when done (disk is shared); keep every `Cargo.toml` valid at all times (the `crates/*` glob means one broken manifest breaks everyone). - Test corpora: `cargo xtask corpus --download` into `corpus/` (gitignored, CC0 only). Never commit media. -- Shared real-file test corpora (Photoshop-authored PSDs, etc.) live in [`storytold/photocraft-corpus`](https://github.com/storytold/photocraft-corpus), explained in [craftrules `standards/test-corpora.md`](https://github.com/storytold/craftrules/blob/main/standards/test-corpora.md). Never commit large binary fixtures to this repo; fetch them pinned by commit and sha256-verified, as PhotoCraft does with `cargo xtask corpus`. +- Shared real-file test corpora (Photoshop-authored PSDs, etc.) live in [`storytold/photocraft-corpus`](https://github.com/storytold/photocraft-corpus). Never commit large binary fixtures to this repo; fetch them pinned by commit and sha256-verified, as PhotoCraft does with `cargo xtask corpus`. ## Testing & performance (do this often) - Unit/property tests next to the code; end-to-end tests drive real binaries (`crates/mcp/tests/e2e.rs`, diff --git a/README.zh-hans.md b/README.zh-hans.md index fa782ba10..bce9b89e6 100644 --- a/README.zh-hans.md +++ b/README.zh-hans.md @@ -392,7 +392,7 @@ CRAFT_FONTS_DIR=../craft-fonts cargo run --release -p lightcraft ``` 不指定它时,LightCraft 构建和运行的方式完全相同,只是中文和日文文字没有字形。字体从不提交到 -本仓库;见 [craftrules `standards/fonts.md`](https://github.com/storytold/craftrules/blob/main/standards/fonts.md)。 +本仓库。 **界面语言:** **编辑 → 语言**(English、简体中文、繁體中文(台灣)、日本語、Português (Brasil)、Español、Deutsch、Русский、Français)或 **设置 → 一般 → 语言**;选择立即生效并会保留。见 [docs/localization.md](docs/localization.md)。 diff --git a/assets/ATTRIBUTION.md b/assets/ATTRIBUTION.md index e5ed8090e..d95e95b41 100644 --- a/assets/ATTRIBUTION.md +++ b/assets/ATTRIBUTION.md @@ -53,4 +53,4 @@ Notes - CJK fonts (BIZ UDPGothic, BIZ UDMincho, Shippori Mincho, Noto Sans CJK SC) are not in this repository. They live in [storytold/craft-fonts](https://github.com/storytold/craft-fonts), with their licences and attribution in its `ATTRIBUTION.md`, and are embedded only in builds made with the optional `CRAFT_FONTS_DIR` build input (all official - releases). Never commit font files here; add new fonts to craft-fonts (craftrules `standards/fonts.md`). + releases). Never commit font files here; add new fonts to craft-fonts. diff --git a/assets/app-icon/README.md b/assets/app-icon/README.md index 2a6dd4b88..ff6aafd65 100644 --- a/assets/app-icon/README.md +++ b/assets/app-icon/README.md @@ -20,9 +20,8 @@ Windows and Linux files use the full-bleed tile so the lynx reads at 16-48 px. ## Provenance -The owner's original drawing, made in ArtCraft (2880 px, keyed to the three colours), vectorised with -craftrules `assets/logo-options/_tools/vectorize_tile.py`. The source drawing stays in craftrules at -`assets/app-icons/lightcraft/source.png`; `lightcraft.svg` here is the canonical artwork. Licence: +The owner's original drawing, made in ArtCraft (2880 px, keyed to the three colours) and +vectorised. `lightcraft.svg` here is the canonical artwork. Licence: `LICENSE.txt` (MIT OR Apache-2.0, like the repo). ## Files diff --git a/contributors/people.toml b/contributors/people.toml index 7518acd38..27e9f3a52 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/fonts.rs b/crates/engine/src/fonts.rs index db9e658d0..c45f5f94b 100644 --- a/crates/engine/src/fonts.rs +++ b/crates/engine/src/fonts.rs @@ -3,7 +3,7 @@ //! Built with `CRAFT_FONTS_DIR=`, [`CRAFT_FONTS`] holds every font in its //! manifest (today: the Japanese and Simplified-Chinese UI and document fonts); otherwise it is //! empty and LightCraft uses only its own bundled fonts (Inter). Both the egui UI and the export -//! watermark renderer read it from here. See craftrules `standards/fonts.md`. +//! watermark renderer read it from here. /// A font from the optional craft-fonts build input (empty unless built with `CRAFT_FONTS_DIR`). pub struct CraftFont { diff --git a/crates/sysmem/Cargo.toml b/crates/sysmem/Cargo.toml index a7f0492c6..52ad5d206 100644 --- a/crates/sysmem/Cargo.toml +++ b/crates/sysmem/Cargo.toml @@ -6,8 +6,7 @@ license.workspace = true description = "LightCraft sysmem (L0): returns freed allocator memory to the OS. The workspace's only crate allowed `unsafe` (one FFI call)." # Opts out of the workspace lints only to keep `unsafe_code = "deny"` overridable for the single FFI -# module below; every other crate root has `#![forbid(unsafe_code)]`. See AGENTS.md and craftrules -# standards/never-crash.md ("isolated helper library crate"). +# module below; every other crate root has `#![forbid(unsafe_code)]`. See AGENTS.md. [lints.rust] unsafe_code = "deny" diff --git a/crates/ui-egui/build.rs b/crates/ui-egui/build.rs index 9d8300e8e..a0b453f24 100644 --- a/crates/ui-egui/build.rs +++ b/crates/ui-egui/build.rs @@ -12,8 +12,8 @@ //! macro's last arm. `i18n::tests::translation_gaps_report` lists the gaps per language. //! //! It also bakes the contributor credits into the binary as static Rust tables (`$OUT_DIR/credits.rs`, -//! included by `src/credits.rs`; craftrules `standards/contributors.md`): commit stats from -//! `contributors/contributors.json` (generated by craftrules `scripts/contributors.py`) and the names +//! included by `src/credits.rs`): commit stats from +//! `contributors/contributors.json` and the names //! people chose for themselves from `contributors/people.toml`. Nothing is read at run time. A //! missing or malformed file gives empty tables (or usernames only) and a warning, never a failed build. use std::{ diff --git a/crates/ui-egui/src/dialogs/credits.rs b/crates/ui-egui/src/dialogs/credits.rs index 578616068..12f857705 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 78e234dfa..faf47dc71 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 LightCraft, 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. - [`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 @@ -39,20 +37,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/target-app-parity.md b/docs/target-app-parity.md index d72c165c4..f2edebc24 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -110,7 +110,7 @@ pure-Rust inference is proven (faces, SAM 3, denoise). ## Ready for real work, mainstream practitioner and essentials user -Three readiness numbers (craftrules `standards/progress-docs.md`). The full number is a weighted +Three readiness numbers. The full number is a weighted sum over the dimensions with written weights. Mainstream and essentials take the weighted depth of the areas their user touches, then apply written multiplicative discounts for what still stops real work. Each has its own hours to ~95%, calibrated as in [How hours are calibrated](#how-hours-are-calibrated) diff --git a/flake.nix b/flake.nix index faa7e1d2e..e6dca1419 100644 --- a/flake.nix +++ b/flake.nix @@ -14,7 +14,7 @@ # is not part of that default set and is not embedded. Official releases always build with the # default fonts; without them everything works but non-Latin text lacks glyphs. Pinned to the same # revision CI, the release workflow and the standalone packaging helpers use — bump all of them - # together (`nix flake update craft-fonts`); craftrules standards/fonts.md. + # together (`nix flake update craft-fonts`). craft-fonts = { url = "github:storytold/craft-fonts/b076417b5880bd4154bd22f00695b1d28c6bea83"; flake = false; From a9ac47cbcec6fabebe68fbd0424a8444f766024f Mon Sep 17 00:00:00 2001 From: aiongg Date: Sat, 31 Oct 2026 04:25:37 +0000 Subject: [PATCH 2/3] docs: tidy wording --- README.md | 2 +- ROADMAP.md | 9 ++++----- docs/parity-checklist.md | 2 +- docs/target-app-parity.md | 14 +++++++------- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index ba094749c..8da5d1ed4 100644 --- a/README.md +++ b/README.md @@ -466,7 +466,7 @@ CRAFT_FONTS_DIR=../craft-fonts cargo run --release -p lightcraft ``` Without it LightCraft builds and runs the same, but Chinese and Japanese text have no glyphs. Fonts are never committed to this -repo — the standard for what goes there lives with it: see the [craft-fonts README](https://github.com/storytold/craft-fonts#readme). +repo — what goes there is described in the [craft-fonts README](https://github.com/storytold/craft-fonts#readme). **Interface language:** **Edit → Language** (English, 简体中文, 繁體中文(台灣), 日本語, Português (Brasil), Español, Deutsch, Русский, Français, Українська, Polski, Čeština, Italiano, ქართული, Svenska, Suomi, Bahasa Indonesia, Tiếng Việt) or **Settings → General → Language**; the choice applies immediately and persists. See [docs/localization.md](docs/localization.md). diff --git a/ROADMAP.md b/ROADMAP.md index daad94027..3768db7f5 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -150,10 +150,9 @@ Ranked toward beta; detail in [docs/roadmap.md](docs/roadmap.md), gaps in [docs/ - 2026-10-10 (RAW): RAW measured model by model against Adobe's 1,446-model list (234 verified, 943 unverified, 233 preview-only, 36 unsupported; ~84% of photographers' cameras decode, ~40% on a verified body). Full ~61%, mainstream ~49%, essentials ~64%; beta ~14 points away. -- 2026-10-10 (final): full ready is a weighted sum over the dimensions (~59%; method aligned with - the standard); mainstream practitioner ~51% (450–840 h), essentials user ~63% (160–300 h); +- 2026-10-10 (final): full ready is a weighted sum over the dimensions (~59%; no new evidence); mainstream practitioner ~51% (450–840 h), essentials user ~63% (160–300 h); alpha gate passes. -- 2026-10-10: full re-measure for the progress-docs standard: stage alpha, ready ~55%, checklist +- 2026-10-10: full re-measure, progress docs restructured: stage alpha, ready ~55%, checklist 81.1%; new docs (target-app-parity, gaps, roadmap, architecture, raw / file-format / hardware / UI / localization parity); `docs/parity.md` renamed `docs/parity-checklist.md`. Landed today: Nikon lossy-after-split NEF (#633), ORF 12.8 bpp (#651), HDR gain map JPEG / PQ AVIF / float TIFF export @@ -213,10 +212,10 @@ Ranked toward beta; detail in [docs/roadmap.md](docs/roadmap.md), gaps in [docs/ | 2026-10-12 | minor | 117 Nikon and Fujifilm bodies verified (354 models, 24%); headline numbers unchanged | | 2026-10-11 | minor | EOS R5 Mark II CR3 verified: CR3 on four verified bodies, RAW decoding 76% → 77%; headline numbers unchanged | | 2026-10-10 | minor | RAW measured model by model; RAW decode and colour as explicit rows: full 59% → 61%, mainstream 51% → 49%, essentials 63% → 64%; beta ~14 points | -| 2026-10-10 | minor | Full ready restored to the additive weighted sum (~59%; method aligned with the standard, no new evidence); hours per audience; beta ~16 points away | +| 2026-10-10 | minor | Full ready restored to the additive weighted sum (~59%; no new evidence); hours per audience; beta ~16 points away | | 2026-10-10 | minor | Mainstream practitioner and essentials user numbers; full ready 55% → 46% (method written down); beta 340–600 h | | 2026-10-10 | minor | Alpha gate added (core-workflow check): passes, stays alpha | -| 2026-10-10 | major | Restructured to the progress-docs standard; re-measured; *Where we stand*, *Parity estimate* and *Totals* moved to docs/target-app-parity.md, milestones and risks to docs/roadmap.md, raw coverage to docs/raw-parity.md, catalog migration to docs/file-format-parity.md, CJK notes to docs/localization-parity.md | +| 2026-10-10 | major | Progress docs restructured; re-measured; *Where we stand*, *Parity estimate* and *Totals* moved to docs/target-app-parity.md, milestones and risks to docs/roadmap.md, raw coverage to docs/raw-parity.md, catalog migration to docs/file-format-parity.md, CJK notes to docs/localization-parity.md | | 2026-10-08 | minor | *Where we stand* by dimension and by kind of user | | 2026-10-02 | major | Parity estimate and effort table | | 2026-09-30 | major | Created | diff --git a/docs/parity-checklist.md b/docs/parity-checklist.md index 08dab300b..05e9e1ab4 100644 --- a/docs/parity-checklist.md +++ b/docs/parity-checklist.md @@ -932,7 +932,7 @@ Latin stays upright. Advanced Japanese composition remains open. Regression cove | 2026-10-11 | minor | LR-IMP-FORMATS and LR-IMP-CAMERA-COVERAGE: EOS R5 Mark II CR3 decodes from sensor data (57% of its C-RAW files opened as a preview: QP-map escape); status unchanged (🟡) | | 2026-10-10 | minor | LR-VIEW-PHOTOGRID: retain queued stand-in identity while updating visible/prefetch priority; status unchanged. | | 2026-10-10 | patch | LR-BEHAV-UNDO: file/XMP repair retries and merged rename Undo/Redo evidence; status and summary counts unchanged. | -| 2026-10-10 | minor | Renamed from `parity.md` (progress-docs standard); Top gaps moved to gaps.md (its duplicated items 1–2 from a bad merge resolved there), shortcut notes moved to ui-parity.md. Rows unchanged; a recount of the rows gives 81.1% of 517 in-scope rows (P0 98.0%, P1 95.1%, P2 46.9%), so the generated summary above is due a `cargo xtask parity --write` | +| 2026-10-10 | minor | Renamed from `parity.md` (progress docs); Top gaps moved to gaps.md (its duplicated items 1–2 from a bad merge resolved there), shortcut notes moved to ui-parity.md. Rows unchanged; a recount of the rows gives 81.1% of 517 in-scope rows (P0 98.0%, P1 95.1%, P2 46.9%), so the generated summary above is due a `cargo xtask parity --write` | | 2026-10-14 | minor | LR-IMP-CAMERA-COVERAGE: 97 Canon CR2, Pentax and Ricoh Adobe models verified on one CC0 file each; status unchanged (🟡) | | 2026-10-13 | minor | LR-LIB-SMARTALBUM: `cmd:library.holdView` and `cmd:library.refresh`: a view can hold the photos it shows until it is refreshed; status unchanged (✅) | | 2026-09-30 – 2026-10-11 | — | Rows added and updated with each feature (see `git log -- docs/parity.md docs/parity-checklist.md`) | diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md index f2edebc24..92e9d343d 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -222,9 +222,9 @@ basic sliders, crop, apply a preset, undo, export JPEGs. ### Why the full number moved (55% → 46% → 59%) The first figure (~55%) was the feature depth "pulled down" by an unwritten judgement. A later pass -applied the mainstream discounts to it (~46%). The standard defines the full number as a weighted -sum over the dimensions, so it is now that sum with the weights written above: ~59%. Method aligned -with the standard, no new evidence. The stage stays **alpha**. +applied the mainstream discounts to it (~46%). The full number is a weighted +sum over the dimensions, so it is now that sum with the weights written above: ~59%. No new +evidence. The stage stays **alpha**. ## Stage @@ -268,7 +268,7 @@ verification. Calibrated on this repository's history (git log and GitHub PR ope The previous estimate (2026-10-02, kept below) was ≈ 270–505 h to full parity. It counted checklist rows only. New evidence since: the target's own lists (≈ 1,000 dedicated camera models, 3,635 lens profiles, 37 AI models, 16 languages) measured from the installed bundle; per-maker verification -counts; that CI tests only FreeBSD; and the standard's added dimensions (localization, stability, +counts; that CI tests only FreeBSD; and the added dimensions (localization, stability, platforms, ecosystem). The raw-codec package it estimated at 40–80 h took roughly that and closed most of its list; what remains is the data-heavy part (colour, lenses, models) it did not count. @@ -278,7 +278,7 @@ most of its list; what remains is the data-heavy part (colour, lenses, models) i |---|---|---|---|---| | 2026-10-12 | 81.1% (unchanged) | ~61% full · ~51% mainstream · ~65% essentials | unchanged | 22 more CR3 bodies verified (raw-parity.md) | | 2026-10-10 (RAW) | 81.1% (unchanged) | ~61% full · ~49% mainstream · ~64% essentials | unchanged | RAW measured model by model against Adobe's list; RAW decode and colour as explicit rows | -| 2026-10-10 (final) | 81.1% (unchanged) | ~59% full (weighted sum) · ~51% mainstream · ~63% essentials | full 1,000–1,800 h · mainstream 450–840 h · essentials 160–300 h | method aligned with the standard | +| 2026-10-10 (final) | 81.1% (unchanged) | ~59% full (weighted sum) · ~51% mainstream · ~63% essentials | full 1,000–1,800 h · mainstream 450–840 h · essentials 160–300 h | no new evidence | | 2026-10-10 (later) | 81.1% (unchanged) | ~46% full · ~51% mainstream · ~63% essentials | 1,000–1,800 h | full × discounts (superseded) | | 2026-10-10 | 81.1% / 98.0% / 95.1% / 46.9% (517 rows) | ~55% | 1,000–1,800 h | this re-measure | | 2026-10-08 | 79.7% / 98.2% / 95.6% / 41.6% (509 rows) | 60–70% | — | ROADMAP *Where we stand* | @@ -314,8 +314,8 @@ P2 items 12–25 h; look tuning, performance, packaging, hardening 25–45 h. | 2026-10-12 | minor | 117 Nikon and Fujifilm bodies verified (raw-parity.md): use-weighted share whose camera decodes 85% → 86%, RAW decoding 77% (unchanged); mainstream depth 72.1% → 72.4%, essentials depth 77.5% → 77.6%; headline numbers unchanged | | 2026-10-11 | minor | EOS R5 Mark II CR3 verified (raw-parity.md): use-weighted share whose camera decodes 84% → 85%, RAW decoding 76% → 77%; full 60.6% → 60.7%, mainstream depth 71.8% → 72.1%, essentials depth 77.4% → 77.5%; the rounded numbers (~61%, ~49%, ~64%) are unchanged | | 2026-10-10 | minor | RAW measured model by model (raw-parity.md): RAW decoding (76%) and colour (35%) are explicit rows of the full sum (59% → 61%); mainstream uses the use-weighted 84% plus a ×0.85 colour discount (51% → 49%); essentials uses 84% × colour 0.75 (63% → 64%); beta ~14 points | -| 2026-10-10 | minor | Full number restored to an additive weighted sum over the dimensions (~59%; method aligned with the standard, no new evidence); hours to ~95% for each of the three audiences; beta distance ~16 points | +| 2026-10-10 | minor | Full number restored to an additive weighted sum over the dimensions (~59%; no new evidence); hours to ~95% for each of the three audiences; beta distance ~16 points | | 2026-10-10 | minor | Added mainstream practitioner (~51%) and essentials user (~63%) numbers; full ready re-derived from written weights × discounts (55% → 46%); user-issue evidence; beta hours 340–600 | | 2026-10-10 | minor | Stage re-checked against the core-workflow alpha gate: passes, stays alpha | -| 2026-10-10 | major | Created per the progress-docs standard: full re-measure (checklist recount, installed Lightroom 9.6 bundle listing, code counts, catalogs, CI), feature areas with weights, dimensions, AI, stage, calibration; merged ROADMAP's *Where we stand* and *Parity estimate* | +| 2026-10-10 | major | Created as progress docs: full re-measure (checklist recount, installed Lightroom 9.6 bundle listing, code counts, catalogs, CI), feature areas with weights, dimensions, AI, stage, calibration; merged ROADMAP's *Where we stand* and *Parity estimate* | | 2026-10-14 | minor | RAW: 82% of Adobe's models decode, 36% verified (integration batch 36) | From da3d2c768c7bf706a04301a56ef71d989459c786 Mon Sep 17 00:00:00 2001 From: aiongg Date: Sat, 31 Oct 2026 04:26:44 +0000 Subject: [PATCH 3/3] docs: tidy wording --- crates/engine/src/guard.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/engine/src/guard.rs b/crates/engine/src/guard.rs index 4ab53179a..3149fa2ae 100644 --- a/crates/engine/src/guard.rs +++ b/crates/engine/src/guard.rs @@ -1,4 +1,4 @@ -//! Last-resort panic guard (never-crash standard, `AGENTS.md`): a panic that escapes a command +//! Last-resort panic guard (see `AGENTS.md`): a panic that escapes a command //! becomes that command's error and the session (catalog, library, undo history) stays usable. //! It's a safety net, not a way to report errors: commands return `Err` themselves.