Packages

Pure Elixir ICU-derived encoding extensions for Iconvex

Current section

Files

Jump to
iconvex_icu TDD_LOG.md
Raw

TDD_LOG.md

# Iconvex ICU TDD log
## Cycle 1 — generated table plane
RED: five package tests failed because no current-ICU table plane, provider
ownership, generated wrappers, or exact registration inventory existed.
GREEN: generated 191 codec wrappers and copied 191 package-owned tables plus
four family manifests. The application now installs the codec and provider
surfaces in one `Iconvex.Extension` transaction.
## Cycle 2 — custom ICU implementations
RED: four tests demonstrated that JIS7/JIS8, all twelve LMBCS groups, six
Unicode variants, and X11 Compound Text were absent.
GREEN: migrated the 21 implementation codecs and seven runtime assets into the
`Iconvex.ICU` namespace with a package-local, digest-verifying runtime-asset
loader and no `Iconvex.Specs` runtime reference.
## Cycle 3 — exact family metadata and exhaustive mappings
RED: the four generated families lacked their public revision, source,
exclusion, aggregate-digest, entry, and codec metadata.
GREEN: added package-local family façades and source-pinned verification.
Independent tests execute 689,977 decoder-domain cases and 691,381 canonical
encoder mappings across all generated tables.
## Cycle 4 — original test-data migration
RED: the extracted package did not carry the original source fixtures and
family-specific suites.
GREEN: ported the ICU 78.3 SBCS, multibyte, EBCDIC-stateful, `swaplfnl`, JIS,
LMBCS, Unicode-variant, and Compound Text tests and fixtures. The `swaplfnl`
suite exposed an archive-only metadata dependency for `ibm-924`; its extracted
test now reconstructs the base mapping directly from the pinned UCM source,
proving the package remains archive-independent.
## Cycle 5 — transactional and release contract
RED: application priority allowed a late codec collision to start partially,
and release metadata omitted Crypto, the full LGPL text, current package
documentation, and this evidence log.
GREEN: the leaf now claims priority 200 during copy-first migration, a late
collision rolls all 212 routes and 191 providers back, stop/restart is exact,
the runtime is Specs-free, and the Hex selectors retain every runtime,
benchmark, license, manifest, and evidence asset.
## Verification snapshot — 2026-07-30
- `mix test --warnings-as-errors --seed 0`: 72 tests, 0 failures.
- Generated-plane check: all 191 tables, four family manifests, and seven
custom runtime assets are byte-identical to their frozen inputs.
- Production compilation: 10 package files, warnings as errors, clean.
- Hex build retained all 212 codec registrations and 191 provider tables and
remained below the 8 MB hard ceiling.
- This host has no `uconv`, ICU headers, or `pkg-config` ICU entry, so it could
not rerun the native-vs-ICU C oracle. The checked benchmark evidence and
executable 30x/linear gates remain in `BENCHMARKS.md` and `bench/`; release
CI must rerun them on the pinned ICU 78.3 benchmark host.