jonnifyagile agents
jonnify / Agile Agent Workflow / A4 · Spec / A4.2 / A4.2.2 · The real triad

A4.2 · The triad · dive 2

The real triad

The three questions are real files on the Portal. The first web rung, , 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

f6.1.md · the spec one rung · humans (author, reviewer) · what & why & done f6.1.stories.md · the stories one rung · humans (product, QA) · who wants what f6.1.llms.md · the agent brief one rung · a coding agent · how to build, with proof gates
f6.1.md (the spec) · scope: one rung · audience: humans (author, reviewer) · answers: what & why & done · sections: Goal, Rationale, Scope, Deliverables, Invariants, Definition of Done. On F6.1: Goal "the Portal runs as a Phoenix app", deliverables D1…D7, invariants INV1…INV5.

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

f6.1.md the spec f6.1.stories.md the stories f6.1.llms.md the brief each id lives in exactly one file · the three partition the rung
F6.1-D6 lives in f6.1.md (the spec): "a liveness route get /health returning 200 without touching the domain". A deliverable — what we build — so it is in the contract file, not the stories or the brief.

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

Related in this course