@techierathore/techieflow 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/.claude/commands/TechieFlow/agents/analyst.md +5 -13
  2. package/.claude/commands/TechieFlow/agents/architect.md +1 -16
  3. package/.claude/commands/TechieFlow/agents/flow-master.md +42 -215
  4. package/.claude/commands/TechieFlow/agents/verifier.md +24 -64
  5. package/.claude/commands/TechieFlow/tasks/_metrics-emit-gate.md +24 -117
  6. package/.claude/commands/TechieFlow/tasks/_owner-language.md +26 -0
  7. package/.claude/commands/TechieFlow/tasks/_smoke-test-policy.md +20 -84
  8. package/.claude/commands/TechieFlow/tasks/_status-update-gate.md +10 -74
  9. package/.claude/commands/TechieFlow/tasks/_yolo-mode.md +20 -58
  10. package/.claude/commands/TechieFlow/tasks/amend-docs.md +21 -143
  11. package/.claude/commands/TechieFlow/tasks/build-phase.md +14 -224
  12. package/.claude/commands/TechieFlow/tasks/create-deep-research-prompt.md +4 -0
  13. package/.claude/commands/TechieFlow/tasks/create-doc.md +4 -0
  14. package/.claude/commands/TechieFlow/tasks/create-project-brief.md +22 -0
  15. package/.claude/commands/TechieFlow/tasks/day1-brownfield.md +31 -505
  16. package/.claude/commands/TechieFlow/tasks/day1-greenfield.md +28 -213
  17. package/.claude/commands/TechieFlow/tasks/deploy-checklist.md +19 -0
  18. package/.claude/commands/TechieFlow/tasks/devguide.md +10 -219
  19. package/.claude/commands/TechieFlow/tasks/facilitate-brainstorming-session.md +4 -0
  20. package/.claude/commands/TechieFlow/tasks/fix-issues.md +10 -129
  21. package/.claude/commands/TechieFlow/tasks/generate-html.md +5 -1
  22. package/.claude/commands/TechieFlow/tasks/handoff-phase.md +18 -16
  23. package/.claude/commands/TechieFlow/tasks/log-miss.md +19 -158
  24. package/.claude/commands/TechieFlow/tasks/metrics-report.md +3 -1
  25. package/.claude/commands/TechieFlow/tasks/mockups.md +12 -117
  26. package/.claude/commands/TechieFlow/tasks/refresh-status.md +9 -130
  27. package/.claude/commands/TechieFlow/tasks/split-brd.md +10 -126
  28. package/.claude/commands/TechieFlow/tasks/triage-and-fix.md +14 -0
  29. package/.claude/commands/TechieFlow/tasks/triage-issues.md +11 -152
  30. package/.claude/commands/TechieFlow/tasks/verify-phase.md +36 -572
  31. package/.opencode/plugin/techieflow.js +40 -13
  32. package/.tfcore/agents/analyst.md +5 -13
  33. package/.tfcore/agents/architect.md +1 -16
  34. package/.tfcore/agents/flow-master.md +42 -215
  35. package/.tfcore/agents/verifier.md +24 -64
  36. package/.tfcore/core-config.yaml +10 -0
  37. package/.tfcore/hooks/block-git.sh +4 -4
  38. package/.tfcore/hooks/guard-artifacts.sh +2 -2
  39. package/.tfcore/hooks/guard-build.sh +76 -0
  40. package/.tfcore/hooks/guard-db.sh +90 -0
  41. package/.tfcore/hooks/guard-metrics.sh +68 -0
  42. package/.tfcore/hooks/guard-status-html.sh +116 -71
  43. package/.tfcore/hooks/guard-status.sh +43 -16
  44. package/.tfcore/hooks/guard-verify-deps.sh +124 -0
  45. package/.tfcore/hooks/guard-verify.sh +70 -48
  46. package/.tfcore/hooks/sweep-artifacts.sh +2 -2
  47. package/.tfcore/install-manifest.yaml +0 -18
  48. package/.tfcore/routing.yaml +86 -14
  49. package/.tfcore/standards/coding-standards-core.md +61 -0
  50. package/.tfcore/standards/coding-standards-dotnet.md +93 -0
  51. package/.tfcore/tasks/_metrics-emit-gate.md +24 -117
  52. package/.tfcore/tasks/_owner-language.md +26 -0
  53. package/.tfcore/tasks/_smoke-test-policy.md +20 -84
  54. package/.tfcore/tasks/_status-update-gate.md +10 -74
  55. package/.tfcore/tasks/_yolo-mode.md +20 -58
  56. package/.tfcore/tasks/amend-docs.md +21 -143
  57. package/.tfcore/tasks/build-phase.md +14 -224
  58. package/.tfcore/tasks/create-deep-research-prompt.md +4 -0
  59. package/.tfcore/tasks/create-doc.md +4 -0
  60. package/.tfcore/tasks/create-project-brief.md +22 -0
  61. package/.tfcore/tasks/day1-brownfield.md +31 -505
  62. package/.tfcore/tasks/day1-greenfield.md +28 -213
  63. package/.tfcore/tasks/deploy-checklist.md +19 -0
  64. package/.tfcore/tasks/devguide.md +10 -219
  65. package/.tfcore/tasks/facilitate-brainstorming-session.md +4 -0
  66. package/.tfcore/tasks/fix-issues.md +10 -129
  67. package/.tfcore/tasks/generate-html.md +5 -1
  68. package/.tfcore/tasks/handoff-phase.md +18 -16
  69. package/.tfcore/tasks/log-miss.md +19 -158
  70. package/.tfcore/tasks/metrics-report.md +3 -1
  71. package/.tfcore/tasks/mockups.md +12 -117
  72. package/.tfcore/tasks/refresh-status.md +9 -130
  73. package/.tfcore/tasks/split-brd.md +10 -126
  74. package/.tfcore/tasks/triage-and-fix.md +14 -0
  75. package/.tfcore/tasks/triage-issues.md +11 -152
  76. package/.tfcore/tasks/verify-phase.md +36 -572
  77. package/.tfcore/telemetry/SCHEMA.md +100 -8
  78. package/.tfcore/telemetry/tf-metrics.sh +564 -32
  79. package/.tfcore/templates/stack-defaults/dotnet.md +35 -0
  80. package/.tfcore/templates/stack-questions.md +77 -0
  81. package/.tfcore/templates/v4custom/app-agents-md-tmpl.md +3 -4
  82. package/.tfcore/templates/v4custom/app-architecture-tmpl.md +107 -115
  83. package/.tfcore/templates/v4custom/app-brd-tmpl.md +108 -184
  84. package/.tfcore/templates/v4custom/app-brief-tmpl.md +65 -0
  85. package/.tfcore/templates/v4custom/app-checklist-tmpl.md +48 -73
  86. package/.tfcore/templates/v4custom/app-claude-md-tmpl.md +1 -1
  87. package/.tfcore/templates/v4custom/app-coding-standards-tmpl.md +52 -0
  88. package/.tfcore/templates/v4custom/app-decision-request-tmpl.md +85 -0
  89. package/.tfcore/templates/v4custom/app-deployment-checklist-tmpl.md +86 -0
  90. package/.tfcore/templates/v4custom/app-devguide-tmpl.md +69 -146
  91. package/.tfcore/templates/v4custom/app-library-feedback-tmpl.md +86 -31
  92. package/.tfcore/templates/v4custom/app-phases-tmpl.md +35 -0
  93. package/.tfcore/templates/v4custom/app-productguide-tmpl.md +38 -35
  94. package/.tfcore/templates/v4custom/app-project-status-tmpl.md +63 -73
  95. package/.tfcore/templates/v4custom/app-uidesign-tmpl.md +62 -37
  96. package/.tfcore/templates/v4custom/app-usageguide-tmpl.md +69 -54
  97. package/.tfcore/templates/v4custom/build-invocation-ladder.md +17 -180
  98. package/.tfcore/templates/v4custom/build-subagent-prompt.md +17 -0
  99. package/.tfcore/templates/v4custom/html-render-shell.md +1 -1
  100. package/.tfcore/templates/v4custom/metrics-report-template.md +2 -2
  101. package/.tfcore/user-guide.md +0 -23
  102. package/.tfcore/utils/__pycache__/tf-brd-status.cpython-312.pyc +0 -0
  103. package/.tfcore/utils/__pycache__/tf-checklist-edit.cpython-312.pyc +0 -0
  104. package/.tfcore/utils/__pycache__/tf-codex-bind.cpython-312.pyc +0 -0
  105. package/.tfcore/utils/__pycache__/tf-codex-telemetry.cpython-312.pyc +0 -0
  106. package/.tfcore/utils/__pycache__/tf-day1-files.cpython-312.pyc +0 -0
  107. package/.tfcore/utils/__pycache__/tf-devguide-list.cpython-312.pyc +0 -0
  108. package/.tfcore/utils/__pycache__/tf-doc-check.cpython-312.pyc +0 -0
  109. package/.tfcore/utils/__pycache__/tf-log-miss.cpython-312.pyc +0 -0
  110. package/.tfcore/utils/__pycache__/tf-misses-md.cpython-312.pyc +0 -0
  111. package/.tfcore/utils/__pycache__/tf-mockups-locate.cpython-312.pyc +0 -0
  112. package/.tfcore/utils/__pycache__/tf-opencode-audit.cpython-312.pyc +0 -0
  113. package/.tfcore/utils/__pycache__/tf-perf-grade.cpython-312.pyc +0 -0
  114. package/.tfcore/utils/__pycache__/tf-render-html.cpython-312.pyc +0 -0
  115. package/.tfcore/utils/__pycache__/tf-split-brd.cpython-312.pyc +0 -0
  116. package/.tfcore/utils/__pycache__/tf-status-facts.cpython-312.pyc +0 -0
  117. package/.tfcore/utils/__pycache__/tf-triage.cpython-312.pyc +0 -0
  118. package/.tfcore/utils/__pycache__/tf-verify-list.cpython-312.pyc +0 -0
  119. package/.tfcore/utils/__pycache__/tf-verify-verdict.cpython-312.pyc +0 -0
  120. package/.tfcore/utils/tf-brd-status.py +176 -0
  121. package/.tfcore/utils/tf-brd-status.sh +19 -0
  122. package/.tfcore/utils/tf-build-list.py +211 -0
  123. package/.tfcore/utils/tf-build-list.sh +21 -0
  124. package/.tfcore/utils/tf-build.sh +143 -0
  125. package/.tfcore/utils/tf-cdp-relay.ps1 +64 -0
  126. package/.tfcore/utils/tf-checklist-edit.py +133 -0
  127. package/.tfcore/utils/tf-day1-files.py +208 -0
  128. package/.tfcore/utils/tf-day1-files.sh +20 -0
  129. package/.tfcore/utils/tf-devguide-list.py +249 -0
  130. package/.tfcore/utils/tf-devguide-list.sh +18 -0
  131. package/.tfcore/utils/tf-doc-check.py +1369 -0
  132. package/.tfcore/utils/tf-doc-check.sh +29 -0
  133. package/.tfcore/utils/tf-emit.sh +545 -18
  134. package/.tfcore/utils/tf-fix-close.sh +115 -0
  135. package/.tfcore/utils/tf-gitignore-audit.sh +50 -3
  136. package/.tfcore/utils/tf-goal.sh +284 -66
  137. package/.tfcore/utils/tf-harness.sh +4 -9
  138. package/.tfcore/utils/tf-log-miss.py +197 -0
  139. package/.tfcore/utils/tf-log-miss.sh +14 -0
  140. package/.tfcore/utils/tf-misses-md.py +208 -0
  141. package/.tfcore/utils/tf-misses-md.sh +14 -0
  142. package/.tfcore/utils/tf-mockups-locate.py +66 -0
  143. package/.tfcore/utils/tf-mockups-locate.sh +18 -0
  144. package/.tfcore/utils/tf-model-pick.sh +475 -0
  145. package/.tfcore/utils/tf-opencode-audit.py +23 -7
  146. package/.tfcore/utils/tf-perf-grade.py +97 -0
  147. package/.tfcore/utils/tf-perf-grade.sh +12 -0
  148. package/.tfcore/utils/tf-phase.sh +92 -0
  149. package/.tfcore/utils/tf-render-html.py +20 -0
  150. package/.tfcore/utils/tf-routing-bind.sh +97 -6
  151. package/.tfcore/utils/tf-routing.sh +13 -7
  152. package/.tfcore/utils/tf-selfcheck.sh +323 -0
  153. package/.tfcore/utils/tf-split-brd.py +309 -0
  154. package/.tfcore/utils/tf-split-brd.sh +22 -0
  155. package/.tfcore/utils/tf-status-evidence.sh +68 -0
  156. package/.tfcore/utils/tf-status-facts.py +358 -0
  157. package/.tfcore/utils/tf-status-facts.sh +20 -0
  158. package/.tfcore/utils/tf-triage.py +243 -0
  159. package/.tfcore/utils/tf-triage.sh +16 -0
  160. package/.tfcore/utils/tf-verify-boot.sh +250 -0
  161. package/.tfcore/utils/tf-verify-emit.sh +110 -0
  162. package/.tfcore/utils/tf-verify-env.sh +88 -0
  163. package/.tfcore/utils/tf-verify-list.py +270 -0
  164. package/.tfcore/utils/tf-verify-list.sh +13 -0
  165. package/.tfcore/utils/tf-verify-screens.mjs +355 -0
  166. package/.tfcore/utils/tf-verify-screens.sh +31 -0
  167. package/.tfcore/utils/tf-verify-tests.sh +166 -0
  168. package/.tfcore/utils/tf-verify-verdict.py +292 -0
  169. package/.tfcore/utils/tf-verify-verdict.sh +15 -0
  170. package/.tfcore/utils/tf-yolo.sh +59 -0
  171. package/README.md +120 -1145
  172. package/docs/TechieFlow-Installation.md +1 -5
  173. package/opencode.jsonc +37 -33
  174. package/package.json +1 -5
  175. package/scripts/install.mjs +56 -46
  176. package/.claude/commands/TechieFlow/tasks/advanced-elicitation.md +0 -117
  177. package/.claude/commands/TechieFlow/tasks/author-brd.md +0 -79
  178. package/.claude/commands/TechieFlow/tasks/document-project.md +0 -343
  179. package/.claude/commands/TechieFlow/tasks/execute-checklist.md +0 -86
  180. package/.claude/commands/TechieFlow/tasks/index-docs.md +0 -173
  181. package/.claude/commands/TechieFlow/tasks/kb-mode-interaction.md +0 -75
  182. package/.claude/commands/TechieFlow/tasks/shard-doc.md +0 -185
  183. package/.codex/config.toml +0 -46
  184. package/.codex/hooks.json +0 -63
  185. package/.codex/rules/techieflow.rules +0 -8
  186. package/.tfcore/hooks/codex-adapter.py +0 -248
  187. package/.tfcore/tasks/advanced-elicitation.md +0 -117
  188. package/.tfcore/tasks/author-brd.md +0 -79
  189. package/.tfcore/tasks/document-project.md +0 -343
  190. package/.tfcore/tasks/execute-checklist.md +0 -86
  191. package/.tfcore/tasks/index-docs.md +0 -173
  192. package/.tfcore/tasks/kb-mode-interaction.md +0 -75
  193. package/.tfcore/tasks/shard-doc.md +0 -185
  194. package/.tfcore/templates/architecture-tmpl.yaml +0 -650
  195. package/.tfcore/templates/brownfield-architecture-tmpl.yaml +0 -476
  196. package/.tfcore/templates/competitor-analysis-tmpl.yaml +0 -306
  197. package/.tfcore/templates/front-end-architecture-tmpl.yaml +0 -218
  198. package/.tfcore/templates/fullstack-architecture-tmpl.yaml +0 -823
  199. package/.tfcore/templates/market-research-tmpl.yaml +0 -252
  200. package/.tfcore/templates/project-brief-tmpl.yaml +0 -221
  201. package/.tfcore/utils/techieflow-doc-template.md +0 -325
  202. package/.tfcore/utils/tf-codex-bind.py +0 -196
  203. package/.tfcore/utils/tf-codex-telemetry.py +0 -60
  204. package/WORKFLOW.html +0 -1986
