Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
61b31ae
docs(readme): describe each crate as it is, not as it was scaffolded
justin13888 Sep 9, 2026
275640a
chore(check-readme-crates): gate the crates table's membership
justin13888 Sep 9, 2026
80a545a
fix(readme): correct claims an adversarial review falsified
justin13888 Sep 9, 2026
2fb38c2
fix(readme): make every crate row true of its crate, not of its STATU…
justin13888 Sep 10, 2026
ee1af59
fix(readme): name the traits gamut-core actually declares
justin13888 Sep 10, 2026
a91f0d1
fix(check-readme-crates): reject a row a blank or a fence hides
justin13888 Sep 10, 2026
c34ec3e
ci(check-readme-crates): run the crates-table guard in Format & Metadata
justin13888 Sep 10, 2026
91efa86
fix(readme): name only the construct each crate actually ships
justin13888 Sep 10, 2026
eb8cae5
fix(readme): stop reading a missing release tag as a missing publish
justin13888 Sep 10, 2026
85b0e3d
fix(check-readme-crates): assert the delimiter row and cargo's own ch…
justin13888 Sep 10, 2026
703afc5
style(readme): group the umbrella's 14 non-format re-exports honestly
justin13888 Sep 10, 2026
1c21dc2
fix(readme): credit each construct to the crate that declares it
justin13888 Sep 10, 2026
d424cf4
fix(check-readme-crates): assert the table head, not a delimiter some…
justin13888 Sep 10, 2026
be7f80f
docs(agents): gamut-deflate depends on nothing, not on gamut-core
justin13888 Sep 10, 2026
b733c8b
fix(check-readme-crates): judge the section, and the claims cargo set…
justin13888 Sep 10, 2026
626004a
fix(readme): derive the table's crate lists, and drop the figures not…
justin13888 Sep 10, 2026
2f4d7b1
docs(agents): gamut-core is not a dependency of every crate in the list
justin13888 Sep 10, 2026
6a5a0bf
fix(check-readme-crates): settle the feature and crate names a cell w…
justin13888 Sep 10, 2026
b1967f9
style(readme): write the three feature claims in the checked form
justin13888 Sep 10, 2026
ba8d411
fix(check-readme-crates): require the backticks the name checks assume
justin13888 Sep 10, 2026
5161eee
feat(check-readme-crates): judge the section, and mark the claims car…
justin13888 Sep 10, 2026
2250605
fix(readme): state the umbrella's feature graph as it is
justin13888 Sep 10, 2026
f9d2947
test(check-readme-crates): commit the guard's fixture battery
justin13888 Sep 10, 2026
b33c7bc
fix(check-readme-crates): read a sub-heading inside the section too
justin13888 Sep 10, 2026
9c35d7b
docs(check-readme-crates): correct two claims the script header makes…
justin13888 Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ jobs:
run: mise run check-ffi-features
- name: Release dependency graph
run: mise run check-release-deps
- name: README crates table
# Static: `cargo metadata --no-deps` (the same call the step above makes) plus awk over
# README.md. Nothing is built and nothing is fetched. A drift guard that runs nowhere
# cannot guard against drift, so it runs here beside the other three static checks.
run: mise run check-readme-crates
- name: Test conventions (docs/testing.md)
# Static: greps the tree, builds nothing, sub-second. Enforces that every integration-test
# file names what it pins, that every proptest configuration pins its seed and disables
Expand Down
14 changes: 8 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,16 @@ Dependency edges (a crate depends on those to its right):
`cmm`, `codec-abi`, `all`); `default = []`. `primitives` re-exports shared `color`/`dsp`/`bitstream`;
`isobmff`/`metadata`/`tonemap`/`codec-abi` re-export their respective primitive crates;
`all` includes all of these.
- **gamut-core** — `Encoder`/`Decoder` traits, image buffers, `Dimensions`, `Error`, plus the
- **gamut-core** — `EncodeImage`/`DecodeImage` traits, image buffers, `Dimensions`, `Error`, plus the
format-agnostic `convert` module: the one place any `Pixel` layout converts to another
(grey↔RGB, alpha add/drop/composite, 8↔16-bit), lossless by default with loss opted into per
decoder via a `ConvertPolicy`. Format crates decode to what the file carries and delegate the
layout change there rather than hand-rolling it. No internal deps; everything else depends on it.
layout change there rather than hand-rolling it. No internal deps of its own; each entry below
states its own edges, and most — not all — of them include `gamut-core`.
- **gamut-color** / **gamut-dsp** / **gamut-bitstream** — shared primitives. ← core.
- **gamut-tonemap** — scalar tone-mapping curves (`ToneCurve` + Reinhard/ACES/Hable/Drago)
for HDR→SDR pipelines, between `gamut-color`'s transfer functions and the SDR re-encode.
← core.
- **gamut-tonemap** — scalar tone-mapping curves for HDR→SDR pipelines: the `ToneCurve` trait
over eight operators (Linear/Clamp/Exposure/Reinhard/ReinhardExtended/ACES/Hable/Drago),
between `gamut-color`'s transfer functions and the SDR re-encode. ← core.
- **gamut-codec-abi** — shared codestream-backend seam: `repr(C)` vtables
(`DecoderVTable`/`EncoderVTable` + `StreamConfig`/`EncodeConfig`/`ImageDesc`) and their
object-safe Rust twin traits, plus the registry fallback contract by which a foreign
Expand Down Expand Up @@ -64,7 +65,8 @@ Dependency edges (a crate depends on those to its right):
decode itself is out of scope here). Differential oracle: libheif+libde265 (+kvazaar
fixture generation), dev-only. ← isobmff, core, color.
- **gamut-deflate** — pure-Rust DEFLATE/zlib **encoder** (zopfli-class) under gamut-png;
deliberately encoder-only — workspace decoders inflate via `miniz_oxide`. ← core.
deliberately encoder-only — workspace decoders inflate via `miniz_oxide`. ← nothing: no dependency
at all, not even `gamut-core` (`src/lib.rs:6`).
- **gamut-png** — PNG codec (3rd edition, W3C): space-efficient encoder and spec-compliant
decoder — all colour types/bit depths, Adam7 *decoding*, all filters, decode limits for
hostile input, ancillary metadata surfaced as raw `MetadataBlock`-ready payloads
Expand Down
Loading
Loading