mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 20:42:43 +00:00
The per-account preview switch was kept for the topic overview pages, which were dropped before they shipped. Its one flag was stored, served and backed up, and read by nothing; the column-reader audit listed it as a pending consumer that will not come. Removed completely: - `/api/settings/preview-features` (GET, PATCH) is retired: it answers 410 Gone with `meta.errorCode: route.retired` and `removedIn: 1.46.0`, and the contract publishes it under Retired. The route, its validation schema, the `PreviewFeatures` OpenAPI schemas and the settings module are deleted. - Migration 0485 drops `users.preview_features_json` under a bounded lock wait, with the retry marker. - The backup no longer writes the field. A file from v1.44 or v1.45 that carries it still restores: the schema accepts it and no codec reads it, so nothing is refused or written for it. The backup-parity goldens lose the field and apply one setting fewer. - The data-wipe plan entry and the sharing-surface actor entry go with the route (frozen count 273 -> 272). No client build reads the route: neither iOS repository nor any local checkout references it.
28 lines
1.1 KiB
SQL
28 lines
1.1 KiB
SQL
-- Drop the per-user preview-feature opt-ins.
|
|
--
|
|
-- `users.preview_features_json` (0440) stored one flag, `topics`, for the
|
|
-- topic overview pages. Those pages were dropped before they shipped, so no
|
|
-- surface ever read the flag; `/api/settings/preview-features` is retired
|
|
-- with this release and answers 410.
|
|
--
|
|
-- What is lost is a switch that switched nothing. A backup written by a
|
|
-- release that still had the column carries the field, and the restore
|
|
-- accepts and ignores it.
|
|
--
|
|
-- Dropping a column takes an ACCESS EXCLUSIVE lock on `users` for a catalogue
|
|
-- update only (no rewrite). The lock wait is bounded so a long-running reader
|
|
-- cannot queue every sign-in behind this statement; the deploy retries a
|
|
-- timed-out attempt.
|
|
--
|
|
-- Reversibility: re-adding the nullable column restores the shape; every
|
|
-- account then reads as all flags off, which is what every account had.
|
|
--
|
|
-- @retry-on-lock-timeout
|
|
|
|
DO $migration$
|
|
BEGIN
|
|
PERFORM set_config('lock_timeout', '5s', true);
|
|
ALTER TABLE "users" DROP COLUMN IF EXISTS "preview_features_json";
|
|
END
|
|
$migration$;
|