@@ -1,122 +1,17 @@
1
1
  # mockups
2
2
 
3
- Produce the **UI design / mockups** for a greenfield app: a per-screen UI Design Spec (`docs/{AppName}-UIDesign.md`) plus **rendered HTML mockups** (`docs/mockups/*.html`) styled to look like TrBlazeUI, each annotated with a `region → TrBlazeUI control` component map. This is the visual design the build is matched against and the verifier's visual-truth gate diffs the live app against.
3
+ `*mockups {App} [screen|all] [--update]` produces the UI design: `docs/{App}-UIDesign.md`, one section per screen, and one HTML mockup per screen in `docs/mockups/`. The build implements from them; the verifier compares the built screen to them. Called by both day-1 tasks and by `*amend-docs`; `--update` refreshes only new or changed screens and leaves the rest untouched. Never edit source code here.
4
4
 
5
- ## Why this exists
5
+ First: `bash .tfcore/utils/tf-phase.sh start mockups {App}` prints the start time and marks the command running.
6
6
 
7
- A greenfield app has no code, so its UI is built freehand from prose requirements — which is exactly why a new app's UI comes out broken (overlapping controls, wrong layout, nothing to verify against). Mockups give the build an **approved visual contract** and give `verify-phase.md §4b` a **baseline to diff** the running screen against. They are **TrBlazeUI-replicable by construction**: the analyst designs only with controls the library actually ships, so `/trblazeui` can reproduce them 1:1.
7
+ ## Steps
8
8
 
