chore: full technical rename planarchy → capakraken
Complete rename of all technical identifiers across the codebase: Package names (11 packages): - @planarchy/* → @capakraken/* in all package.json, tsconfig, imports Import statements: 277 files, 548 occurrences replaced Database & Docker: - PostgreSQL user/db: planarchy → capakraken - Docker volumes: planarchy_pgdata → capakraken_pgdata - Connection strings updated in docker-compose, .env, CI CI/CD: - GitHub Actions workflow: all filter commands updated - Test database credentials updated Infrastructure: - Redis channel: planarchy:sse → capakraken:sse - Logger service name: planarchy-api → capakraken-api - Anonymization seed updated - Start/stop/restart scripts updated Test data: - Seed emails: @planarchy.dev → @capakraken.dev - E2E test credentials: all 11 spec files updated - Email defaults: @planarchy.app → @capakraken.app - localStorage keys: planarchy_* → capakraken_* Documentation: 30+ .md files updated Verification: - pnpm install: workspace resolution works - TypeScript: only pre-existing TS2589 (no new errors) - Engine: 310/310 tests pass - Staffing: 37/37 tests pass Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
+6
-6
@@ -27,7 +27,7 @@
|
||||
### 2026-03-11 | Architecture | Phase 1: Application Layer Extraction
|
||||
- Created `packages/application` with `createAllocation` and `fillPlaceholder` use-case services
|
||||
- `packages/api` router procedures now delegate to use cases; they only check permissions and emit SSE events
|
||||
- `packages/application` depends on `@planarchy/db`, `@planarchy/engine`, `@planarchy/shared`; `packages/api` depends on `@planarchy/application`
|
||||
- `packages/application` depends on `@capakraken/db`, `@capakraken/engine`, `@capakraken/shared`; `packages/api` depends on `@capakraken/application`
|
||||
- Use cases throw `TRPCError` directly (pragmatic — project only uses tRPC transport)
|
||||
- `Prisma.AllocationGetPayload<{ include: ... }>` used for precise return type in use cases
|
||||
- `exactOptionalPropertyTypes` + optional params: caller must use spread `...(val !== undefined ? { key: val } : {})` when passing zod inputs to use cases with `{ key?: T }` interfaces
|
||||
@@ -43,7 +43,7 @@
|
||||
### 2026-03-12 | Architecture | Estimating foundation slice
|
||||
- Added first-class Prisma estimating models for `Estimate`, `EstimateVersion`, assumptions, scope items, demand lines, rate cards, resource snapshots, metrics, and exports.
|
||||
- Keep this slice deliberately narrow: persistence + shared contracts + application/engine boundaries first, before any wizard/workspace UI. That avoids baking spreadsheet-shaped UI assumptions into the domain model.
|
||||
- Shared estimate enums/types/schemas now live in `@planarchy/shared`, and initial application commands/queries (`createEstimate`, `listEstimates`, `getEstimateById`) live in `@planarchy/application`.
|
||||
- Shared estimate enums/types/schemas now live in `@capakraken/shared`, and initial application commands/queries (`createEstimate`, `listEstimates`, `getEstimateById`) live in `@capakraken/application`.
|
||||
- Added a small engine contract `summarizeEstimateDemandLines()` for aggregate financial totals so later estimate work can reuse a typed pure-function boundary instead of recomputing ad hoc in routers/components.
|
||||
|
||||
### 2026-03-11 | Architecture | Tasks 23-27: Bulk Edit, Validation, Export, Reorder
|
||||
@@ -61,10 +61,10 @@
|
||||
- `useSearchParams` requires `<Suspense>` wrapping at the page level in Next.js App Router or the page will be statically rendered without search param access.
|
||||
|
||||
### 2026-03-11 | Security | Phase 0 critical fixes
|
||||
- `user.create` was hashing passwords with SHA-256; `auth.ts` verifies with Argon2 → users created via admin couldn't log in. Fix: import `hash` from `@node-rs/argon2` in the router. Must also declare `@node-rs/argon2` in `packages/api/package.json` — being a dep of `@planarchy/db` is not enough for TS resolution.
|
||||
- `user.create` was hashing passwords with SHA-256; `auth.ts` verifies with Argon2 → users created via admin couldn't log in. Fix: import `hash` from `@node-rs/argon2` in the router. Must also declare `@node-rs/argon2` in `packages/api/package.json` — being a dep of `@capakraken/db` is not enough for TS resolution.
|
||||
- `notification.create` was `protectedProcedure` → any logged-in user could create notifications for arbitrary users. Fix: changed to `managerProcedure`.
|
||||
- `testAiConnection` always built Azure deployment URLs regardless of `aiProvider`. Fix: branch on provider, use `https://api.openai.com/v1/chat/completions` with `Authorization: Bearer` for OpenAI.
|
||||
- `@planarchy/shared` had `test:unit: vitest run` in package.json but no test files → turbo failed. Fix: remove the script (tests live only in engine/staffing).
|
||||
- `@capakraken/shared` had `test:unit: vitest run` in package.json but no test files → turbo failed. Fix: remove the script (tests live only in engine/staffing).
|
||||
- `crypto.randomUUID()` in `packages/shared/src/schemas/project.schema.ts` failed typecheck because base tsconfig uses `"lib": ["ES2022"]` without DOM. Fix: add `"lib": ["ES2022", "DOM"]` in the shared package's own tsconfig.
|
||||
|
||||
### 2026-03-09 | Performance | Budget utilization showing 562% due to wrong aggregation
|
||||
@@ -149,7 +149,7 @@ For modal focus trapping: create a `panelRef = useRef<HTMLDivElement>(null)`, ca
|
||||
---
|
||||
|
||||
### 2026-02-xx | Architektur | Prisma-Enum vs. Shared-Enum
|
||||
**Problem:** Prisma generiert eigene Enum-Typen, die TypeScript-seitig nicht mit den `@planarchy/shared`-Enums kompatibel sind.
|
||||
**Problem:** Prisma generiert eigene Enum-Typen, die TypeScript-seitig nicht mit den `@capakraken/shared`-Enums kompatibel sind.
|
||||
**Lösung:** An Client-Grenzen `as unknown as SharedType` casten:
|
||||
- `project as unknown as Project`
|
||||
- `form.orderType as unknown as OrderType`
|
||||
@@ -181,7 +181,7 @@ For modal focus trapping: create a `panelRef = useRef<HTMLDivElement>(null)`, ca
|
||||
### 2026-03-06 | Architektur | Redis Pub/Sub für SSE
|
||||
|
||||
**Problem:** SSE Event-Bus war ein In-Memory-Singleton, funktioniert nicht bei mehreren Server-Instanzen.
|
||||
**Lösung:** `ioredis` in `@planarchy/api` hinzugefügt. Publisher schreibt Events in Redis-Channel `planarchy:sse`, Subscriber auf jeder Instanz empfängt und liefert lokal aus. Graceful Degradation: bei Redis-Ausfall weiterhin lokale Delivery.
|
||||
**Lösung:** `ioredis` in `@capakraken/api` hinzugefügt. Publisher schreibt Events in Redis-Channel `planarchy:sse`, Subscriber auf jeder Instanz empfängt und liefert lokal aus. Graceful Degradation: bei Redis-Ausfall weiterhin lokale Delivery.
|
||||
**Import-Pattern:** `import { Redis } from "ioredis"` (named export, nicht default) – notwendig mit `moduleResolution: NodeNext` + ioredis v5.
|
||||
**Offene Frage:** In Dev-Umgebung reicht lokale Delivery; Redis läuft auf Port 6380 via Docker Compose.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user