# IPZ Table lifecycle

- **ID:** IPZ-TABLE-LIFECYCLE-2026-08-15
- **Status:** IDLE
- **Task:** Delivery 5 Table lifecycle slice
- **Source request:** Implement the smallest complete lifecycle convergence for canonical `Table` in international-press-zone directly, without delegation, external models, or skills. Do not land.

## Outcome and acceptance criteria

`Table` preserves its existing public API, rendering, accessibility, DOM identity, and caller behavior. Idempotent `mount()`, `update(next)`, and `destroy()` are added only where the existing stateful table rendering contract needs them. Focused tests prove compatibility, keyed and content updates, root identity, repeated lifecycle operations, listener cleanup, and remount. Inventory and report records truthfully describe the component. Focused tests, the full admin suite, lint, production build, inventory/gate, and the dependency-ready factory gate pass. The result is committed locally only.

## Constraints

- Start from current `origin/master`; preserve unrelated work.
- Do not modify unrelated components or pages.
- Preserve public API, table rendering/accessibility, DOM identity, and caller behavior.
- Do not delegate, invoke skills, or use external models.
- Do not land.

## Execution steps

1. Read the Delivery 5 lifecycle contract, existing Table implementation/tests, lifecycle references, inventory/report tooling, and callers.
2. Implement the smallest truthful lifecycle contract and focused tests.
3. Regenerate required records and production assets.
4. Run all requested gates with dependencies installed.
5. Commit a terse local message without landing.

## Current receipt

`origin/master` was fetched before work. `Table` was found to be stateless: `render()` creates detached presentation only, and `createRegionView()` supplies the `DataRegion` adapter while `DataRegion` exclusively owns mounting, subscriptions, keyed reconciliation, listener cleanup, DOM removal, and remount. Adding lifecycle methods to `Table` would create a second owner and break R-UI-4, so no production API was added. The inventory was corrected from self-owned factory handle to stateless. Focused Table/DataRegion coverage now proves keyed content updates and stable row identity, repeated mount root identity, listener cleanup, idempotent destruction, and safe remount.

`npx vitest run tests/table-region.test.js` passed (28 tests). The full admin suite passed (48 files, 660 tests); JavaScript lint and production build passed. Inventory check passed (123 modules, zero direction violations), and UI gate passed. Composer and locked admin dependencies were installed. `COMPOSER_PROCESS_TIMEOUT=1200 bash tools/factory-gate.sh all` passed after installing the admin dependencies in the actual worktree; its initial failure was environmental because the isolated gate process had installed dependencies only in its build copy, leaving the worktree unable to resolve `mini-css-extract-plugin`. Test logs that intentionally simulate failures are expected fixtures, not warnings. The only installer notices were optional dependency funding notices. The repository hook's root-manifest, PHP-path, Trivy, and Composer-audit notices were scope/environment notices; plugin-local JavaScript, PHP, Composer, and factory checks had already passed. The latest local commit contains the slice and must not be landed.

## Next executable action

No worker is active. Retain the local commit without landing it unless a later request changes scope.
