feat(db): task_estimates, usage_segments, usage_lines (IDEA-235 T6) #304

Merged
janpeter merged 1 commit from feat/idea-235-t6-usage-tables into main 2026-10-05 11:51:32 +02:00
Owner

Samenvatting

IDEA-235 T6 (T-2005): drie additieve tabellen voor schattingen en sessie-usage.

  • Schema uit scrum4me-shared (submodule-bump naar 5363a1c, PR janpeter/scrum4me-shared#70 — eerst die mergen).
  • Migratie 20261005080000_usage_ledger: 1:1 uit prisma migrate diff; maakt task_estimates, usage_segments, usage_lines en enum UsageEndedReason. Raakt tasks niet (IDEA-213-adoptiepin), bevat geen GRANT.
  • Contracts (additief, migrationId gezet, dispatch/projector leeg, geen PUBLIC, geen columnGrants):
    • task_estimates: web/preparedWeb alleen SELECT, INSERT, observer SELECT — een schatting is na create_task bevroren, ook in de database (spec §5.2).
    • usage_segments, usage_lines: dezelfde rechten als notes.

Test

  • __tests__/lib/db-access/usage-ledger-contracts.test.ts — op het échte profiel: additief afgesplitst, gesloten set nog op de IDEA-227-pin, bevriesgate op task_estimates, migratie zonder GRANT en zonder ALTER TABLE "tasks".
  • __tests__/db/usage-ledger-migration.test.ts — de SQL zelf (enum, sleutels, FK-gedrag, alleen SQL).
  • additive-contracts-cli.test.ts — de echte CLI-preamble met notes + usage-contracts komt tot de receipt-stap.
  • npm run verify groen (3942 tests), npm run build groen.
  • npm run test:dispatch groen (35/35) op een wegwerp-Postgres 17 (test-db.mjs provision, migrateAdditive).

Productie (alleen met JP)

Nieuwe policy-bundle voor de merge-commit en POLICY_HASH zetten vóór de deploy (het profiel zit in DB_ACCESS_HASH_FILES); daarna de receipt-gebonden check: geen SCHEMA_DRIFT, geen UNCONTRACTED_OBJECT, geen DB_ACCESS_ADDITIVE_CONTRACT_*-weigering.

🤖 Generated with Claude Code

## Samenvatting IDEA-235 T6 (T-2005): drie additieve tabellen voor schattingen en sessie-usage. - **Schema** uit scrum4me-shared (submodule-bump naar `5363a1c`, PR janpeter/scrum4me-shared#70 — eerst die mergen). - **Migratie** `20261005080000_usage_ledger`: 1:1 uit `prisma migrate diff`; maakt `task_estimates`, `usage_segments`, `usage_lines` en `enum UsageEndedReason`. Raakt `tasks` niet (IDEA-213-adoptiepin), bevat geen GRANT. - **Contracts** (additief, `migrationId` gezet, dispatch/projector leeg, geen PUBLIC, geen `columnGrants`): - `task_estimates`: web/preparedWeb alleen `SELECT, INSERT`, observer `SELECT` — een schatting is na `create_task` bevroren, ook in de database (spec §5.2). - `usage_segments`, `usage_lines`: dezelfde rechten als `notes`. ## Test - `__tests__/lib/db-access/usage-ledger-contracts.test.ts` — op het échte profiel: additief afgesplitst, gesloten set nog op de IDEA-227-pin, bevriesgate op `task_estimates`, migratie zonder GRANT en zonder `ALTER TABLE "tasks"`. - `__tests__/db/usage-ledger-migration.test.ts` — de SQL zelf (enum, sleutels, FK-gedrag, alleen SQL). - `additive-contracts-cli.test.ts` — de echte CLI-preamble met notes + usage-contracts komt tot de receipt-stap. - `npm run verify` groen (3942 tests), `npm run build` groen. - `npm run test:dispatch` groen (35/35) op een wegwerp-Postgres 17 (`test-db.mjs provision`, `migrateAdditive`). ## Productie (alleen met JP) Nieuwe policy-bundle voor de merge-commit en `POLICY_HASH` zetten vóór de deploy (het profiel zit in `DB_ACCESS_HASH_FILES`); daarna de receipt-gebonden check: geen `SCHEMA_DRIFT`, geen `UNCONTRACTED_OBJECT`, geen `DB_ACCESS_ADDITIVE_CONTRACT_*`-weigering. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(db): task_estimates, usage_segments, usage_lines (IDEA-235 T6)
All checks were successful
CI / DB Access Policy Gate (pull_request) Successful in 2m25s
CI / Lint, Typecheck, Test & Build (pull_request) Successful in 4m46s
CI / Queue Dispatch Guard Gate (pull_request) Successful in 2m51s
CI / Deploy Manual (workflow_dispatch) (pull_request) Has been skipped
CI / DB Access Production Sentinel (pull_request) Successful in 1m16s
CI / Detect deploy-relevant changes (pull_request) Has been skipped
CI / Deploy Preview (PR) (pull_request) Has been skipped
CI / Deploy Production (main) (pull_request) Has been skipped
75f24caf55
Additive tabellen voor schattingen en sessie-usage, zonder kolommen op tasks
(IDEA-213-adoptiepin). Schema uit scrum4me-shared (bump naar
feat/idea-235-usage-tables), migratie 20261005080000_usage_ledger 1:1 uit
prisma migrate diff, en drie additieve contracts: task_estimates alleen
SELECT/INSERT voor elke rol (bevriezen in de database), usage_segments en
usage_lines met de rechten van notes. Geen GRANT in de migratie; de rechten
convergeren via applyContracts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
s4m-codex-reviewer left a comment

COMMENT

Geen bewezen blokkerende codefinding; wel onvoldoende bevestigde verificatie voor APPROVED.

Findings:

  • warning — .github/workflows/ci.yml:22 — Forgejo meldt voor head 75f24caf550de62dc8d7e3836afecb2e6abb6e45 een falende check CI / Lint, Typecheck, Test & Build; Queue Dispatch Guard Gate was nog lopend. De oorzaak van de CI-fout is niet vastgesteld. Bevestig groene verify/build/dispatch-gates voordat deze wijziging wordt geïntegreerd.
  • info — vendor/scrum4me-shared:1 — De gepinde schemawijziging komt uit scrum4me-shared#70, die bij controle nog open en ongemerged was. Houd de expliciet beschreven mergevolgorde aan: eerst shared#70.

Plan gekoppeld via pr_refs; references: T-2005, story ST-1630. Er is niets omitted/afgekapt. De PR claimt uitsluitend IDEA-235 T6 af te ronden. De drie modellen, migratie, additieve contracts en tests sluiten inhoudelijk aan op die scope. De overige storyonderdelen (MCP-opslag, mod en ceremonie-instructies) horen bij volgende PR's en zijn geen blokkerende omissie.

Beoordeeld tegen product-runbook Database access policy en het gekoppelde taakplan: geen fysieke wijziging aan tasks, geen GRANT in de migratie, migrationId op de drie contracts, lege dispatch/projector/PUBLIC-rechten en maximaal SELECT/INSERT op task_estimates. De bestaande migrateAdditive-harness neemt de nieuwe contractmigratie automatisch mee. De productieprocedure voor een nieuwe policy-bundle/POLICY_HASH staat in de PR; er is geen productieactie uitgevoerd.

Verificatie: PR/head via Forgejo en Git opgelost; submodule beschikbaar; schema opnieuw gegenereerd zonder diff; statische contract-/migratiechecks en gerichte ESLint-check geslaagd. De lokale Vitest-herhaling kon niet starten door uitvoeringsbeperkingen op /tmp (native module: failed to map segment), dus dit is geen vastgestelde testregressie. De door de auteur gemelde 3942 tests, build en 35 dispatch-tests zijn niet lokaal gereproduceerd. DB Access Policy Gate was groen. Verdict volgt de safe-default bij resterende verificatietwijfel.

## COMMENT Geen bewezen blokkerende codefinding; wel onvoldoende bevestigde verificatie voor APPROVED. Findings: - **warning — .github/workflows/ci.yml:22** — Forgejo meldt voor head `75f24caf550de62dc8d7e3836afecb2e6abb6e45` een falende check **CI / Lint, Typecheck, Test & Build**; **Queue Dispatch Guard Gate** was nog lopend. De oorzaak van de CI-fout is niet vastgesteld. Bevestig groene verify/build/dispatch-gates voordat deze wijziging wordt geïntegreerd. - **info — vendor/scrum4me-shared:1** — De gepinde schemawijziging komt uit scrum4me-shared#70, die bij controle nog open en ongemerged was. Houd de expliciet beschreven mergevolgorde aan: eerst shared#70. Plan gekoppeld via pr_refs; references: **T-2005**, story **ST-1630**. Er is niets omitted/afgekapt. De PR claimt uitsluitend IDEA-235 T6 af te ronden. De drie modellen, migratie, additieve contracts en tests sluiten inhoudelijk aan op die scope. De overige storyonderdelen (MCP-opslag, mod en ceremonie-instructies) horen bij volgende PR's en zijn geen blokkerende omissie. Beoordeeld tegen product-runbook **Database access policy** en het gekoppelde taakplan: geen fysieke wijziging aan `tasks`, geen GRANT in de migratie, migrationId op de drie contracts, lege dispatch/projector/PUBLIC-rechten en maximaal SELECT/INSERT op `task_estimates`. De bestaande `migrateAdditive`-harness neemt de nieuwe contractmigratie automatisch mee. De productieprocedure voor een nieuwe policy-bundle/POLICY_HASH staat in de PR; er is geen productieactie uitgevoerd. Verificatie: PR/head via Forgejo en Git opgelost; submodule beschikbaar; schema opnieuw gegenereerd zonder diff; statische contract-/migratiechecks en gerichte ESLint-check geslaagd. De lokale Vitest-herhaling kon niet starten door uitvoeringsbeperkingen op /tmp (native module: failed to map segment), dus dit is geen vastgestelde testregressie. De door de auteur gemelde 3942 tests, build en 35 dispatch-tests zijn niet lokaal gereproduceerd. DB Access Policy Gate was groen. Verdict volgt de safe-default bij resterende verificatietwijfel.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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!304
No description provided.