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
@@ -1,4 +1,4 @@
import { ImportBatchStatus, type Prisma } from "@planarchy/db";
import { ImportBatchStatus, type Prisma } from "@capakraken/db";
import { parseDispoChargeabilityWorkbook } from "./parse-chargeability-workbook.js";
import { parseDispoPlanningWorkbook } from "./parse-dispo-matrix.js";
import { parseDispoRosterWorkbook } from "./parse-dispo-roster-workbook.js";
@@ -1,8 +1,8 @@
import type { WeekdayAvailability } from "@planarchy/shared";
import type { WeekdayAvailability } from "@capakraken/shared";
import {
createWeekdayAvailabilityFromFte,
normalizeDispoRoleToken,
} from "@planarchy/shared";
} from "@capakraken/shared";
import type { TxClient, MergedStagedResource } from "./commit-dispo-batch-types.js";
import { deriveRoleTokens } from "./shared.js";
@@ -1,4 +1,4 @@
import type { Prisma, PrismaClient } from "@planarchy/db";
import type { Prisma, PrismaClient } from "@capakraken/db";
export type CommitDbClient = Pick<
PrismaClient,
@@ -2,15 +2,15 @@ import {
DISPO_REQUIRED_ROLE_SEEDS,
DISPO_UTILIZATION_CATEGORIES,
normalizeDispoRoleToken,
} from "@planarchy/shared";
import type { Prisma } from "@planarchy/db";
} from "@capakraken/shared";
import type { Prisma } from "@capakraken/db";
import {
AllocationStatus,
ImportBatchStatus,
ProjectStatus,
StagedRecordStatus,
VacationStatus,
} from "@planarchy/db";
} from "@capakraken/db";
import {
buildBatchSummaryEntry,
buildFallbackAccentureEmail,
@@ -1,8 +1,8 @@
import type { WeekdayAvailability } from "@planarchy/shared";
import type { WeekdayAvailability } from "@capakraken/shared";
import {
DISPO_INTERNAL_PROJECT_BUCKETS,
normalizeDispoRoleToken,
} from "@planarchy/shared";
} from "@capakraken/shared";
import type { TxClient, AggregatedAssignment } from "./commit-dispo-batch-types.js";
import { deriveTbdDispoProjectIdentity } from "./tbd-projects.js";
@@ -1,4 +1,4 @@
import { DispoStagedRecordType } from "@planarchy/db";
import { DispoStagedRecordType } from "@capakraken/db";
import { DISPO_CHARGEABILITY_SHEET, type ParsedChargeabilityResource, type ParsedChargeabilityWorkbook, type ParsedUnresolvedRecord, buildFallbackAccentureEmail, createAvailabilityFromFte, deriveCountryCodeFromMetroCity, deriveDisplayNameFromEnterpriseId, deriveNormalizedChapter, deriveRoleTokens, ensurePercentageValue, mapChargeabilityResourceType, normalizeNullableWorkbookValue, normalizeText, resolveCanonicalEnterpriseIdentity } from "./shared.js";
import { readWorksheetMatrix } from "./read-workbook.js";
@@ -1,10 +1,10 @@
import { DispoStagedRecordType } from "@planarchy/db";
import { DispoStagedRecordType } from "@capakraken/db";
import {
VacationType,
normalizeCanonicalResourceIdentity,
normalizeDispoRoleToken,
normalizeDispoUtilizationToken,
} from "@planarchy/shared";
} from "@capakraken/shared";
import { readWorksheetMatrix, toColumnLetter, type WorksheetCellValue } from "./read-workbook.js";
import {
DISPO_PLANNING_SHEET,
@@ -1,5 +1,5 @@
import { DispoStagedRecordType, ResourceType } from "@planarchy/db";
import { createWeekdayAvailabilityFromFte } from "@planarchy/shared";
import { DispoStagedRecordType, ResourceType } from "@capakraken/db";
import { createWeekdayAvailabilityFromFte } from "@capakraken/shared";
import {
parseResourceRosterMasterWorkbook,
type ParsedResourceRosterLevelAverage,
@@ -1,4 +1,4 @@
import { normalizeCanonicalResourceIdentity } from "@planarchy/shared";
import { normalizeCanonicalResourceIdentity } from "@capakraken/shared";
import { readWorksheetMatrix } from "./read-workbook.js";
import { normalizeNullableWorkbookValue, normalizeText } from "./shared.js";
@@ -1,17 +1,17 @@
import path from "node:path";
import type { Prisma, PrismaClient } from "@planarchy/db";
import type { Prisma, PrismaClient } from "@capakraken/db";
import {
DispoImportSourceKind,
DispoStagedRecordType,
ImportBatchStatus,
ResourceType,
StagedRecordStatus,
} from "@planarchy/db";
} from "@capakraken/db";
import {
createWeekdayAvailabilityFromFte,
normalizeCanonicalResourceIdentity,
normalizeDispoChapterToken,
} from "@planarchy/shared";
} from "@capakraken/shared";
export type DispoImportDbClient = Pick<
PrismaClient,
@@ -1,5 +1,5 @@
import type { Prisma } from "@planarchy/db";
import { DispoImportSourceKind, StagedRecordStatus } from "@planarchy/db";
import type { Prisma } from "@capakraken/db";
import { DispoImportSourceKind, StagedRecordStatus } from "@capakraken/db";
import { parseDispoChargeabilityWorkbook } from "./parse-chargeability-workbook.js";
import { ensureImportBatch, finalizeImportBatchStage, getWorkbookFileName, type DispoChargeabilityImportInput, type DispoImportDbClient } from "./shared.js";
@@ -1,5 +1,5 @@
import type { Prisma } from "@planarchy/db";
import { DispoImportSourceKind, StagedRecordStatus } from "@planarchy/db";
import type { Prisma } from "@capakraken/db";
import { DispoImportSourceKind, StagedRecordStatus } from "@capakraken/db";
import { parseDispoPlanningWorkbook } from "./parse-dispo-matrix.js";
import {
DISPO_PLANNING_SHEET,
@@ -1,6 +1,6 @@
import type { Prisma } from "@planarchy/db";
import { AllocationType, DispoImportSourceKind, OrderType, StagedRecordStatus } from "@planarchy/db";
import { DISPO_INTERNAL_PROJECT_BUCKETS } from "@planarchy/shared";
import type { Prisma } from "@capakraken/db";
import { AllocationType, DispoImportSourceKind, OrderType, StagedRecordStatus } from "@capakraken/db";
import { DISPO_INTERNAL_PROJECT_BUCKETS } from "@capakraken/shared";
import { parseDispoPlanningWorkbook } from "./parse-dispo-matrix.js";
import {
classifyDispoProject,
@@ -1,5 +1,5 @@
import type { Prisma } from "@planarchy/db";
import { DispoImportSourceKind, StagedRecordStatus } from "@planarchy/db";
import type { Prisma } from "@capakraken/db";
import { DispoImportSourceKind, StagedRecordStatus } from "@capakraken/db";
import { parseDispoRosterWorkbook } from "./parse-dispo-roster-workbook.js";
import {
ensureImportBatch,
@@ -1,5 +1,5 @@
import type { Prisma } from "@planarchy/db";
import { DispoImportSourceKind, StagedRecordStatus } from "@planarchy/db";
import type { Prisma } from "@capakraken/db";
import { DispoImportSourceKind, StagedRecordStatus } from "@capakraken/db";
import { parseMandatoryDispoReferenceWorkbook } from "./parse-reference-workbook.js";
import { ensureImportBatch, finalizeImportBatchStage, getWorkbookFileName, type DispoImportDbClient, type DispoReferenceImportInput, toJsonObject } from "./shared.js";
@@ -1,5 +1,5 @@
import { createHash } from "node:crypto";
import { AllocationType, OrderType } from "@planarchy/db";
import { AllocationType, OrderType } from "@capakraken/db";
function extractBracketTokens(token: string): string[] {
return Array.from(
@@ -1,5 +1,5 @@
import type { CommitDbClient } from "./commit-dispo-batch-types.js";
import { StagedRecordStatus } from "@planarchy/db";
import { StagedRecordStatus } from "@capakraken/db";
function asObject(value: unknown): Record<string, unknown> {
return value && typeof value === "object" && !Array.isArray(value)