skillhub/web
青柠 2d50437e4f feat(namespace): backfill personal namespaces for existing accounts
Turning provisioning on only affects accounts activated afterwards, which
on a registry that has already been running means nobody. The first person
to hit this on our deployment was the operator who enabled it: they signed
in, got no namespace, and had no way to find out why.

Two fixes.

Backfill. POST /api/v1/admin/settings/personal-namespace/backfill walks the
active accounts and gives a namespace to those without one, skipping system
accounts and anyone who already owns a non-global namespace. Details worth
knowing:

- dryRun reports the plan — each account and the slug it would take —
  without writing. The console requires a preview before it will enable the
  apply button.
- The response lists only accounts that changed or could not be placed;
  the rest are counted, so an operator reads the work rather than the whole
  directory.
- A run stops at a per-run account cap and reports truncated rather than
  looking like it covered everything.
- Slugs promised earlier in a run are reserved, so one batch cannot hand
  the same slug to two accounts.
- Not @Transactional: each namespace is created in its own transaction, so
  an account that cannot be placed does not discard the rest of the run.

Diagnosability. The skip paths — provisioning disabled, account already owns
a namespace, no slug available — were silent returns, which is why "nothing
happened and I cannot tell why" was the actual user experience. They now log
their reason; account activation is rare enough that the extra lines cost
nothing.
2026-08-15 01:11:51 +08:00
..
docker-entrypoint.d feat(web): support configurable base-path deployment 2026-08-05 12:50:26 +08:00
e2e fix(publish): delete review tasks of any status when replacing a version (#601) 2026-07-28 13:57:35 +08:00
public feat(auth): add GitLab OAuth2 provider support (#264) 2026-04-17 19:56:32 +08:00
src feat(namespace): backfill personal namespaces for existing accounts 2026-08-15 01:11:51 +08:00
.browserslistrc fix(web): restore compatibility with Chromium 83 (Debian 10) 2026-05-09 13:55:50 +08:00
.dockerignore feat(ops): improve Dockerfile caching, add dockerignore, docker profile, Makefile help 2026-03-12 17:50:34 +08:00
.eslintrc.cjs refactor: address code review findings from 2026-03-22 2026-03-23 13:48:23 +08:00
base-path-config.test.ts feat(web): support configurable base-path deployment 2026-08-05 12:50:26 +08:00
base-path-config.ts feat(web): support configurable base-path deployment 2026-08-05 12:50:26 +08:00
components.json feat(web): implement login page, dashboard, and API token management 2026-03-12 00:13:50 +08:00
Dockerfile feat(web): support configurable base-path deployment 2026-08-05 12:50:26 +08:00
index.html fix(web): stop React 19 portal removeChild/insertBefore crashes (#624) 2026-08-04 13:59:37 +08:00
LANDING_PAGE_REDESIGN.md feat(web): redesign homepage with modern landing page 2026-03-12 22:27:58 +08:00
nginx.conf.template feat(web): support configurable base-path deployment 2026-08-05 12:50:26 +08:00
package.json fix(web): stop React 19 portal removeChild/insertBefore crashes (#624) 2026-08-04 13:59:37 +08:00
playwright.config.ts feat(promotion): improve promotion review dashboard 2026-06-24 09:28:43 +08:00
playwright.smoke.config.ts test(e2e,ci): migrate web e2e to real API and add PR e2e workflow (#198) 2026-04-01 14:41:23 +08:00
pnpm-lock.yaml fix(web): stop React 19 portal removeChild/insertBefore crashes (#624) 2026-08-04 13:59:37 +08:00
postcss.config.js feat(web): implement login page, dashboard, and API token management 2026-03-12 00:13:50 +08:00
PREVIEW.md docs: add landing page preview guide 2026-03-12 22:28:31 +08:00
runtime-config.js.template Add extensible auth compatibility layer for private SSO 2026-03-13 18:00:22 +08:00
tailwind.config.ts feat: support Unicode characters in skill slugs (#196) 2026-03-31 10:17:34 +08:00
TODO.md fix(web): fix i18n language switching and add translations 2026-03-13 13:42:57 +08:00
tsconfig.json fix(web): isolate ambient types (ISSUE-92) 2026-07-29 10:44:49 +08:00
vite.config.ts feat(web): support configurable base-path deployment 2026-08-05 12:50:26 +08:00