Skip to content

docs(adr): ADR-0050 records that Composer runs as prisma deploy and prisma dev; ADR-0049 gains its rejected alternatives - #347

Merged
wmadden merged 13 commits into
mainfrom
docs/adr-retire-prisma-composer-binary
Oct 8, 2026
Merged

wmadden merged 13 commits into
mainfrom
docs/adr-retire-prisma-composer-binary

Conversation

@wmadden-electric

@wmadden-electric wmadden-electric commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

A reader of ADR-0003 today is told:

prisma-composer deploy src/module.ts

That command no longer exists. What actually runs is:

prisma deploy src/module.ts       # deploy
prisma dev src/module.ts          # run locally
# teardown and logs: the destroy and log operations from @prisma/composer/control, called from a script

Decision

This PR adds ADR-0050: Composer runs as prisma deploy and prisma dev; it has no binary of its own. It records a decision that was already implemented in #331 but never written down, and amends the ADRs that still describe the old binary. Separately, it adds to ADR-0049's alternatives the rejected ways to keep a Composer-owned effect check, marked as an amendment.

What the ADR records

  1. @prisma/composer-cli declares no bin. It ships only the command family that the prisma CLI (prisma/prisma-cli) mounts. The prisma CLI mounts exactly two Composer commands: prisma deploy <entry> and prisma dev <entry>.
  2. deploy and dev are mounted at the root as bare verbs on purpose, like prisma init, rather than under a noun (prisma project deploy). Most prisma commands are noun then verb (prisma auth login).
  3. destroy and log have no command. They stay as operations on @prisma/composer/control, and the guides show a short script for each. A teardown script needs PRISMA_SERVICE_TOKEN and PRISMA_WORKSPACE_ID; it cannot use the prisma auth login session.
  4. Mounting destroy was rejected. The CLI's destructive verb is delete, and no Composer command takes --production (prisma deploy targets production by leaving out --stage). Where teardown and logs belong in the prisma command tree is not decided; that is tracked in TML-3521. Until then agents, like users, need a script to read prisma dev logs, and the ADR records that cost against the Agent-first principle.
  5. Inside this repository, examples and CI run the published prisma CLI with a root pnpm override pointing @prisma/composer-cli at the workspace. CI teardown is scripts/composer-destroy.ts. The example destroy scripts keep --production / --stage; those flags only name the operation's two targets for this repository's scripts and are not a public command grammar. The ADR records that this was accepted.
  6. scripts/lint-retired-binary-name.mjs fails CI on the old binary name in user-facing files. docs/design/ is not scanned, so ADRs can keep their history.

What else changes

  • Amendment notes under the title of ADR-0003, ADR-0006, ADR-0007, ADR-0024, ADR-0041 and ADR-0043, as ADR-0017 carries for ADR-0049. Inline notes stay only where the old text would otherwise mislead: ADR-0006 (--name), ADR-0024 (the "destroy names its target" rule) and ADR-0043 (the CLI renders two of the four operations). History in the bodies is untouched.
  • ADR index: a new ADR-0050 entry, and amendment annotations on the entries for ADR-0003, 0006, 0007, 0024, 0041 and 0043.
  • ADR-0049 alternatives, marked with an amendment note under its title: adds the rejected alternatives to failing fast on a broken effect tree (an engine veto hook, Composer loading the config itself, an import-time check in @prisma/composer/config, lazy Alchemy imports in the /control entries), and states the exit code (2) of CLI.CONFIG_UNREADABLE.
  • Domain docs (deploy-cli.md, local-dev.md, 10-domains/README.md, core-model.md, module-composition.md, glossary.md): command names updated to prisma deploy / prisma dev, and destroy / log described as operations. These are living docs, so they are edited in place. Every remaining description of prisma-composer.config.ts as Composer's config file, in deploy-cli.md, core-model.md and module-composition.md, now says the composer section of prisma.config.ts, per ADR-0049. No doc under docs/design/ outside the ADR bodies still names the old file. deploy-cli.md also lists all four deploy flags and the CONFIG.FIELD_RETIRED / CONFIG.FILE_RETIRED errors. local-dev.md now gives log's real tail default (0), drops a claimed pointer from dev to log that the code does not print, and describes local Postgres as the @prisma/dev servers the emulator hosts, not the ORM CLI's prisma dev command.

Docs only. Checks: pnpm lint (exit 0; existing warnings only), pnpm lint:retired-binary-name (clean), and a relative-link check over the changed docs (no new broken links).

Alternatives considered

  • Amend the ADRs without a new ADR: rejected. The retirement and the resulting command surface are a durable decision with their own reasoning (why deploy and dev are bare, why destroy has no command). This repository's rule is that a decision future readers need to understand gets an ADR (docs/design/90-decisions/README.md).
  • Rewrite the old ADRs' examples to the new commands: rejected. ADRs are append-only; amendment notes keep the record honest about what was decided when.

Refs: TML-3340, TML-3521 (where teardown and logs go in the command tree). Related: #331 (binary removed), prisma/prisma-cli#330 (first pinned the host to Composer 0.26.0, the first version without the binary; the host now pins 0.28.0).

Agent: saruman-38

🤖 Generated with Claude Code

wmadden-electric and others added 5 commits October 8, 2026 09:37
…risma dev

Retires the prisma-composer binary in the design record and indexes the
ADRs it amends.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…n a broken effect tree

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…, prisma dev and the destroy and log operations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…edentials precisely

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
@prisma-gizmo

prisma-gizmo Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

✅ Gizmo reviewed a317dad — posted 0 inline comment(s) this pass.

Open findings: none

Change walkthrough

This PR writes down a decision that #331 implemented but never recorded: Composer has no binary of its own — the prisma CLI mounts exactly two Composer commands, prisma deploy <entry> and prisma dev <entry>. It adds ADR-0050, amends the ADRs that still describe the retired prisma-composer binary, and updates the living domain docs to match.

ADRs. ADR-0050 records the two-command surface, why deploy/dev are mounted as bare root verbs, why a destroy command was rejected, and that destroy/log remain @prisma/composer/control operations called from scripts — with TML-3521 tracking where they land in the command tree. ADR-0049 gains the rejected alternatives for keeping a Composer-owned effect check. ADRs are treated as append-only: ADR-0003, 0006, 0007, 0024, 0041 and 0043 get amendment notes under their titles, with inline corrections only where the old text would mislead.

Domain docs. deploy-cli.md, local-dev.md, the 10-domains index, core-model, module-composition and the glossary are edited in place: new command names, destroy/log described as operations, and every stale prisma-composer.config.ts description replaced with the composer section of prisma.config.ts per ADR-0049. local-dev.md fixes log's real tail default and describes the Postgres emulator as @prisma/dev servers.

CI. scripts/lint-retired-binary-name.mjs fails CI on the old binary name in user-facing files while exempting docs/design/ so ADR history survives.

Delta since the last pass. The glossary's provisioning-plane entry was refreshed to alchemy@2.0.0-beta.81 / effect@^4.0.0, consistent with the merge from main that moved the public packages from exact effect pins to alchemy's semver range, and the 10-domains index now says deploy-cli.md and local-dev.md rest on ADR-0049 and ADR-0050.

@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 34337c8b-8e3b-4455-8d2d-0e70a55134fe
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

…ser section of prisma.config.ts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>

@prisma-gizmo prisma-gizmo Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New findings: 🟡 1 minor · trace

Comment thread docs/design/10-domains/README.md

@prisma-gizmo prisma-gizmo Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No critical or major Gizmo finding is open and the head commit has been reviewed. Approving.

wmadden-electric and others added 3 commits October 8, 2026 09:48
…og, and weighs the cost to agents

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…/dev Postgres emulator as they are

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
@wmadden-electric wmadden-electric changed the title docs(adr): ADR-0050 records that Composer runs as prisma deploy and prisma dev, with no binary of its own docs(adr): ADR-0050 records that Composer runs as prisma deploy and prisma dev; ADR-0049 gains its rejected alternatives Oct 8, 2026
wmadden-electric and others added 2 commits October 8, 2026 09:51
…servers and dev takes --name

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…s, users and agents

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>

@prisma-gizmo prisma-gizmo Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New findings: none · trace

Still open from previous reviews: 🟡 1 minor

@prisma-gizmo prisma-gizmo Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No critical or major Gizmo finding is open and the head commit has been reviewed. Approving.

@wmadden
wmadden enabled auto-merge (squash) October 8, 2026 14:38
wmadden-electric and others added 2 commits October 8, 2026 16:40
…st on ADR-0049 and ADR-0050

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>

@prisma-gizmo prisma-gizmo Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New findings: none · trace

@prisma-gizmo prisma-gizmo Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No critical or major Gizmo finding is open and the head commit has been reviewed. Approving.

@wmadden
wmadden merged commit 1f695dc into main Oct 8, 2026
21 checks passed
@wmadden
wmadden deleted the docs/adr-retire-prisma-composer-binary branch October 8, 2026 15:05
RyanGarber pushed a commit to RyanGarber/prisma-orm-tmep that referenced this pull request Oct 9, 2026
```
$ git diff --stat main...HEAD | tail -1
 25 files changed, 1 insertion(+), 2833 deletions(-)
```

This closes the one-config-file project. It deletes the project's
working folder, `projects/one-config-file/`, and fixes one duplicate
number in the failure-mode catalogue. Linear: TML-3340.

The project moved Prisma Composer's configuration out of its own
`prisma-composer.config.ts` into the `composer` section of
`prisma.config.ts`, and deleted Composer's standalone `prisma-composer`
binary. Prisma 8 now has one CLI and one config file. The rest of this
description is the close-out record the Drive process asks for: what was
checked, where each decision now lives, and where each unfinished item
is tracked.

## What was delivered

