Skip to content

TDD 0072: [UI] in /prd-author, merged mocks in /tdd-author - #197

Merged
cahenesy merged 5 commits into
masterfrom
build/20261006-220142/0072-ux-in-prd-and-tdd-author
Oct 8, 2026
Merged

cahenesy merged 5 commits into
masterfrom
build/20261006-220142/0072-ux-in-prd-and-tdd-author

Conversation

@cahenesy

@cahenesy cahenesy commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Implements TDD 0072: wires the UX phase into the two existing authoring skills (PRD FR-89, FR-101, FR-10; ADR 0017). Plugin 3.53.0 → 3.54.0.

Stacked on #196 (TDD 0071), which is stacked on #194 (TDD 0070). Merge bottom-up: #194, then #196, then this PR. Auto-delete retargets each.

What changed

/prd-author (FR-89)

  • The interview asks whether each new or changed requirement changes a graphical web or mobile UI. A yes adds [UI] to the title.
  • A new self-review bullet checks the markers.
  • <!-- tl:ui-markers --> runs tl_ux_ui_reqs before the commit, so a malformed marker fails before it can silently skip /ux-author.
  • The commit body lists the UI requirements and points to /ux-author. A PRD with no UI changes says UI requirements: none.

/tdd-author (FR-101)

  • New step 1a, <!-- tl:ux-coverage -->, checks every in-scope [UI] id against the merged UX set. A stale or uncovered id prints throughline: <ID> is a [UI] requirement with no merged UX set …; run /ux-author first, or waive the mock. and offers three options: stop and run /ux-author, waive the mock with a 20–400 character rationale, or drop the id from this pass.
  • Waivers are recorded as assumption: entries in the PR body and as mock waived: <rationale> in the TDD's traceability row.
  • The PR body gains a UX coverage section.

tdd-lint (tl_lint_ux_citations, in tl_lint_all)

  • Every [UI] id in a TDD's PRD refs must cite its merged docs/ux/screens/<sid>/ paths, or record a non-empty waiver. Otherwise it reports major ux.citation.
  • A repo with no [UI] short-circuits, with no python3 needed.
  • The lint never fetches (THROUGHLINE_UX_NOFETCH=1).
  • A helper failure returns rc 2, never a false clean.

design-reviewer (FR-10)

  • A new UX coverage (FR-101) bullet: the design must honour the cited mocks and tokens.css, and a boilerplate waiver gets BLOCK ux-waiver.

Gates

Gate Result
test-first PASS: test(failing) 1794a43 precedes feat 3cd6695
ci-checks PASS (ux-pipeline 61/0)
runtime-verify (sonnet, mechanical) PASS: obs 1–10. tdd-lint gives identical exit codes on all 72 existing TDDs against master (51×0, 3×1, 18×2)
review PASS (security lens): the lint was traced with git and does not fetch; the plugin-root pin is restored after the call; no function-name collisions; ids are quoted and set -f is used

Deviations (accepted in review)

  • tests/implement-gate.test.sh registers the eval, and the version bump touches plugin.json and releases.json. All three are outside the declared Touched files.
  • tl_lint_ux_citations pins local -x CLAUDE_PLUGIN_ROOT to its own plugin tree, because the python helpers resolve through tl_plugin_root. The caller's value is restored afterwards.
  • The waiver rationale is the text up to the next | and must not be empty. This matches the TDD's obs 6.
  • The finding message also names the merged screen paths.

Non-blocking (follow-up candidates)

  • N1: tdd-lint.sh:422 stores its own directory as a relative path, so sourcing by relative path then changing directory returns rc 2. That failure is loud.
  • N2: two versions of ux.sh sourced into one shell could mix plugin trees. No production path does this.
  • N3: tdd-author doesn't show how to compute TL_IDS.
  • N4: the waiver example uses double quotes.
  • N5: a stale "All three lints" comment.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NpGG21Y2VGGhTQaFr4oshB

cahenesy and others added 5 commits October 7, 2026 18:57
…n lint, skill + reviewer text

Extracts the two new tl: blocks and runs them under env -i in temp repos
with merged indexes built by the 0070 helpers; drives tdd-lint.sh on
fixture TDDs (cited, missing, waived, stale, non-UI, helper failure).
Covers TDD 0072 Verification plan obs 1-9. Red until the feat commit.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NpGG21Y2VGGhTQaFr4oshB
…author

- tdd-lint: tl_lint_ux_citations (major ux.citation), wired into
  tl_lint_all. Short-circuits without sourcing ux.sh when the PRD has no
  [UI]; exports THROUGHLINE_UX_NOFETCH=1; pins the UX helpers to its own
  plugin tree; treats tl_ux_coverage rc 1 as a result; any helper failure
  is rc 2 with a named 'tdd-lint: ux:' message (L-005).
- prd-author: the [UI] interview rule (ui: <ID> entries), self-review
  bullet, the tl:ui-markers block, and the commit-body UI requirements
  section.
- tdd-author: step 1a tl:ux-coverage with the refusal sentence and the
  three-way question (stop / waive / drop), the citation rule, and the PR
  body UX coverage section.
- design-reviewer: the UX coverage (FR-101) bullet and BLOCK ux-waiver.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NpGG21Y2VGGhTQaFr4oshB
Base automatically changed from build/20261006-220142/0071-ux-author-skill to master October 8, 2026 00:13
@cahenesy
cahenesy merged commit 30a45b0 into master Oct 8, 2026
@cahenesy
cahenesy deleted the build/20261006-220142/0072-ux-in-prd-and-tdd-author branch October 8, 2026 00:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant