Skip to content

docs(target-extensible-ir-namespaces): consolidate umbrella + replan S1#549

Merged
wmadden merged 10 commits into
mainfrom
target-extensible-ir-namespaces-planning
May 20, 2026
Merged

docs(target-extensible-ir-namespaces): consolidate umbrella + replan S1#549
wmadden merged 10 commits into
mainfrom
target-extensible-ir-namespaces-planning

Conversation

@wmadden
Copy link
Copy Markdown
Contributor

@wmadden wmadden commented May 20, 2026

Why

Consolidates the target-extensible-ir-namespaces umbrella work into a single coherent on-disk project + replans its S1 sub-project (contract-ir-planes) with the descriptor mechanism + entity coordinate decisions from the 2026-05-20 planning conversation. Resolves the "multiple overlapping project folders" problem flagged at the start of the planning session.

Planning only — zero implementation work lands in this PR. Demo apps, package code, fixtures all untouched. No ticket attachments intended: planning PRs should not auto-link to the tickets they plan against (which would auto-close them on merge as if implementation work was completed).

What lands

New umbrella project: projects/target-extensible-ir-namespaces/

  • spec.md — purpose, scope (substrate + runtime qualification + explicit DSL surface only — no PSL substrate, no RLS), PDoD, A1-A5 assumptions
  • plan.md — single stack thread S1 → S2 → S3; pre-EA scope = S1 + S2; post-EA = S3
  • Scaffold dirs (slices/, adrs/, specs/, plans/, assets/) per drive convention

Rewritten S1 sub-project: projects/contract-ir-planes/

  • spec.md — D1-D8 decisions (two planes, uniform shape, plane names, object-pair refs, descriptor mechanism, entity coordinate, ADR-worthy, Tier 1 scope discipline), A1-A7 assumptions, OQ1-OQ5 implementer degrees of freedom
  • adrs/0001-contract-planes.md — durable architecture decisions (D1-D6, migrates to docs/architecture docs/adrs/ at close-out)
  • plan.md — 4-slice composition (substrate → enum migration → cross-references → cleanup); each slice ≤ 1 PR with internal dispatches

Linear audit executed

  • New tickets created under "Target-Extensible IR + Namespaces" for the four S1 slices
  • Subsumption comments added on the cleanup tickets that close when S1's slice PRs merge
  • Mainline tickets refreshed with consolidated context
  • Out-of-umbrella comments added on the standalone PR TML-2520: per-namespace storage IR + cross-namespace FKs  #534 follow-ups + descriptor-shape-backport ticket + PSL-substrate ticket

Archived

  • projects/target-extensible-ir/ and projects/namespace-exemplar/ removed from the tracked tree; content preserved at wip/archived-projects-2026-05-20/ on local worktrees (wip/ is gitignored)
  • 3,334 lines of superseded planning content deleted — one-number measure of the consolidation's justification

Drive retro

  • New win stanza in drive/retro/findings.md documenting the mid-flight application of the co-ship falsifier from a prior boundary finding. Caught a 6-slice composition that should have been 4 slices before locking it into Linear tickets.

Bonus: skills frontmatter fix

drive-discussion, drive-agent-personas, github-review-iteration carried disable-model-invocation: true despite their bodies listing legitimate auto-trigger contexts. Removed the gate; updated drive-discussion's description to enumerate when it should fire vs. when it should NOT.

What does NOT land

  • Any actual implementation work — this is planning only
  • Demo apps, package code, fixtures, examples — untouched
  • Slice execution begins after this PR merges; first slice's ticket exists in Linear under the project (look for the S1.A substrate slice)

Reviewer focus

Where the value is, in order of return-on-attention:

  1. projects/target-extensible-ir-namespaces/spec.md — does the umbrella's purpose + scope + PDoD match what you think we're shipping? Especially: pre-EA scope (S1 + S2 only) honest about the timeline implications.
  2. projects/contract-ir-planes/spec.md § Approach + § Decision log — the descriptor mechanism (D5) and entity coordinate (namespaceId, entityKind, entityName) (D6) are the load-bearing new decisions. The Tier 1 scope discipline (D8) names what's deferred to postgres-enum-finishing so the boundary stays sharp.
  3. projects/contract-ir-planes/plan.md § Composition — 4 slices, each ≤ 1 PR, with internal dispatches. The 4-slice carving was originally drafted as 6 slices and collapsed mid-flight per the co-ship falsifier (see drive/retro/findings.md win entry); re-eyes welcome.
  4. projects/contract-ir-planes/adrs/0001-contract-planes.md — durable architecture decisions. Migrates to docs/architecture docs/adrs/ at project close-out per PDoD9.

