Scrum4Me/docs/old/plans/2026-04-27-insert-milestone-tool.md
Janpeter Visser b39c3ec2e1
docs(cleanup): archief verouderde plannen, backlog en root-duplicaten (#191)
* docs(cleanup): archief verouderde plannen, backlog en root-duplicaten

- 6 plans naar docs/old/plans/ (PBI-11/75/78, user-settings-store, Local github setup, lees-de-readme — laatste was verkeerde repo)
- docs/backlog/ naar docs/old/backlog/ (pre-MCP statische registry; live werk loopt via Scrum4Me-MCP)
- 6 root-level duplicaten naar docs/old/ (functional, {pbi,story,task}-dialog, product-backlog, backlog)
- 2 landing plans (niet uitgevoerd) krijgen archived: true frontmatter — blijven op plek maar uit INDEX
- scripts/generate-docs-index.mjs: skip docs/old/** + skip archived: true
- CLAUDE.md: rijen docs/backlog/, docs/plans/<key>-*.md, docs/manual/ weg; Track B-sectie verwijderd
- README.md / CHANGELOG.md / docs/plans/v1-readiness.md: link-fixes naar nieuwe locaties

Verify groen (lint + typecheck + 718 tests). docs/INDEX.md geregenereerd.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(cleanup): registreer handmatige verplaatsingen en fix referenties

- 4 plans verplaatst naar docs/old/plans/ (M10-qr-pairing-login, auto-pr-deploy-sync, docs-restructure-ai-lookup, v1-readiness)
- 3 archive-plans verplaatst naar docs/old/plans/ (archive-map nu leeg)
- ST-1114-copilot-reviews + 3 research-docs naar nieuwe docs/Ideas/ map
- Duplicaat docs/old/2026-04-27-m8-realtime-solo.md verwijderd (origineel zit in docs/old/plans/)
- Link-fixes naar nieuwe locaties:
  - CHANGELOG.md → docs/old/plans/v1-readiness.md
  - docs/runbooks/deploy-control.md → docs/old/plans/auto-pr-deploy-sync.md (2x)
  - docs/runbooks/worker-idempotency.md → docs/old/plans/auto-pr-deploy-sync.md
  - docs/plans/docs-restructure-pbi-spec.md → docs/old/plans/docs-restructure-ai-lookup.md (4x text + 2x href)
- docs/INDEX.md geregenereerd (96 docs, was 100)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 19:46:00 +02:00

5.2 KiB

title status audience language last_updated applies_to
Herbruikbaar scripts/insert-milestone.ts done
maintainer
contributor
nl 2026-05-03

Plan: herbruikbaar scripts/insert-milestone.ts

Doel

Eén commando dat een specifieke milestone (PBI + stories + tasks) uit de backlog leest en idempotent toevoegt aan de DB, zónder bestaande data te raken. Voor M8 nu, en voor M9..M∞ later.

Bron-keuze: backlog ipv plan-bestand

Twee bronnen denkbaar:

  • .Plans/<datum>-<slug>.md — freeform plan-tekst, niet gestructureerd, niet gecommit
  • docs/backlog/index.md — al strict gestructureerd, gecommit, single source of truth voor alle bestaande seed-pipelines

Voorstel: het script leest de backlog. Workflow blijft natuurlijk:

  1. Plan schrijven naar .Plans/<naam>.md (lokaal, draft)
  2. Milestone-sectie + stories formaliseren in docs/backlog/index.md (PR)
  3. Na merge: npm run db:insert-milestone -- M8 [--product SCRUM4ME]

Eén canonical bron, geen ambiguïteit, en de bestaande parser doet 90% van het werk al.

Wijzigingen

1. prisma/seed-data/parse-backlog.ts — tolerant maken

Huidige parser kent alleen M0..M6 in MILESTONE_PRIORITY/_GOAL/_SPRINT_STATUS + asserts ≥8 milestones / ≥60 stories. M7 en M8 worden nu stilletjes overgeslagen.

Concrete edits:

  • Voeg M7 en M8 toe aan de drie maps (M7: priority 4, sprint COMPLETED, goal "MCP-server voor Claude Code"; M8: priority 4, sprint COMPLETED, goal "Realtime updates voor Solo Paneel")
  • Voor onbekende sleutels: fallback naar priority: 4, sprint_status: 'COMPLETED', goal: <header-title>. Dat maakt M9..M∞ vanzelf bruikbaar zonder code-wijziging
  • Verwijder de strikte filter KNOWN_KEYS.includes(...) of verleg naar een "alle-M[\d.]+ headers" check
  • Voeg optionele loadBacklog(repoRoot, { strict?: boolean }) toe. strict: true (default) behoudt de bestaande "≥8 milestones, ≥60 stories" asserts (zodat de seed niet stilletjes anders gedraagt). Insert-milestone roept met strict: false

2. scripts/insert-milestone.ts (nieuw, ~90 regels)

Usage: tsx scripts/insert-milestone.ts <milestone-key> [--product <code>] [--dry-run]
Default product code: SCRUM4ME

Logica:

  1. Parse args; valideer dat milestone-key matcht ^M[\d.]+$
  2. loadBacklog(repoRoot, { strict: false })
  3. Zoek milestone op key; faal helder met "milestone not found in docs/backlog/index.md" als ie er niet in staat
  4. Lookup product via code (default SCRUM4ME); faal als niet gevonden
  5. Upsert PBI:
    • where: { product_id_code: { product_id, code: milestone.key } }
    • sort_order = (max(sort_order) van bestaande PBIs in product) + 1 als nieuw, anders ongemoeid
  6. Voor elke story:
    • Upsert Story op (product_id, code = story.ref)
    • status = 'DONE' of 'OPEN' zoals gemarkeerd in markdown
    • sort_order, priority en pbi_id correct ingesteld
  7. Voor elke task: bulk insert alleen als de story op dit moment 0 tasks heeft (idempotent — herhaling dupliceert niets)
  8. Print samenvatting: M8: PBI created, 6 stories upserted (1 created, 5 unchanged), 6 tasks created
  9. --dry-run: alle DB-calls overslaan, alleen wat het zou doen printen

Edge cases:

  • Story-code conflict tussen producten: schema heeft @@unique([product_id, code]) op Story dus dit is per-product safe
  • Tasks zonder code veld in DB (klopt — code wordt afgeleid van story.code + index in get_claude_context)
  • Demo-product: script accepteert --product DEMO o.i.d. — niet hardcoded SCRUM4ME

3. package.json script

"db:insert-milestone": "tsx scripts/insert-milestone.ts"

4. Verificatie na implementatie

  • Dry-run eerst: npm run db:insert-milestone -- M8 --dry-run
  • Daarna echt: npm run db:insert-milestone -- M8
  • In Prisma Studio of via SQL: zie M8 PBI, 6 stories, 6 tasks onder SCRUM4ME-product
  • Tweede run: npm run db:insert-milestone -- M8 → "0 created, 6 unchanged" — geen duplicaten
  • Niet-bestaande key: npm run db:insert-milestone -- M99 → "milestone M99 not found"
  • Bestaande seed-flow blijft werken: prisma db seed met strict: true faalt nog steeds bij format-drift in de backlog

Branch- en PR-strategie

scripts/insert-milestone.ts is orthogonaal aan ST-801. Twee keuzes:

  • A. Eigen mini-branch + PRtooling/insert-milestone-script, ~95 regels code, makkelijk reviewbaar, gemerged voordat M8 verder gaat. Daarna gebruiken om M8 in DB te zetten en met de implementatie door.
  • B. Aan ST-801 plakken — voegt scope toe aan een PR die al code ↔ infra-overschrijdend is (migratie + tools).

Voorgestelde keuze: A. De tool is breder bruikbaar dan M8 alleen.

Volgorde

  1. Switch naar main (ST-801 blijft op zijn eigen branch staan)
  2. Branch tooling/insert-milestone-script
  3. Edit parse-backlog.ts (M7/M8 maps + tolerant + strict-mode option)
  4. Schrijf scripts/insert-milestone.ts
  5. Voeg db:insert-milestone toe aan package.json
  6. Lokaal testen met M8 (dry-run + echt + tweede run)
  7. Commit, push, PR
  8. Na merge: tool gebruiken om M8 in DB te krijgen, daarna ST-802 oppakken op feat/ST-801-branch

Geschatte size

  • ~10 regels parser-edit
  • ~95 regels nieuw script
  • ~1 regel package.json
  • ~25 regels test/usage doc in script-comment
  • 1 commit, 1 PR