9
- ## When to use
10
-
11
- - **At greenfield day-1** — auto-run by `day1-greenfield §3.6`, after the BRD draft; approved with the BRD + Architecture before build.
12
- - **On demand** — `*mockups {AppName}` to (re)generate, or `*mockups {AppName} --update` to refresh only changed/new screens after an `*amend-docs` that added UI.
13
- - **Greenfield only.** Brownfield already has built screens — it uses the DevGuide's captured screenshots (`devguide §5a/§5b`) as its visual baseline instead.
14
-
15
- ## Inputs
16
-
17
- - `{AppName}` (required; or resolve from `core-config.yaml`).
18
- - `{Scope}` — OPTIONAL: `all` (default) · a screen/route · a comma-list. Limits which screens are (re)mocked.
19
- - `--update` — OPTIONAL: refresh only screens whose BRD feature changed or that are new; preserve unchanged mockups verbatim.
20
-
21
- ## SEQUENTIAL Execution
22
-
23
- ### 1. Read the TrBlazeUI component catalog FIRST (design only with what exists)
24
-
25
- Before designing anything, learn what the library actually provides:
26
- - Read `.trblazeui/TrBlazeUI-AI-Reference.md` (the component reference; if absent, run `dotnet build` once to deploy it, or ask the `/trblazeui` agent for its component catalog).
27
- - Optionally converse with the **`/trblazeui` agent** to confirm which controls exist and how they're composed (it owns the library knowledge).
28
- - Build a working list of available controls (nav, cards, grids, forms, dialogs, charts, layout shells, inputs). **You design ONLY with these** — a mockup that uses a layout/control TrBlazeUI can't produce is worse than none (it guarantees drift). If a screen genuinely needs something the library lacks, note it and log a `docs/{AppName}-TrBlazeUI-Feedback.md` entry (TR-NNN) so the gap is tracked rather than silently designed-in.
29
-
30
- ### 2. Derive the screen list from the BRD
31
-
32
- - Read `docs/{AppName}-BRD.md` §9 Feature catalog — its screens-and-routes tables and per-feature workflows are the screen list. Also read `docs/{AppName}-Architecture.md` for the UI host/layout choice.
33
- - Produce the flat screen list: `screen (route) → role(s) → owning BRD-N`. Echo a one-line count: `N screens to mock`.
34
- - **No-UI app:** if the concept is purely an API/service with no screens, record `docs/{AppName}-UIDesign.md` = "skipped — no UI in this app" and HALT (this is not an error; `day1-greenfield` treats it as skipped).
35
-
36
- ### 3. Design each screen — spec + rendered mockup (FAN OUT for many screens)
37
-
38
- Load `.tfcore/templates/v4custom/app-uidesign-tmpl.md`. For each screen (fan out across subagents when there are many — one per screen-cluster — to bound tokens):
39
-
40
- 1. Decide the **layout** (regions: nav, sidebar, content blocks) using TrBlazeUI's layout shell components.
41
- 2. Write the **component map** — every region → the specific TrBlazeUI control that renders it + the data it shows + its empty/loading/error states. This is the build contract.
42
- 3. Produce the **rendered mockup** `docs/mockups/{screen-slug}.html`: a self-contained HTML page that *looks like the real screen* using TrBlazeUI's design language (its CSS tokens / classes where known, or a close visual approximation — spacing, colors, typography, component shapes). Use realistic placeholder data so the layout reads true. Each mockup is a static preview, not wired — but its STRUCTURE (regions, control types, arrangement) must be what the build will produce.
43
- 4. Fill the screen's spec block in `docs/{AppName}-UIDesign.md` (mockup link, component map table, layout one-liner, interaction + state notes).
44
-
45
- Keep the visual language consistent across screens (one shell, one theme, one spacing system) so the set reads as one app.
46
-
47
- #### 3b. ANCHOR THE MOCKUP — `data-testid` is what makes it gradeable (MANDATORY since 2026-08-31)
48
-
49
- A mockup is not only a picture for the owner to approve. Since 2026-08-31 it is **the input to a gate**: `verify-phase` §4b2 compares the built screen against it mechanically, and **it can only compare elements that carry the same `data-testid` on both sides.**
50
-
51
- **Put a `data-testid` on every element the build must get right**, using the same name the built component will carry:
52
-
53
- - the layout regions — `app-sidebar`, `app-header`, `main` (match the shell's real names; a mockup that says `sidebar` where the app says `app-sidebar` pairs with nothing and grades nothing);
54
- - every **badge, pill, chip and status indicator** — these are the single most-escaped class, because a pill flattened to plain text still *has text* and passes every other gate;
55
- - every **icon or icon button**;
56
- - each **KPI tile / card**, individually — especially two adjacent cards the design distinguishes (a dashed border meaning *estimate* beside a solid one meaning *measured* is a real distinction the gate now reads, and it can only read it on an anchored element);
57
- - each **table** and each **chart**;
58
- - any value cell whose **width is part of the design** — a formatted number that must not break mid-digit.
59
-
60
- **Why this is worth the keystrokes, stated plainly.** The gate's depth is bounded by what both sides anchor, and the failure mode is **silent and inverted: the less of a screen the gate can see, the cleaner its verdict looks.** A screen the gate cannot reach into does not report "I could not grade this" as a defect — it reports `UNGRADEABLE`, which is honest but buys nothing. Upstream, three columns anchored only at the container level yielded three coarse comparisons and a `PASS`, while a human then found two structural defects on that same screen by eye (TfLens **TF-011**).
61
-
62
- Two things make this cheaper than it sounds:
63
-
64
- - **The walker descends any anchored subtree** — card, column, grid, `<dl>`, list, table alike — so an anchor on a *container* now buys real depth, not just one comparison. You do not need an id on every leaf.
65
- - **The gate tells you what is missing.** Each screen's run output carries `anchor_deficit.add_data_testid_to_mockup`, naming the app testids the mockup lacks. Closing the gap later is a mechanical edit — but doing it here is free.
66
-
67
- **Do not invent ids the build will not use.** An anchor that pairs with nothing is worse than no anchor: it costs effort and grades nothing. Take the names from the component map you just wrote in step 2, and use the same ones in `*build-phase`.
68
-
69
- ### 4. Assemble + render
70
-
71
- - Fill the UIDesign header (§"Design system" from §1's catalog — name the layout shell, theme, and the controls inventory the app uses).
72
- - Regenerate the UIDesign Table of Contents (slug rule `html-render-shell.md §1`; list each `### Screen:` under "Screens").
73
- - Render `docs/{AppName}-UIDesign.md` → `docs/{AppName}-UIDesign.html` via `.tfcore/tasks/generate-html.md` (shared shell — it's a human doc). The `docs/mockups/*.html` screens are already HTML; leave them as-is.
74
- - **`--update`:** only (re)write changed/new screens + their mockups; preserve the rest verbatim; re-render the UIDesign HTML.
75
-
76
- ### 5. PROJECT-STATUS note (light touch — NOT the full gate)
77
-
78
- Add/refresh one line under "Where I am" / artifacts: `Mockups generated {date}: docs/{AppName}-UIDesign.md (+ .html) + docs/mockups/ ({N} screens)`. This task does not change build/verify state — do not touch `current_phase` or `last_verified_build`. (When run inside `day1-greenfield`, that task owns the status write.)
79
-
80
- ### 5a. Emit the run record (telemetry)
81
-
82
- Same turn as the status/PROJECT-STATUS write. Doctrine + the ten constraints: `.tfcore/tasks/_metrics-emit-gate.md`. Schema: `.tfcore/telemetry/SCHEMA.md` §2. Stamp `started` with `date -u +%Y-%m-%dT%H:%M:%SZ` as your FIRST action of this task — it cannot be reconstructed at the end.
83
-
84
- ```bash
85
- cat <<'JSON' | bash .tfcore/utils/tf-emit.sh runs
86
- {"kind":"run","app":"{AppName}","cmd":"mockups","mode":null,
87
- "started":"<start>","ended":"<now>","duration_s":<n>,
88
- "reqs_touched":[],"reqs_count":0,
89
- "subagents":[],"files_written":<n>,"build_result":"not-run"}
90
- JSON
91
- ```
92
-
93
- `reqs_touched` carries REQ IDs only — never requirement text — and `[]` is correct when this task touched no specific REQ. **Telemetry has no veto:** if the emit fails, the phase still succeeded; do not retry, do not diagnose, do not mention it.
94
-
95
- ### 6. HALT — report
96
-
97
- ```
98
- # Mockups — {AppName}
99
- Screens mocked: {N} TrBlazeUI controls used: {list} Library gaps logged: {g}
100
- Files: docs/{AppName}-UIDesign.md (+ .html) · docs/mockups/*.html ({N} screens)
101
- Next: review/approve the mockups (open docs/mockups/*.html); they are the visual contract the build matches and the verifier diffs against. Then *split-brd → *build-phase.
102
- ```
103
-
104
- ## Hard rules
105
-
106
- - **TrBlazeUI-replicable only.** Read the component catalog first; design with controls that exist. A mockup the library can't produce is a defect — flag + log the gap, never design it in silently.
107
- - **Every screen has a component map** (`region → TrBlazeUI control`). The map is the build contract; a pretty picture with no control mapping is not enough.
108
- - **Mockups are a HUMAN doc → rendered to HTML.** Unlike the checklist, the UIDesign spec renders to HTML; the mockups are HTML by construction.
109
- - **Greenfield only.** Do not run for a brownfield app with built screens (use the DevGuide screenshots instead).
110
- - **Never edit source code.** This task only writes the design docs/mockups.
111
- - **Incremental on `--update`.** Preserve unchanged screens verbatim; only remock what changed.
112
-
113
- ## Output Checklist
114
-
115
- - [ ] TrBlazeUI component catalog read FIRST; design uses only existing controls (gaps logged to the feedback file)
116
- - [ ] Screen list derived from BRD §9 feature catalog (or "skipped — no UI" recorded)
117
- - [ ] `docs/{AppName}-UIDesign.md` written: per-screen spec with a `region → TrBlazeUI control` component map + state notes
118
- - [ ] `docs/mockups/{screen}.html` rendered for every screen, styled to look like TrBlazeUI, consistent across the set
119
- - [ ] **Every mockup anchored with `data-testid` (§3b)** — layout regions under the shell's real names, plus every badge/pill, icon, KPI tile, table, chart and width-critical value cell. Ids taken from the §2 component map so they pair with what the build will render. Without them `verify-phase` §4b2 returns `UNGRADEABLE`, which is not a pass.
120
- - [ ] `docs/{AppName}-UIDesign.html` rendered (human doc); mockups left as HTML; the checklist is NOT involved here
121
- - [ ] PROJECT-STATUS got the one-line mockups note (no full status gate)
122
- - [ ] Report printed; mockups ready for owner approval
9
+ 1. `bash .tfcore/utils/tf-mockups-locate.sh` moves any mockup found elsewhere in the repository into `docs/mockups/` and lists what is there.
10
+ 2. Read the component reference of the UI library named in the Architecture's Stack decisions (for TrBlazeUI, `.trblazeui/TrBlazeUI-AI-Reference.md`; build once if it is absent). Design only with controls that exist. A control the library lacks is logged as an entry in `docs/{App}-<Library>-Feedback.md`, never designed in silently.
11
+ 3. Read the BRD's Screens and flow table: every row is a screen, with its route, roles and fields; a dialog row belongs to its parent screen. A screen that already has a mockup in `docs/mockups/` keeps it and is linked. An app with no screens records "skipped — no UI" in the UIDesign and stops.
12
+ 4. For each screen without a mockup (fan out one sub-agent per group of screens when there are many): decide the layout regions, map every region to a control, write `docs/mockups/<screen-slug>.html` with realistic placeholder data in the library's visual language, and fill the screen's section in `docs/{App}-UIDesign.md` from `.tfcore/templates/v4custom/app-uidesign-tmpl.md` (mockup link, roles, regions-to-controls table, fields table, the dialogs it opens, the empty, loading and error states). One shell, one theme, one spacing system across the set.
13
+ 5. Make the set click through. The entry screen is the sign-in page (or onboarding, or the home page when there is neither). Every link and every navigation button goes to the mockup it names, written as `<a href="screen.html">` or a form action, never as a script (`onclick="location.href=…"` is refused: it dies in any viewer without scripts): sign in opens the home screen, logout returns to sign in, an "Add" button opens the add screen, a row opens its detail, every menu item leads to its screen. Every screen has a way out. A button that does not navigate shows a message with `onclick`. A dialog opens on its parent page. Sign-in needs no credentials: the button alone navigates.
14
+ 6. Anchor every element the build must match with `data-testid`, using the names from the regions-to-controls table: the layout regions, every badge and status indicator, every icon button, every card, table and chart, and every value cell whose width matters. The verifier compares only anchored elements; a mockup without anchors is ungradeable.
15
+ 7. `bash .tfcore/utils/tf-doc-check.sh --app {App}`: it refuses a broken link, an unreachable or dead-end screen, an inert button and an unanchored mockup. Fix every FAIL.
16
+ 8. When run on its own (not inside a day-1 task), run the status gate (`.tfcore/tasks/_status-update-gate.md`) with `"cmd":"mockups"`.
17
+ 9. Report: screens mocked, screens kept, controls used, library gaps logged, and the files written.
@@ -1,135 +1,14 @@
1
1
  # refresh-status
2
2
 
3
- Rebuild `PROJECT-STATUS.md` from **ground-truth evidence** after a development session was interrupted (lost internet, revoked/changed model access, crashed agent, killed terminal) — i.e. whenever a build/verify phase died BEFORE its mandatory status-update gate (`.tfcore/tasks/_status-update-gate.md`) ran, leaving PROJECT-STATUS stale, wrong, or silent about work that actually happened.
3
+ `*refresh-status {App} [verify]` rebuilds `PROJECT-STATUS.md` from evidence after a session died before its status gate ran: a lost connection, a killed terminal, a crashed agent. It does not trust the status file it finds. Its only writes are PROJECT-STATUS, the checklist's Status, % and Remarks cells where hard evidence contradicts them, and what the status gate writes. It never edits source code and never implements a row.
4
4
 
5
- ## Purpose
5
+ First: `bash .tfcore/utils/tf-phase.sh start refresh-status {App}` prints the start time and marks the command running.
6
6
 
7
- The normal flow guarantees PROJECT-STATUS is accurate because every phase ends by writing it. When a phase is killed mid-flight, that guarantee is broken: code may have been written, checklist tables may be half-updated, and PROJECT-STATUS still points at an old "Next command" that no longer matches reality. **This task does NOT trust PROJECT-STATUS.** It reconstructs the true state from the evidence that actually exists in this framework — the checklist Requirements Status tables, what is really in the working tree (the source files and when they were last touched), and a fresh build — then rewrites PROJECT-STATUS to match and tells you the exact next command.
7
+ ## Steps
8
8
 
9
- > **No git.** In this framework git is **manual and agent-owned by the human, never by an agent** — no task commits, and nothing here keys off commit history. Ground truth lives in the checklist tables, the files on disk, and the build. (This is a deliberate design rule, mechanically enforced: `.claude/settings.json` DENIES `git`/`gh` and the `.tfcore/hooks/block-git.sh` PreToolUse hook blocks compound forms — see the CLAUDE.md "Hard rules" section.) Do **not** run `git` in this task.
10
-
11
- This is a **read-and-reconcile** task. It NEVER edits application source code and NEVER implements requirements. Its only writes are to `PROJECT-STATUS.md`, its `.html`, the checklist Requirements Status tables (Status/%/Remarks cells only, never new files, and only when hard evidence says a cell is wrong), and the BRD's **§4 Development status** table — the derived feature-level snapshot (§4.5), including inserting that section into a legacy BRD that predates it.
12
-
13
- ## Inputs
14
-
15
- - `{AppName}` argument (required; or resolve from `.tfcore/core-config.yaml`).
16
- - Optional flag `verify` — after reconciling, chain the verifier on any REQ whose true state is ambiguous (see §5). Default is reconcile-only (fast).
17
-
18
- ## SEQUENTIAL Execution
19
-
20
- ### 1. Gather ground truth (read-only — run these in parallel)
21
-
22
- Collect evidence the interrupted agent could not have faked or selectively updated. Do NOT read PROJECT-STATUS first and reason from it — gather independently, compare last.
23
-
24
- 1. **Checklist Requirements Status table** (the primary source) — read the top table in the one checklist `docs/{AppName}-Checklist.md` (all REQ prefixes in a single table). This is the per-REQ source of truth (Status / % / Remarks). Terminal statuses: `Verified`, `Done (pre-existing)`, `N/A`. Note `Blocked` rows (library gaps) and especially any row left at `In Progress`/`Implemented` (smoke done, verifier never ran — the classic interruption fingerprint).
25
- 2. **What is actually in the working tree** — look at the source the checklists imply should exist, and *when it was last touched*:
26
- - For the REQs the tables claim are done/in-progress, confirm the corresponding components/services/pages actually exist on disk (a row marked `Implemented` whose files are absent is suspect; a row left open whose files DO exist is work that happened but was never recorded).
27
- - Compare file modification times against PROJECT-STATUS `last_updated` (read in step 4): **source files newer than `last_updated`** are work that landed *after* the last gate write — the status undercounts it. This is the no-git replacement for "what was committed since the last status write".
28
- - Use `ls -lt`, `find . -newer PROJECT-STATUS.md -type f` (scoped to the app's source dirs), Glob/Grep — read-only inspection only. Never modify, stage, or commit anything.
29
- 3. **Fresh build** — run the platform probe and then the invocation ladder at `.tfcore/templates/v4custom/build-invocation-ladder.md`. In OpenCode Docker, standard .NET uses container `dotnet`; a Windows MAUI head uses `winrun`, never direct `cmd.exe`; do not check/install `maui-tizen`. Workload errors `NETSDK1178`/`Microsoft.*.Sdk missing` mean wrong rung, not failure. Record PASS/FAIL and real `CS####` errors only.
30
- 4. **The stale PROJECT-STATUS** — read `PROJECT-STATUS.md` LAST, and only to see what it CLAIMED (`last_updated`, `current_phase`, "Next command"). Treat every field as a hypothesis to confirm or overwrite, never as fact. (Its `last_updated` is also the cutoff you compared file mtimes against in step 2.)
31
- 5. **Library feedback files** — glance at `docs/{AppName}-TrBlazeUI-Feedback.md` / `docs/{AppName}-TechieRag-Feedback.md` for open `Blocked`-causing entries.
32
-
33
- ### 2. Detect the interruption signature
34
-
35
- Decide what really happened by comparing the evidence. Common signatures:
36
-
37
- - **Worked-but-unrecorded:** source files newer than PROJECT-STATUS `last_updated`, and/or files exist on disk for REQs the tables still show as open → the work landed but the gate never ran. The checklist tables and/or PROJECT-STATUS undercount progress.
38
- - **In-flight / partial:** a REQ's expected files only partially exist, or the fresh build errors inside them → a phase was mid-implementation. Those REQs are **In Progress**, NOT done — even if a subagent reported them done before dying.
39
- - **Smoke-without-verify:** checklist rows at `Implemented`/`In Progress` with no `Verified` → self-smoke ran, verifier was cut off. Those REQs need verification, not rebuilding.
40
- - **Build regressed:** PROJECT-STATUS says `last_verified_build: PASS` but step 1.3 fails → a later edit broke the build; capture the real `CS####` errors as a Known blocker.
41
- - **Phase boundary lost:** every row is terminal but PROJECT-STATUS still says `current_phase: Build` → phase actually advanced to `Handoff`; correct it.
42
-
43
- State the detected signature in one or two plain sentences. If evidence conflicts (e.g. a table marks a REQ `Implemented` but the build fails on that file), trust the **build + files on disk over the table cell**, and flag the REQ as `PARTIAL`/`FAIL` with a note.
44
-
45
- ### 3. Reconstruct the true per-REQ picture
46
-
47
- For each REQ in the checklist, settle on a status from evidence, in this precedence:
48
-
49
- 1. **Verifier verdict already in the table** (`Verified`/`FAIL`/`PARTIAL`) → keep, unless step 1.3's build contradicts it.
50
- 2. **`Done (pre-existing)` / `N/A`** → terminal, keep, never touch.
51
- 3. **Implementing files present on disk + build PASS + a smoke/verify Remark present** → `Implemented` (pending verify) at minimum; do not upgrade to `Verified` without a verifier verdict.
52
- 4. **Files absent, partial, or build-broken for that REQ** → `In Progress`; do NOT mark done on a dead subagent's say-so.
53
- 5. **No evidence of any work** → leave as the original open status.
54
-
55
- Only write a checklist cell when evidence **contradicts** what's there (e.g. table says `FAIL` but the implementing files are present and the build now passes → set `Implemented` with a dated Remark `recovered by refresh-status: files present + build PASS, pending re-verify`). When in doubt, prefer the *less complete* status — under-claiming triggers a re-verify; over-claiming ships a bug. Never invent `Verified`.
56
-
57
- **Reconciling a Status column UP to `Verified`** is allowed in exactly one case: the row's Remarks **already carry a dated verifier verdict** (e.g. `VERIFIED 2026-07-07 …`) that the Status column merely lagged. The PreToolUse hook `.tfcore/hooks/guard-verify.sh` blocks any checklist write introducing `Verified` without a same-day run ledger, so first Write `docs/.last-verify.json` as `{"date":"<today>","app":"{AppName}","mode":"reconcile","evidence":"<the pre-existing verdict date(s) + REQ IDs>"}`, then make the cell edit. Reconcile-mode is ONLY for surfacing a pre-existing verdict — never for promoting smoke results or files-on-disk evidence to `Verified`.
58
-
59
- ### 4. Rewrite PROJECT-STATUS.md (the whole point)
60
-
61
- Overwrite `PROJECT-STATUS.md` to reflect the reconstructed reality, honoring every minimum in `.tfcore/tasks/_status-update-gate.md`.
62
-
63
- **Rebuild to the CRISP, FIXED-SHAPE template** (`.tfcore/templates/v4custom/app-project-status-tmpl.md`) — the gate's §"CRISP, FIXED-SHAPE snapshot" applies in full to a reconstruction. Start from the template's section set; do NOT copy forward the old file's per-run dated sections (`## *verify all — formal coverage matrix (…)`, `## *fix-issues — …`, `## *build-phase — …`) or its paragraph-stuffed `current_phase`. If the file you are rebuilding has them, they are the mess this task exists to clean up — drop them, fold any still-true facts into the one-paragraph `## Where I am` + the `## Verification log` table, and keep the result well under ~60 lines. The ONE extra section a reconstruction adds is the `## Recovery note` (item 8) — and only because this was an interrupted-session rebuild. Concretely:
64
-
65
- 1. `last_updated: {today YYYY-MM-DD}`.
66
- 2. `current_phase` = where the evidence says the project actually is (not what the file claimed).
67
- 3. `last_verified_build` + `last_verified_date` from step 1.3's real build.
68
- 4. **Open requirements** = every non-terminal REQ from the reconciled tables.
69
- 5. **Next command to run** = the exact command that resumes from the true state (Claude Code + OpenCode forms). Examples:
70
- - in-flight build work → `/TechieFlow:agents:flow-master *build-phase {AppName}` (OpenCode: `/flow-master *build-phase {AppName}`) (FIX/FRESH mode will re-detect the open REQs from the now-correct table; it calls trblazeui/techierag itself).
71
- - smoke-without-verify → `/TechieFlow:agents:verifier *verify ui` (OpenCode: `/flow-verifier *verify ui`) (or `functional`/`all`).
72
- - all built, verify open → `/TechieFlow:agents:verifier *verify all` (OpenCode: `/flow-verifier *verify all`).
73
- 6. A **Verification log** row only if a verifier actually ran this session (don't fabricate one); otherwise leave the log untouched.
74
- 7. Library-feedback + standards-compliance lines refreshed only if evidence changed them.
75
- 8. Add a one-block **`## Recovery note ({today})`** section at the end recording: the interruption signature (step 2), which files were found newer-than-status / present-for-open-REQs, which checklist cells were corrected and why, and any REQ now flagged for re-verify. This is the audit trail so the next session — human or AI — knows this status was reconstructed, not gate-written.
76
-
77
- Then **re-render** `PROJECT-STATUS.html` via `.tfcore/tasks/generate-html.md` with the shared shell — never hand-rolled HTML. A stale HTML defeats the recovery. Do NOT render the checklists to HTML — they are AI-agent working documents (markdown only); correcting their Requirements Status tables in markdown is sufficient.
78
-
79
- ### 4.5. Sync the BRD §4 Development status snapshot
80
-
81
- Bring `docs/{AppName}-BRD.md`'s **§4 Development status** table in line with the reconciled checklist statuses — it is the human, feature-level view of the same reality you just rebuilt. Use the rollup rule in `.tfcore/tasks/_status-update-gate.md` item 9 (feature → its `Requirements: BRD-…` line → the `REQ-*` those BRDs split into → per-REQ Status; map all-terminal → `Done`, mixed → `Partial`, started-but-unverified → `In progress`, none → `Planned`).
82
-
83
- - **If the BRD already has a Development status section:** refresh its rows from the rollup and set `Snapshot as of {today}`.
84
- - **If the BRD has NO such section** (a BRD authored before this section existed — e.g. AstroLyfe): **insert it now** (one-time migration). Add a `## 4. Development status` H2 immediately after the Scope section, **renumber the following H2 sections by +1**, and **regenerate the BRD's `## Table of Contents`** to match (slug rule = `.tfcore/templates/v4custom/html-render-shell.md §1`). Then fill the table via the rollup. After this run, the status gate keeps it current on every phase.
85
- - Touch ONLY the §4 table, the heading renumber + TOC the insert requires, and the snapshot date — never requirement text, feature prose, or BRD-N IDs.
86
- - Re-render `docs/{AppName}-BRD.html` via `.tfcore/tasks/generate-html.md` (shared shell). If you renumbered, double-check every BRD diagram still passes the §5.5 mermaid self-check (you didn't touch them, but the re-render must not introduce bare labels).
87
- - Note in the §6 report whether §4 was refreshed in place or inserted (migration), and which features changed status.
88
-
89
- ### 4a. Emit the run record (telemetry)
90
-
91
- Same turn as the status/PROJECT-STATUS write. Doctrine + the ten constraints: `.tfcore/tasks/_metrics-emit-gate.md`. Schema: `.tfcore/telemetry/SCHEMA.md` §2. Stamp `started` with `date -u +%Y-%m-%dT%H:%M:%SZ` as your FIRST action of this task — it cannot be reconstructed at the end.
92
-
93
- ```bash
94
- cat <<'JSON' | bash .tfcore/utils/tf-emit.sh runs
95
- {"kind":"run","app":"{AppName}","cmd":"refresh-status","mode":null,
96
- "started":"<start>","ended":"<now>","duration_s":<n>,
97
- "reqs_touched":[],"reqs_count":0,
98
- "subagents":[],"files_written":<n>,"build_result":"not-run"}
99
- JSON
100
- ```
101
-
102
- `reqs_touched` carries REQ IDs only — never requirement text — and `[]` is correct when this task touched no specific REQ. **Telemetry has no veto:** if the emit fails, the phase still succeeded; do not retry, do not diagnose, do not mention it.
103
-
104
- ### 5. Optional verify pass (only if `verify` flag given, or you flagged ambiguity)
105
-
106
- If invoked with `verify`, or if step 3 left any REQ in an evidence-ambiguous state (files present but never smoked/verified), chain the verifier: read `.tfcore/tasks/verify-phase.md` and execute it inline with the narrowest scope that covers the ambiguous REQs (`ui` / `functional` / `all` / explicit REQ-ID list) — skip its §0 question, scope is known. The verifier writes verdicts into the tables; then re-run step 4's PROJECT-STATUS write so it reflects the fresh verdicts. The verifier never edits source, so this stays safe to run during recovery.
107
-
108
- ### 6. Report to the user
109
-
110
- Print a tight recovery summary (this is for a human who just lost their session):
111
- - **What happened:** the interruption signature in one line.
112
- - **What was recovered:** worked-but-unrecorded REQs, in-flight REQs, build state.
113
- - **What PROJECT-STATUS now says:** current_phase + open-REQ count.
114
- - **Exact next command** to resume (copy-paste, both harness forms).
115
- - **Anything needing a human decision** (e.g. half-finished edits to review, or work the human may want to commit manually before resuming — committing is the human's job, never this task's).
116
-
117
- ## Guardrails
118
-
119
- - NEVER run `git` (or `gh`). Git is manual in this framework; this task reconstructs status from checklist tables + working-tree files + build only.
120
- - NEVER edit application source code, requirement text, feature prose, BRD-N IDs, or Architecture content. The ONLY BRD edit permitted is maintaining the **§4 Development status** table — a derived snapshot — plus, for a legacy BRD lacking it, inserting that one section with the heading-renumber + TOC regen described in §4.5. Everything else in the BRD is read-only.
121
- - NEVER mark a REQ `Verified` without an actual verifier verdict produced this session or already present in the table.
122
- - NEVER create dated `docs/qa/*.md` / `docs/verify/*.md` files. The checklist tables + PROJECT-STATUS are the only status surfaces.
123
- - Prefer under-claiming to over-claiming when evidence is thin — a needless re-verify is cheap; a falsely-"done" bug is not.
124
- - This task is itself a checklist-executing task: it ends by leaving PROJECT-STATUS accurate. Do not hand back before §4 is written.
125
-
126
- ## Output Checklist
127
-
128
- - [ ] Ground truth gathered independently (checklist tables, working-tree files + mtimes, fresh build) BEFORE reading PROJECT-STATUS — and WITHOUT git
129
- - [ ] Interruption signature stated
130
- - [ ] Per-REQ statuses reconciled from evidence (no fabricated `Verified`)
131
- - [ ] `PROJECT-STATUS.md` overwritten to true state with a dated `## Recovery note`
132
- - [ ] BRD §4 Development status table refreshed from the reconciled checklists (or inserted + headings renumbered + TOC regenerated, for a legacy BRD that lacked it) — §4 table only, no requirement text touched
133
- - [ ] `PROJECT-STATUS.html` and `docs/{AppName}-BRD.html` re-rendered (checklists are NOT rendered to HTML — markdown only)
134
- - [ ] Optional verify pass run if requested / ambiguity remained
135
- - [ ] User given the exact copy-paste next command
9
+ 1. `bash .tfcore/utils/tf-status-evidence.sh {App}` prints what the stale status file claims, the files under `src/` and `tests/` changed after it was written, the checklist rows left at `Implemented`, `In Progress`, `Needs re-verify`, `PARTIAL` or `FAIL`, and the build verdict. Read the files it names before you believe any cell: a row marked done whose files are absent is not done; a row left open whose files exist and build is work that happened and was never recorded.
10
+ 2. Say in one or two sentences what happened. The usual shapes: work landed but the gate never ran (files newer than the status, rows undercount); a row was mid-implementation (its files partial, or the build fails inside them); smoke ran and the verifier was cut off (rows at `Implemented` with no `Verified`); the build regressed after the last gate; every row is terminal but the phase still says Build.
11
+ 3. Settle each open row from evidence, in this order: a verifier verdict already in the table stays unless the build contradicts it; `Done (pre-existing)` and `N/A` stay; files present, build passing and a dated smoke or verify Remark mean `Implemented`; files absent, partial or build-broken mean `In Progress`; no evidence means the row keeps its status. Change a cell only when evidence contradicts it, with a dated Remark `recovered by refresh-status: <why>`. When in doubt, under-claim: a needless re-verify is cheap, a false done ships a bug. Never write `Verified` from files or a smoke; the only allowed promotion to `Verified` is a row whose Remarks already carry a dated verifier verdict the Status column lagged, and then `docs/.last-verify.json` is written first as `{"date":"<today>","app":"{App}","mode":"reconcile","evidence":"<the verdict dates and row ids>"}` so the guard accepts it.
12
+ 4. With `verify`, or when a row's state is still ambiguous after step 3 (files present, never smoked or verified), execute `.tfcore/tasks/verify-phase.md` inline with the narrowest scope that covers those rows; it writes the verdicts.
13
+ 5. Run the status gate (`.tfcore/tasks/_status-update-gate.md`) with `"cmd":"refresh-status"`. PROJECT-STATUS gets one extra section, `## Recovery note ({today})`: the shape of the interruption from step 2, the files found newer than the status, the cells corrected and why, and the rows flagged for re-verify. The next command is the one the facts script printed.
14
+ 6. Report, for a person who just lost a session: what happened in one line, what was recovered, what the status now says, the exact next command in both harness forms, and anything only a person can decide.
@@ -1,131 +1,15 @@
1
1
  # split-brd
2
2
 
3
- Split the BRD into the single AI-targeted requirement doc: the app Checklist (`docs/{AppName}-Checklist.md`).
3
+ Turns the BRD ledger into the one checklist, `docs/{App}-Checklist.md`. The prefix of a row routes its work: `REQ-UI-` to the UI sub-agent from the mockups, `REQ-RAG-` to the RAG sub-agent, `REQ-FN-` and `REQ-NFR-` to the build phase. Called by both day-1 tasks; the owner never types it. Never edit source code here.
4
4
 
5
- ## Purpose
5
+ First: `bash .tfcore/utils/tf-phase.sh start split-brd {App}` prints the start time and marks the command running.
6
6
 
7
- The BRD captures business intent with `BRD-N` IDs. Implementation needs finer-grained, type-tagged requirements. There is **one checklist per app**; the requirement *type* is carried by the REQ prefix, which routes work to the right builder:
8
- - `REQ-UI-*` → built by `/trblazeui` (from the approved mockups), invoked as a sub-agent by the unified `build-phase`
9
- - `REQ-RAG-*` → built by `/techierag`, invoked as a sub-agent by `build-phase`
10
- - `REQ-FN-*` / `REQ-NFR-*` → built directly by `build-phase` (flow-master)
7
+ ## Steps
11
8
 
12
- This task converts each `BRD-N` into one or more `REQ-*` items inside the one checklist.
13
-
14
- ## Inputs
15
-
16
- - `{AppName}` argument (required; or resolve from core-config.yaml).
17
-
18
- ## SEQUENTIAL Execution
19
-
20
- ### 1. Load inputs
21
-
22
- - `docs/{AppName}-BRD.md` — must exist. Parse `BRD-N` IDs and their text.
23
- - `docs/{AppName}-Architecture.md` — read for module boundaries and stack.
24
- - `docs/{AppName}-UIDesign.md` + `docs/mockups/*.html` — if they exist (greenfield, post-`*mockups`), read them so each `REQ-UI-*` cites the mockup screen it realizes.
25
-
26
- ### 2. Classify each BRD-N
27
-
28
- For each `BRD-N`, classify as UI / FN / RAG / NFR:
29
- - **UI**: any user-visible change — page, component, form, dashboard, layout.
30
- - **RAG**: anything involving LLM, embedding, vector search, chat, prompt templates, token tracking, tool calling.
31
- - **NFR**: performance, security, accessibility, observability, compliance.
32
- - **FN**: everything else — backend logic, data, APIs, integrations, business rules.
33
-
34
- A single `BRD-N` may map to multiple REQs (e.g. a "settings page that saves to DB" splits into REQ-UI-N (the page) and REQ-FN-N (the save handler)).
35
-
36
- ### 2.5. Dev-plan seeding (CONDITIONAL — brownfield projects with an existing plan)
37
-
38
- Check `docs/` for an existing development/phase plan (`*Development-Plan*.md`, `*Dev-Plan*.md`, `*Implementation-Plan*.md`, `*Roadmap*.md`, or any doc structured as Phase 0/1/2… with build order/statuses). If one exists:
39
-
40
- - Carry its phase structure into §3 — tag each REQ with its phase (e.g. `(BRD-21, Phase 1)`) and order rows by phase.
41
- - **Preserve every column the plan tracked** — the Requirements Status table must be a SUPERSET of the plan's, never a lossy summary. For each migrated REQ fill Status, **%**, **Remarks**, Details: carry the plan's `% Done` verbatim and its full dated status remark (e.g. "Completed 2026-04-30 (DTOs split…)") into Remarks — do not truncate.
42
- - COMPLETE/done/shipped → Status `Done (pre-existing)`, `%` = plan's figure (usually `100%`), Remarks = plan's note + `per {plan-file} §{section}`. Build agents must NOT rebuild these. Partial → `In Progress`/`PARTIAL` with the plan's `%`+remark. Not started → `Not Started`, `0%`.
43
- - Add a header note to the checklist: `> Migrated from {plan-file} on {YYYY-MM-DD}. Phase structure, completion %, and status remarks carried over verbatim — verify before building.`
44
- - Do not modify the plan file's content. After migration it is superseded — move it unchanged to `docs/OldDocs/` (create the folder if missing; date-suffix on name collision) and note this in the §6 summary.
45
-
46
- If no plan exists, skip — classify purely from the BRD.
47
-
48
- ### 3. Write `docs/{AppName}-Checklist.md`
49
-
50
- Schema per `.tfcore/templates/v4custom/app-checklist-tmpl.md` — the **Requirements Status** table sits at the TOP (single source of truth for the WHOLE app), with all REQ classes in one table, and the per-REQ detail follows in prefix-grouped sections with `<a id="d-REQ-ID">` anchors the Details column links to:
51
- ```markdown
52
- # {AppName} — Checklist
53
-
54
- ## Goal
55
- {one paragraph; ties back to BRD §1}
56
-
57
- ## Requirements Status
58
- | ID | Requirement | Status | % | Remarks | Details |
59
- |----|-------------|--------|---|---------|---------|
60
- | REQ-UI-001 | {short name} | Not Started | 0% | — | [view](#d-req-ui-001) |
61
- | REQ-FN-001 | {short name} | Not Started | 0% | — | [view](#d-req-fn-001) |
62
- | REQ-RAG-001 | {short name} | Not Started | 0% | — | [view](#d-req-rag-001) |
63
- | REQ-NFR-001 | {short name} | Not Started | 0% | — | [view](#d-req-nfr-001) |
64
- {Status values + % guide + Remarks note — copy the legend from the template}
65
-
66
- ## UI / Pages
67
- ### Page: {page name} (`{route}`)
68
- <a id="d-req-ui-001"></a>
69
- - **REQ-UI-001** — {description; traces to BRD-X}. *Mockup:* docs/mockups/{screen}.html (if mockups exist).
70
- - *Acceptance:* {specific testable criterion}; controls do not overlap at desktop + mobile widths (visual gate).
71
-
72
- ## Functional requirements
73
- <a id="d-req-fn-001"></a>
74
- - **REQ-FN-001** — {trigger / acceptance} (BRD-X)
75
-
76
- <!-- If the source BRD NFR carried a `perf-budget:` line, copy it into the REQ's Acceptance
77
- bullet VERBATIM — same grammar, same numbers. verify-phase §4c reads it literally and
78
- grades speed only where it exists. Never synthesize one for an NFR that lacked it, and
79
- never drop one that was there: both silently change what "Verified" means for that REQ. -->
80
-
81
-
82
- ## RAG / AI requirements (→ /techierag)
83
- <a id="d-req-rag-001"></a>
84
- - **REQ-RAG-001** — {trigger / acceptance via TechieRag} (BRD-X)
85
-
86
- ## Non-functional
87
- <a id="d-req-nfr-001"></a>
88
- - **REQ-NFR-001** — {perf/security/accessibility} (BRD-X)
89
- ```
90
-
91
- Cross-link: every REQ-N's description ends with `(BRD-X)` so traceability is two-way.
92
-
93
- ### 4. Trace check
94
-
95
- - Every `BRD-N` should appear at least once in the checklist's Requirements Status table.
96
- - If any `BRD-N` is unmapped, list it in the output summary and ask: "BRD-X has no REQ. Is it deferred, or should I map it now?"
97
-
98
- ### 5. Output summary
99
-
100
- Report counts:
101
- - `K` `REQ-UI-*`, `M` `REQ-FN-*`, `N` `REQ-RAG-*`, `P` `REQ-NFR-*` items in the checklist
102
- - Any unmapped `BRD-N`s flagged in §4
103
-
104
- Update `PROJECT-STATUS.md` per `.tfcore/tasks/_status-update-gate.md` (this task counts as a phase — the gate applies):
105
- - Next phase is always the unified build while any REQ is open: current_phase `Build`, Next command `/TechieFlow:agents:flow-master *build-phase {AppName}` (OpenCode: `/flow-master *build-phase {AppName}`). `build-phase` clusters all open REQs and calls `/trblazeui` (REQ-UI-*, from the mockups) and `/techierag` (REQ-RAG-*) as sub-agents itself — you do NOT point the user at a separate UI or RAG command.
106
- - `last_updated`: today. Leave `last_verified_build`/`last_verified_date` as-is (no build this phase).
107
- - Sync "Open requirements" to the new Status table (everything non-terminal).
108
- - Append a row to "Verification log" — N/A (no verify yet)
109
- - List unmapped open requirements if any
110
- - Re-render `PROJECT-STATUS.html` (gate minimum #8). Do NOT render the checklist to HTML — it is an AI-agent working document (markdown only).
111
-
112
- ### 6. Emit the run record (telemetry)
113
-
114
- Same turn as the status/PROJECT-STATUS write. Doctrine + the ten constraints: `.tfcore/tasks/_metrics-emit-gate.md`. Schema: `.tfcore/telemetry/SCHEMA.md` §2. Stamp `started` with `date -u +%Y-%m-%dT%H:%M:%SZ` as your FIRST action of this task — it cannot be reconstructed at the end.
115
-
116
- ```bash
117
- cat <<'JSON' | bash .tfcore/utils/tf-emit.sh runs
118
- {"kind":"run","app":"{AppName}","cmd":"split-brd","mode":null,
119
- "started":"<start>","ended":"<now>","duration_s":<n>,
120
- "reqs_touched":[],"reqs_count":0,
121
- "subagents":[],"files_written":<n>,"build_result":"not-run"}
122
- JSON
123
- ```
124
-
125
- `reqs_touched` carries REQ IDs only — never requirement text — and `[]` is correct when this task touched no specific REQ. **Telemetry has no veto:** if the emit fails, the phase still succeeded; do not retry, do not diagnose, do not mention it.
126
-
127
- ## Output Checklist
128
-
129
- - [ ] `docs/{AppName}-Checklist.md` exists with REQ-UI/FN/RAG/NFR-* IDs each back-linking to BRD-N, in one Requirements Status table
130
- - [ ] Every `BRD-N` is mapped or explicitly deferred
131
- - [ ] `PROJECT-STATUS.md` updated with `Build` phase + `*build-phase` next command (+ re-rendered HTML)
9
+ 1. `bash .tfcore/utils/tf-split-brd.sh {App}` writes the checklist draft from `docs/{App}-BRD.md`: one row per BRD item in the template shape, one section per screen, acceptance and perf-budget lines copied verbatim, the class guessed. An item with no acceptance line gets a TODO line that the checker refuses. On a re-run use `--force`; `*amend-docs` uses `--add-missing`. A Large project has one checklist per phase: `--all-phases` writes them all from `docs/{App}-Phases.md`; without a flag the script takes the phase from `appPhase` in `core-config.yaml`.
10
+ 2. Read the draft and correct the class where the guess is wrong: UI is anything a user sees on a screen; RAG is anything with a model, embeddings, vectors, prompts or chat; NFR is speed, security, accessibility, observability or compliance; FN is everything else. Split a BRD item into two rows when it holds both a screen and a rule (a settings page and the save that persists it). Renumber only the rows you changed, within their prefix.
11
+ 3. Fill every TODO acceptance line in the form "When <actor> <does what> on <screen>, then <observable result>"; an NFR row names the measurement instead of a screen.
12
+ 4. If a phased plan is among the harvested documents (a file named like a development plan or roadmap, or content in phases with statuses), carry it in: tag each row with its phase, copy the plan's percentage and remark verbatim into the row, mark completed items `Done (pre-existing)` with the plan reference in Remarks, and add the note "> Migrated from {plan-file} on {date}" under the Goal. Then move the plan to `docs/OldDocs/` with `bash .tfcore/utils/tf-day1-files.sh --archive <file>`.
13
+ 5. `bash .tfcore/utils/tf-doc-check.sh --app {App}`: it refuses a BRD item without a row, a row without its acceptance line, a UI row without its mockup and a duplicate id. Fix every FAIL.
14
+ 6. When run on its own (not inside a day-1 task), run the status gate (`.tfcore/tasks/_status-update-gate.md`) with `"cmd":"split-brd"`; the next command is `*build-phase {App}`.
15
+ 7. Report the row counts per prefix and any class you changed.
@@ -0,0 +1,14 @@
1
+ # triage-and-fix
2
+
3
+ `*triage-and-fix {App} {evidence}` runs the owner's whole bug sequence in one go, in YOLO: compare every screen to its mockup, triage the reported bugs, log every root cause with its discovery cost, fix, log every fix with its cost, refresh the metrics, and end with one summary per step. The separate commands stay for when only one of them is wanted. Evidence is a folder of screenshots with an optional notes file, a written list, or nothing (then the screens comparison is the evidence).
4
+
5
+ First: `bash .tfcore/utils/tf-phase.sh start triage-and-fix {App}` prints the start time; keep it. `bash .tfcore/utils/tf-yolo.sh on --source triage-and-fix` unless YOLO is already on.
6
+
7
+ ## Steps
8
+
9
+ 1. Compare. `bash .tfcore/utils/tf-verify-list.sh {App} all`, `tf-verify-boot.sh start`, then `tf-verify-screens.sh --list … --base <url>` and `tf-mockup-parity.sh --base <url> --screen … --json-out tests/.artifacts/verify/parity.json` over every screen. Every screen that renders empty, looks broken or drifts from its mockup is an issue, added to the owner's evidence with its screenshot.
10
+ 2. Triage. `.tfcore/tasks/triage-issues.md` steps 3 and 4 on the combined issue list, then `tf-triage.sh {App} close --started <the step-0 time> --cmd fix-issues`.
11
+ 3. Fix. `.tfcore/tasks/fix-issues.md` steps 2 to 5 on the demoted rows (the builders, the build, the smoke, the verify, `tf-fix-close.sh`).
12
+ 4. Metrics. Execute `.tfcore/tasks/metrics-report.md`.
13
+ 5. Run the status gate (`.tfcore/tasks/_status-update-gate.md`) with `"cmd":"triage-and-fix"` and the rows touched. When this run is the last step of a goal, write the sentinel (`.tfcore/tasks/_yolo-mode.md`).
14
+ 6. Summary, one short section per step: screens compared and what the comparison found; root causes found and logged, each with its miss id and discovery cost; fixes made and logged, each with its verdict and fix cost; rows re-verified by status; metrics refreshed, the report's path; the next command from the gate.