Day 3 wrap-up
Today you ran a vague brief through a framework built for a team, pushed a late change through it, and wrote a card someone else can read.
What you learned
- Lesson 1: a spec framework buys coordination, not quality.
- Lesson 2: the three share five stages and part on three axes: artifacts, ceremony, and how long a spec lives.
- Lesson 3: each framework answers the same five questions, from what it installs to what becomes of a spec after ship.
- Lesson 4: choose by the failure you have, with
no framework
as a real fourth answer. - Lesson 5: adopt on the next ticket, on the smallest subset, in artifacts a reviewer can read without the tool.
Review
Answer from memory; a question you cannot answer names the page to re-read.
- Name the four things a spec framework standardizes and one thing people expect it to fix that it does not touch. (Lesson 1)
- Which file makes a permission rule the team's rather than yours, and which file does
don't ask again
write to? (Lesson 5) - In OpenSpec, which delta header should a late change to a shipped requirement use, and
what does archiving it do to that requirement in
openspec/specs/, compared with an ADDED requirement under a new name? (Exercise 3) - Where does a LID
@specannotation belong, and why not on every helper function? (Lesson 3) - What do BMAD's six spec status values do that a folder of Markdown files does not? (Lesson 3)
- Explain
living specs versus expiring specs
with one framework as the example. Which does your team need? (Lesson 2) - Your framework went green but resolved an ambiguity without telling you. Which step today catches that? (Exercise 2)
- Day 3's brief had no acceptance criteria on purpose. Whose job was producing them, and what would writing them yourself first have broken? (Exercise 2)
- Which of Lesson 4's questions does
we changed this and did not know what depended on it
land on, and what does the answer point at? (Lesson 4) - You are adopting on a module with no tests. What do you build first, and why does the framework have to wait? (Lesson 5)
Challenges
Homework beyond the day's three hours, with no reveals or solutions; one is enough.
Challenges 1 and 3 start from a fresh day3-work.
1. A second track, and a recommendation
Take the third track, neither yours nor the one whose reference card Exercise 3 showed you, through Exercises 1 to 3, fill a second card from that run, and write your team the paragraph recommending one of the two: the failure it fixes, and when you will count its signal again. If you ran OpenSpec, that is LID; if LID, BMAD; if BMAD, OpenSpec.
A new map and card start only where none exists, so work in this order: from inside
day3-work, move your first ones aside with the line below, then run the reset in
Before you close the laptop, then re-run Exercise 1's setup and the new
track's install-and-init.
mv ../work/map.md ../work/map-first.md && mv ../work/comparison-card.md ../work/comparison-card-first.md && mv ../work/ambiguities.md ../work/ambiguities-first.md
If your first track was OpenSpec, there is nothing to turn off: its commands and skills
sit in day3-work/.claude/, which the reset replaces.
If your first track was LID, its plugins, installed at user scope, would load beside the second, so disable both in the shell tab before you start the second track:
claude plugin disable linked-intent-dev@jszmajda-lid
claude plugin disable arrow-maintenance@jszmajda-lid
Afterwards, run the same lines with enable. If you loaded LID through
Exercise 1's Network blocked?
box instead, nothing was installed: skip both lines and
start claude without --plugin-dir.
If your first track was BMAD, there is nothing to turn off: its skills sit in
day3-work/.claude/skills/, which the reset replaces.
2. The smallest-subset adoption note
Write the adoption note for your chosen framework: the three commands your team will run,
the artifacts you will commit, the parts you deliberately skip, and the one line of
CLAUDE.md it may cost, paid for by removing another. Keep it in
../work/.
3. Port Change C on the artifacts alone
Port Change C to the other lane from your framework's artifacts alone: no reading your implementation, no copying code. Where they fall short, note which line of which artifact was missing. The check is the other lane's acceptance suite, copied in as in Exercise 2's step 9; it needs that lane's toolchain from Setup: Swift 6.2, or a JDK 17 or later.
From inside day3-work, run your track's first line before the reset and its
second after the reset and install-and-init (on LID, skip the mapping run); it deletes the
brief, so the port reads only the artifacts. On OpenSpec, the first line also drops the late
change Exercise 3 left unarchived, so the port does not see a half-done change.
OpenSpec, where openspec list names the late change: put that name for
<late-change>, or drop the last rm if it prints No
active changes found.
rm -rf ../work/openspec && cp -R openspec ../work/ && rm -rf ../work/openspec/changes/<late-change>
cp -R ../work/openspec/. openspec/ && rm change-c-brief.md
LID, whose ## LID section ends CLAUDE.md:
rm -rf ../work/docs && cp -R docs ../work/ && sed -n '/^## LID$/,$p' CLAUDE.md > ../work/lid-section.md
cp -R ../work/docs . && cat ../work/lid-section.md >> CLAUDE.md && rm change-c-brief.md
BMAD:
rm -rf ../work/_bmad-output && cp -R _bmad-output ../work/
cp -R ../work/_bmad-output/. _bmad-output/ && rm change-c-brief.md
Save. Your map, card and ambiguities list sit in ../work/,
which no reset touches. Those are the keepers.
Reset, for another attempt. Quit Claude Code, then from inside
day3-work run your lane's line; for challenge 3, first switch the lane toggle at
the top to the other lane.
cd .. && rm -rf day3-work && cp -R sandbox/swift day3-work && cd day3-work
cd .. && rm -rf day3-work && cp -R sandbox/kotlin day3-work && cd day3-work
Then re-run the copy lines of Exercise 1's setup block (everything after its
cd day3-work), or for challenge 3 those of
Exercise 2's setup block, which also copy
the cycle fixture, and the challenge track's install-and-init steps: BMAD's installer runs
again, and /bmad-build halts without uv. OpenSpec on your PATH and
the LID plugins at user scope survive.
Done for good. Copy the keepers out of work/, Day 2's
included, then quit Claude Code and, from the course root, remove both folders:
rm -rf day3-work work
That leaves what was installed outside them. OpenSpec stays on your PATH until you run
npm uninstall -g @fission-ai/openspec (nothing to remove if you used the
npx form). If you ran LID, disable its plugins with Challenge 1's two
disable lines: on the build machine the two added about 1,090 tokens to every
session.
That is the course. Take your card to your team with one sentence naming the failure it fixes; no reference card exists for your own track, so yours is the first.
Sources
Framework documentation accessed 2026-09-22. Versions pinned for Day 3: OpenSpec 1.13.1, LID commit 831c1959, BMAD 6.12.0. Entries marked observed were recorded on the build machine on 2026-09-22.
openspec-13,openspec-14—## ADDED Requirementsand## MODIFIED Requirements, from OpenSpec concepts.- What
/opsx:archive's sync does with MODIFIED and ADDED requirements — OpenSpec 1.13.1's own command text, in this course's snapshot atday-3-choose-your-adventure/starter/vendored/openspec-1.13.1/project-files/.claude/commands/opsx/(archive.md,sync.md). openspec-01— the global install that putsopenspecon your PATH, from OpenSpec installation.openspec-04— release 1.13.1, from the OpenSpec latest release record.lid-11— the// @specformat, from the LID repository'sAGENTS.md, and its place on the topmost function that owns the behavior, not every helper, from the LID README.lid-25— commit 831c1959, from the LID commit record.lid-obs-02— observed: both LID plugins installed at user scope.lid-obs-10— observed:claude plugin disableon the installed LID plugins, and with them disabled, starting Claude Code with--plugin-dirpointing at the vendored LID plugins made their commands resolve.lid-obs-11— observed:claude plugin disableandclaude plugin enableturn each installed plugin off and back on, asclaude plugin --helplists them.lid-obs-04— observed: the two LID plugins adding about 1,090 tokens to every session.lid-obs-05— observed: the## LIDsection appended toCLAUDE.md.openspec-obs-02— observed:openspec initwriting theopenspec/folder.bmad-obs-05— observed: the BMAD install creating_bmad-output/.bmad-06—bmad-buildandbmad-build-autohalting whenuvis unavailable, from 6.11 on, from the BMAD changelog.bmad-12— the six frontmatter status values, from BMAD autonomous development loops.bmad-obs-01— observed: 6.12.0 as the publishedlatestofbmad-method.enterprise-11—.claude/settings.jsonas the committed file shared with everyone in the project and.claude/settings.local.jsonas the personal one, from Settings.cc-core-39—Yes, and don't ask again
saving the rule to.claude/settings.local.jsonat the root of the git repository, from Permissions.cc-core-32— the version this course was checked against, from the Claude Code changelog.