docs: ADR-0025 — the unit of composition is a Module (+ the vocabulary rubric that decided it)#51
Merged
Merged
Conversation
The naming.md tests decide product names; a container noun is all machinery to the user, so those tests have no purchase on vocabulary. Add the spoken-sentence rubric (grain sweep, repetition, install, publish, instance/artifact duality, adjacency, gloss test, prior-art check), the package/extension/unit register model, and the 'System' failure record that produced the tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
…odule() Supersede ADR-0014's unit noun: System failed the vocabulary rubric in practice (size floor, install/publish frames, repetition, gloss test) the moment the first small shared unit (cron) existed. Module passes every test; its prior art (Nest, Angular, Terraform) means exactly our meaning, and Nest's root-module-is-the-app convention corroborates 'the App is the outermost Module'. Canonize the register model — package (npm's word) / extension (config slot) / Module (composition) — and rule that identity is the registry's job: branded unit nouns are how we got Hex. Prism moves to the registry shortlist. Update naming.md, the vocabulary-tests outcome, ADR-0014's status, and the decisions index. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
wmadden
approved these changes
Jul 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two layers, one decision:
The decision — ADR-0025
The unit of composition is a Module, authored with
module(). Supersedes the unit-noun half of ADR-0014 — the framework (Prisma App), packages (@prisma/app*), CLI (prisma-app), and single-primitive model all stand. The App is the outermost Module.Why: "System" failed in practice the moment the first small shared unit (cron) existed — "install the cron system" is a category error (systems are operated, not installed), "this system uses the cron system and an image-resizer system" is barely sayable, and the deciding claim in ADR-0014 ("nobody says 'my auth module'") is false in the ecosystems nearest ours (Nest, Angular, Terraform). Nest's root-module-is-the-app convention — read by ADR-0014 as a collision — actually corroborates our model.
Also canonized:
prisma-app.config.tsslot) / Module (what you compose). "Use the cron module from the app-cloud extension."The rubric — vocabulary-tests.md
The naming.md tests decide product names; a container noun is all machinery to the user, so vocabulary gets its own spoken-sentence rubric: grain sweep, repetition, install, publish, instance/artifact duality, adjacency, gloss test, prior-art check — plus the "System" failure record that produced it.
Follow-up (separate PR, mechanical)
The repo-wide rename
system()→module()(code, types, file/dir names, README, glossary, domain docs, earlier ADRs' prose) is deliberately not in this PR — it lands as a mechanical sweep against ADR-0025, mirroring the Hex→System sweep.🤖 Generated with Claude Code