Repository navigation
A node depends on an interface or exposes one: retire Input and Output, rename the module body's inputs to deps - #398
Conversation
Input and Output were the words for the two ends of a connection, and they were ambiguous: the dataflow reading and the ports-and-adapters reading give the same two ends opposite names. The record settles the words the authoring surface already uses, deps and expose, with interface as the noun, and retires the port words. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
…tput The glossary defines Interface, Dependency and Exposed interface in place of Input, Output and Port; the domain map, layering map, authoring surface, example app, principles and domain docs use the same words. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
The one user-facing place that called a dependency an input. The shared modules, the example and the tests follow; the topology's port direction field says what in and out mean. Co-Authored-By: Claude Fable 5.1 <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 Fable 5.1 <noreply@anthropic.com> Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
|
✅ Gizmo reviewed 885170a — posted 0 inline comment(s) this pass. Open findings: none Change walkthroughThis PR retires the Input/Output vocabulary across Composer in favor of dependency / exposed interface — the words the authoring surface already uses ( Terminology and docs. The glossary, guiding principles, domain map, layering map, example-app narrative, and domain docs now describe a connection as wiring a node's dependency to another node's exposed interface. "Input" survives only in its unrelated meaning — the configuration document declared as Authoring surface. Deliberately unchanged. Two internal names keep the retired word — Tests. No behavior changes. The composition, authored-graph, resource-slot, and application-topology tests now destructure |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
commit: |
…interface The error texts still called a declared dependency an input and an exposed interface an output, and the skill still said ports. Co-Authored-By: Claude Fable 5.1 <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 Fable 5.1 <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 Fable 5.1 <noreply@anthropic.com> Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
At a glance
A module body receives its dependencies as
deps, the same word the boundary declares them with:And the design documents describe the same thing in the same words. The glossary, before and after:
What this PR changes
ModuleContext.inputsis renameddeps. The shared modules, the examples, the tests, the guide and the agent skill follow, with an upgrade note in the guide.directionfield keepsinandout, now documented as the dependency end and the exposed end.Why the words were ambiguous
Take a service
webthat offers an HTTP API and needs a database. Composer's documents named the two ends by dataflow: the API is an output, because other nodes callwebthrough it, and the database is an input, becausewebcalls it. Ports and adapters, the architecture most readers bring, names the same two ends the other way round: the API is an input port, because calls come intowebthrough it, and the database is an output port, because calls go out through it.Both are consistent. Every end has both aspects, who provides it and which way calls flow, and the two traditions weigh them differently. So a reader from either tradition read half the sentences in the glossary backwards. The design discussion behind this change went through exactly that, sentence by sentence, until it was clear the words were the problem rather than either reader.
The words that name the relationship
Whether a node depends on an interface or exposes one is a fact about the node, not a direction the reader has to pick. The authoring surface already said it:
depsandexpose. The record makes those the vocabulary:Contract, which keeps its name. An interface in Composer's terms is what ports and adapters calls a port; that analogy appears once, in the glossary, and "port" is not otherwise used, because Composer also has HTTP and TCP ports.deps.expose; a resource exposes the one interface itprovides, and a node may expose nothing."Input" keeps its other meaning, the configuration document a service or module declares as
input. That is not an end of a connection, and the glossary says so once.The one user-facing rename
The module body's
inputswas the only authoring-surface word that called a dependency an input. It is nowdeps, so the body reads like the boundary it forwards:({ deps, provision }) => provision(svc, { deps: { db: deps.db } }). The guide's module section carries the upgrade note. Two internal names keep the old word,ServiceNode.inputsandInputRef; renaming them reaches into the Prisma Cloud extension and the local target, so they are recorded as debt in.drive/deferred.md.The topology's wire field
The application topology sends each end's
directionasinoroutto the platform, and the Console draws them. The field is not renamed: it belongs to the Portal team's API, and its meaning is unambiguous once defined.inis a dependency,outis an exposed interface, and the type's doc comment now says so.Tests
No behaviour changes. The rename is covered by the existing module-composition, authored-graph, resource-slot and application-topology tests, which now destructure
deps;pnpm typecheckacross all 80 packages proves no caller was missed, and the fullpnpm testsuite passes. The website content test proves every guide link still resolves, and the skill packaging check proves the skill is still the one that ships.Alternatives considered
ctx.inputsanyway, flips the meaning of a public API field, and moves every end in the Console to the other side of its card, for words that stay ambiguous to the next reader.depsandexpose, and "provider" already means an Alchemy provider here.exposetoprovidesso services matchresource({ provides }). A user-facing rename for consistency between a keyword and a verb the prose no longer leans on; left for another day.Agent: hermione-26
🤖 Generated with Claude Code