Commit history note

The history shows a draft 6-slice plan superseded by a 4-slice rewrite rather than squashing. The messy history is intentional — the retro stanza references it as a worked example of catching the co-ship falsifier in real time.

Linked tickets

The umbrella and its slices are tracked in Linear under Target-Extensible IR + Namespaces. This PR is planning work and does NOT close any of those tickets; their execution PRs will close them individually.

Summary by CodeRabbit

  • Documentation

    • Added retrospective findings documenting planning methodology lessons and best practices.
  • Improvements

    • Enabled previously disabled agent skills for expanded workflow capabilities.
    • Refined discussion skill activation with specific phase-based triggers and clearer usage boundaries.

Review Change Stack

@wmadden wmadden requested a review from a team as a code owner May 20, 2026 13:11
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 20, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 034a96b7-18b6-4fd8-a5a0-a5e51020641e

📥 Commits

Reviewing files that changed from the base of the PR and between 700a7f6 and 15f6159.

⛔ Files ignored due to path filters (22)
  • projects/contract-ir-planes/adrs/0001-contract-planes.md is excluded by !projects/**
  • projects/contract-ir-planes/plan.md is excluded by !projects/**
  • projects/contract-ir-planes/spec.md is excluded by !projects/**
  • projects/namespace-exemplar/plan.md is excluded by !projects/**
  • projects/namespace-exemplar/slices/pre-merge-fixups/spec.md is excluded by !projects/**
  • projects/namespace-exemplar/spec.md is excluded by !projects/**
  • projects/target-extensible-ir-namespaces/adrs/.gitkeep is excluded by !projects/**
  • projects/target-extensible-ir-namespaces/assets/.gitkeep is excluded by !projects/**
  • projects/target-extensible-ir-namespaces/plan.md is excluded by !projects/**
  • projects/target-extensible-ir-namespaces/plans/.gitkeep is excluded by !projects/**
  • projects/target-extensible-ir-namespaces/slices/.gitkeep is excluded by !projects/**
  • projects/target-extensible-ir-namespaces/spec.md is excluded by !projects/**
  • projects/target-extensible-ir-namespaces/specs/.gitkeep is excluded by !projects/**
  • projects/target-extensible-ir/learnings.md is excluded by !projects/**
  • projects/target-extensible-ir/m5a-consumer-audit.md is excluded by !projects/**
  • projects/target-extensible-ir/plan.md is excluded by !projects/**
  • projects/target-extensible-ir/spec.md is excluded by !projects/**
  • projects/target-extensible-ir/specs/3-layer-polymorphic-ir-convention.md is excluded by !projects/**
  • projects/target-extensible-ir/specs/architectural-principles.md is excluded by !projects/**
  • projects/target-extensible-ir/specs/mongo-control-adapter-spi.spec.md is excluded by !projects/**
  • projects/target-extensible-ir/specs/polymorphic-storage-types.md is excluded by !projects/**
  • projects/target-extensible-ir/specs/target-extensible-authoring.md is excluded by !projects/**
📒 Files selected for processing (4)
  • drive/retro/findings.md
  • skills-contrib/drive-agent-personas/SKILL.md
  • skills-contrib/drive-discussion/SKILL.md
  • skills-contrib/github-review-iteration/SKILL.md

📝 Walkthrough

Walkthrough

Adds two drive-plan-project trial findings (boundary and win) to drive/retro/findings.md, rewrites drive-discussion's invocation description, and removes disable-model-invocation flags from two skill metadata files to enable orchestrator-driven invocation.

Changes

Trial Findings and Orchestration Skill Refinement

Layer / File(s) Summary
Trial findings documentation
drive/retro/findings.md
Added a boundary finding explaining how the "1 slice = 1 PR" rule was enforced by identifying co-ship phrases as falsifiers for over-split plans, and a win finding demonstrating mid-flight application of that learning to collapse slices and reduce ticket count while preserving dispatch structure.
Skill invocation refinement and enablement
skills-contrib/drive-discussion/SKILL.md, skills-contrib/drive-agent-personas/SKILL.md, skills-contrib/github-review-iteration/SKILL.md
Rewrote drive-discussion's invocation contract to specify trigger moments (pre-/mid-spec phases, falsified assumptions, mid-flight obstacles, explicit requests) and exclusions (clarifying questions, implementation, pressure-testing), and removed disable-model-invocation: true flags from drive-agent-personas and github-review-iteration to enable orchestrator-driven auto-invocation.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • prisma/prisma-next#522: Main PR’s updates to drive/retro/findings.md (adding new boundary/win stanzas) and its edit to skills-contrib/drive-discussion/SKILL.md’s invocation triggers directly build on the retrieved PR’s Drive “retro” findings + drive-discussion skill documentation restructuring.

Poem

🐰
I hopped through plans and found the split,
“Co-ship” called out where slices must fit.
Skills woke softly, flags fell away—
One tidy plan for the work we’ll play.
Hooray for clearer lanes today!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'docs(target-extensible-ir-namespaces): consolidate umbrella + replan S1' is directly related to the main objective, which is consolidating target-extensible-ir-namespaces work into a single umbrella project and replanning the S1 sub-project (contract-ir-planes).

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch target-extensible-ir-namespaces-planning

Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 20, 2026

Open in StackBlitz

@prisma-next/extension-author-tools

npm i https://pkg.pr.new/@prisma-next/extension-author-tools@549

@prisma-next/mongo-runtime

npm i https://pkg.pr.new/@prisma-next/mongo-runtime@549

@prisma-next/family-mongo

npm i https://pkg.pr.new/@prisma-next/family-mongo@549

@prisma-next/sql-runtime

npm i https://pkg.pr.new/@prisma-next/sql-runtime@549

@prisma-next/family-sql

npm i https://pkg.pr.new/@prisma-next/family-sql@549

@prisma-next/extension-arktype-json

npm i https://pkg.pr.new/@prisma-next/extension-arktype-json@549

@prisma-next/extension-cipherstash

npm i https://pkg.pr.new/@prisma-next/extension-cipherstash@549

@prisma-next/middleware-cache

npm i https://pkg.pr.new/@prisma-next/middleware-cache@549

@prisma-next/mongo

npm i https://pkg.pr.new/@prisma-next/mongo@549

@prisma-next/extension-paradedb

npm i https://pkg.pr.new/@prisma-next/extension-paradedb@549

@prisma-next/extension-pgvector

npm i https://pkg.pr.new/@prisma-next/extension-pgvector@549

@prisma-next/extension-postgis

npm i https://pkg.pr.new/@prisma-next/extension-postgis@549

@prisma-next/postgres

npm i https://pkg.pr.new/@prisma-next/postgres@549

@prisma-next/sql-orm-client

npm i https://pkg.pr.new/@prisma-next/sql-orm-client@549

@prisma-next/sqlite

npm i https://pkg.pr.new/@prisma-next/sqlite@549

@prisma-next/target-mongo

npm i https://pkg.pr.new/@prisma-next/target-mongo@549

@prisma-next/adapter-mongo

npm i https://pkg.pr.new/@prisma-next/adapter-mongo@549

@prisma-next/driver-mongo

npm i https://pkg.pr.new/@prisma-next/driver-mongo@549

@prisma-next/contract

npm i https://pkg.pr.new/@prisma-next/contract@549

@prisma-next/utils

npm i https://pkg.pr.new/@prisma-next/utils@549

@prisma-next/config

npm i https://pkg.pr.new/@prisma-next/config@549

@prisma-next/errors

npm i https://pkg.pr.new/@prisma-next/errors@549

@prisma-next/framework-components

npm i https://pkg.pr.new/@prisma-next/framework-components@549

@prisma-next/operations

npm i https://pkg.pr.new/@prisma-next/operations@549

@prisma-next/ts-render

npm i https://pkg.pr.new/@prisma-next/ts-render@549

@prisma-next/contract-authoring

npm i https://pkg.pr.new/@prisma-next/contract-authoring@549

@prisma-next/ids

npm i https://pkg.pr.new/@prisma-next/ids@549

@prisma-next/psl-parser

npm i https://pkg.pr.new/@prisma-next/psl-parser@549

@prisma-next/psl-printer

npm i https://pkg.pr.new/@prisma-next/psl-printer@549

@prisma-next/cli

npm i https://pkg.pr.new/@prisma-next/cli@549

@prisma-next/emitter

npm i https://pkg.pr.new/@prisma-next/emitter@549

@prisma-next/migration-tools

npm i https://pkg.pr.new/@prisma-next/migration-tools@549

prisma-next

npm i https://pkg.pr.new/prisma-next@549

@prisma-next/vite-plugin-contract-emit

npm i https://pkg.pr.new/@prisma-next/vite-plugin-contract-emit@549

@prisma-next/mongo-codec

npm i https://pkg.pr.new/@prisma-next/mongo-codec@549

@prisma-next/mongo-contract

npm i https://pkg.pr.new/@prisma-next/mongo-contract@549

@prisma-next/mongo-value

npm i https://pkg.pr.new/@prisma-next/mongo-value@549

@prisma-next/mongo-contract-psl

npm i https://pkg.pr.new/@prisma-next/mongo-contract-psl@549

@prisma-next/mongo-contract-ts

npm i https://pkg.pr.new/@prisma-next/mongo-contract-ts@549

@prisma-next/mongo-emitter

npm i https://pkg.pr.new/@prisma-next/mongo-emitter@549

@prisma-next/mongo-schema-ir

npm i https://pkg.pr.new/@prisma-next/mongo-schema-ir@549

@prisma-next/mongo-query-ast

npm i https://pkg.pr.new/@prisma-next/mongo-query-ast@549

@prisma-next/mongo-orm

npm i https://pkg.pr.new/@prisma-next/mongo-orm@549

@prisma-next/mongo-query-builder

npm i https://pkg.pr.new/@prisma-next/mongo-query-builder@549

@prisma-next/mongo-lowering

npm i https://pkg.pr.new/@prisma-next/mongo-lowering@549

@prisma-next/mongo-wire

npm i https://pkg.pr.new/@prisma-next/mongo-wire@549

@prisma-next/sql-contract

npm i https://pkg.pr.new/@prisma-next/sql-contract@549

@prisma-next/sql-errors

npm i https://pkg.pr.new/@prisma-next/sql-errors@549

@prisma-next/sql-operations

npm i https://pkg.pr.new/@prisma-next/sql-operations@549

@prisma-next/sql-schema-ir

npm i https://pkg.pr.new/@prisma-next/sql-schema-ir@549

@prisma-next/sql-contract-psl

npm i https://pkg.pr.new/@prisma-next/sql-contract-psl@549

@prisma-next/sql-contract-ts

npm i https://pkg.pr.new/@prisma-next/sql-contract-ts@549

@prisma-next/sql-contract-emitter

npm i https://pkg.pr.new/@prisma-next/sql-contract-emitter@549

@prisma-next/sql-lane-query-builder

npm i https://pkg.pr.new/@prisma-next/sql-lane-query-builder@549

@prisma-next/sql-relational-core

npm i https://pkg.pr.new/@prisma-next/sql-relational-core@549

@prisma-next/sql-builder

npm i https://pkg.pr.new/@prisma-next/sql-builder@549

@prisma-next/target-postgres

npm i https://pkg.pr.new/@prisma-next/target-postgres@549

@prisma-next/target-sqlite

npm i https://pkg.pr.new/@prisma-next/target-sqlite@549

@prisma-next/adapter-postgres

npm i https://pkg.pr.new/@prisma-next/adapter-postgres@549

@prisma-next/adapter-sqlite

npm i https://pkg.pr.new/@prisma-next/adapter-sqlite@549

@prisma-next/driver-postgres

npm i https://pkg.pr.new/@prisma-next/driver-postgres@549

@prisma-next/driver-sqlite

npm i https://pkg.pr.new/@prisma-next/driver-sqlite@549

commit: 700a7f6

@wmadden wmadden changed the title TML-2584: consolidate umbrella + replan contract-ir-planes (S1) docs(target-extensible-ir-namespaces): consolidate umbrella + replan S1 May 20, 2026
wmadden added 10 commits May 20, 2026 15:42
…personas, github-review-iteration

Remove disable-model-invocation gate on three skills that already had clear
trigger language but were unnecessarily blocked from auto-invoke.

drive-discussion gets a rewritten description that names legitimate
auto-trigger contexts (pre-spec, mid-spec, falsified-assumption, obstacle,
explicit operator request) and the cases where it must NOT fire (simple
clarifying questions, implementation work, pressure-testing finished
artefacts). The old "Use ONLY when the user explicitly invokes this skill /
Never auto-invoke" line was contradicted by the body's own trigger list,
which already named pre-spec / mid-spec / mid-flight as legitimate
auto-trigger contexts and noted that workflow skills route here on
triggers 3/4.

drive-agent-personas: persona library is a load-time resource for other
skills; nothing about it requires gating on explicit invocation.

github-review-iteration: description already names the trigger phrases
("address PR review", "triage review comments", "iterate until review is
clean"). The manual gate added no value.

Signed-off-by: Will Madden <madden@prisma.io>
… branch

Pull the existing project spec + ADR 0001 from origin/contract-ir-planes
onto the planning branch so the S1 design (TML-2584) can be rewritten
in-place rather than coordinated across two branches. The contract-ir-planes
branch will be deleted after the rewrite lands.

The imported content is not the final state — scope-cuts agreed in this
planning round move enums out of the framework-shared types slot and defer
RLS / TML-2537 substrate work to separate projects. Rewrite happens next
under drive-discussion + drive-specify-project + drive-plan-project.

Signed-off-by: Will Madden <madden@prisma.io>
…tity coordinate

Rewrite of projects/contract-ir-planes/spec.md absorbing the design
discussion (architect + principal-engineer lenses) that pressure-tested the
target-pack-contributed entity-kind mechanism and sized the structural
refactor against drive's slice budget.

Key decisions captured:
- D1-D4 kept from the previous spec (two-plane shape, uniform indexing,
  domain/storage names, object-pair cross-references)
- D5 rewritten to front-load the descriptor mechanism: target packs
  contribute new entity kinds via AuthoringContributions.entityTypes;
  framework-shared storage.<ns>.types slot deleted as a load-bearing
  surface; framework-known built-ins (tables, collections) stay hardcoded
  as deliberate paid debt
- D6 new: entity coordinate (namespaceId, entityKind, entityName) becomes
  the canonical addressing primitive across migration disjoint calculation,
  planner diffing, validator collision checks, and cross-plane references
- D8 new: Tier 1 scope discipline. First-class user affordances (typed
  Role.member references, db.enums.X surface, codec value-narrowing) live
  in postgres-enum-finishing; this project ships only the structural
  relocation that satisfies PDoD3

Added to align with the modern drive-specify-project template:
- Functional + Non-Functional Requirements
- A1-A7 load-bearing assumptions named for I12 falsification
- OQ1-OQ5 implementer degrees of freedom

Predecessor PR #534 (TML-2520, namespace exemplar) is now merged at commit
66da80f; spec updates the predecessor framing accordingly.

Linked tickets unchanged: subsumes TML-2579, TML-2580, TML-2582; sibling
TML-2537 explicitly out of scope; follow-ups TML-2581/TML-2550, TML-2583
unchanged.

Signed-off-by: Will Madden <madden@prisma.io>
…ack mechanism

Tighter rewrite focusing on the durable architectural decisions:

- Decision 1: Two planes (domain, storage) - kept, lightly trimmed
- Decision 2: Uniform <plane>.<ns>.<entityKind>.<entityName> shape - kept,
  updated example to include pack-contributed postgresEnums slot
- Decision 3 (new): Canonical entity coordinate (namespaceId, entityKind,
  entityName) as the addressing primitive; explains the migration
  disjoint-calc dependency
- Decision 4: Object-pair cross-references - kept
- Decision 5 (new, was implicit): Pack-contributed entity-kind mechanism
  via AuthoringContributions.entityTypes; explicitly names the dual-surface
  (built-ins hardcoded + contributed kinds via descriptor) as deliberate
  paid debt
- Decision 6: Narrowed framework Namespace interface - kept, trimmed

Dropped:
- Process-meta sections (D6 ADR-worthy, D7 scope-cleavage from PR #534) -
  these are project-shaping decisions, not architecture decisions; live
  in spec.md
- "How the structural shape was chosen" narrative - chronology of design
  discussion doesn't belong in a durable architecture record
- "Cleanup work absorbed by this project" section - this is project-scope
  detail; spec.md owns it

Added alternatives G/H/I/J/K to cover the new design space the descriptor
mechanism and entity-coordinate decisions opened up (hardcoded-per-pack,
single generic entities slot, retrofit built-ins, pair-coordinate, string
coordinate).

This ADR is the durable artifact - migrates to docs/architecture docs/adrs/
at project close-out per PDoD9. The spec.md retains project-scope details
(Tier 1 scope discipline, A1-A7 assumptions, OQ1-OQ5 degrees of freedom).

Signed-off-by: Will Madden <madden@prisma.io>
Six slices structured as substrate → migration → propagation:

Stack (sequential):
- Slice 1 — Two-plane IR primitives + entity-coordinate primitive
- Slice 2 — Pack-contributed entity-kind descriptor mechanism
- Slice 3 — Migrate Postgres enum off framework-shared types slot
  (PDoD3 satisfied here; project-specific grep gate enforces)

Parallel group A (after stack):
- Slice 4 — Cross-reference encoding migration (object pairs)
- Slice 5 — On-disk contract regeneration + migration replay verification

Final:
- Slice 6 — Delete subsumed surfaces + close subsumed Linear tickets
  (grep gate enforces deletion completeness)

Each slice is ≤ 1 PR per drive sizing. Realistic budget ~10-12 days.

Slice 3 carries the project's single most-likely re-scope trigger: if
assumption A6 (no external consumers pinning shape) is falsified during
execution, Slice 3 splits into 3a (deprecation shim) + 3b (hard-cut).
Plan's working position is hard-cut.

Project-DoD coverage map shows every PDoD has at least one delivering
slice. Risks register names A4, A6, A7 falsification scenarios as
discussion-mode re-entry triggers per invariant I12.

Six Linear tickets need creating before slice pickup begins — folded into
the Linear audit pass that's coming up at the umbrella level. Tickets
intentionally not auto-created here because the umbrella's Linear audit
will resolve duplicate/stale tickets in the same pass.

Signed-off-by: Will Madden <madden@prisma.io>
…ect spec

Scaffold projects/target-extensible-ir-namespaces/ as the drive-project
umbrella for the target-extensible IR + first-class namespaces work.

The umbrella composes three units:
- S1: contract-ir-planes sub-project (TML-2584) — pre-EA
- S2: runtime-qualification slice (TML-2605) — pre-EA
- S3: explicit-namespace-dsl slice (TML-2550) — post-EA

S1 absorbs the Postgres-enum-as-exemplar migration that earlier framings
had as a separate S4 — it's exactly the load-bearing proof of S1's
descriptor mechanism, not a separately trackable unit.

The spec's load-bearing properties:
- Pre-EA scope (S1 + S2) ships zero user-facing query-API breakage. The
  D8 default-namespace family-façade fallback is the EA-protection
  mechanism: existing single-default-namespace consumers write the same
  query code they wrote before this umbrella.
- S1's substrate makes future pack-contributed entity kinds cheap. RLS
  policies, roles, sequences, materialised views — every Postgres-only
  feature the downstream Supabase initiative needs to ship is one
  descriptor registration through AuthoringContributions.entityTypes.

Honest estimate (A2): ~12-15 days for S1 (6 slices) + S2 = pre-EA slip
vs. the "few days" framing. Working position is to accept the slip
rather than ship breaking IR changes into EA.

Scaffold includes the drive-convention dirs (specs/, plans/, slices/,
assets/, adrs/) with .gitkeep files. specs/ and plans/ likely stay
empty — the umbrella delegates per-slice specs to slices/<slice>/spec.md
and per-sub-project specs/plans to the sub-project's own folder.

Signed-off-by: Will Madden <madden@prisma.io>
Single stack thread S1 → S2 → S3. No parallelisation at umbrella level
— each unit gates the next on substrate, not just convention.

S1 (sub-project, contract-ir-planes) decomposes internally into 6 slices
per its own plan; the umbrella plan delegates that detail rather than
duplicating it.

S2 (slice, runtime-qualification, TML-2605) gets a slice spec when picked
up via drive-specify-slice, lands at slices/runtime-qualification/.

S3 (slice, explicit-namespace-dsl, TML-2550) same pattern.

EA cut sits between S2 and S3 — pre-EA must-ship is S1 + S2; S3 is
post-EA additive on S2's default-namespace fallback.

PDoD coverage map shows every umbrella PDoD has a delivering unit.
Risks register names the EA-timeline slip (A2) as the load-bearing
project-level conversation; S1 falsification cascade as the most likely
re-sequencing trigger; A4 (default-namespace fallback sufficiency) as
the EA-protection-mechanism failure mode.

Close-out includes archiving the rolled-up sibling project folders
(target-extensible-ir/, namespace-exemplar/, contract-ir-planes/) per
drive's projects/ transient-folder discipline.

Signed-off-by: Will Madden <madden@prisma.io>
…o-ship falsifier

Applied the co-ship falsifier (drive/retro/findings.md 2026-05-20 boundary
entry) to the contract-ir-planes plan mid-flight, before locking the
slice composition into Linear tickets.

Plan changes:
- Previous Slice 1 (framework primitives) + Slice 2 (descriptor mechanism
  wiring) → S1.A "Substrate" (2 dispatches). The previous Slice 1
  description literally contained the co-ship falsifier: "no behavioural
  change yet because nothing consumes the new shape." Collapsed.
- Previous Slice 3 (enum migration) + half of Slice 5 (fixture regen) →
  S1.B (3 dispatches). Fixture regen is forced by the slot change, not
  a deliberate planning step; it's a dispatch within the slice that
  causes it.
- Previous Slice 4 (cross-references) + other half of Slice 5 → S1.C
  (2 dispatches). Same rationale.
- Previous Slice 6 → S1.D (4 dispatches). Stays separate — reviewers
  can focus on deletion correctness without conflating with structural
  changes; grep gate is its own quantitative PDoD check.

Total budget unchanged (~10-12 days); slice count drops 6 → 4; dispatch
count holds at ~11.

Retro entry (drive/retro/findings.md) captures the catch as a win — the
falsifier was named in the prior boundary finding; operator surfaced
the finding mid-discussion; agent re-read its own plan against the
rule rather than defending the original framing. The mechanism
(operator attaches prior finding → agent applies falsifier → plan
revises before mutation) is itself a reusable pattern worth promoting
upstream.

Group C in the Linear audit proposal now creates 4 tickets (S1.A
through S1.D) instead of 6.

Signed-off-by: Will Madden <madden@prisma.io>
Linear audit completed 2026-05-20. On-disk plans updated to reference the
actual ticket IDs created during the audit (were "TBD" before):

- TML-2622 = S1.A (substrate: primitives + descriptor mechanism)
- TML-2623 = S1.B (enum migration off framework-shared types slot — PDoD3)
- TML-2624 = S1.C (cross-reference encoding migration)
- TML-2625 = S1.D (cleanup + close subsumed tickets)

All four created with relatedTo TML-2584 (graph link, not sub-issues).

Umbrella plan's external dependencies section updated with full audit
outcome: mainline tickets refreshed, subsumed tickets noted (close on
slice PR merge via GitHub integration), out-of-umbrella tickets left in
project with explanatory comments.

Signed-off-by: Will Madden <madden@prisma.io>
…-exemplar

Both folders are superseded by the consolidated umbrella:

- projects/target-extensible-ir/ — substrate predecessor, now rolled
  into projects/target-extensible-ir-namespaces/ (umbrella spec) +
  projects/contract-ir-planes/ (S1 sub-project)
- projects/namespace-exemplar/ — TML-2520 / PR #534 shipping artifacts,
  now merged into main at commit 66da80f

Their decision content is captured in the umbrella + sub-project specs
and ADR. The transient working artifacts (slices/, reviews/, learnings,
plans) live in wip/archived-projects-2026-05-20/ on this worktree only
(wip/ is gitignored) for local reference if needed.

Resolves the "consolidate the projects into one directory" motivation
from the planning conversation: the on-disk projects/ tree now has one
umbrella + one sub-project for this work, not five overlapping folders.

Signed-off-by: Will Madden <madden@prisma.io>
@wmadden wmadden force-pushed the target-extensible-ir-namespaces-planning branch from 700a7f6 to 15f6159 Compare May 20, 2026 13:42
@wmadden wmadden merged commit 664a9ae into main May 20, 2026
10 of 11 checks passed
@wmadden wmadden deleted the target-extensible-ir-namespaces-planning branch May 20, 2026 13:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant