@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,204 +1,128 @@
1
- # {AppName} — Business Requirements
2
-
3
- <!-- AGENT-ONLY AUTHORING NOTES. Everything in this comment is an instruction to the DRAFTING
4
- AGENT, not content for the document's human reader. Carry it into the generated document
5
- ONLY as this HTML comment (or drop it entirely) — NEVER as visible text: the owner reads
6
- the rendered HTML and must not see authoring instructions (generate-html.md strips any
7
- that leaked from older templates).
8
-
9
- STABLE IDS: every requirement has a BRD-{N} ID. IDs are append-only across revisions.
10
-
11
- DEPTH MANDATE (read before drafting): this is a HUMAN document, read as rendered HTML by the
12
- product owner. It is NOT the coding checklist (that's docs/{AppName}-Checklist.md / split-brd
13
- output). One-line entries belong ONLY in §10's requirements ledger. Every other section is
14
- full prose, tables, and Mermaid diagrams. §9 Feature catalog is the heart of the document —
15
- one detailed subsection per feature, with screens, workflows, and a diagram wherever the flow
16
- is non-trivial. When harvesting existing source docs, this document must be an
17
- information-preserving SUPERSET of their requirements content: carry their tables, matrices,
18
- screen inventories, and menus forward (updated, not summarized away). If a reader of the old
19
- doc would miss something in this one, the draft is wrong.
20
-
21
- MERMAID MANDATE: every diagram MUST follow the authoring rules in
22
- .tfcore/templates/v4custom/html-render-shell.md §5.5 — quote every node/edge/subgraph label
23
- (A["Order Service (v2)"], not A[Order Service (v2)]) and never use `end` as a node id.
24
- Unquoted special characters ( ( ) / & : , … ) in flowchart labels are the #1 cause of
25
- "Syntax error" diagrams in the rendered HTML.
1
+ <!-- tf-schema
2
+ doc: brd
3
+ file: docs/{App}-BRD.md
4
+ header: App, Kind, Size, Stack answer set, Status, Date
5
+ section: Summary | required | max 200
6
+ section: Scope | required
7
+ section: Users and roles | required
8
+ section: Screens and flow | required
9
+ section: Requirements | required
10
+ section: Non-functional requirements | required
11
+ section: Development status | required
12
+ section: Context diagram | optional-small
13
+ section: Constraints and assumptions | optional-small
14
+ section: Risks | optional-small
15
+ section: Glossary | optional
16
+ budget: S 6000 8000 | M 10000 15000 | L 10000 15000
17
+ rule: brd-ledger
18
+ rule: screens-table
19
+ rule: mockup-links
26
20
  -->
21
+ <!-- Authoring notes (agent only; never visible text).
22
+ Sections and order are fixed by the schema above; tf-doc-check.sh refuses the document otherwise.
23
+ Word counts exclude code blocks and comments. The budget is met by shorter prose, never by dropping
24
+ a screen, a field or a requirement. BRD ids are append-only and never renumbered.
25
+ Size and requirement cap: Small up to 10 screens, one role, 50 requirements; Medium up to 20 screens,
26
+ 100 requirements; Large is split into phases, each phase its own BRD. Every routed page is a screen;
27
+ dialogs, tabs and panels are regions of their page and are listed under it.
28
+ Large project: one BRD per phase, phase 1 in docs/{App}-BRD.md, phase n in docs/{App}-Pn-BRD.md; the
29
+ header gains a row "| Phase | n of m |", Size is the phase's own size (Small or Medium), and BRD-N
30
+ runs on from the previous phase's last id. The phase plan is docs/{App}-Phases.md.
31
+ Mermaid: quote every label (A["Order (v2)"]); never use `end` as a node id. -->
27
32
 
33
+ # {App} — Business Requirements
28
34
 
