Skip to content

mini-console: design + Slice 0 runnable skeleton - #5

Merged
wolpert merged 1 commit into
mainfrom
slice0/mini-console-skeleton
Jun 19, 2026
Merged

mini-console: design + Slice 0 runnable skeleton#5
wolpert merged 1 commit into
mainfrom
slice0/mini-console-skeleton

Conversation

@wolpert

@wolpert wolpert commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

What this is

Graduates mini-console from roadmap placeholder to a runnable, admin-only skeleton, plus the design docs that scope the whole effort. ./gradlew build is green family-wide.

Design docs (docs/design/)

  • mini-console.md — full design: the two faces (operator console + end-to-end exercise harness), five new HTTP client libs + reuse of the existing mini-kms client, the security model ("no new authority"; the one new downstream-token concentration), and a slice-by-slice roadmap.
  • mini-console-slice0.md — the Slice 0 implementation plan (source-cited).
  • DIRECTION.md — records mini-kms's client as the deliberate socket-era exception: relocating it into libs/mini-kms-client was designed and independently reviewed (mechanically clean) but declined — cosmetic parity for real churn in three shipping services.

Slice 0 (services/mini-console/)

  • Loopback HTTP server (virtual-thread-per-request).
  • Paste-the-console-token login minting a mini-token SessionService session under a distinct mini-console-session cookie (never the shared SSO cookie).
  • An honest Dashboard: n/a — client not wired yet (Slice N) for each service; calls nothing downstream and fabricates no health data.
  • Reuses the family http/ router kit + JsonStore + AdminAuthenticator + Cookies verbatim.
  • No-oracle login (wrong vs missing token indistinguishable), double-submit CSRF on both POSTs, loopback bind, no secrets in logs, session store written 0600.

The trip-wire fires by design

Deletes MiniConsole.IMPLEMENTED (referenced only by the guard test) and MiniConsoleTest, replacing them with real ConsoleServer/ConsoleConfig tests — the module can no longer claim "placeholder."

Honest seams / deliberately NOT here

  • libs/mini-client-common is deferred to Slice 1, so its API is driven by its first real consumer (the directory client) rather than landing as an unconsumed abstraction.
  • /api JSON surface + OpenAPI/SwaggerUI are Slice 8.
  • The console adds no new authority — Slice 0 holds only its own bootstrap console token (env/file, never argv, never logged).

Verification

  • ./gradlew build — BUILD SUCCESSFUL, family-wide; 14 console tests pass, no pre-existing regressions.
  • ./gradlew :services:mini-console:installDist produces bin/mini-console.
  • Smoke: /health public; / → 302 → /login unauthenticated; CSRF+token login → 302 → /; authenticated Dashboard renders console-admin + "client not wired yet"; token absent from logs; console-sessions.json written 0600.

🤖 Generated with Claude Code

Graduate mini-console from roadmap placeholder to a runnable, admin-only
skeleton, and add the design docs that scope the work.

Design docs (docs/design/):
- mini-console.md — full design: operator console + exercise harness, five
  new HTTP client libs + reuse of the existing mini-kms client, the security
  model, and a slice-by-slice roadmap.
- mini-console-slice0.md — the Slice 0 implementation plan.
DIRECTION.md records mini-kms's client as the deliberate socket-era
exception (relocation considered and declined).

Slice 0 (services/mini-console/):
- Loopback HTTP server (virtual-thread-per-request), paste-the-console-token
  login minting a mini-token SessionService session under a distinct
  mini-console-session cookie, and an honest Dashboard ("n/a — client not
  wired yet" for each service; calls nothing downstream).
- Reuses the family http/ router kit + JsonStore + AdminAuthenticator +
  Cookies; no-oracle login, double-submit CSRF, loopback bind, no secrets in
  logs, session store written 0600.
- Fires the trip-wire: deletes MiniConsole.IMPLEMENTED (guard-only) and
  MiniConsoleTest, replaced by real ConsoleServer/ConsoleConfig tests.
- build.gradle.kts -> application-conventions (deps: mini-token + jackson
  only). settings.gradle.kts stale "roadmap placeholder" comment fixed.

mini-client-common is intentionally deferred to Slice 1 (driven by its first
real consumer); /api + OpenAPI are Slice 8. No new authority.

./gradlew build green family-wide.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@wolpert
wolpert merged commit fc416ac into main Jun 19, 2026
4 checks passed
@wolpert
wolpert deleted the slice0/mini-console-skeleton branch June 19, 2026 18:03
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