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:
2026-03-27 13:18:09 +01:00
parent f46b38f457
commit cd78f72f33
303 changed files with 938 additions and 878 deletions
+2 -2
View File
@@ -1,8 +1,8 @@
import { createHash } from "node:crypto";
import type { PrismaClient } from "@planarchy/db";
import type { PrismaClient } from "@capakraken/db";
const DEFAULT_ANONYMIZATION_DOMAIN = "superhartmut.de";
const DEFAULT_ANONYMIZATION_SEED = "planarchy-superhartmut-global";
const DEFAULT_ANONYMIZATION_SEED = "capakraken-superhartmut-global";
type AliasEntry = {
name: string;
+1 -1
View File
@@ -1,4 +1,4 @@
import type { PrismaClient, Prisma } from "@planarchy/db";
import type { PrismaClient, Prisma } from "@capakraken/db";
import { logger } from "./logger.js";
type AuditAction = "CREATE" | "UPDATE" | "DELETE" | "SHIFT" | "IMPORT";
+3 -3
View File
@@ -1,6 +1,6 @@
import { listAssignmentBookings } from "@planarchy/application";
import { rankResources } from "@planarchy/staffing";
import type { SkillEntry } from "@planarchy/shared";
import { listAssignmentBookings } from "@capakraken/application";
import { rankResources } from "@capakraken/staffing";
import type { SkillEntry } from "@capakraken/shared";
import { createNotificationsForUsers } from "./create-notification.js";
/**
+1 -1
View File
@@ -1,4 +1,4 @@
import { listAssignmentBookings } from "@planarchy/application";
import { listAssignmentBookings } from "@capakraken/application";
import { createNotificationsForUsers } from "./create-notification.js";
type DbClient = Parameters<typeof listAssignmentBookings>[0] & {
+4 -4
View File
@@ -4,10 +4,10 @@ import {
countWorkingDaysInOverlap,
calculateSAH,
type AssignmentSlice,
} from "@planarchy/engine";
import type { SpainScheduleRule } from "@planarchy/shared";
import { isChargeabilityActualBooking, listAssignmentBookings } from "@planarchy/application";
import { VacationStatus } from "@planarchy/db";
} from "@capakraken/engine";
import type { SpainScheduleRule } from "@capakraken/shared";
import { isChargeabilityActualBooking, listAssignmentBookings } from "@capakraken/application";
import { VacationStatus } from "@capakraken/db";
import { createNotificationsForUsers } from "./create-notification.js";
/**
+2 -2
View File
@@ -3,7 +3,7 @@
* Non-blocking — errors are logged, not thrown.
*/
import nodemailer from "nodemailer";
import { prisma as db } from "@planarchy/db";
import { prisma as db } from "@capakraken/db";
interface EmailPayload {
to: string | string[];
@@ -23,7 +23,7 @@ async function getSmtpConfig() {
settings.smtpUser && settings.smtpPassword
? { user: settings.smtpUser, pass: settings.smtpPassword }
: undefined,
from: settings.smtpFrom ?? settings.smtpUser ?? "noreply@planarchy.app",
from: settings.smtpFrom ?? settings.smtpUser ?? "noreply@capakraken.app",
};
}
+1 -1
View File
@@ -9,7 +9,7 @@
* Duplicate-safe: skips holidays that already exist (by date + type + resourceId).
*/
import { getPublicHolidays } from "@planarchy/shared";
import { getPublicHolidays } from "@capakraken/shared";
interface MinimalVacation {
resourceId: string;
+1 -1
View File
@@ -6,7 +6,7 @@ const LOG_LEVEL = process.env["LOG_LEVEL"] ?? "info";
export const logger = pino({
level: LOG_LEVEL,
base: { service: "planarchy-api" },
base: { service: "capakraken-api" },
...(isProduction
? {}
: {
@@ -1,4 +1,4 @@
import { prisma } from "@planarchy/db";
import { prisma } from "@capakraken/db";
type PrismaClient = typeof prisma;
+1 -1
View File
@@ -1,4 +1,4 @@
import { prisma } from "@planarchy/db";
import { prisma } from "@capakraken/db";
import { emitReminderDue, emitNotificationCreated } from "../sse/event-bus.js";
const POLL_INTERVAL_MS = 60_000; // 60 seconds
+1 -1
View File
@@ -1,4 +1,4 @@
import { prisma } from "@planarchy/db";
import { prisma } from "@capakraken/db";
type PrismaClient = typeof prisma;
+1 -1
View File
@@ -1,4 +1,4 @@
import { VacationStatus } from "@planarchy/db";
import { VacationStatus } from "@capakraken/db";
import { createNotification } from "./create-notification.js";
type DbClient = {