29
- ## Table of Contents
30
-
31
- <!-- Auto-maintained by the analyst/day-1 tasks. Use the slug rule from .tfcore/templates/v4custom/html-render-shell.md §1 so links work in both MD and rendered HTML. Update this list whenever you add/rename a section. List each `### F-…` catalog entry as an H3 sub-entry under Feature catalog. -->
32
-
33
- 1. [Executive summary](#executive-summary)
34
- 2. [Business objectives](#business-objectives)
35
- 3. [Scope](#scope)
36
- 4. [Development status](#development-status)
37
- 5. [Stakeholders / users](#stakeholders-users)
38
- 6. [Context diagram](#context-diagram)
39
- 7. [User journey — primary use case](#user-journey-primary-use-case)
40
- 8. [Component sketch](#component-sketch)
41
- 9. [Feature catalog](#feature-catalog)
42
- 10. [Functional requirements (BRD ledger)](#functional-requirements-brd-ledger)
43
- 11. [Non-functional requirements](#non-functional-requirements)
44
- 12. [Constraints & assumptions](#constraints-assumptions)
45
- 13. [Success metrics](#success-metrics)
46
- 14. [Risks](#risks)
47
- 15. [Glossary](#glossary)
48
-
49
- ## 1. Executive summary
50
- <2-3 paragraphs: what we're building/changing and why it matters.>
51
-
52
- ## 2. Business objectives
53
- - <measurable objective 1>
54
- - <measurable objective 2>
55
-
56
- ## 3. Scope
57
- **In scope:** …
58
- **Out of scope (explicit):** …
59
-
60
- ## 4. Development status
61
-
62
- <!-- SNAPSHOT (point-in-time) of what is BUILT vs PENDING, at the feature level — the first thing a
63
- reader of an existing app wants to know. This is a HUMAN summary, NOT a competing source of truth:
64
- the LIVE per-requirement status lives in PROJECT-STATUS.md + the one checklist's
65
- "Requirements Status" table. Do NOT duplicate per-REQ status here — one row per feature only.
66
- • Brownfield: fill from the migrated dev-plan and/or the code scan (what actually compiles/runs).
67
- Mirror the phase tags used in the checklists.
68
- • Greenfield: this is the build ROADMAP — every row is "Planned" with its target phase.
69
- One row per §9 Feature-catalog F-code; group/order by phase. Keep the as-of date honest.
70
- AUTO-MAINTAINED after day-1: the status gate (every build/verify/handoff phase) and
71
- *refresh-status re-derive this table from the checklists and re-render the HTML, so it
72
- tracks reality without manual edits — see _status-update-gate.md item 9. -->
73
-
74
- **Snapshot as of {YYYY-MM-DD}.** Live, per-requirement status: see `PROJECT-STATUS.md` and the **Requirements Status** table in `docs/{AppName}-Checklist.md`.
75
-
76
- | Feature (F-code) | Phase | Status | % | Notes |
77
- |------------------|-------|--------|---|-------|
78
- | F-{CODE}: {name} | {0 / 1 / 2 … or MVP} | Done | 100 | {what works} |
79
- | F-{CODE}: {name} | {phase} | Partial | {0–100} | {what's done / what's left} |
80
- | F-{CODE}: {name} | {phase} | Planned | 0 | {not started} |
81
-
82
- **Legend:** **Done** = shipped & working · **In progress** = actively being built · **Partial** = some sub-features done, others pending · **Planned** = not started. (Maps to the checklist's `Done (pre-existing)` / `In Progress` / `PARTIAL` / `Not Started`.)
83
-
84
- ## 5. Stakeholders / users
85
- <!-- Full persona detail, not just a 2-row table. For each persona: role mapping (if an external auth/licensing system is involved), responsibilities, key screens, registration/onboarding path. If the app has license tiers / feature gating, include the full license & feature matrix here or as its own H2 (and add it to the TOC). -->
86
- | Role | Needs |
87
- |------|-------|
88
- | End user | … |
89
- | Admin | … |
90
-
91
- ## 6. Context diagram
92
- ```mermaid
93
- flowchart LR
94
- User(["End User"]) --> App["{AppName}"]
95
- App --> DB[("Database")]
96
- App --> LLM[/"LLM Provider"/]
97
- ```
35
+ | | |
36
+ |---|---|
37
+ | App | {App} |
38
+ | Kind | app or library |
39
+ | Size | Small, Medium or Large |
40
+ | Stack answer set | {name of the answer set, or "none"} |
41
+ | Status | Draft, Approved |
42
+ | Date | {YYYY-MM-DD} |
98
43
 
99
- ## 7. User journey — primary use case
100
- ```mermaid
101
- sequenceDiagram
102
- actor U as User
103
- participant W as Web UI
104
- participant A as App API
105
- U->>W: action
106
- W->>A: request
107
- A-->>W: response
108
- W-->>U: result
109
- ```
44
+ ## 1. Summary
110
45
 
111
- ## 8. Component sketch
112
- ```mermaid
113
- flowchart TB
114
- UI["Blazor UI — TrBlazeUI"] --> API["ASP.NET API"]
115
- API --> SQL[("SQL")]
116
- API --> Rag["RAG — TechieRag"]
117
- Rag --> Vec[("Vector store")]
118
- ```
46
+ {What it is, for whom, why it exists. At most 200 words.}
47
+
48
+ ## 2. Scope
49
+
50
+ **In:**
51
+ - {…}
52
+
53
+ **Out:**
54
+ - {…}
55
+
56
+ ## 3. Users and roles
57
+
58
+ | Role | Who they are | What they need |
59
+ |---|---|---|
60
+ | {Role} | {…} | {…} |
61
+
62
+ ## 4. Screens and flow
119
63
 
120
- ## 9. Feature catalog
64
+ One row per routed page. A dialog is a row under its parent screen with `on /route` in the Route column; it is not counted as a screen.
121
65
 
122
- <!-- THE HUMAN-READABLE HEART OF THE BRD. One `### F-{CODE}: {Name}` subsection per
123
- feature / capability area. A real app typically has 8–25 entries; depth scales with
124
- the app, NOT with a template quota. Repeat the skeleton below per feature.
125
- Per feature include, where applicable:
126
- - personas + phase/priority
127
- - 1-2 paragraphs of what/why
128
- - screens & routes table
129
- - workflow / processing steps (numbered), inputs → outputs
130
- - a Mermaid diagram for any multi-step or multi-actor flow (flowchart or
131
- sequenceDiagram) — generic features (simple CRUD lists) may skip the diagram
132
- - the BRD-N IDs this feature owns (forward links into §10)
133
- Every F-code here MUST appear as a row in the §4 Development status table. -->
66
+ | Screen | Route | Role | Mockup | Fields |
67
+ |---|---|---|---|---|
68
+ | {Screen name} | `/route` | {Role} | [mockup](mockups/{screen-slug}.html) | {field, field, field} |
69
+ | {Dialog name} (dialog) | on `/route` | {Role} | [mockup](mockups/{screen-slug}.html) | {field, field} |
134
70
 
135
- ### F-{CODE}: {Feature name}
71
+ **Primary journey:**
72
+ 1. {The user opens … and …}
73
+ 2. {…}
136
74
 
137
- **Personas:** <who uses it> · **Phase:** <0/1/2/… or MVP/Later>
75
+ ## 5. Requirements
138
76
 
139
- <1-2 paragraphs: what this feature does and why it exists.>
77
+ One item per thing the verifier will test. Each names its screen, links the mockup, and states its acceptance in the form the checklist will carry. Items are grouped under a `###` heading per screen that opens with one plain sentence saying what the screen does. A title is everyday words; an acceptance line is at most 30 words, target 20, and holds one behaviour: a line that bundles steps ("slots shown; Enter advances; empties dropped; a timer starts") is split into one item each (owner, 2026-09-06).
140
78
 
141
- | Screen | Route | Description |
142
- |--------|-------|-------------|
143
- | … | `/…` | … |
79
+ ### {Screen name}
144
80
 
145
- **Workflow:**
146
- 1. <step>
147
- 2. <step>
81
+ {One plain sentence: what this screen does, for whom.}
82
+
83
+ - **BRD-1** — {Title}. *Screen:* {Screen name} · *Mockup:* [mockup](mockups/{screen-slug}.html)
84
+ - *Acceptance:* When {actor} {does what} on {screen}, then {a result a browser robot can observe}.
85
+ - **BRD-2** — {Title}. *Screen:* {Screen name} · *Mockup:* [mockup](mockups/{screen-slug}.html)
86
+ - *Acceptance:* When …, then ….
87
+
88
+ ## 6. Non-functional requirements
89
+
90
+ | Id | Area | Requirement | Measure |
91
+ |---|---|---|---|
92
+ | BRD-{N} | Performance | {…} | perf-budget: p95 load <= 2000ms @ concurrency 1 |
93
+ | BRD-{N} | Security | {…} | {…} |
94
+ | BRD-{N} | Logging | {from the Stack answer set} | {…} |
95
+
96
+ The `perf-budget:` measure is machine-read by the verifier, in exactly this form: `perf-budget: <p50|p95|max> <ttfb|load> <= <N>ms [@ concurrency <N>]`. Write one only where the owner stated a number.
97
+
98
+ ## 7. Development status
99
+
100
+ Written by the status gate after every build, verify and handoff; not by hand.
101
+
102
+ **Snapshot as of {YYYY-MM-DD}.** Live per-requirement status: `PROJECT-STATUS.md` and the Requirements Status table in `docs/{App}-Checklist.md`.
103
+
104
+ | Screen | Requirements | Verified | Open | Status |
105
+ |---|---|---|---|---|
106
+ | {Screen} | {n} | {n} | {n} | Planned, In progress, Partial, Done |
107
+
108
+ ## 8. Context diagram
148
109
 
149
110
  ```mermaid
150
111
  flowchart LR
151
- A["input"] --> B{"decision"} --> C["output"]
112
+ User(["User"]) --> App["{App}"]
113
+ App --> DB[("Database")]
152
114
  ```
153
115
 
154
- **Requirements:** BRD-x, BRD-y (see §10)
155
-
156
- ## 10. Functional requirements (BRD ledger)
157
-
158
- <!-- The machine-traceable ledger consumed by *split-brd and the coding pipeline.
159
- One line per discrete capability, `<actor> can <action>` or `system shall <behavior>`.
160
- Each line names its catalog feature: `(F-CODE)`. The count scales with the app —
161
- one BRD per capability, NEVER merge capabilities to keep the list short. -->
162
-
163
- - **BRD-1** — <one-line requirement> *(F-{CODE})*
164
- - **BRD-2** — <one-line requirement> *(F-{CODE})*
165
-
166
- ## 11. Non-functional requirements
167
- <!-- Keep the BRD-N IDs, but give each NFR its target table when there are concrete numbers
168
- (latency, uptime, concurrency, import throughput), as a human reader expects.
169
- The Observability/logging NFR below is a TechieFlow STANDING requirement — it appears in
170
- EVERY .NET app's BRD (web, API, MAUI, desktop, console, background service), never gets
171
- dropped, and split-brd turns it into a REQ-NFR row like any other NFR.
172
-
173
- PERFORMANCE — the `perf-budget:` line is MACHINE-READ. verify-phase §4c grades a REQ on
174
- speed if and ONLY if it carries one, in exactly this grammar:
175
- perf-budget: <p50|p95|max> <ttfb|load> <= <N>ms [@ concurrency <N>]
176
- Omit it and the perf gate simply never fires for that REQ — which is the correct outcome
177
- when there is no agreed number. Do NOT invent a budget to make the row look complete: a
178
- threshold nobody agreed to produces failures nobody asked for, and the first false failure
179
- is the moment gate verdicts stop being believed. Write one only where the owner states it.
180
- Prose like "should feel fast" is not a budget and is deliberately not gradeable. -->
181
- - **BRD-N** — Performance: …
182
- <!-- e.g. Public pages stay responsive under normal load.
183
- perf-budget: p95 load <= 2000ms @ concurrency 1
184
- perf-budget: p95 ttfb <= 500ms @ concurrency 50 -->
185
-
186
- - **BRD-N+1** — Security: …
187
- - **BRD-N+2** — Accessibility: …
188
- - **BRD-N+3** — Observability: Serilog file-based logging in every executable head — rolling file sink under `logs/`, wired at startup, unhandled exceptions logged (see Coding Standards §Logging).
189
-
190
- ## 12. Constraints & assumptions
191
- - …
192
-
193
- ## 13. Success metrics
194
- - …
195
-
196
- ## 14. Risks
116
+ ## 9. Constraints and assumptions
117
+
118
+ - {…}
119
+
120
+ ## 10. Risks
121
+
197
122
  | Risk | Likelihood | Impact | Mitigation |
123
+ |---|---|---|---|
124
+ | {…} | {…} | {…} | {…} |
198
125
 
199
- ## 15. Glossary
200
- - TrBlazeUI, TechieRag, REQ-UI-*, REQ-FN-*, REQ-RAG-*, REQ-NFR-*
126
+ ## 11. Glossary
201
127
 
202
- ---
203
- Last updated: {YYYY-MM-DD}
204
- Highest BRD ID: BRD-{N}
128
+ - {Term} — {meaning}
@@ -0,0 +1,65 @@
1
+ <!-- tf-schema
2
+ doc: brief
3
+ file: docs/{App}-Brief.md
4
+ header: App, Date
5
+ section: What it is | required | max 150
6
+ section: Who it is for | required | max 150
7
+ section: Must do | required
8
+ section: Out of scope | required | max 150
9
+ section: Open questions | optional | max 150
10
+ rule: brief-must-do
11
+ rule: no-glossary
12
+ target-lines: 60
13
+ max-lines: 120
14
+ -->
15
+ <!-- Authoring notes (agent only; never visible text).
16
+
17
+ The brief is the input to day-1: `*day1-greenfield` and `*day1-brownfield` read it
18
+ and turn it into the Architecture, the BRD and the mockups. Its whole job is to be
19
+ ONE PAGE the owner can read and correct in two minutes, before anything expensive
20
+ is built on it.
21
+
22
+ It replaced a 221-line inherited template (2026-09-08) whose twelve sections —
23
+ executive summary, problem statement, proposed solution, goals and metrics, KPIs,
24
+ post-MVP vision, expansion opportunities — produced a document nobody read and
25
+ nothing checked. What the framework's own review says a brief is: "a one-page
26
+ brief: product, users, must-do, out of scope". That is what this template holds.
27
+
28
+ Each "Must do" line becomes one or more BRD items at day-1, so write them as
29
+ things the product does, one per line, numbered. Not features to build: outcomes
30
+ a user gets. If a line needs a paragraph to explain it, it is two lines.
31
+
32
+ "Open questions" is where a decision the owner has not taken goes, so day-1 asks
33
+ rather than assumes. An empty brief with three honest open questions is worth more
34
+ than a full one built on guesses. -->
35
+
36
+ # {App} — Brief
37
+
38
+ | | |
39
+ |---|---|
40
+ | App | {App} |
41
+ | Date | {YYYY-MM-DD} |
42
+
43
+ ## What it is
44
+
45
+ {Two or three sentences, at most 150 words. What the product does, in the words you
46
+ would use to a person who has never heard of it. No technology.}
47
+
48
+ ## Who it is for
49
+
50
+ {Who uses it and what they are trying to get done. Name each role. At most 150 words.}
51
+
52
+ ## Must do
53
+
54
+ 1. {One thing the product does, as an outcome a user gets.}
55
+ 2. {Another.}
56
+ 3. {Another.}
57
+
58
+ ## Out of scope
59
+
60
+ {What this is deliberately not doing, so day-1 does not build it. At most 150 words.}
61
+
62
+ ## Open questions
63
+
64
+ {A decision not yet taken, one per line, so day-1 asks instead of assuming. Delete the
65
+ section when there are none.}
@@ -1,90 +1,65 @@
1
- # {AppName} — Checklist
2
-
3
- ## Table of Contents
4
-
5
- <!-- Auto-maintained. Slug rule: .tfcore/templates/v4custom/html-render-shell.md §1. Update when sections change. As pages grow, list each `### Page: ...` as an H3 sub-entry under "UI / Pages". -->
6
-
7
- 1. [Goal](#goal)
8
- 2. [Requirements Status](#requirements-status)
9
- 3. [UI / Pages](#ui--pages)
10
- 4. [Functional requirements](#functional-requirements)
11
- 5. [RAG / AI requirements (→ /techierag)](#rag-ai-requirements-techierag)
12
- 6. [Non-functional](#non-functional)
1
+ <!-- tf-schema
2
+ doc: checklist
3
+ file: docs/{App}-Checklist.md
4
+ header: App, Size
5
+ section: Goal | required | max 120
6
+ section: Requirements Status | required
7
+ rule: checklist-rows
8
+ -->
9
+ <!-- Authoring notes (agent only). An agent document: never rendered, never reviewed by the owner.
10
+ Sections: Goal, Requirements Status (the one table), then one section per page or group holding
11
+ the detail entries. No other sections: bugs, UAT findings and feedback go to the misses stream.
12
+ Row rules (tf-doc-check.sh refuses the file otherwise):
13
+ - header exactly | ID | Requirement | Status | % | Remarks | Details |
14
+ - ID is REQ-UI-, REQ-FN-, REQ-RAG- or REQ-NFR- plus three digits; row count within the size cap
15
+ - Status is one of the fixed values; Verified is written only by a verify run (hook)
16
+ - % is 0, 25, 50, 75 or 100
17
+ - Details links to the entry's anchor in this file
18
+ - every entry names its BRD-N item; UI rows link a mockup that exists
19
+ - exactly one acceptance line per entry: "When <actor> <does what> on <screen>, then <observable result>"
20
+ ("Given …," may precede it; NFR rows name the measurement instead of a screen); at most 30 words,
21
+ target 20, one behaviour per row (a bundled line is split into rows); the title is everyday words
22
+ - a perf-budget line is copied verbatim from the BRD, never invented:
23
+ perf-budget: <p50|p95|max> <ttfb|load> <= <N>ms [@ concurrency <N>]
24
+ - Remarks holds the current state only, at most 60 words; history lives in gates.jsonl and misses.jsonl
25
+ Prefix routing: REQ-UI- built from the mockups by the UI sub-agent; REQ-RAG- by the RAG sub-agent;
26
+ REQ-FN- and REQ-NFR- by the build phase. `*verify ui|functional|all` filters this table by prefix.
27
+ Large project: one checklist per phase (docs/{App}-Checklist.md, docs/{App}-P2-Checklist.md, …), a
28
+ header row "| Phase | n of m |", REQ numbers running on across phases. tf-split-brd.sh does this. -->
29
+
30
+ # {App} — Checklist
31
+
32
+ | | |
33
+ |---|---|
34
+ | App | {App} |
35
+ | Size | Small, Medium or Large |
13
36
 
14
37
  ## Goal
15
- <one paragraph; ties back to BRD §1. This single checklist is the whole app's work list — UI, functional, RAG, and NFR requirements live together, distinguished only by their REQ prefix.>
16
38
 
17
- ## Requirements Status
39
+ {One paragraph tying back to the BRD summary. This single checklist is the whole work list.}
18
40
 
19
- <!-- ============================================================
20
- SINGLE SOURCE OF TRUTH for the WHOLE app (UI + functional +
21
- RAG + NFR). There is exactly ONE checklist per app — the two
22
- former files (UI-Checklist / Functional-Checklist) were merged
23
- into this one. Build, self-smoke, and the verifier ALL write
24
- their outcomes into THIS table — never into a separate dated
25
- results file. One row per REQ, grouped by prefix:
26
- REQ-UI-* → built by /trblazeui (from the mockups)
27
- REQ-FN-* → built by the unified build-phase
28
- REQ-RAG-* → built by /techierag
29
- REQ-NFR-* → built by the unified build-phase
30
- Scopes (`*verify ui|functional|all`) filter THIS table by
31
- prefix — they do NOT pick a separate file. Update Status + % +
32
- Remarks every time work (implementation, smoke, or verify)
33
- touches the REQ. Bugs and change notes live in the Remarks
34
- column, NOT in docs/qa/*.md.
35
- ============================================================ -->
41
+ ## Requirements Status
36
42
 
37
43
  | ID | Requirement | Status | % | Remarks | Details |
38
44
  |----|-------------|--------|---|---------|---------|
39
- | REQ-UI-001 | Dashboard top nav | Not Started | 0% | — | [view](#d-req-ui-001) |
40
- | REQ-FN-001 | <short name> | Not Started | 0% | — | [view](#d-req-fn-001) |
41
- | REQ-RAG-001 | <short name> | Not Started | 0% | — | [view](#d-req-rag-001) |
42
- | REQ-NFR-001 | <short name> | Not Started | 0% | — | [view](#d-req-nfr-001) |
43
-
44
- **Status values:** `Not Started` · `In Progress` · `Implemented` (code done, not yet verified) · `Verified` (self-smoke or verifier PASS — acceptance AND data-render AND visual gates all pass) · `Done (pre-existing)` (migrated from an earlier dev plan as already complete — build agents must NOT rebuild; terminal like `Verified`) · `Needs re-verify` (a defect or change was logged — must be re-run before it can return to `Verified`) · `PARTIAL` (some acceptance unmet — say what in Remarks) · `FAIL` (verifier ran and failed — bug in Remarks) · `Blocked` (external/library gap — link the TR-/TR-RAG- entry in Remarks) · `N/A`.
45
-
46
- **% guide:** `0` not started · `25` scaffolded · `50` in progress · `75` implemented-unverified · `100` verified.
47
-
48
- **Remarks:** date + what was done / what is missing / bug or library reference. This is the home for bugs and change notes — do not spawn a separate file. Visual-gate failures are prefixed `⚠ visual:`; security findings `⚠ SECURITY`.
49
-
50
- ## UI / Pages
45
+ | REQ-UI-001 | {short name} | Not Started | 0% | — | [view](#d-req-ui-001) |
46
+ | REQ-FN-001 | {short name} | Not Started | 0% | — | [view](#d-req-fn-001) |
47
+ | REQ-NFR-001 | {short name} | Not Started | 0% | — | [view](#d-req-nfr-001) |
51
48
 
52
- <!-- Each REQ carries an explicit `<a id="d-REQ-ID">` anchor (lowercase) so the
53
- Details column above links straight to it in both Markdown and rendered HTML.
54
- UI REQs are built by /trblazeui from the approved mockups (docs/{AppName}-UIDesign.md
55
- + docs/mockups/*.html); cite the mockup screen each REQ realizes.
49
+ **Status values:** `Not Started` · `In Progress` · `Implemented` · `Verified` · `Done (pre-existing)` · `Needs re-verify` · `PARTIAL` · `FAIL` · `Blocked` · `Owner-UAT` · `N/A`. `Owner-UAT` marks a row only the owner can close, by following the UsageGuide test plan; the verifier cannot reach it from this machine.
56
50
 
57
- A REQ whose BRD NFR declared a `perf-budget:` carries that line VERBATIM in its
58
- Acceptance bullet — split-brd copies it across unchanged. It is machine-read by
59
- verify-phase §4c, which grades speed only where such a line exists. Never add one
60
- that the BRD did not state, and never paraphrase it: the grammar is
61
- perf-budget: <p50|p95|max> <ttfb|load> <= <N>ms [@ concurrency <N>] -->
62
-
63
-
64
- ### Page: Dashboard (`/dashboard`)
51
+ ## Page: {Screen name} (`/route`)
65
52
 
66
53
  <a id="d-req-ui-001"></a>
67
- - **REQ-UI-001** — TrBlazeUI top nav (logo, user menu, theme toggle). *Mockup:* docs/mockups/dashboard.html.
68
- - *Acceptance:* page renders; nav fixed-top; theme toggle persists in localStorage; controls do not overlap at desktop + mobile widths (visual gate).
69
-
70
- ## Functional requirements
54
+ - **REQ-UI-001** — {what the screen shows}. *BRD:* BRD-{N} · *Mockup:* mockups/{screen-slug}.html
55
+ - *Acceptance:* When {actor} opens {screen}, then {what is visible, with real data, at desktop and mobile widths}.
71
56
 
72
57
  <a id="d-req-fn-001"></a>
73
- - **REQ-FN-001** — <trigger / acceptance>.
74
-
75
- <!-- Example of a perf-gated NFR row (only where the BRD declared the budget):
76
- <a id="d-req-nfr-001"></a>
77
- - **REQ-NFR-001** — Public pages stay responsive under normal load. (BRD-N)
78
- - *Acceptance:* pages return 200 and render their data; perf-budget: p95 load <= 2000ms @ concurrency 1
79
- -->
80
-
81
-
82
- ## RAG / AI requirements (→ /techierag)
83
-
84
- <a id="d-req-rag-001"></a>
85
- - **REQ-RAG-001** — <trigger / acceptance via TechieRag>.
58
+ - **REQ-FN-001** — {what the user can do}. *BRD:* BRD-{N}
59
+ - *Acceptance:* When {actor} {does what} on {screen}, then {observable result}.
86
60
 
87
61
  ## Non-functional
88
62
 
89
63
  <a id="d-req-nfr-001"></a>
90
- - **REQ-NFR-001** — <perf / security / accessibility>.
64
+ - **REQ-NFR-001** — {the requirement}. *BRD:* BRD-{N}
65
+ - *Acceptance:* When {the measurement is taken}, then {the value within its limit}; perf-budget: p95 load <= 2000ms @ concurrency 1
@@ -26,7 +26,7 @@
26
26
  | Confirm a **framework** file exists | Glob/Grep for its name — **returns nothing even when it is there** | **Read** the literal path (`.tfcore/…`) — see below |
27
27
  | Loop over a list of files | `for f in ...; do ...; done` | Multiple parallel Read/Edit calls in one assistant turn |
28
28
 
29
- **Glob and Grep cannot see the framework tree.** `.tfcore/`, `.claude/`, `.codex/`, `.opencode/` and `.agents/skills/` are hidden dot-directories *and* are gitignored in this repo (deliberately — the deployed framework copies are never committed). Grep is ripgrep-backed: it skips hidden paths AND honours `.gitignore`, so it needs **both** flags — `rg --hidden --no-ignore`, i.e. `rg -uu`. `--hidden` alone is not enough. Glob, `git grep` and `git ls-files` are blind for the same reasons.
29
+ **Glob and Grep cannot see the framework tree.** `.tfcore/`, `.claude/` and `.opencode/` are hidden dot-directories *and* are gitignored in this repo (deliberately — the deployed framework copies are never committed). Grep is ripgrep-backed: it skips hidden paths AND honours `.gitignore`, so it needs **both** flags — `rg --hidden --no-ignore`, i.e. `rg -uu`. `--hidden` alone is not enough. Glob, `git grep` and `git ls-files` are blind for the same reasons.
30
30
 
31
31
  So **a search returning nothing is not evidence that a framework file is missing.** Confirm framework files by **Read**ing the literal path (every one has exactly one canonical location, and whatever needs it names that path). Never report one as absent without having tried the path first — that false negative gets written into the checklist and the BRD, where the next agent inherits it as fact. If a framework file really is gone, the repo needs `update-framework.sh <repo>` run once on this machine; say that rather than working around it. Full rule: `.tfcore/tasks/_status-update-gate.md` §"The framework tree is INVISIBLE to search".
32
32
 
@@ -0,0 +1,52 @@
1
+ <!-- tf-schema
2
+ doc: coding-standards
3
+ file: docs/{App}-Coding-Standards.md
4
+ header: App, Stack answer set, Date
5
+ section: Standards applied | required
6
+ section: Project rules | required
7
+ section: Enforcement | required
8
+ budget: S 800 1200 | M 800 1200 | L 800 1200
9
+ rule: standards-pointer
10
+ -->
11
+ <!-- Authoring notes (agent only; never visible text).
12
+ The standards themselves live in the framework and are not copied here:
13
+ .tfcore/standards/coding-standards-core.md (every project, technology-neutral)
14
+ .tfcore/standards/coding-standards-<stack>.md (the stack's answer set, e.g. dotnet)
15
+ This file says which of those apply and lists only the rules specific to this project.
16
+ The Project rules table is often empty; a mixed-technology build rule or a per-project naming
17
+ choice is the kind of thing that belongs here. Fixed budget for every size. -->
18
+
19
+ # {App} — Coding Standards
20
+
21
+ | | |
22
+ |---|---|
23
+ | App | {App} |
24
+ | Stack answer set | {name, or "none"} |
25
+ | Date | {YYYY-MM-DD} |
26
+
27
+ ## Standards applied
28
+
29
+ | File | Applies | Notes |
30
+ |---|---|---|
31
+ | `.tfcore/standards/coding-standards-core.md` | yes | every project |
32
+ | `.tfcore/standards/coding-standards-{stack}.md` | yes | {from the Stack answer set} |
33
+
34
+ Per-project choices the stack file leaves open:
35
+
36
+ | Choice | Decision |
37
+ |---|---|
38
+ | {e.g. instance-field prefix} | {…} |
39
+
40
+ ## Project rules
41
+
42
+ Rules that hold in this project only. Empty is a valid answer.
43
+
44
+ | Rule | Why | Since |
45
+ |---|---|---|
46
+ | {…} | {…} | {YYYY-MM-DD} |
47
+
48
+ ## Enforcement
49
+
50
+ - **Editor configuration:** `.editorconfig` at the repository root carries the machine-checkable subset.
51
+ - **Analyzers:** {which, or "none"}.
52
+ - **Verifier checks:** the standards check runs the greps listed in the stack file's Enforcement section, plus: {any project-specific grep, or "none"}.