A4.2 · The triad · dive 2
The real triad
The three questions are real files on the Portal. The first web rung,
F6.1 · Bootstrap the Phoenix PortalThe first web rung: stand the F5 engine up as a Phoenix app, with one facade-backed route and a liveness route.View the spec ladder →, is specified by
f6.1.md, f6.1.stories.md, and
f6.1.llms.md — nothing more, nothing less.
The point is not the Phoenix detail; it is that one rung's specification is exactly three files, and each is shaped for one reader. Select a file on the right to read its scope, its audience, and its key sections — verbatim from the artifact table.
Select a file · read its row from the artifact table
Three files, one rung
The artifact table in specs.approach.md fixes what each file is. Reading it against
F6.1 turns the abstract triad into three concrete documents, each with a scope, an audience, and a fixed set of
sections.
f6.1.md is the spec: scope one rung, for an author and a reviewer, answering
what & why & done across Goal, Rationale, Scope, Deliverables, Invariants, and the Definition
of Done. Its Goal opens "After F6.1, the Portal runs as a Phoenix app". f6.1.stories.md
is the stories: for product and QA, answering who wants what across five Connextra stories with
Given/When/Then, ending with the Coverage line. f6.1.llms.md is the agent brief: for a
coding agent, answering how to build it, with proof gates across References, Requirements, the
execution topology, the agent stories, and the implementation prompt.
- f6.1.md
- The spec. One rung; humans (author, reviewer); what & why & done. Sections: Goal · Rationale (5W) · Scope · Deliverables (D1…D7) · Invariants (INV1…INV5) · Definition of Done.
- f6.1.stories.md
- The stories. One rung; humans (product, QA); who wants what, and how we'll know. Sections: Connextra stories (US1…US5) · Given/When/Then · INVEST +
encodes· the Coverage line. - f6.1.llms.md
- The agent brief. One rung; a coding agent; how to build it, with proof gates. Sections: References · Requirements (R1…R8) · Execution topology · Agent stories · the implementation prompt.
The three files cover the same rung from three sides. The next section shows they cover it with no overlap: every real F6.1 id lives in exactly one of them.
Every id has a home
If the three files partition the rung cleanly, then every identifier the spec mints — a deliverable, an invariant, a story, the Coverage line, a requirement — lives in exactly one file. Select a real F6.1 id and the readout names the file that holds it and quotes what it says.
The deliverable F6.1-D6 and the invariant F6.1-INV1 are in the contract. The story F6.1-US2 and the Coverage line are in the stories. The requirement F6.1-R1 is in the brief. No id appears twice; reading one file gives a reviewer the whole of one side of the rung and none of the others.
Pick a real F6.1 id · its file follows
A deliverable in the spec, a story in the stories, a requirement in the brief — every id has one home, so the three files partition the rung with no overlap.
The triad on the Portal
On the Portal, the artifact table reads the same for every rung; F6.1 is the worked instance. Each row names a file, the question it answers, and the F6.1 content that fills it. The spec carries the contract, the stories carry the user's side and the Coverage line that closes it, the brief carries the requirements and the prompt an agent runs.
The fragment below is the artifact table, read against F6.1. It is markdown specification text, not code: the file in one colour, the question in a comment, the F6.1 content as the result. Three rows, three files, one rung.
# specs.approach.md — the artifact table, read against F6.1. (markdown, not code) f6.1.md # what & why & done Goal · Rationale · Scope · Deliverables D1..D7 · Invariants INV1..INV5 · DoD f6.1.stories.md # who wants what US1..US5 (Connextra) · Given/When/Then · INVEST + encodes · Coverage line f6.1.llms.md # how to build, gated References · Requirements R1..R8 · Execution topology · Agent stories · prompt # One rung, three files — and every F6.1 id (D6, INV1, US2, R1, the Coverage line) sorts to one row.
The principle
A rung's specification is exactly three files, one per question — and they partition the whole specification, so every id has one home.
On the Portal
F6.1 is specified by f6.1.md / f6.1.stories.md /
f6.1.llms.md; D6 and INV1 in the spec, US2 and the Coverage line in the stories,
R1 in the brief.
One rung, three files — the spec the contract, the stories the user's side, the brief the agent's brief — partitioning the whole specification with no overlap.
Recap — the triad made concrete
F6.1's specification is three real files, each with a scope, an audience, and a fixed set of sections from the artifact table: the spec for the contract, the stories for the user's side, the brief for the agent. They cover the same rung from three sides with no overlap — every id lives in exactly one. The triad is not a Portal peculiarity; the closing dive shows the course holds itself to the same shape.
Next in A4.2: A4.2.3 · The course itself — chapter A4 specified by
a4.md / a4.stories.md / a4.llms.md,
the same triad one level up.
References
The sources behind the three-file triad, and where it connects in the course.
Sources
- Adzic, G. — Specification by Example — the spec file as the executable, shared contract.
- Cohn, M. — User Stories Applied — the stories file with its acceptance, the user's side of the rung.
- Agile Alliance — User-story template (Connextra) — the story form the F6.1 stories file is built from.
Related in this course
- A4.2 · The triad — the module hub.
- A4.2.1 · Which question? — the previous dive.
- A4.2.3 · The course itself — the next dive.
- A4 · The spec layer — the chapter.
- A0.2.2 · The four artifacts — the per-rung artifacts the triad is the core of.
- A1.04 · Two layers — the spec layer the triad lives in.
- F6 · The Portal on the web (Phoenix) — the chapter whose F6.1 triad is read here.