| PR | What it did |
| --- | --- |
| prisma/composer#328 | Composer's configuration is the `composer`
section of `prisma.config.ts`. The old file and `configPath` are
refused. |
| prisma/composer#331 | The `prisma-composer` binary is gone. Docs,
examples and the shipped skill say `prisma deploy` and `prisma dev`.
Released as Composer 0.26.0. |
| prisma/prisma-cli#330 | The `prisma` host runs Composer 0.26.0.
Released as `prisma@8.0.0-rc.20`. |
| prisma/web#8387 | The public Composer docs describe the `composer`
section. |
| prisma/composer#332 | Found during testing: `prisma dev` and `prisma
deploy` failed in pnpm projects. Merged, not yet released (TML-3520). |
| prisma/composer#333 | An emulator test race that made CI flaky, plus
`PRISMA_COMPOSER_EMULATORS_DIR`. |

Three more PRs came out of this close-out and are open:

- prisma/composer#347 writes ADR-0050, which records the binary's
retirement. Without it the close-out failed the ADR audit, and four
older ADRs still described `prisma-composer` as the entry point.
- prisma/web#8415 fixes a tutorial page that still told readers to write
`prisma-composer.config.ts`.
- prisma/pdp-control-plane#5608 makes the platform's Compute import flow
write the `composer` section into `prisma.config.ts`, and recognise
repositories that already have it. Until now it wrote
`prisma-composer.config.mjs` and pinned Composer 0.25.0, so imported
repositories broke on upgrading to 0.26.0.

## Definition of Done

| Item | Verdict | Evidence |
| --- | --- | --- |
| orm-demo has one config file, and `prisma deploy` and `prisma dev` run
against it from the host | Met, with deviations | `examples/orm-demo`
has only `prisma.config.ts`. `prisma dev` from the host build reached
ready (slice 3 QA). A real `prisma deploy` of orm-demo succeeds in
Composer's e2e workflow on `main`, using the published host with the
workspace family. No deploy ran from the host build itself, because no
service token was available. |
| The old file and `configPath` get their diagnostics | Met, with a
deviation | `CONFIG.FILE_RETIRED` and `CONFIG.FIELD_RETIRED`, exit 2,
from the host binary. Shown with `prisma dev`, because `deploy` checks
credentials before reading the config. Both commands use the same
validator. |
| A broken `effect` install fails with `CLI.CONFIG_UNREADABLE`, and
`prisma --version` still works | Met, with the same deviation | Slice 3
QA, step 5. |
| Published packages have no `bin` and no stale name | Met |
`@prisma/composer-cli` and `@prisma/composer` 0.28.0 declare no `bin`.
Their unpacked tarballs name the old file only in the messages that
refuse it. |
| A CI check keeps the old name out | Met | `pnpm
lint:retired-binary-name` runs in CI. Its test plants a mention and
expects a failure. |
| TML-3340 Done, web pages updated | Met | TML-3340 is Done with a
closing comment. One page missed by #8387 is fixed in prisma/web#8415. |
| The consolidation plan says `deploy` and `dev` stay bare | Met |
`projects/consolidate-clis/cli-consolidation-plan.md`, and now ADR-0050
in prisma/composer. |
| Retro run, ADR merged, folder deleted | Met once #347 and this PR
merge | The retro's lesson is failure mode F42. ADR-0049 is merged.
ADR-0050 is in #347. |
| Repository references to the folder removed | Met | Nothing outside
the folder links to it. |
| Manual QA for each user-facing slice | Met, with a deviation | Slice 3
has a QA transcript. Slices 1 and 2 recorded their manual QA in the
Verification sections of #328 and #331. |

## Where each decision lives now

Every decision recorded in the deleted spec and design notes has a home
outside the folder:

- **Composer's configuration is the `composer` section, validated by the
section, with the old file and field refused:** ADR-0049, and the
`CONFIG` code list in ADR-0044.
- **The `effect` version pre-flight is deleted; a broken tree fails with
the engine's error:** ADR-0049. #347 adds the four rejected
alternatives, which until now were only in #328's description.
- **The binary is retired, and `destroy` and `log` stay programmatic:**
ADR-0050 in #347.
- **`deploy` and `dev` stay bare commands; `destroy` is not mounted:**
ADR-0050, and the consolidation plan.
- **The examples' `destroy` scripts keep `--production` and `--stage`:**
ADR-0050 records this as a repository-internal script grammar, not a
public command.
- **Examples and CI run the published host with a workspace override:**
`gotchas.md` and `scripts/check-cli-engine-pin*.mjs` in prisma/composer,
which enforce it.
- **Composer runs the `alchemy` installed beside `@prisma/composer`:**
ADR-0007's amendment and `docs/design/10-domains/deploy-cli.md` in
prisma/composer.

## Deferred items and their tickets

| Ticket | Item |
| --- | --- |
| TML-3520 | Release Composer 0.29.0 and pin it in the host, so
`prisma@latest` gets the pnpm fix. |
| TML-3521 | Teardown and logs have no `prisma` command. |
| TML-3522 | Two checkouts of one app still share a local Postgres
server. |
| TML-3523 | A compute emulator test is too tight on time and flakes
under load. |
| TML-3524 | Composer's examples pin an older `prisma` host than
`latest`. |
| TML-3525 | Drop the exact `effect` pin once `effect` 4 is stable or
Alchemy pins its peer. |
| TML-3526 | dependency-cruiser skips the examples' `prisma.config.ts`.
|
| TML-3527 | Edge cases in how Composer starts Alchemy. |
| TML-3528 | prisma/asks and prisma/streams still use the retired config
or command. |

Two smaller review notes are accepted without tickets. The prisma-cli
conformance check needs a new exception on each joint engine release,
which is visible when it happens. Windows edge cases are out of scope,
because Windows is documented as unsupported for local tooling.

## What this PR deletes

Every file under `projects/one-config-file/` is transient under
`drive/project/README.md`: the spec, plan, design notes, retro log,
README, and each slice's spec, plan, grounding notes, reviews and QA
transcript. None is methodology to migrate. The decisions are mapped
above. The full files stay readable in the history of prisma/orm#30536.

## The failure-mode number

The retro added its lesson to `drive/calibration/failure-modes.md` as
F39. prisma/orm#30613 had already used F39 two days earlier. This PR
renumbers ours to F42, the next free number.

Agent: saruman-38

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
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.

2 participants