feat: bootstrap pnpm workspace (E00-S01)
CI / Workspace bootstrap checks (pull_request) Successful in 4m41s
CI / Workspace bootstrap checks (pull_request) Successful in 4m41s
pnpm 11.23.0 workspace with a committed frozen lockfile, Node engine restricted to the 24.x line, TypeScript 6.0.3 pinned exactly, strict base tsconfig, apps/packages/extensions kept as separate workspaces, root build/test/typecheck commands, and the FIT-001 architecture test rejecting core-to-extension imports. Minimal CI runs only the root scripts (S05 stages stay out of scope). Closes #58.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# PersonalBlog (EPPP)
|
||||
|
||||
A modular personal blogging platform. This is the **workspace bootstrap**
|
||||
(E00-S01): a pnpm monorepo skeleton with strict TypeScript, a committed frozen
|
||||
lockfile, and an enforced dependency boundary between core packages and
|
||||
concrete extensions.
|
||||
|
||||
## Toolchain (pinned)
|
||||
|
||||
| Tool | Version | Where pinned |
|
||||
| ------------ | ------------ | --------------------------------------------- |
|
||||
| pnpm | 11.23.0 | `packageManager` in root `package.json` |
|
||||
| Node.js | 24.x line | `engines.node` in root `package.json` |
|
||||
| TypeScript | 6.0.3 (exact)| root `devDependencies` |
|
||||
| Vitest | 4.1.10 (exact)| root `devDependencies` |
|
||||
|
||||
Direct toolchain dependencies are exact-pinned; the lockfile is committed and
|
||||
installs always use `--frozen-lockfile`.
|
||||
|
||||
## Workspace layout
|
||||
|
||||
```
|
||||
apps/ application shells (e.g. server, admin)
|
||||
packages/ core / shared packages (contracts, core, extension-sdk, ...)
|
||||
extensions/ concrete extensions (themes, features, integrations)
|
||||
tests/ root-level architecture guard tests
|
||||
```
|
||||
|
||||
Each group is a separate workspace glob in `pnpm-workspace.yaml`, so packages
|
||||
cannot accidentally collapse into one another.
|
||||
|
||||
## Dependency boundary (FIT-001)
|
||||
|
||||
Core packages (`packages/*`) must **never** import a concrete extension
|
||||
(`extensions/*`) — neither by package name nor by relative path. The rule is
|
||||
enforced by `tests/architecture.test.ts`, which discovers extension packages
|
||||
from the filesystem, so new extensions are guarded automatically. It runs as
|
||||
part of `pnpm test` and CI.
|
||||
|
||||
## Local (non-container) developer path
|
||||
|
||||
No Docker required for workspace work; containers arrive in E00-S02.
|
||||
|
||||
1. Install Node.js 24.x (e.g. via nvm: `nvm install 24`).
|
||||
2. Enable the pinned package manager:
|
||||
`corepack enable` (reads `packageManager: pnpm@11.23.0`), or
|
||||
`npm install -g pnpm@11.23.0`.
|
||||
3. Install dependencies (frozen lockfile):
|
||||
`pnpm install --frozen-lockfile`
|
||||
4. Verify the workspace:
|
||||
|
||||
| Command | Runs |
|
||||
| --------------- | --------------------------------------------------- |
|
||||
| `pnpm build` | compiles every workspace package |
|
||||
| `pnpm test` | runs the test suite (Vitest, incl. FIT-001) |
|
||||
| `pnpm typecheck`| typechecks root tests and every workspace package |
|
||||
|
||||
## Out of scope for this story
|
||||
|
||||
- Docker Compose baseline and container smoke tests — E00-S02
|
||||
- PostgreSQL adapter and migration runner — E00-S03
|
||||
- CI pipeline stages beyond the root scripts — E00-S05
|
||||
Reference in New Issue
Block a user