Repository navigation
Retire cozystack-ui: migrate open issues/PRs into the monorepo, then archive #3097
Description
Retire cozystack-ui: migrate open issues/PRs into the monorepo, then archive
Context. PR #2963 (merged 2026-06-26, 01addfc26) vendored the cozystack-ui console SPA into the monorepo at packages/system/dashboard/images/console/. The build no longer fetches the old repo; only the shipped image name (cozystack-ui) and immutable changelog entries still reference it, both intentionally. The standalone repo still has 2 open PRs and 14 open issues that must move here before it is archived.
New home for all UI work: packages/system/dashboard/images/console/.
Principles
- Preserve authorship and discussion; credit original authors (
Co-authored-by). - Use the monorepo's coarse label taxonomy. The old per-area labels (
area/console|forms|vm|auth|tenants) collapse toarea/dashboard;area/container→area/build.kind/*andpriority/*carry over verbatim. - Order: migrate PRs → migrate issues → update doc/CONTRIBUTING pointers → archive. Issues cannot be transferred out of an archived repo, so archive last.
Label mapping
| cozystack-ui label | monorepo label |
|---|---|
area/console, area/forms, area/vm, area/auth, area/tenants |
area/dashboard |
area/container |
area/build |
kind/bug, kind/feature, kind/cleanup |
same |
priority/backlog, priority/important-soon |
same |
security |
confirm monorepo equivalent before applying |
Granularity loss is expected — the monorepo deliberately uses one
area/dashboardfor the whole UI. If sub-area tracking is wanted later, propose new labels via PR perAGENTS.md(extend.github/labels.yml+pr-labeler.yaml).
Part 1 — Open PRs (2): re-apply (GitHub cannot transfer PRs)
For each: re-create the diff onto the new in-tree path, open a fresh monorepo PR with Co-authored-by: the original author, link back to the original, then close the original with a pointer. Verify each is still needed against the merged in-tree code first.
| old PR | author | title | path remap | size | note |
|---|---|---|---|---|---|
| #34 | IvanHunters | fix(k8s-client): redirect to oauth2-proxy on 401 |
packages/k8s-client/src/client.ts → …/images/console/packages/k8s-client/src/client.ts |
+18/-0, 1 file | trivial; confirm in-tree client.ts still lacks the 401 handler |
| #26 | lexfrei | refactor(forms): validate the schema form before page-level checks |
apps/console/src/routes/Backup*CreatePage(.test).tsx → …/images/console/apps/console/… |
+92/-20, 8 files | scope already reduced to validation-ordering (the VMDisk/StorageClass parts were obsoleted by #30, which is in the merged snapshot); re-verify against in-tree pages |
Part 2 — Open issues (14): transfer + relabel
Mechanism (decided): gh issue transfer <N> cozystack/cozystack — preserves comments, author, and leaves a redirect from the old URL. Caveat: transfer drops labels not present in the target, so re-apply the mapped labels immediately afterward.
Triage: KEEP = migrate as-is. VERIFY = check whether the merged snapshot already resolves it before migrating.
| old # | title | mapped labels | triage |
|---|---|---|---|
| 42 | chore(deps): refresh npm dependencies with published security fixes | area/dashboard, priority/important-soon, security |
KEEP — re-scope to the in-tree pnpm workspace; fold into Renovate/Scorecard coverage |
| 41 | Console nginx default client-header buffers → HTTP 400 on large OIDC tokens | area/build, kind/bug, priority/important-soon |
KEEP |
| 39 | App detail Services tab: connection FQDN with configurable domain suffix | area/dashboard, kind/feature, priority/backlog |
KEEP |
| 38 | App detail Services tab does not show external LoadBalancer IP | area/dashboard, kind/bug, priority/important-soon |
KEEP (distinct from the #2963 enabled-gate fix) |
| 37 | Child tenants see no default VM images (picker reads cozy-public PVCs directly) | area/dashboard, kind/bug, priority/important-soon |
KEEP |
| 36 | VM create form: cannot add a disk until the page is refreshed once | area/dashboard, kind/bug, priority/backlog |
VERIFY — likely fixed by the #30 DynamicOptionsWidget refactor already in-tree |
| 35 | Cluster create form: cilium/coredns shown among toggleable addons w/o toggle | area/dashboard, kind/cleanup, priority/backlog |
KEEP |
| 33 | Capacity drill-down pages show generic error instead of 403-specific copy | area/dashboard, kind/cleanup, priority/backlog |
KEEP |
| 32 | Tenant picker shown on cluster-scoped /admin pages | area/dashboard, kind/bug, priority/backlog |
KEEP |
| 31 | humanizeBytes renders Ki-range sizes as raw bytes | area/dashboard, kind/bug, priority/backlog |
KEEP |
| 14 | Surface underlying Pod and HelmRelease events in application detail view | area/dashboard, kind/feature, priority/backlog |
KEEP |
| 10 | immutable-paths: array reorder re-anchors source values to new indices | area/dashboard, kind/bug |
KEEP |
| 9 | immutable-paths: overlay does not materialise an immutable leaf when ancestor missing | area/dashboard, kind/bug |
KEEP |
| 8 | immutable-paths: walker should descend into oneOf/anyOf/allOf branch properties | area/dashboard, kind/bug |
KEEP |
Part 3 — Doc/process pointers to repoint before archive
docs/storage-immutability.md:13→ linkcozystack/cozystack-ui#6(fixed in cleanup PR B).- cozystack-ui
README/ CONTRIBUTING: add a banner "Development moved to cozystack/cozystack — file issues and PRs there", link the monorepo dashboard path. - Any "report UI bugs here" links in monorepo docs/website pointing at the old tracker.
Progress — 2026-06-26
Migration executed. Old cozystack-ui#N → new monorepo issue #M:
| old | new | old | new | old | new |
|---|---|---|---|---|---|
| #8 | #3101 | #31 | #3105 | #37 | #3110 |
| #9 | #3102 | #32 | #3106 | #38 | #3111 |
| #10 | #3103 | #33 | #3107 | #39 | #3112 |
| #14 | #3104 | #35 | #3108 | #41 | #3113 |
| #36 | #3109 | #42 | #3114 |
All 14 carry mapped labels (area/dashboard, or area/build for #3113; kind/*/priority/*/security/triage/accepted retained on transfer). #3109 (was #36) keeps its own "verify against current main" request — the disk-array-add symptom still needs a runtime repro before closing. cozystack-ui now has 0 open issues.
PRs re-applied (originals closed with pointer comments):
- cozystack-ui#34 → fix(dashboard): re-authenticate on 401 instead of failing silently #3115 (
fix(dashboard): 401 → oauth2-proxy redirect),@IvanHuntersviaCo-authored-by. - cozystack-ui#26 → refactor(dashboard): validate the schema form before page-level checks #3116 (
refactor(dashboard): validate before page-level checks),@lexfreiviaCo-authored-by.
Sequencing checklist
- Re-apply PR [mariadb-operator] Update operator to support maxscale #34 → fix(dashboard): re-authenticate on 401 instead of failing silently #3115; original closed
- Re-apply PR Fix gitignore #26 → refactor(dashboard): validate the schema form before page-level checks #3116; original closed
- Transfer all 14 issues + re-apply labels (
#36→#3109kept as-is with its verification note) - [~] Repoint doc pointers —
storage-immutability.mdfixed in build(dashboard): pin console image builder to pnpm 11.1.2 and repoint vendor doc link #3099 (pending merge); README banner blocked by the cozystack-ui branch ruleset, so relying on GitHub's archive notice instead - Archive
cozystack/cozystack-ui(repo admin — user action, last step)
Activity
docs: point to the monorepo; this repo is being archived
docs: point to the monorepo; this repo is being archived
refactor(dashboard): validate the schema form before page-level checks (
fix(dashboard): re-authenticate on 401 instead of failing silently (#…