# TDD migration log

The Standards extraction was performed copy-first against
`SURFACE_MANIFEST.tsv`, with the package contract written before runtime code.

## RED

- `mix test test/package_contract_test.exs`: 4 tests, 3 failures. The Standards
  public module, packed facade, and required assets did not exist.
- First run of 32 mechanically migrated source suites: 197 tests, 42 failures.
  These identified the retired `Iconvex.Specs` namespace, missing package
  assets, and assumptions about codecs assigned to other leaf packages.
- Second migrated-suite run: 197 tests, 10 failures. Remaining failures were
  narrowed to exact package metadata and cross-leaf ownership assumptions.
- First combined package run: 210 tests, 1 failure. This exposed omitted
  `declared_canonical` and `source` provenance in generated registrations.

## GREEN

- Final combined run: 210 tests, 0 failures under `--warnings-as-errors`.
- Exact contract: 248 byte registrations, 205 table providers, five packed
  profiles, four property mappings, two raw transports, and two quarantined
  catalog entries.
- Provider traversal checks every `one`, `many`, and canonical `encode` mapping.
- Algorithmic coverage includes 13,069 ISCII vectors, all 65,536 TACE-16 words
  in both byte orders, all valid odd-width source units in both bit orders, and
  all 7,236 kGB3 property/GL rows.
- Application tests verify stop/restart symmetry and force a table-provider
  conflict to prove transactional rollback.
- Runtime sources contain no `Iconvex.Specs` or `:iconvex_specs` reference.
- The production build is warning-free. The roughly 3.82 MB Hex archive
  contains 371 files, no repository-only PDF scans or cross-leaf source tables,
  and recompiles successfully after extraction.
- The KOI8-C quick benchmark passed four oracle/parity gates; the Punycode
  benchmark passed all CPython ratio and reduction-scaling gates.

The release verification commands are:

```console
mix format --check-formatted
elixir tools/generate_surface_module.exs --check
mix test --warnings-as-errors
MIX_ENV=prod mix compile --warnings-as-errors --force
mix hex.build
```
