# 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.
