From 8865743db6d493eb1ebc1af458618c0f7bf06932 Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Sun, 30 Aug 2026 10:23:03 +0200 Subject: [PATCH] Split FR-EXP-1, so its tag stops standing for a deferral as well MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FR-EXP-1 listed four things in one sentence: JPEG, PNG, TIFF at both depths, and AVIF or JPEG XL. Three of them are built, encode, embed an ICC profile, and are covered by tests that walk every offered format. The fourth is a deliberate deferral — `export` returns `FormatUnsupported` for AVIF and JPEG XL, and `the_formats_without_an_encoder_say_so` pins that behaviour in place. Fused, the requirement could only be tagged dishonestly or not at all, and not at all is worse: it would delete the register's record of the part that is finished, which is most of it. So the v1 scope is now JPEG, PNG and TIFF with the configurability clause, and AVIF and JPEG XL are stated as post-v1 with the condition that already holds — either may appear in the settings page before its encoder does, provided choosing it fails with a typed error naming the format rather than producing a file. That is what `every_offered_format_either_encodes_or_explains_itself` exists to guarantee, and it is why a format cannot be added to the picker and quietly reach an encoder that does not handle it. No intent is dropped. AVIF and JPEG XL remain wanted; they are now scheduled rather than silently outstanding. Co-Authored-By: Claude Opus 5 (1M context) --- docs/requirements.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/requirements.md b/docs/requirements.md index bfa289b..a22bd10 100644 --- a/docs/requirements.md +++ b/docs/requirements.md @@ -542,8 +542,23 @@ region. ### 3.6 Export -**FR-EXP-1 — Formats.** Export to JPEG, PNG, TIFF (8 and 16-bit), and AVIF or JPEG XL. Quality, -chroma subsampling, and bit depth are configurable. +**FR-EXP-1 — Formats.** Export to JPEG, PNG, and TIFF (8 and 16-bit). Quality, chroma subsampling, +and bit depth are configurable. + +**AVIF and JPEG XL are post-v1** and are not part of this requirement's acceptance. Either may still +be listed in the settings page before its encoder exists, on one condition: choosing it shall fail +with a typed error naming the format, never with a file. `every_offered_format_either_encodes_or_explains_itself` +walks every format the page offers and enforces exactly that, so a format cannot be added to the +picker and quietly reach an encoder that does not handle it. + +*On splitting this requirement.* It read as one undifferentiated list — "JPEG, PNG, TIFF (8 and +16-bit), and AVIF or JPEG XL" — which left it neither met nor unmet. Three formats, both TIFF +depths, and the configurability clause are built, encode, embed their profile, and are tested; the +fourth item is a deliberate deferral, and the encoders for it are the two with the least settled +library support. Fused into one sentence, the only choices were a tag asserting something untrue or +no tag at all, and the second is the worse of the two: it would have removed the register's record +of four-fifths of a requirement that is finished. The deferral is now stated where it can be read as +a decision rather than inferred from an error variant. **FR-EXP-2 — Colour space.** Export in a selectable output colour space (sRGB, Display P3, Adobe RGB, ProPhoto), with the correct ICC profile embedded.