test: lock in pg/Kysely import isolation to database-postgres (E00-S03-T02)
CI / Frozen lockfile install (pull_request) Successful in 43s
CI / Secrets not embedded (E00-S02-T08) (pull_request) Successful in 30s
CI / Database-postgres import isolation (E00-S03-T02) (pull_request) Successful in 31s
CI / Compose config (E00-S03-T01) (pull_request) Successful in 24s
CI / Frozen lockfile install (pull_request) Successful in 43s
CI / Secrets not embedded (E00-S02-T08) (pull_request) Successful in 30s
CI / Database-postgres import isolation (E00-S03-T02) (pull_request) Successful in 31s
CI / Compose config (E00-S03-T01) (pull_request) Successful in 24s
- database-postgres-imports.test.mjs: static scan of every workspace package source proves pg/kysely import specifiers resolve only to packages/database-postgres; owner manifest pins the driver and no other package declares it; mutation probes prove the scan catches a driver import injected into apps/server/src/index.ts; comment-stripping and specifier matcher unit probes; CI-enforcement assertion - workspace-layout / workspace-config / strict-tsconfig / typescript-pin: package-set fixtures updated to include packages/database-postgres - docs/development/non-container.md: workspace package table and build expectations updated for the new package
This commit is contained in:
@@ -17,6 +17,7 @@ The workspace is a pnpm monorepo with three package groups:
|
||||
| --- | --- | --- |
|
||||
| `apps/` | `apps/server` (`@personal-blog/server`) | Public server application. Serves the application health endpoint (E00-S02-T03); the Fastify 5 application shell lands in a later story. |
|
||||
| `packages/` | `packages/core` (`@personal-blog/core`) | Application core (site identity, content primitives). Bootstrap placeholder. |
|
||||
| `packages/` | `packages/database-postgres` (`@personal-blog/database-postgres`) | PostgreSQL database adapter package. Single owner of the `pg`/Kysely driver imports (E00-S03-T02); the concrete adapter lands in later stories. |
|
||||
| `extensions/` | `extensions/example` (`@personal-blog/example-extension`) | Example extension exercising the `extensions/` group. Bootstrap placeholder. |
|
||||
|
||||
A dependency-boundary rule (`dependency-boundaries.json`, enforced by
|
||||
@@ -74,8 +75,9 @@ pnpm typecheck
|
||||
|
||||
`pnpm build` runs `tsc -p tsconfig.json` in each package in topological order
|
||||
and emits `dist/` (JavaScript + type declarations + source maps) per package.
|
||||
Expected result: `apps/server/dist/`, `packages/core/dist/` and
|
||||
`extensions/example/dist/` are produced, all packages report `Done`, exit 0.
|
||||
Expected result: `apps/server/dist/`, `packages/core/dist/`,
|
||||
`packages/database-postgres/dist/` and `extensions/example/dist/` are
|
||||
produced, all packages report `Done`, exit 0.
|
||||
`dist/` is git-ignored; rebuild whenever you change `src/`.
|
||||
|
||||
## Run
|
||||
@@ -119,8 +121,8 @@ This is also the suite that enforces the dependency-boundary rule.
|
||||
git clone https://git.stevanovic.co.uk/Fabrika/PersonalBlog.git && cd PersonalBlog
|
||||
corepack enable
|
||||
pnpm install --frozen-lockfile # exit 0, lockfile untouched
|
||||
pnpm build # 3/3 packages emit dist/, exit 0
|
||||
pnpm typecheck # 3/3 packages pass --noEmit, exit 0
|
||||
pnpm build # 4/4 packages emit dist/, exit 0
|
||||
pnpm typecheck # 4/4 packages pass --noEmit, exit 0
|
||||
pnpm test # 10/10 pass, exit 0
|
||||
pnpm --filter @personal-blog/server start # serves GET /health on port 3000, stays up
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user