Skip to content

docs: plan 0.9.0, and correct how the 0.8.0 image defects escaped CI - #3

Merged
AlexMercedCoder merged 1 commit into
mainfrom
docs/0.9.0-roadmap
Aug 11, 2026
Merged

docs: plan 0.9.0, and correct how the 0.8.0 image defects escaped CI#3
AlexMercedCoder merged 1 commit into
mainfrom
docs/0.9.0-roadmap

Conversation

@AlexMercedCoder

Copy link
Copy Markdown
Owner

Adds ROADMAP_0.9.0.md, documents the v0.8.0 tag/image discrepancy as accepted rather than fixing it in place, and corrects a misdiagnosis I merged in #2.

The correction first

#2 said the four image defects escaped "because the docker job builds images and does not exercise what it built." That is wrong. The docker job builds the API image, starts it, probes its shutdown grace, and fails if it runs as root.

The real gap is narrower and more useful: it is the only image CI touches. Dockerfile.tools and pangolin_ui/Dockerfile are never built in CI at all — which is exactly why all four defects were in those two images and none in the API image. The wrong diagnosis would have produced the wrong remedy.

v0.8.0 tag vs image

--version was added to the CLIs after the tag was cut, so released binaries reject it while the image accepts it. One help flag; no functional, data, or security difference. Not corrected in place — re-cutting a published tag is the one thing a version number exists to prevent, and build_docker_sequential.sh already refuses the equivalent for images. Documented in docs/known-issues/v0.8.0-tag-image-drift.md and resolved by roadmap item R2.

The 0.9.0 plan

Bucket Lead item
1. Authorization authz.rs:39 returns Ok(true) for any TenantAdmin on any scope. PermissionScope carries no tenant, so the check cannot be performed without a lookup it never does. Reachability across 41 call sites is unverified — the most important item in 0.9.0.
2. Release integrity CI must build and run all three images; the release must verify artefacts match the tag; publishing must move off a laptop.
3. Multi-replica Rate limiting and pending OAuth logins are both per-process — N replicas give N× the configured limit.
4. Backend parity 59 store-trait methods default to a runtime "Operation not supported". This is how cloud-credential features once shipped without ever compiling.
5. Ratcheted debt clippy 30 → 0; 0 of 90 UI components use Svelte 5 runes (legacy mode is a deprecation clock).
6. Ops hygiene Plaintext root password in .env, the GitHub OIDC asymmetry, the GHSA decision.

Explicitly not in 0.9.0: re-cutting v0.8.0, and 1.0.0 — a multi-tenant catalog should not call itself 1.0 with an unverified cross-tenant authorization path.

Verification

Every figure in the roadmap ships with the command that produces it, and all were re-run immediately before commit: 41 call sites, 59 defaults, 0/90 components, 10 TODOs, both ratchet budgets, and all four named TODO line numbers.

🤖 Generated with Claude Code

Adds ROADMAP_0.9.0.md and documents the v0.8.0 tag/image discrepancy as a
known, accepted issue rather than fixing it in place.

Corrects a misdiagnosis I merged in the previous PR
--------------------------------------------------
STATUS.md and CHANGELOG.md both said the four image defects escaped "because
the `docker` job builds images and does not exercise what it built." That is
wrong. The `docker` job builds the API image, starts it, probes its shutdown
grace and fails if it runs as root — a genuine test.

The actual gap is narrower and more actionable: it is the *only* image CI
touches. `Dockerfile.tools` and `pangolin_ui/Dockerfile` are never built in CI
at all, which is precisely why all four defects were in those two images and
none in the API image. Fixing the wrong diagnosis would have produced the wrong
remedy, so both files now say what actually happened, and R1 in the roadmap
closes the real hole.

The v0.8.0 tag/image drift
--------------------------
`--version` was added to the CLIs after the tag was cut, so the released
binaries reject `--version` while the container image accepts it. Impact is one
help flag; no functional, data or security difference. Not corrected in place
because re-cutting a published tag is the one thing a version number exists to
prevent — and the release script already refuses the equivalent for images, so
the tooling should not hold a stricter standard than the people using it.
Resolved in 0.9.0 by R2, which also adds the guard that would have caught it.

ROADMAP_0.9.0.md
----------------
Six buckets, ordered by what would hurt most if left undone:

1. Authorization — `authz.rs:39` returns Ok(true) for any TenantAdmin on any
   scope, and PermissionScope carries no tenant, so the check cannot be done
   without a lookup it never performs. Reachability across the 41 call sites is
   unverified. This is the most important item in 0.9.0.
2. Release integrity — CI must build and run all three images; the release must
   verify artefacts match the tag; publishing must move off a laptop.
3. Multi-replica — rate limiting and pending OAuth logins are both per-process.
4. Backend parity — 59 store-trait methods default to a runtime "not supported".
5. Debt with ratchets already in CI — clippy 30 to 0, and 0 of 90 UI components
   use Svelte 5 runes.
6. Operational hygiene — plaintext root password, the GitHub OIDC asymmetry,
   the GHSA decision.

Every figure in the roadmap was confirmed against main with the command shown
beside it, and each was re-run before commit: 41 call sites, 59 defaults, 0/90
components, 10 TODOs, both ratchet budgets, and all four named TODO lines.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@netlify

netlify Bot commented Aug 11, 2026

Copy link
Copy Markdown

Deploy Preview for lustrous-pithivier-968b22 ready!

Name Link
🔨 Latest commit 06e7938
🔍 Latest deploy log https://app.netlify.com/projects/lustrous-pithivier-968b22/deploys/6a7ba4e1d6c8d60008ae98e4
😎 Deploy Preview https://deploy-preview-3--lustrous-pithivier-968b22.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@cursor

cursor Bot commented Aug 11, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@AlexMercedCoder
AlexMercedCoder merged commit f3378f8 into main Aug 11, 2026
22 checks passed
@AlexMercedCoder
AlexMercedCoder deleted the docs/0.9.0-roadmap branch August 11, 2026 22:48
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