Releases: nowo-tech/symfony-beacon
Release list
Release v1.24.5
docs(release): cut v1.24.5 changelog, upgrading, and roadmap.
Align AUTH-005 / QR docs with base enabled + prod overlay disabled.
Changelog
Fixed
- AUTH-005 docs: operator docs now match the real QR login split — base
qr_login.mode: enabled(local / PHPUnit / E2E); production disables viaconfig/packages/prod/nowo_auth_kit.yaml. CorrectedENGINEERING-AUDIT,API,UPGRADING, andROADMAP(they previously described a stalewhen@dev/when@testoverlay pattern).
Notes for integrators
- No Doctrine migrations and no Composer pin changes.
- After pull: no runtime steps. Prefer reading AUTH-005 / QR notes in API.md and ENGINEERING-AUDIT.md.
- See UPGRADING.md Upgrading from 1.24.4 to 1.24.5.
Release v1.24.4
docs(release): cut v1.24.4 changelog, upgrading, and roadmap.
Changelog
Changed
- Kit-over-shim (OTHER pass 40): HotReload 1.5.2, LoginThrottle 3.2.0, CookieConsent 1.9.7, Pwa 1.5.0. Deleted host shims now owned by kits:
AuthKitAwareLoginRateLimiter,PwaStatelessCookieSubscriber,PushServiceWorkerListener. Web Push uses kitservice_worker.web_push+ hostWebPushPresentation(title/body/tagin the push JSON); PWAcache_versionv8.
Notes for integrators
- No Doctrine migrations.
- After pull:
composer install. Soft-reload browsers so clients pick up the new service worker. Optional:bin/console nowo:hot-reload:checkin dev. - See UPGRADING.md Upgrading from 1.24.3 to 1.24.4.
Release v1.24.3
docs(release): cut v1.24.3 changelog, upgrading, and roadmap.
Align README/INSTALL/DSN/CONTRIBUTING/ARCHITECTURE and specs 058/100 with auto reload-env and beacon-suite DB/long-content kinds.
Changelog
Changed
- Dogfood DX:
make seed/make dogfood/make readycallreload-env-if-beacon-dsn-staleso php/messenger recreate when.env.localBEACON_DSNdiffers from the container (avoids ingest 401 after project recreate). Newmake reload-envrecreates without Vite. See DSN.md. make beacon-suite: adds kindsdb-sql,db-connection, andlong-content(Query facts / connection errors / truncation). Spec058FR-015.
Notes for integrators
- No Doctrine migrations.
- After pull: no env changes required for local dogfood. Prefer
make dogfood/make ready(auto reload). Manual:make reload-env. - See UPGRADING.md Upgrading from 1.24.2 to 1.24.3.
Release v1.24.2
docs(release): cut v1.24.2 changelog, upgrading, and roadmap.
HotReloadBundle 1.5.1 shared_worker, CSP inline nonce stamp, Redis AUTH outside local, and E2E slide-to-confirm PointerEvents.
Changelog
Changed
- Hot reload via HotReloadBundle 1.5.1: host config uses
auto_inject: true,client_mode: shared_worker(bundle-served/_nowo/hot-reload/*), Idiomorph + WDT/Twig Inspector preserve selectors. See FRANKENPHP-HOT-RELOAD.md. - CSP: stamps vendor inline
<script>tags with_beacon_csp_noncebefore setting the header; optionalapp.csp.connect_src_extra/app.csp.script_src_extraappend after Mercure origin.KitInlineConfigScriptSubscriberunchanged. - Shared Redis AUTH (REQ-INFRA-SHARED-003):
REDIS_PASSWORDin.env.dist/.env.e2e.dist/compose.infra.yaml(optional local; required outsidedev/test).SiteBackupSecurityDefaultsGuardrefuses boot when Redis has no AUTH (REDIS_PASSWORDempty and nopassinREDIS_URL). Never interpolate an empty password (redis://:@host). See SHARED-SERVER.md and PRODUCTION.md.
Fixed
- E2E: slide-to-confirm confirmed with in-page
PointerEvents (CI-friendly drag) instead of brittle host pointer injection.
Notes for integrators
- No Doctrine migrations.
- After pull:
composer install(pinsnowo-tech/hot-reload-bundle1.5.1require-dev). Outsidedev/test, setREDIS_PASSWORDand put the same password inREDIS_URL/MESSENGER_TRANSPORT_DSN(neverredis://:@host). Dev: optionalbin/console nowo:hot-reload:checkaftermake up. - See UPGRADING.md Upgrading from 1.24.1 to 1.24.2.
Release v1.24.1
docs(release): cut v1.24.1 changelog, upgrading, and roadmap.
Setup token default, versioned .env.e2e.dist, and compare-link fix for 1.24.0.
Changelog
Changed
- Setup token gate:
.env.distshipsSITE_SETUP_TOKEN=beacon-local-setup(same pattern as the FrankenPHP boilerplate)./setupwithout?token=returns 403 and the FormKit paste form even when the env var is empty (fallback to that documented local default; prod still refuses it). - Isolated E2E env template: versioned file is
.env.e2e.dist(sibling of.env.dist). Working file.env.e2e.localstays gitignored (cp .env.e2e.dist .env.e2e.local/make ensure-e2e-envoverlays shared infra from.env.local). Never commit.env.localor.env.e2e.local. Spec104.
Fixed
- CI Quality: restore PHPStan-clean / includable 100% coverage and Rector dry-run for issue 107 (Query panel / AI export branches).
Notes for integrators
- No Doctrine migrations.
- After pull: merge
SITE_SETUP_TOKENfrom.env.distinto.env.localif missing. For isolated E2E,cp .env.e2e.dist .env.e2e.localormake ensure-e2e-env(do not commit.env.local/.env.e2e.local). - See UPGRADING.md Upgrading from 1.24.0 to 1.24.1.
Release v1.24.0
docs(release): cut v1.24.0 changelog, upgrading, and roadmap.
AuthKit 1.20 security kits, ops ingest hardening (106), and SQL error context (107).
Changelog
Added
- AuthKit 1.20.0 with optional kits:
nowo-tech/slide-to-confirm-bundle1.1.0 (registration consent slider, profilegate; clear history in project Settings uses thedangerprofile),nowo-tech/device-intelligence-bundle1.1.1 (collect on AuthKit pages, new-device email, extra device-keyed rate limit on register/reset/magic, Account → Security → Trusted browsers), andnowo-tech/otp-input-bundleon/reset-password/complete(otp_input.enabled, multi-boxOtpType; server OTP checks unchanged). Device ID is not a credential; AuthKit never auto-trusts a device after login. QR approve stays a button (UC-AUTH-22). Cookiedi_obsis inventoried as required account-security. MigrationVersion20260824120000. Phone SMS verification remains ROADMAP Later. - Ops ingest hardening (
106): Redis-backedMessengerQueueHealthdepths forasync_ingest/async/failedon Ops overview and/metrics(beacon_messenger_failed_pending); cached daily/monthly event quota usage; one Envelope flush retry on unique-constraint races; batched retention purge (1000-row batches); sharedPrivateNetworkTargetSSRF helper for Mercure hub + outbound webhooks;app:project:api-key-legacy-secretsdry-run /--applyfor redundant Halite API-key ciphertext; EVENT-STORAGE.md growth stages. - SQL / database error context (
107): issue and event detail show a Query panel (SQLSTATE, vendor code, SQL, bindings) derived fromcontexts.db, extra, query breadcrumbs, or exception text. Stack opens the in-app frame.issue.culpritwidened to 255 (migrationVersion20260826120000on MySQL). AI export includes optionalquery. Sample seed issue #1 is a QueryException-like event. Companion BeaconBundle 1.8.0 attachescontexts.dbon PDO/DBAL exceptions. - Setup: paste
SITE_SETUP_TOKENthrough a FormKit GET gate on the setup wizard.
Changed
- Guest AuthKit layout loads slide-to-confirm, device-intelligence, and OTP-input assets; device collect boot uses the CSP nonce (vendor inline script would be blocked).
- Composer pins (
nowo-tech/*patch + FormKit minor): audit-kit 1.1.15, auth-kit 1.20.0, beacon-bundle 1.8.0, breadcrumb-kit 2.1.7, cookie-consent 1.9.6, dashboard-menu 2.1.10, device-intelligence 1.1.1, doctrine-encrypt 2.3.12, form-kit 2.5.2, http-log 1.1.5, login-throttle 3.1.4, maintenance-mode 1.5.7, migrations-kit 2.0.21, password-policy 1.4.3, password-strength 2.2.3, password-toggle 2.1.4, phone-input 1.3.3, pwa 1.3.3, routing-kit 1.4.4, select-all-choice 1.5.4, site-backup 1.13.8, tag-input 1.1.3, ui-kit 1.8.3, user-kit 1.1.9. Symfony 8.1.5 where that patch exists (console/form/framework/http-client/mailer/messenger/translation/uid/validator/yaml + browser-kit/css-selector/web-profiler). Dev: php-cs-fixer 3.95.22, composer-update-helper 2.0.36, hot-reload 1.4.2, phpstan-frankenphp 1.1.3, twig-inspector 1.1.4, phpstan 2.2.9. - Dashboard Menu 2.1.10: kit tags
SearchQueryTypeasform.type(withFormOptionsMerger); remove hostconfig/services/dashboard_menu.yamloverride that was required on 2.1.9. - FormKit 2.5.2: drop host
nowo_form_kit.type_map.search(built-in since 2.4.0); project clear history usesaddSlideToConfirmField()(mapped: falseis the type default). - Device collect while gated: MaintenanceMode excludes
/_device; PWAdeny_cache_patternsincludes/_device(cache_versionv6). SiteBackup documentssetup.short_circuit_when_done: true(1.13.7+ default — Beacon detectors must not re-open the wizard after done). - Member alert preference/event and push subscription timestamps use AuditKit
TimestampableTrait(not host-copied trait logic). - PHPStan / QA: empty baseline; no
ignoreErrorsinphpstan.neon.dist; injectable Clock / DNS / Halite FS seams for FrankenPHP rules; Rector semantic-only (CS-Fixer owns formatting); PHPUnit suite PHPStan-clean; includable coverage 100%. - Cookie consent embedded without a kernel sub-request (faster public pages).
- Prod Compose: Messenger Redis DSNs no longer use path
/messages(path is the stream name, not a DB index).
Fixed
- Mercure hub URL guard aligned with outbound webhook SSRF policy (
PrivateNetworkTarget; metadata targets always blocked). - Ops overview queue depth sourced from
App\Ops\Messenger\MessengerQueueHealth(Redis transports, including failed). - E2E: slide-to-confirm confirmed via pointer drag and keyboard in CI; flaky 403 navigation retries.
Notes for integrators
- Doctrine migrations:
Version20260824120000(device intelligence tables) andVersion20260826120000(issue.culprit→ VARCHAR(255) on MySQL). - After pull:
composer install,php bin/console doctrine:migrations:migrate -n,php bin/console assets:install(ormake ready),make seed-platform(cookie inventory fordi_obs), rebuild assets if you override kit templates (make vite-build). - Dogfood / client apps: pin
nowo-tech/beacon-bundle≥ 1.8.0 for structuredcontexts.dbon database exceptions. - PWA operators: deploy assets/SW so
cache_versionv6 picks up/_devicedeny-cache. - See UPGRADING.md Upgrading from 1.23.3 to 1.24.0.
Release v1.23.3
release: cut v1.23.3 (kit pins + prod hardening + E2E Messenger)
Document the nowo-tech pin refresh, when@prod kit lockdown, /admin ROLE_ADMIN catch-all, and isolated E2E Redis ?dbindex= / Compose env_file override.
Changelog
Changed
- Composer pins (
nowo-tech/*patch/minor refresh): audit-kit 1.1.14, auth-kit 1.17.4, beacon-bundle 1.7.7, breadcrumb-kit 2.1.6, cookie-consent 1.9.4, dashboard-menu 2.1.8, doctrine-encrypt 2.3.11, form-kit 2.4.4, http-log 1.1.4, login-throttle 3.1.2, maintenance-mode 1.5.6, migrations-kit 2.0.20, password-policy 1.4.2, password-strength 2.2.2, password-toggle 2.1.3, phone-input 1.3.2, pwa 1.3.2, routing-kit 1.4.3, select-all-choice 1.5.3, site-backup 1.13.6, tag-input 1.1.2, ui-kit 1.8.2, user-kit 1.1.8. Dev: hot-reload 1.4.1, twig-inspector 1.1.3, phpstan-frankenphp 1.1.2, composer-update-helper 2.0.35, php-cs-fixer 3.95.20, rector 2.6.3. Transitive:paragonie/sodium_compat2.5.2. - Prod kit hardening (
when@prod): HttpLog turns off JSON body capture, caps body size / export / retention (14d), and requiresROLE_ADMIN; MaintenanceMode disables anonymous 503 preview; SiteBackup disables/setup, enables password protection, and requiresROLE_ADMIN; Dashboard Menu reaffirms admin-only access. - Security access control: catch-all
^/admin→ROLE_ADMIN(defense in depth alongside per-bundle checkers; previously unmatched/admin/*fell through toROLE_USER).
Fixed
- Isolated E2E stack:
MESSENGER_TRANSPORT_DSNuses Redis?dbindex=N(path is the stream name, not the DB index).compose.e2e.yamlusesenv_file: !overrideand stops re-interpolatingDATABASE_URL/REDIS_URL/MESSENGER_TRANSPORT_DSN/BEACON_DSNfrom the process environment (empty or dogfood-sourced shell vars were wiping.env.e2e.local). MakeDC_E2Eforces Redis DSNs on the process env. Spec104/ REQ-MESSENGER-001.
Notes for integrators
- No Doctrine migrations.
- After pull:
composer install. - Production: SiteBackup setup UI is off (
setup.enabled: false); finish cold-start before flippingAPP_ENV=prod, or use CLI/make ready. HttpLog no longer stores JSON response bodies in prod (less forensics, less PII). Ensure operators who need kit admin UIs under/adminhaveROLE_ADMIN. - Local E2E: regenerate
.env.e2e.local(make up-e2e/ensure-e2e-env) so Messenger DSNs pick up?dbindex=.
Release v1.23.2
release: cut v1.23.2 (Rector 2.6.2 Symfony set constants)
Document the CI Quality fix: drop removed SymfonySetList::SYMFONY_81 and keep code-quality sets only.
Changelog
Fixed
- CI Quality: Rector 2.6.2 removed
SymfonySetList::SYMFONY_81.rector.phpno longer references per-version Symfony set constants; keepSYMFONY_CODE_QUALITY+ANNOTATIONS_TO_ATTRIBUTESonly (composer-based Symfony sets deferred — they would rewrite Autowire/eraseCredentials/Twig helpers). Spec091.
Notes for integrators
- No Doctrine migrations. No operator runtime steps beyond pulling
v1.23.2.
Release v1.23.1
release: cut v1.23.1 (pin refresh + update-deps helper)
make update-deps now runs composer-update-helper --run so exact pins move;
bump hot-reload 1.4.0, FormKit 2.4.1, password kits, Mercure 0.5.0, and Symfony 8.1.4.
Changelog
Changed
make update-deps: runsnowo-tech/composer-update-helpergenerate-composer-require.sh --run(rewrites exact pins incomposer.json) beforecomposer update+pnpm update. Preview still:make composer-outdated. Exact pins never move oncomposer updatealone.- Composer pins: Symfony 8.1.4 (console/form/framework/messenger/uid/validator/http-client/rate-limiter/redis-messenger/doctrine-messenger/translation + web-profiler);
doctrine/orm3.6.8;nelmio/api-doc-bundle5.11.1;symfony/mercure-bundle0.5.0 (host hubs stay protocol 0.x); FormKit 2.4.1; password-strength 2.2.0; password-toggle 2.1.1;nowo-tech/hot-reload-bundle1.4.0 (nowo:hot-reload:check+ profiler environment checks). Dev: php-cs-fixer 3.95.19, phpunit 13.3.1, rector 2.6.2. Frontend:@openai/codex-security^0.1.14.
Notes for integrators
- No Doctrine migrations. No production operator runtime steps.
- After pull:
composer install(andpnpm installif you rebuild assets). Dev: optionalbin/console nowo:hot-reload:checkaftermake up.
Release v1.23.0
release: cut v1.23.0 (kit polish + setup gate)
Ship hot-reload-bundle 1.3.2, drop the PWA install_links fork, close BP-004
audit gates, gate AuthKit until SiteBackup setup finishes, and the PhoneInput
theme bridge (Phase 6.56).
Changelog
Changed
- Platform OTHER 100% close: BP-004 boundary script asserts
SqlLikeEscaper+ ProjectEXTRA_LAZY; ENGINEERING-AUDIT records hot-path query inventory (REV-003) and kit Twig fork inventory (REV-004); removed host forktemplates/bundles/NowoPwaBundle/pwa/install_links.html.twig(vendor + SCSS BEM + Preferences hint). Matrix: Beacon column no remaining⚠️ /❌. - FrankenPHP hot reload client:
nowo-tech/hot-reload-bundle1.3.2 (Twig Extra runtime; Twig@NowoHotReloadBundleprofiler panel, CSP nonce via_beacon_csp_nonce,csp_augment_script_src, WDT). Host config only sets the nonce attribute (bundle defaults for the rest). Removed host Vite/Twig Idiomorph client and always-on jsDelivr in debug CSP. See FRANKENPHP-HOT-RELOAD.md. - Setup gate: SiteBackup no longer excludes AuthKit
/login//register(or localized twins). First admin is created in the wizard (admin_user) or viamake ready/ CLI — not a public register flow on an incomplete catalog (056FR-014). - PhoneInput theme bridge: host
_phone_input.scssremaps kit Bootstrap tokens to Beacon--color-*/data-theme(no Twig/JS fork). Rebuild assets after pull (make vite-build).
Notes for integrators
- No Doctrine migrations.
- After pull:
composer install(pinsnowo-tech/hot-reload-bundle1.3.2,require-dev) andmake vite-build(PhoneInput theme bridge). - Cold-start: finish
/setup(ormake ready) for the first admin. Existing instances withsetup_completed_atare unchanged.