feat(schema): HubPermissionRule model + enums (approval-rules-sync) #50
No reviewers
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
janpeter/scrum4me-shared!50
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/hub-permission-rule"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Task 3a of the approval-rules-sync feature (Scrum4Me
docs/superpowers/plans/2026-08-14-approval-rules-sync.md, dubbel-GO na review).Voegt een nieuw
HubPermissionRule-model + 4 enums toe aan de canonieke shared-schema, zodat de hub de bron kan worden van gedeelde Claude Code permission-regels (beslissing blijft lokaal).Wat
model HubPermissionRule→ tabelhub_permission_rules(@@unique([scope, repo_key, rule, list])).HubPermissionRuleScope(GLOBAL/PRODUCT),HubPermissionRuleList(ALLOW/DENY/ASK),HubPermissionRuleOrigin(IMPORT/APPROVE_ALWAYS/SYNC_UPLOAD/MANUAL),HubPermissionRuleStatus(PENDING_CONFIRM/ACTIVE/DISABLED).Waarom veilig voor lockstep-consumers
Puur additief: geen bestaand model of enum wordt gewijzigd, geen bestaande enum krijgt een nieuwe waarde. Scrum4Me, workers en mcp blijven bouwen; elke consumer bumpt de submodule wanneer die het model adopteert (Scrum4Me doet dat in Task 3b: submodule-bump +
gen-schema.sh+ migratie).Validatie
De canonieke schema is een template zonder datasource (
CONSUMER-PLACEHOLDER); standaloneprisma validatedefaultet daarom de connector. Viagen-consumer-schema.sh(postgresql-datasource geinjecteerd) valideert de gegenereerde consumer-schema zonder enige fout op dit model/deze enums — de enige resterende meldingen zijn de bekende Prisma-7url/directUrl-in-schema die de consumer-gen-schema.shsowieso stript. De definitieve end-to-end-validatie (prisma validate+npm run verify+ migratie) draait in de consumer bij Task 3b.Graag mergen; daarna bump ik de submodule in Scrum4Me (Task 3b).
Verdict: REQUEST_CHANGES
Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
prisma/schema.prisma:1519—@@unique([scope, repo_key, rule, list])gebruiktrepo_key, maar die kolom is nullable. In PostgreSQL zijnNULL-waarden in een unique constraint niet gelijk aan elkaar, waardoor meerdere identieke globale regels metscope = GLOBAL,repo_key = NULL, dezelfderuleen dezelfdelistkunnen bestaan. Voor een canonieke permission-rule tabel breekt dit de deduplicatie/invariant die de constraint lijkt te willen afdwingen. Maak de key niet-null met een sentinel/expliciete scope-key, splits de uniqueness per scope, of gebruik een DB-specifieke oplossing dieNULLS NOT DISTINCT/expression uniqueness correct modelleert in de migrator.Review Log
Schema-eigenaarschap is conform de productdoc: de wijziging zit in
scrum4me-shared/prisma/schema.prisma, zonder consumer-migratie in deze repo. Door het nullable-unique probleem is de diff nog niet akkoord.Verdict: APPROVED
Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
De wijziging voegt alleen canonieke Prisma schema-definities toe in
scrum4me-shared, wat overeenkomt met de productdocs: dit repo is de single source of truth voor schema en consumers verzorgen migraties. De nullablerepo_key/global-scope randvoorwaarde is expliciet gedocumenteerd bij het model, inclusief de benodigde consumer-migratie voor partial unique index en CHECK constraint die Prisma DSL niet kan uitdrukken.