P0-B.1: writeProductDoc closure → @shared (dep-clean, partial) #9

Merged
janpeter merged 8 commits from feat/shared-product-doc-write into main 2026-06-07 11:14:47 +02:00
Owner

P0-B.1 — writeProductDoc closure → @shared (dep-clean) — PARTIAL Part B

Verplaatst de 6-file writeProductDoc-closure naar @shared/lib als de canonieke kopie, gereconcilieerd uit web (canonical) + mcp, met @shared @prisma-vrij.

⚠️ Dit is PARTIAL — géén runtime-convergentie

Levert ALLEEN de gedeelde canonieke kopie + tests. web/mcp blijven deze ronde hun eigen kopie gebruiken. Nog vereist vóór een consumer op @shared mag leunen voor runtime-gedrag: P0-B.2 (mcp re-export shims + de node dist/http.js build-path fix) én een assignability-test in de consumer (mcp/web) die bevestigt dat PrismaClient/Prisma.TransactionClient aan ProductDocDb voldoen.

Wat

  • 6 files → lib/product-doc-{write,parser,frontmatter,section-index,schemas,folders}.ts.
  • lib/product-doc-folder.ts (lokale ProductDocFolder-mirror) + lib/product-doc-db.ts (structurele ProductDocDb, @prisma-vrij; (args:any)=>Promise<unknown> is de enige vorm waar een echte PrismaClient/Prisma.TransactionClient structureel aan voldoet — reads herwonnen via row-interfaces).
  • Gate (verify-no-deps.sh) versoepeld: ALLEEN node:crypto/node:path voor product-doc-*.ts; @prisma blijft overal verboden.
  • Deps: yaml toegevoegd; zod-peer verbreed naar ^3.25.0 || ^4.0.0 (web+workers=zod3, mcp=zod4).

Reconciliatie-keuzes (web=canonical, per drift)

  • write.ts: web-body, maar mcp's gedetailleerde parse-fout behouden (content_md is niet parseerbaar — regel X: …).
  • section-index: slugify inline (web's product-doc-slug.ts niet geïmporteerd); product-doc-sort.ts + product-doc-links.ts vallen buiten de closure.
  • frontmatter-schema in product-doc-schemas.ts (niet in schemas/).

Tests

gate OK + tsc --noEmit schoon + 101 vitest (incl. een DB-vrije writeProductDoc parse-fout-test die de mcp-variant pint).

Review-historie

Plan + spec vooraf door codex gereviewd (no-go → alle 6 bevindingen verwerkt in plan v2); daarna implementatie-review (spec + code-quality APPROVED).

@codex review graag.

🤖 Generated with Claude Code

## P0-B.1 — writeProductDoc closure → @shared (dep-clean) — **PARTIAL Part B** Verplaatst de 6-file `writeProductDoc`-closure naar `@shared/lib` als de **canonieke** kopie, gereconcilieerd uit **web (canonical)** + **mcp**, met `@shared` **`@prisma`-vrij**. ### ⚠️ Dit is PARTIAL — géén runtime-convergentie Levert ALLEEN de gedeelde canonieke kopie + tests. web/mcp blijven deze ronde hun eigen kopie gebruiken. Nog vereist vóór een consumer op `@shared` mag leunen voor runtime-gedrag: **P0-B.2** (mcp re-export shims + de `node dist/http.js` build-path fix) én een **assignability-test in de consumer** (mcp/web) die bevestigt dat `PrismaClient`/`Prisma.TransactionClient` aan `ProductDocDb` voldoen. ### Wat - 6 files → `lib/product-doc-{write,parser,frontmatter,section-index,schemas,folders}.ts`. - `lib/product-doc-folder.ts` (lokale `ProductDocFolder`-mirror) + `lib/product-doc-db.ts` (structurele `ProductDocDb`, `@prisma`-vrij; `(args:any)=>Promise<unknown>` is de enige vorm waar een echte `PrismaClient`/`Prisma.TransactionClient` structureel aan voldoet — reads herwonnen via row-interfaces). - Gate (`verify-no-deps.sh`) versoepeld: ALLEEN `node:crypto`/`node:path` voor `product-doc-*.ts`; `@prisma` blijft overal verboden. - Deps: `yaml` toegevoegd; zod-peer verbreed naar `^3.25.0 || ^4.0.0` (web+workers=zod3, mcp=zod4). ### Reconciliatie-keuzes (web=canonical, per drift) - `write.ts`: web-body, maar **mcp's gedetailleerde parse-fout behouden** (`content_md is niet parseerbaar — regel X: …`). - `section-index`: `slugify` inline (web's `product-doc-slug.ts` niet geïmporteerd); `product-doc-sort.ts` + `product-doc-links.ts` vallen buiten de closure. - frontmatter-schema in `product-doc-schemas.ts` (niet in `schemas/`). ### Tests gate `OK` + `tsc --noEmit` schoon + **101 vitest** (incl. een DB-vrije `writeProductDoc` parse-fout-test die de mcp-variant pint). ### Review-historie Plan + spec vooraf door codex gereviewd (no-go → alle 6 bevindingen verwerkt in plan v2); daarna implementatie-review (spec ✅ + code-quality APPROVED). @codex review graag. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
assignability test is a required consumer-side follow-up, not yet landed;
args:any drops write-shape compile-checking in @shared.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds product-doc cases (node:crypto/path allowed; node:fs + @prisma rejected
in product-doc-*.ts; node:crypto rejected elsewhere) and runs the shell
regression test as part of npm run verify (codex PR #9 minor).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
janpeter deleted branch feat/shared-product-doc-write 2026-06-07 11:14:47 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-shared!9
No description provided.