# IPZ Button lifecycle

- **ID:** IPZ-BUTTON-LIFECYCLE-2026-08-15
- **Status:** IDLE
- **Task:** Delivery 5 Button lifecycle slice
- **Source request:** Add the smallest complete lifecycle convergence for the canonical Button primitive in international-press-zone.

## Outcome and acceptance criteria

`Button` retains its public exports, option handling, generated markup, classes, accessibility attributes, DOM identity, and click semantics. Its returned button exposes idempotent `mount()`, `update(next)`, and `destroy()` methods. Focused tests cover compatibility, in-place updates, repeated operations, cleanup, remount, disabled state, and action semantics. UI inventory records Button as a lifecycle-owning factory handle. Required reports and generated production assets agree with source.

## Constraints

- Start from current `origin/master`; preserve unrelated work.
- Do not change unrelated components or pages and do not land the commit.
- Preserve public behavior, DOM identity, accessibility, and existing event semantics.
- Read landed Input, Textarea, Select, FormField, Badge, ProgressBar, and Modal source/tests before editing.

## Execution steps

1. Read reference sources, lifecycle tests, inventory tooling, and existing Button behavior.
2. Add the smallest lifecycle contract to Button and focused lifecycle coverage.
3. Regenerate inventory/report records and production assets.
4. Run focused tests, full admin suite, lint, production build, inventory/gate, and full dependency-ready factory gate.
5. Commit locally with a terse message; do not land.

## Current receipt

Current `origin/master` is `54f038191`. Button now owns idempotent `mount()`, `update(next)`, and `destroy()` lifecycle methods without replacing its DOM node. Its focused lifecycle test passed (4 tests). With fresh Composer and admin dependencies, the full admin suite passed (47 files, 654 tests), lint passed, and the production build completed successfully. Inventory reports were regenerated; architecture tests passed (43 tests), inventory `--check` passed (123 modules, no direction violations), and `ui-gate` passed (9 changed files, no new violations). The full `COMPOSER_PROCESS_TIMEOUT=1200 bash tools/factory-gate.sh all` gate passed after the final Button implementation adjustment, including PHP syntax, PHP tests, baseline checks, PHPStan, admin lint/build, and UI architecture verification. The local commit contains the verified slice and is not landed.

## Next executable action

No implementation worker is active. The verified staged change is ready for the requested local commit; it must not be landed.
