Goal
Migrate the model layer from pluginever/framework-model to byteever/models (b8) as an isolated release ahead of the framework swap. The model migration is the highest-risk change in the b8 transition (silent query-result regressions), so it ships first, alone, on stable master with the public contract frozen — single suspect, clean rollback target. This also de-risks the later framework release, which will then touch zero model files.
Version
release/2.3.5 off master (2.3.4). Contract-frozen, user-invisible internal change.
Sequencing context
- 2.3.5 (this) — framework-model → b8 models, bytekit-plugin still booting, namespace frozen.
- 2.4.0 (next) — framework swap to b8 plugin, built on top of this (stacked, not rebased).
- @next — namespace rename + REST + reorg.
In scope
Out of scope (kept for later releases)
- Framework swap (stays bytekit-plugin) · namespace rename · REST API ·
deprecated.php consolidation.
Release gate
- Baseline + Contract + equivalence + pagination tests green.
- Built-zip admin smoke test (the build swap's failure surface).
- 4-way matrix with shipped pro zips (1.4.6, 1.5.0); specifically exercise the key export tool (the one direct
Key::query consumer, the paged path).
- Before tagging: cut
byteever/models 1.0.0, pin it (drop dev-trunk).
Commit order
src/ → includes/ move + autoload
- test harness + baseline suite + ContractTest (green on framework-model)
- composer: byteever/models + Strauss
- model migration (Model/Key/Activation)
- equivalence + pagination tests (green on b8 models)
- build swap (esbuild/sass/autoprefixer)
Goal
Migrate the model layer from
pluginever/framework-modeltobyteever/models(b8) as an isolated release ahead of the framework swap. The model migration is the highest-risk change in the b8 transition (silent query-result regressions), so it ships first, alone, on stable master with the public contract frozen — single suspect, clean rollback target. This also de-risks the later framework release, which will then touch zero model files.Version
release/2.3.5offmaster(2.3.4). Contract-frozen, user-invisible internal change.Sequencing context
In scope
src/ → includes/consolidation (pure move; namespace unchanged; dropsrc/from composer autoload). Aligns layout with the framework release so it inherits the layout conflict-free.tests/phpunit-baseline, bytekit-native harness) + theContractTestfromrelease/2.4.0. Establishes "where we are" before migrating.byteever/models(dev-trunk for now) + Strauss config; convertModel/Key/ActivationfromLib\Modelto b8Model.wcsn_*public functions andKey::query()callable with the same args (incl.paged, now honored by the package). No schema change — same tables, columns, cache groups.postcss-cli --use autoprefixer(browserslist in package.json, no extra config file).Key, identical results) and pagination (Key::query(['paged'=>N])advances).Out of scope (kept for later releases)
deprecated.phpconsolidation.Release gate
Key::queryconsumer, thepagedpath).byteever/models 1.0.0, pin it (drop dev-trunk).Commit order
src/ → includes/move + autoload