# Changelog ## 0.9.0 - 2026-08-23 First release candidate. - Froze the long-form public API and ordinary rendering defaults for the planned 1.0 release, except for serious defects. - Recast the user-facing status from prototype/prepublication audit to release candidate without changing the rendering engine. - Finalized Jonathan LAFARGE as author, copyright holder and CTAN maintainer. - Kept LPPL maintenance status `author-maintained`. - Clarified that CTAN repository, bug-tracker and support URLs are optional communication metadata and are not blockers for the release candidate. - Re-checked CTAN package-name availability on 2026-08-23; no package named `integramme` was found. - Retained the Einstein preset, AI-assistance acknowledgement and all regression coverage from 0.8.1. - Kept valid-document rendering unchanged. ## 0.8.1 - 2026-08-23 Einstein-example and authorship-metadata update. - Added a complete manual example based on the classic five-houses / Einstein riddle variant described by French Wikipedia; clue wording is independently paraphrased and the source page is cited. - Added `preset=einstein` with `preset-language=en|fr`. The preset preloads six categories, fifteen clues, the final question and the complete solution. - Added `example-einstein.tex`. - Replaced the collective author/copyright placeholder with Jonathan LAFARGE. - Recorded Jonathan LAFARGE as the intended CTAN maintainer while keeping LPPL status `author-maintained` until a public error-report channel is selected. - Added a transparent AI-assistance acknowledgement: OpenAI ChatGPT, model GPT-5.6 Sol, was used during the current development cycle. - Added regression coverage for the preset interface and defaults. - Kept the ordinary user-defined rendering engine unchanged. ## 0.8.0 - 2026-08-23 Prepublication-audit release. - Audited the candidate public command/environment/key surface against the implementation; no candidate-stable public name was changed. - Documented the default value of every public configuration key. - Added regression tests for the public API surface and for configuration defaults. - Added XeTeX to the `l3build` regression engines, alongside pdfTeX and LuaTeX. - Added `CTAN.md`, `RELEASE.md`, `ANNOUNCEMENT.md` and a static release-audit script to the development tree. - Added an explicit CTAN catalogue-description draft and recorded the remaining human metadata blockers instead of inventing maintainer/repository details. - Corrected prototype LPPL metadata from `maintained` to `author-maintained`: no public error-report contact has yet been selected, so claiming maintained status would be premature. - Added an explicit LPPL/work notice to the documented source and DocStrip preamble. - Removed two unused internal storage variables left over from early prototypes. - Kept the rendering engine unchanged for valid documents. ## 0.7.0 - 2026-08-23 Testing and hardening release. - Expanded the `l3build` regression suite from a minimal smoke test to coverage of the canonical API, legacy compatibility syntax, option scoping, rich label content, representative puzzle sizes, warnings and every package-defined error path. - Fixed validation-state handling: errors detected while categories/items are declared are now preserved until the environment closes, so invalid input is never drawn accidentally. - Duplicate category declarations now mark the current puzzle invalid in addition to issuing the diagnostic. - Category identifiers are trimmed before storage and comparison. - Added an explicit diagnostic for an empty category identifier. - Empty item identifiers are now intercepted before the kernel key-value parser, so users receive an `integramme`-specific diagnostic instead of a generic key-value error. - Added an explicit diagnostic for `cell-size<=0pt`, preventing division by zero or invalid geometry in the layout engine. - Reduced cascaded diagnostics by skipping solution/manual-mark validation after a structural validation failure. - Kept the candidate public API unchanged. - Kept the rendering engine unchanged for valid documents. ## 0.6.0 - 2026-08-23 Documentation and distribution-architecture release. - Added `integramme.dtx` as the documented package source and user manual. - Added `integramme.ins` for DocStrip extraction of `integramme.sty`. - Added `build.lua` with unpack, documentation, test and CTAN-build settings. - Added a structured user manual covering installation, the data model, clues, modes, manual marks, solution rows, all public configuration keys, compatibility syntax, diagnostics and current limitations. - Added minimal examples for blank, manual and solution modes. - Added a small `l3build` regression-test suite as a foundation for later expansion. - Kept the candidate public API from 0.5 unchanged. - Kept the rendering engine from 0.5 unchanged. - Declared LPPL 1.3c or later in the distribution metadata. ## 0.5.0 - 2026-08-23 Public-API stabilization release. - Established `category=item` as the recommended reference notation. - `\IntegrammeYes` and `\IntegrammeNo` now accept the recommended form `\IntegrammeYes{category=item}{category=item}` while preserving legacy `category/item` references. - `\IntegrammeSolutionRow` now supports keyed, order-independent rows such as `category=item,category=item,...`. - Keyed solution rows are normalized internally to category declaration order. - Added validation for unknown, duplicate, and missing categories inside keyed solution rows. - Retained positional `\IntegrammeSolutionRow` and the compact `\IntegrammeSolution` syntax for backward compatibility. - Declared the long-form commands as the candidate stable API for 1.0; short `\Int...` aliases remain compatibility/convenience aliases. - Added `API.md` documenting the candidate public contract. - No drawing or layout behavior was changed. ## 0.4.0 - 2026-08-23 Robustness release. - Added separate internal item identifiers and printed labels using the syntax `id={printed label}` inside `\IntegrammeCategory`. - Printed labels may safely contain commas, slashes, mathematics and LaTeX formatting commands when the identifier syntax is used. - Added `\IntegrammeSolutionRow` / `\IntSolutionRow` for row-by-row solution declaration. - Kept the 0.3 category shorthand and legacy `\IntegrammeSolution` syntax for backward compatibility. - Added solution validation for unknown item identifiers and duplicate use of an item inside the same category. - Added empty-category and duplicate-item checks. - Added an optional warning when the puzzle width exceeds the current `\linewidth` (`overflow-warning=true` by default). ## 0.3.0 - 2026-08-23 - Added `mode=manual`. - Added `\IntegrammeYes` and `\IntegrammeNo` plus short aliases. - Added manual-reference validation and conflict detection. - Added configurable `mark-font`. ## 0.2.2 - 2026-08-23 - Added a short vertical stem before slanted header guides. - Added `guide-stem-height`. ## 0.2.1 - 2026-08-23 - Centered slanted top labels between adjacent guides. - Added `\IntegrammeIndices` and clue-list settings. ## 0.2.0 - 2026-08-23 - Introduced the staircase layout based on the requested reference design. - Added side and top category headers and automatic horizontal/slanted labels. ## 0.1.0 - 2026-08-23 - Initial prototype.