plan(s0): chunk 1 of Sprint-0-Plan (scope + workstream overview)
+161
@@ -0,0 +1,161 @@
|
||||
# Sprint 0 — Implementation Plan
|
||||
|
||||
**Status:** Draft v1
|
||||
**Date:** 2026-06-24
|
||||
**Owner:** Patrick (plate-software)
|
||||
**Based on:** [`Sprint-0-Assessment.md`](Sprint-0-Assessment.md), [`Architecture.md`](Architecture.md)
|
||||
**Target version:** `0.1.0` (both Maven + npm)
|
||||
|
||||
---
|
||||
|
||||
## Reading guide
|
||||
|
||||
This is the single longest document in the wiki. It is structured as:
|
||||
|
||||
1. **Scope + ground rules** (this section)
|
||||
2. **Workstream overview** (the 7 parallel-ish workstreams)
|
||||
3. **Backend extraction — step-by-step**
|
||||
4. **Frontend extraction — step-by-step**
|
||||
5. **Flyway migration consolidation**
|
||||
6. **Build + publishing pipeline**
|
||||
7. **Security review checklist** (must pass before v0.1.0 tag)
|
||||
8. **Rollout plan** (InspectFlow + Sparkboard adoption)
|
||||
9. **Acceptance criteria**
|
||||
10. **Open items deferred to v0.2+**
|
||||
|
||||
Each step is numbered so the Code-mode worker can check off progress without ambiguity.
|
||||
|
||||
---
|
||||
|
||||
## 1. Scope + ground rules
|
||||
|
||||
### 1.1 In scope (Sprint 0)
|
||||
|
||||
- New git repo `plate-auth` (already created — `git.plate-software.de/pplate/plate-auth`)
|
||||
- Backend artifact `de.platesoft:plate-auth-starter:0.1.0` (Maven, Spring Boot 4 starter)
|
||||
- Frontend artifact `@platesoft/auth@0.1.0` (npm, NextAuth v5 wiring)
|
||||
- 5 SPIs (`OrgValidator`, `OrgDisplayNameResolver`, `InvitationMailer`, `AccessRequestMailer`,
|
||||
`OnboardingHook`)
|
||||
- Flyway migrations under `db/migration/auth/V1..V5` (one less than InspectFlow because V30 stays
|
||||
in app — see § 5)
|
||||
- Gitea Actions pipeline that publishes both artifacts on a `v*` git tag
|
||||
- Internal integration tests covering exchange + JWT + memberships
|
||||
- All 10 wiki docs reviewed + approved by Plan Reviewer + GO from Patrick
|
||||
|
||||
### 1.2 Out of scope (deferred — see [`Roadmap.md`](Roadmap.md))
|
||||
|
||||
- WebAuthn / passkeys (v0.2+)
|
||||
- Multi-replica nonce store (v0.3)
|
||||
- Refresh-token rotation table (v0.3)
|
||||
- JWT secret rotation via `kid` (v0.3)
|
||||
- External audit-log sink (v0.3)
|
||||
- `LoginEventSink` SPI (v0.3)
|
||||
- SAML, SCIM, OIDC server, mobile SDKs (post-1.0, demand-driven)
|
||||
|
||||
### 1.3 Ground rules
|
||||
|
||||
- **No new features.** This sprint is an extraction. Anything beyond what InspectFlow already does
|
||||
in Sprint 14.1–14.6 is automatic v0.2 fodder.
|
||||
- **Single git repo, two artifacts.** Maven module + npm package live in one repo with a shared
|
||||
`CHANGELOG.md` and lockstep versions.
|
||||
- **Tests must pass on day 1.** No "TODO: write tests later" lines in committed code.
|
||||
- **Plan Reviewer is mandatory before code.** No code starts until the plan is APPROVED.
|
||||
- **Branch policy:** `feature/sprint-0/<workstream>` branches → PR → squash-merge to `main`.
|
||||
|
||||
---
|
||||
|
||||
## 2. Workstream overview
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
W1[W1: Repo scaffolding<br/>+ CI skeleton] --> W2[W2: Backend extraction<br/>code rename + repackage]
|
||||
W1 --> W3[W3: Frontend extraction<br/>factories + types]
|
||||
W2 --> W4[W4: SPI design + impl]
|
||||
W2 --> W5[W5: Flyway consolidation]
|
||||
W3 --> W6[W6: Build + publish pipeline]
|
||||
W4 --> W6
|
||||
W5 --> W6
|
||||
W6 --> W7[W7: Integration tests +<br/>InspectFlow dry-run]
|
||||
```
|
||||
|
||||
| # | Workstream | Owner | Depends on | Estimate |
|
||||
|---|---|---|---|---|
|
||||
| W1 | Repo scaffolding (Maven + npm structure, CI skeleton, README) | Code mode | — | 0.5d |
|
||||
| W2 | Backend extraction — class moves, package renames, config namespace | Code mode | W1 | 1.5d |
|
||||
| W3 | Frontend extraction — `createAuthConfig` factory, proxy factory, types | Code mode | W1 | 1d |
|
||||
| W4 | SPI design — 5 interfaces + default no-op implementations + `@ConditionalOnMissingBean` wiring | Code mode | W2 | 1d |
|
||||
| W5 | Flyway migration consolidation + `flyway_schema_history_auth` decision | Code mode | W2 | 0.5d |
|
||||
| W6 | Gitea Actions publish pipeline — Maven + npm to Gitea Package Registry | Code mode | W2, W3, W4, W5 | 0.5d |
|
||||
| W7 | Integration tests + InspectFlow dry-run migration | Code mode | All | 1.5d |
|
||||
| | **Total** | | | **~6.5 code days + plan + review buffer = ~9–10 calendar days** |
|
||||
|
||||
---
|
||||
|
||||
## 3. Backend extraction — overview
|
||||
|
||||
See § 4 for step-by-step.
|
||||
|
||||
The backend extraction is fundamentally:
|
||||
|
||||
1. **Move** every class in `inspectflow/backend/src/main/java/de/platesoft/inspectflow/{config,filter,service,controller,entity,repository,dto,enums}/...` that is auth-related into `plate-auth/plate-auth-starter/src/main/java/de/platesoft/auth/...`
|
||||
2. **Rename** every import, `@Value("${jwt....}")` → `@Value("${plate.auth.jwt....}")` etc.
|
||||
3. **Replace** every direct `companies` repository call inside `MembershipService` etc. with a call through `OrgValidator` / `OrgDisplayNameResolver` SPI.
|
||||
4. **Add** `PlateAuthAutoConfiguration` + `PlateAuthProperties` + `META-INF/spring/...AutoConfiguration.imports`.
|
||||
5. **Add** default no-op SPI implementations annotated `@ConditionalOnMissingBean`.
|
||||
|
||||
No new domain logic. No new endpoints. No new entity fields.
|
||||
|
||||
---
|
||||
|
||||
## 4. Frontend extraction — overview
|
||||
|
||||
See § 6 for step-by-step.
|
||||
|
||||
The frontend extraction is:
|
||||
|
||||
1. **Move** the NextAuth config from `inspectflow/frontend/lib/auth-config.ts` into a `createAuthConfig(opts)` factory in `plate-auth/packages/auth/src/config/index.ts`
|
||||
2. **Move** the proxy logic from `inspectflow/frontend/app/api/[...path]/route.ts` into a `createProxyHandlers(opts)` factory
|
||||
3. **Move** the HMAC exchange logic from `inspectflow/frontend/lib/exchange.ts` into `plate-auth/packages/auth/src/exchange/`
|
||||
4. **Replace** the InspectFlow-specific `localStorage` keys with configurable prefixes
|
||||
5. **Export** typed hooks (`useAccessToken`, `useMemberships`) and re-export NextAuth's `useSession`, `signIn`, `signOut`
|
||||
|
||||
---
|
||||
|
||||
## 5. Flyway strategy — overview
|
||||
|
||||
See § 7 for step-by-step.
|
||||
|
||||
**Decision (to be ratified by Patrick — see [`Open-Questions.md`](Open-Questions.md) Q03):**
|
||||
|
||||
- plate-auth ships migrations under `classpath:db/migration/auth/V1..V5`
|
||||
- Consumers configure Flyway with **multiple locations** + **separate history table** for plate-auth:
|
||||
```properties
|
||||
spring.flyway.locations=classpath:db/migration,classpath:db/migration/auth
|
||||
# Default app history table stays "flyway_schema_history"
|
||||
# plate-auth's history is tracked in the SAME table but with V1..V5 from auth/ prefixed via
|
||||
# an installed_rank shift OR — preferred — a *second* Flyway managed by plate-auth's auto-config.
|
||||
```
|
||||
- For InspectFlow, V26–V31 already ran. We do **not** re-run them. Migration recipe:
|
||||
- Insert a "baseline" row into `flyway_schema_history_auth` marking V1..V5 as already applied
|
||||
- Detailed steps in [`Migration-InspectFlow.md`](Migration-InspectFlow.md)
|
||||
|
||||
Final pattern is locked in § 7. The Plan Reviewer must approve the chosen approach before code starts.
|
||||
|
||||
---
|
||||
|
||||
## 6. Build + publish pipeline — overview
|
||||
|
||||
See § 8 for step-by-step.
|
||||
|
||||
- Single repo. `mvn -pl plate-auth-starter package` builds the JAR. `npm -w @platesoft/auth build`
|
||||
builds the npm package.
|
||||
- A git tag `v0.1.0` triggers a Gitea Actions workflow that:
|
||||
1. Builds + tests both artifacts
|
||||
2. Publishes the JAR to Gitea Package Registry (Maven)
|
||||
3. Publishes the npm tarball to Gitea Package Registry (npm)
|
||||
4. Updates the `CHANGELOG.md` with the release date
|
||||
- Snapshot builds (on every push to `main`) publish to `0.1.0-SNAPSHOT` / `0.1.0-snapshot.N`.
|
||||
|
||||
---
|
||||
|
||||
*Plan continues in the next section — backend extraction step-by-step.*
|
||||
Reference in New Issue
Block a user