Skip to content

fix: follow-ups from the review of the R9lab rename changes - #453

Merged
simonvanlierde merged 24 commits into
mainfrom
fix/review-2026-10-13
Oct 14, 2026
Merged

simonvanlierde merged 24 commits into
mainfrom
fix/review-2026-10-13

Conversation

@simonvanlierde

Copy link
Copy Markdown
Contributor

Follow-ups from a review of the 13 October changes (#420 to #452): rename leftovers, deploy safety and a few UI fixes.

  • Deploy:
    • A compose_project helper replaces about 20 hard-coded r9lab_<env> names.
    • The rename guard also refuses while the old stack runs or its uploads are not copied.
    • just stack keeps quoted arguments whole.
    • A restore that fails mid-replay leaves the API stopped.
    • images-verify trusts the old repository name only for sha-8697ebf, the image prod runs now.
  • Backend:
    • The legacy rpi-cam admin path is gone. The device and user paths stay until 2027-01-31.
    • Dataset salts need at least 32 characters, and the old salt variable is no longer read.
    • The encryption prefix and salt fingerprint are pinned by tests.
  • CI and infra:
    • Trivy waivers are scoped to the caddy binary, checked against the prod app image.
    • A new check_todo_dates.py in check-root fails on expired or undated compatibility TODOs. Every compatibility TODO is now TODO(drop-by YYYY-MM-DD).
    • The zone tests pin the camera paths literally.
  • Docs and frontend:
    • The CHANGELOG now has the feat(deploy)!: rename the deployment identifiers to r9lab #445 upgrade steps.
    • The rename window steps can be re-run, and the host move is written down once.
    • The base Input placeholder meets 4.5:1.
    • Scalar colours meet 4.5:1 on all three backgrounds.
    • www keeps a visitor's saved theme across the key rename.

Tests: just check, check-root, policy-check, cloudflare-check and test-scripts pass locally, and test_ops.sh passes 239/239. I ran the rename window's steps 4 and 5 against throwaway volumes and Postgres 18. Backend integration and the full app and docs suites run here in CI.

- TODO(drop-by 2027-01-31) on every infra TODO and the smoke-redirects default
- README says when to flip and then delete legacy_zone_name
- zone allowlist is the set of infra/cloudflare-zone/<zone>.tfvars files
- camera skip test reads local.camera_plugin_paths instead of a second list
- add paths: usr/bin/caddy to every waiver so backup and postgres image scans still report them
- state why the net/http Range DoS is accepted: file_server answers Range requests over HTTP/1.1
- add a drop-by TODO ahead of the 2026-11-01 expiry, which would block image publishing
- fail on TODO(drop-by YYYY-MM-DD) dates in the past, and on compat TODOs without a date
- fail on trivyignore entries with neither paths nor purls
- run it from check-root, which CI already calls
…ed changes

- breaking upgrade steps for self-hosters, ssh aliases and developers
- images-verify wording, removed duplicate env var and salt fallback, restore behaviour
- removed legacy admin path and the role-less restore fix
…he host move

- volume copy fails fast, refuses while relab containers run and fails on a size mismatch
- database and role renames run only if the old name exists
- the prod host move guards each step
- prod and staging link to the install guide instead of repeating the window
- fix the timers step number, a stale checkout path and the telemetry host note
- retitle the user guide and sidebar labels
- date the rpi-cam redirects and the schema pin TODO to 2027-01-31
- Mount the pre-rename /plugins/rpi-cam prefix only for the camera and user routes;
  no client calls the admin routes there
- Test that /v1/admin/plugins/rpi-cam/... is a 404 while the current admin path answers
- Pin the device assertion audience strings paired cameras sign with
- Date the rename compatibility TODOs as TODO(drop-by 2027-01-31)
- Reject salts shorter than 32 characters: the salt fingerprint is public, so a short
  salt could be guessed offline from it
- Read the salt only from R9LAB_PSEUDONYM_SALT; drop the RELAB_PSEUDONYM_SALT fallback
- Pin the fingerprint of a known salt and the encrypted-value prefix, so changing either
  fails a test instead of a release or every stored secret
* fix/review-ci:
  ci: add a lint for expired and undated compat TODOs
  ci(trivy): scope caddy waivers to the caddy binary
* fix/review-infra:
  chore(infra): date the shim TODOs and derive allowed zones from tfvars
* fix/review-docs:
  docs: name the camera pages r9cam and date the compatibility notes
  docs(deploy): make the rename window resumable and keep one copy of the host move
  docs(changelog): add the deployment rename upgrade steps and unreleased changes
* fix/review-backend:
  refactor(scripts): reuse the parsed CITATION.cff for codemeta and zenodo output
  fix(backend): require a 32-character dataset pseudonym salt
  fix(backend): stop serving r9cam admin routes on the legacy path
- refuse up, migrate, rollback and backups while a relab_<env> container
  runs or while either data volume (database_data, user_uploads) exists
  only under the old project name
- leave the API stopped when a restore fails, and print the command that
  starts it; the database is only partly restored then
- pass `just stack` arguments through "$@" so a quoted argument with
  spaces stays one argument
- trust the CMLPlatform/relab signer in images-verify only for sha-8697ebf,
  the one published tag built before the repository rename, and verify
  every other tag against a single repository
- build every Compose project name through compose_project() in the
  scripts and project_prefix in the justfile, with a test that no script
  spells out -p r9lab_
- drop RELAB_ENVIRONMENT: every r9lab-backup image reads R9LAB_ENVIRONMENT
- rename the env policy check's throwaway project to r9lab_env_policy, and
  note why the relab-backup hostname, .relab-volume marker, relab_unaccent,
  otel.cml-relab.org and the old role prefix in the roles smoke stay
- placeholder:text-input painted the stroke grey (4.03:1 on the card); pass tokens.text.placeholder like TextInput
- date the r9cam service-name compat TODO
- raise the secondary text mix to 72% and darken light-mode orange, yellow and red
- assert the 24px target-size fixes in the API reference e2e
- read relab-theme when r9lab-theme is unset
- format the hero date in UTC so it does not depend on the build host zone
- remove the font-size that duplicated .section h3
* fix/review-frontend:
  fix(www): keep saved theme, build date in UTC, drop duplicate h3 size
  fix(docs): clear 4.5:1 on Scalar background-3
  fix(app): use the AA placeholder token in ui Input
* fix/review-deploy:
  fix(deploy): tighten the rename guard, restore and stack passthrough
- Changelog: name the one tag that still verifies against the old repository, and add the stack quoting and rename guard fixes
- A failed restore leaves the API stopped
- The rename guard waits for both volumes and the old stack to be down
- Restore restarts the API when it fails before the replay touches the database
- The TODO lint matches only upper-case TODO, drops "delete" as a keyword and reports invalid dates
- The caddy re-check TODO falls due with the waivers' own expiry, so it cannot block PRs earlier
- The zone test pins the r9cam and legacy camera paths literally
- The staging host move keeps the uv sync steps
- The stack recipe docs list the compose action
@codecov

codecov Bot commented Oct 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@simonvanlierde
simonvanlierde merged commit 1273137 into main Oct 14, 2026
23 checks passed
@simonvanlierde
simonvanlierde deleted the fix/review-2026-10-13 branch October 14, 2026 12:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant