# TDD Log

## Platforms Phase 2

### RED — frozen package contract

- Added the exact 117 byte-registration contract from `SURFACE_MANIFEST.tsv`.
- Added the exact 73 manifest provider contract plus three package-owned IBM
  provider relocations required to avoid ICU Archive ownership collisions.
- Added one-transaction application lifecycle, restart, asset, package-license,
  and Specs-independence expectations before implementation.

Command:

```text
ICONVEX_PATH=../iconvex mix test test/package_contract_test.exs
```

Result: **4 tests, 4 failures**. The package facade/provider relocation API did
not exist and the package metadata retained only the root LGPL license.

### GREEN — exact package, runtime, and artifact contracts

Implementation discovery found seven additional IBM runtime dependencies hidden
behind the three manifest-visible hazards. All ten were copied into package-owned
provider IDs rather than retaining an `Iconvex.Archive` dependency.

The completed contract is:

- 117 canonical codec registrations.
- 237 aliases and 354 unique registry names.
- 84 package-owned table providers: 73 manifest providers, 10 relocated IBM
  providers, and the standalone glibc IBM423 provider.
- No runtime `Iconvex.Specs` reference and no `Iconvex.Archive` dependency.
- Five package-owned IBM additional-code-page maps; the DEC 1287/1288 source
  maps remain repository test/research inputs and are excluded from the Hex
  artifact.

Verification:

```text
ICONVEX_PATH=../iconvex mix test --seed 0
# 194 tests, 0 failures

ICONVEX_PATH=../iconvex mix test --seed 424242
# 194 tests, 0 failures

MIX_ENV=prod ICONVEX_PATH=../iconvex mix compile --warnings-as-errors
# success
```

The CP1090, Evertype source-qualified, and VietUnicode VNI benchmark contract
tests all passed their 30x native/reference ceiling and scaling gates. Observed
worst ratios in the recorded quick runs were 5.161x, 2.168x, and 1.15x,
respectively.

The final local-only Hex dry build completed with publishing disabled:

```text
env -u ICONVEX_PATH MIX_ENV=prod mix hex.build
# iconvex_platforms-0.1.0.tar
# 181 packaged entries; 84 packaged table providers
```

The final artifact digest is recorded in the release handoff rather than inside
this packaged log, which avoids a self-referential checksum. No package was
published and no branch was pushed.

### RED/GREEN — Core extension API floor

Integration established that `Iconvex.Extension` first ships in Core 0.1.1. A
package contract was added before changing the dependency:

```text
ICONVEX_PATH=../iconvex mix test test/package_contract_test.exs
# 4 tests, 1 failure: expected ~> 0.1.1, found ~> 0.1.0
```

Both the released and `ICONVEX_PATH` dependency branches now require
`iconvex ~> 0.1.1`; the contract and complete suite pass.
