From 19c6f0c03cc64b61d47f6cde64df7729f20b87d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Leite?= Date: Wed, 29 Jul 2026 22:15:00 -0300 Subject: [PATCH] =?UTF-8?q?docs:=20close=20the=20roadmap=20page's=20releas?= =?UTF-8?q?e-history=20gap=20(v0.2.20=20=E2=80=93=20v0.2.49)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The site's roadmap narrates post-1.0 work in version bands — v0.1.4–v0.2.5, v0.2.6–v0.2.13, v0.2.14–v0.2.19 — and then stopped. The v0.2.51 refresh appended a paragraph with no band, which papered over thirty releases and left a reader thinking nothing shipped between the private-image work and now. Three things that did ship were missing entirely: step-up MFA, self-healing against external container changes, and the Activity section. Two bands added, checked against news.md rather than memory, plus a fix to the new paragraph's attribution: it credited scheduled ETL jobs to the latest work, but those shipped in v0.2.43, so they moved into the band where they belong. The final paragraph deliberately carries NO version band. Every candidate was wrong or self-ageing: a closing band would have to name the current release and go stale, and "latest"/"most recent" is exactly the trap that left `v0.2.x · latest` sitting in the roadmap diagram until this session. Co-Authored-By: Claude Opus 5 (1M context) --- book/src/roadmap.md | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/book/src/roadmap.md b/book/src/roadmap.md index 4b3413b..4ea33c2 100644 --- a/book/src/roadmap.md +++ b/book/src/roadmap.md @@ -181,12 +181,32 @@ error + exit code instead of a generic "no port binding". Plus catalog cards expand their description on hover, and the dashboard's stop/restart actions show in-progress feedback. -**Operations and delegated administration.** The Admin panel now runs -scheduled, run-to-completion ETL jobs with history and alerting. Cron is -evaluated on the IANA wall clock selected by `server.timezone`, preserving -UTC when the setting is absent; the Schedules page uses that same clock. -Other persisted admin timestamps stay in UTC and are converted in the -browser to each viewer's timezone. +**Migration fidelity, performance and citation (v0.2.20 – v0.2.44).** +Bringing a real ShinyProxy catalog across drove import fidelity +(`container-volumes`, logos ingested into the Media library) and a +performance audit whose sharpest finding was the live dashboard: it held an +SSE connection open, which starved the browser's per-origin connection pool +where a reverse proxy served Ruscker beside another app on one hostname, so +it moved to polling a snapshot endpoint. Apps also became cold-start by +default, the Admin panel gained scheduled, run-to-completion ETL jobs with +run history, log tails and failure alerting, and the project became citable +with a DOI archived per release. + +**Reliability and identity (v0.2.45 – v0.2.49).** Step-up two-factor +authentication can be required per app, with recovery codes and +trusted-device grants. The scaler learned to self-heal when a container +changes outside Ruscker — an external `docker rm -f` or an OOM kill no +longer leaves a dead app behind — reconciling from an authoritative +liveness check rather than assuming absence means stopped. A new Activity +section records who logged in and who opened which app, captured off the +proxy's hot path. + +**Timezones and delegated administration.** Cron is no longer read on the +UTC clock: `server.timezone` names the IANA zone the scheduler evaluates +expressions in, and the Schedules page labels firing times in that same +zone. Leaving it unset preserves the historical UTC behaviour, so upgrading +never moves an existing job. Other persisted admin timestamps stay in UTC +and are converted in the browser to each viewer's own zone. Editor delegation is row-scoped from current group memberships across Applications, Users, and Groups. Open apps remain available to every