@techierathore/techieflow 1.0.1 → 1.0.3

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 (178) hide show
  1. package/.claude/commands/TechieFlow/agents/analyst.md +0 -5
  2. package/.claude/commands/TechieFlow/agents/architect.md +0 -6
  3. package/.claude/commands/TechieFlow/agents/flow-master.md +41 -215
  4. package/.claude/commands/TechieFlow/agents/verifier.md +23 -64
  5. package/.claude/commands/TechieFlow/tasks/_metrics-emit-gate.md +24 -117
  6. package/.claude/commands/TechieFlow/tasks/_smoke-test-policy.md +20 -84
  7. package/.claude/commands/TechieFlow/tasks/_status-update-gate.md +10 -74
  8. package/.claude/commands/TechieFlow/tasks/_yolo-mode.md +20 -58
  9. package/.claude/commands/TechieFlow/tasks/amend-docs.md +20 -143
  10. package/.claude/commands/TechieFlow/tasks/build-phase.md +14 -224
  11. package/.claude/commands/TechieFlow/tasks/day1-brownfield.md +31 -505
  12. package/.claude/commands/TechieFlow/tasks/day1-greenfield.md +28 -213
  13. package/.claude/commands/TechieFlow/tasks/deploy-checklist.md +19 -0
  14. package/.claude/commands/TechieFlow/tasks/devguide.md +10 -219
  15. package/.claude/commands/TechieFlow/tasks/fix-issues.md +10 -129
  16. package/.claude/commands/TechieFlow/tasks/log-miss.md +19 -158
  17. package/.claude/commands/TechieFlow/tasks/metrics-report.md +1 -1
  18. package/.claude/commands/TechieFlow/tasks/mockups.md +12 -117
  19. package/.claude/commands/TechieFlow/tasks/refresh-status.md +9 -130
  20. package/.claude/commands/TechieFlow/tasks/split-brd.md +10 -126
  21. package/.claude/commands/TechieFlow/tasks/triage-and-fix.md +14 -0
  22. package/.claude/commands/TechieFlow/tasks/triage-issues.md +11 -152
  23. package/.claude/commands/TechieFlow/tasks/verify-phase.md +36 -572
  24. package/.opencode/plugin/techieflow.js +39 -12
  25. package/.tfcore/agents/analyst.md +0 -5
  26. package/.tfcore/agents/architect.md +0 -6
  27. package/.tfcore/agents/flow-master.md +41 -215
  28. package/.tfcore/agents/verifier.md +23 -64
  29. package/.tfcore/core-config.yaml +10 -0
  30. package/.tfcore/hooks/block-git.sh +4 -4
  31. package/.tfcore/hooks/guard-artifacts.sh +2 -2
  32. package/.tfcore/hooks/guard-build.sh +76 -0
  33. package/.tfcore/hooks/guard-db.sh +90 -0
  34. package/.tfcore/hooks/guard-metrics.sh +56 -0
  35. package/.tfcore/hooks/guard-status-html.sh +116 -71
  36. package/.tfcore/hooks/guard-status.sh +43 -16
  37. package/.tfcore/hooks/guard-verify.sh +70 -48
  38. package/.tfcore/hooks/sweep-artifacts.sh +2 -2
  39. package/.tfcore/install-manifest.yaml +0 -18
  40. package/.tfcore/routing.yaml +25 -14
  41. package/.tfcore/standards/coding-standards-core.md +61 -0
  42. package/.tfcore/standards/coding-standards-dotnet.md +93 -0
  43. package/.tfcore/tasks/_metrics-emit-gate.md +24 -117
  44. package/.tfcore/tasks/_smoke-test-policy.md +20 -84
  45. package/.tfcore/tasks/_status-update-gate.md +10 -74
  46. package/.tfcore/tasks/_yolo-mode.md +20 -58
  47. package/.tfcore/tasks/amend-docs.md +20 -143
  48. package/.tfcore/tasks/build-phase.md +14 -224
  49. package/.tfcore/tasks/day1-brownfield.md +31 -505
  50. package/.tfcore/tasks/day1-greenfield.md +28 -213
  51. package/.tfcore/tasks/deploy-checklist.md +19 -0
  52. package/.tfcore/tasks/devguide.md +10 -219
  53. package/.tfcore/tasks/fix-issues.md +10 -129
  54. package/.tfcore/tasks/log-miss.md +19 -158
  55. package/.tfcore/tasks/metrics-report.md +1 -1
  56. package/.tfcore/tasks/mockups.md +12 -117
  57. package/.tfcore/tasks/refresh-status.md +9 -130
  58. package/.tfcore/tasks/split-brd.md +10 -126
  59. package/.tfcore/tasks/triage-and-fix.md +14 -0
  60. package/.tfcore/tasks/triage-issues.md +11 -152
  61. package/.tfcore/tasks/verify-phase.md +36 -572
  62. package/.tfcore/telemetry/SCHEMA.md +43 -7
  63. package/.tfcore/telemetry/tf-metrics.sh +152 -17
  64. package/.tfcore/templates/project-brief-tmpl.yaml +1 -1
  65. package/.tfcore/templates/stack-defaults/dotnet.md +35 -0
  66. package/.tfcore/templates/stack-questions.md +77 -0
  67. package/.tfcore/templates/v4custom/app-agents-md-tmpl.md +3 -4
  68. package/.tfcore/templates/v4custom/app-architecture-tmpl.md +107 -115
  69. package/.tfcore/templates/v4custom/app-brd-tmpl.md +108 -184
  70. package/.tfcore/templates/v4custom/app-checklist-tmpl.md +48 -73
  71. package/.tfcore/templates/v4custom/app-claude-md-tmpl.md +1 -1
  72. package/.tfcore/templates/v4custom/app-coding-standards-tmpl.md +52 -0
  73. package/.tfcore/templates/v4custom/app-deployment-checklist-tmpl.md +86 -0
  74. package/.tfcore/templates/v4custom/app-devguide-tmpl.md +69 -146
  75. package/.tfcore/templates/v4custom/app-phases-tmpl.md +35 -0
  76. package/.tfcore/templates/v4custom/app-productguide-tmpl.md +38 -35
  77. package/.tfcore/templates/v4custom/app-project-status-tmpl.md +63 -73
  78. package/.tfcore/templates/v4custom/app-uidesign-tmpl.md +62 -37
  79. package/.tfcore/templates/v4custom/app-usageguide-tmpl.md +69 -54
  80. package/.tfcore/templates/v4custom/build-invocation-ladder.md +17 -180
  81. package/.tfcore/templates/v4custom/build-subagent-prompt.md +17 -0
  82. package/.tfcore/templates/v4custom/metrics-report-template.md +2 -2
  83. package/.tfcore/user-guide.md +0 -23
  84. package/.tfcore/utils/__pycache__/tf-brd-status.cpython-312.pyc +0 -0
  85. package/.tfcore/utils/__pycache__/tf-checklist-edit.cpython-312.pyc +0 -0
  86. package/.tfcore/utils/__pycache__/tf-codex-bind.cpython-312.pyc +0 -0
  87. package/.tfcore/utils/__pycache__/tf-codex-telemetry.cpython-312.pyc +0 -0
  88. package/.tfcore/utils/__pycache__/tf-day1-files.cpython-312.pyc +0 -0
  89. package/.tfcore/utils/__pycache__/tf-devguide-list.cpython-312.pyc +0 -0
  90. package/.tfcore/utils/__pycache__/tf-doc-check.cpython-312.pyc +0 -0
  91. package/.tfcore/utils/__pycache__/tf-log-miss.cpython-312.pyc +0 -0
  92. package/.tfcore/utils/__pycache__/tf-misses-md.cpython-312.pyc +0 -0
  93. package/.tfcore/utils/__pycache__/tf-mockups-locate.cpython-312.pyc +0 -0
  94. package/.tfcore/utils/__pycache__/tf-opencode-audit.cpython-312.pyc +0 -0
  95. package/.tfcore/utils/__pycache__/tf-perf-grade.cpython-312.pyc +0 -0
  96. package/.tfcore/utils/__pycache__/tf-render-html.cpython-312.pyc +0 -0
  97. package/.tfcore/utils/__pycache__/tf-split-brd.cpython-312.pyc +0 -0
  98. package/.tfcore/utils/__pycache__/tf-status-facts.cpython-312.pyc +0 -0
  99. package/.tfcore/utils/__pycache__/tf-triage.cpython-312.pyc +0 -0
  100. package/.tfcore/utils/__pycache__/tf-verify-list.cpython-312.pyc +0 -0
  101. package/.tfcore/utils/__pycache__/tf-verify-verdict.cpython-312.pyc +0 -0
  102. package/.tfcore/utils/tf-brd-status.py +176 -0
  103. package/.tfcore/utils/tf-brd-status.sh +19 -0
  104. package/.tfcore/utils/tf-build-list.py +191 -0
  105. package/.tfcore/utils/tf-build-list.sh +20 -0
  106. package/.tfcore/utils/tf-build.sh +143 -0
  107. package/.tfcore/utils/tf-cdp-relay.ps1 +64 -0
  108. package/.tfcore/utils/tf-checklist-edit.py +133 -0
  109. package/.tfcore/utils/tf-day1-files.py +208 -0
  110. package/.tfcore/utils/tf-day1-files.sh +20 -0
  111. package/.tfcore/utils/tf-devguide-list.py +249 -0
  112. package/.tfcore/utils/tf-devguide-list.sh +18 -0
  113. package/.tfcore/utils/tf-doc-check.py +1267 -0
  114. package/.tfcore/utils/tf-doc-check.sh +29 -0
  115. package/.tfcore/utils/tf-emit.sh +203 -13
  116. package/.tfcore/utils/tf-fix-close.sh +83 -0
  117. package/.tfcore/utils/tf-goal.sh +193 -62
  118. package/.tfcore/utils/tf-harness.sh +4 -9
  119. package/.tfcore/utils/tf-log-miss.py +197 -0
  120. package/.tfcore/utils/tf-log-miss.sh +14 -0
  121. package/.tfcore/utils/tf-misses-md.py +211 -0
  122. package/.tfcore/utils/tf-misses-md.sh +13 -0
  123. package/.tfcore/utils/tf-mockups-locate.py +66 -0
  124. package/.tfcore/utils/tf-mockups-locate.sh +18 -0
  125. package/.tfcore/utils/tf-opencode-audit.py +23 -7
  126. package/.tfcore/utils/tf-perf-grade.py +97 -0
  127. package/.tfcore/utils/tf-perf-grade.sh +12 -0
  128. package/.tfcore/utils/tf-phase.sh +74 -0
  129. package/.tfcore/utils/tf-routing-bind.sh +10 -5
  130. package/.tfcore/utils/tf-routing.sh +6 -7
  131. package/.tfcore/utils/tf-split-brd.py +304 -0
  132. package/.tfcore/utils/tf-split-brd.sh +22 -0
  133. package/.tfcore/utils/tf-status-evidence.sh +68 -0
  134. package/.tfcore/utils/tf-status-facts.py +309 -0
  135. package/.tfcore/utils/tf-status-facts.sh +20 -0
  136. package/.tfcore/utils/tf-triage.py +243 -0
  137. package/.tfcore/utils/tf-triage.sh +16 -0
  138. package/.tfcore/utils/tf-verify-boot.sh +250 -0
  139. package/.tfcore/utils/tf-verify-emit.sh +110 -0
  140. package/.tfcore/utils/tf-verify-env.sh +88 -0
  141. package/.tfcore/utils/tf-verify-list.py +270 -0
  142. package/.tfcore/utils/tf-verify-list.sh +13 -0
  143. package/.tfcore/utils/tf-verify-screens.mjs +283 -0
  144. package/.tfcore/utils/tf-verify-screens.sh +22 -0
  145. package/.tfcore/utils/tf-verify-tests.sh +123 -0
  146. package/.tfcore/utils/tf-verify-verdict.py +283 -0
  147. package/.tfcore/utils/tf-verify-verdict.sh +15 -0
  148. package/.tfcore/utils/tf-yolo.sh +59 -0
  149. package/README.md +114 -1149
  150. package/docs/TechieFlow-Installation.md +27 -7
  151. package/opencode.jsonc +13 -33
  152. package/package.json +4 -7
  153. package/scripts/install.mjs +73 -46
  154. package/scripts/npm-cleanup.mjs +137 -0
  155. package/scripts/npm-postinstall.mjs +49 -0
  156. package/.claude/commands/TechieFlow/tasks/advanced-elicitation.md +0 -117
  157. package/.claude/commands/TechieFlow/tasks/author-brd.md +0 -79
  158. package/.claude/commands/TechieFlow/tasks/document-project.md +0 -343
  159. package/.claude/commands/TechieFlow/tasks/execute-checklist.md +0 -86
  160. package/.claude/commands/TechieFlow/tasks/index-docs.md +0 -173
  161. package/.claude/commands/TechieFlow/tasks/kb-mode-interaction.md +0 -75
  162. package/.claude/commands/TechieFlow/tasks/shard-doc.md +0 -185
  163. package/.codex/config.toml +0 -46
  164. package/.codex/hooks.json +0 -63
  165. package/.codex/rules/techieflow.rules +0 -8
  166. package/.tfcore/hooks/codex-adapter.py +0 -248
  167. package/.tfcore/tasks/advanced-elicitation.md +0 -117
  168. package/.tfcore/tasks/author-brd.md +0 -79
  169. package/.tfcore/tasks/document-project.md +0 -343
  170. package/.tfcore/tasks/execute-checklist.md +0 -86
  171. package/.tfcore/tasks/index-docs.md +0 -173
  172. package/.tfcore/tasks/kb-mode-interaction.md +0 -75
  173. package/.tfcore/tasks/shard-doc.md +0 -185
  174. package/.tfcore/utils/tf-codex-bind.py +0 -196
  175. package/.tfcore/utils/tf-codex-telemetry.py +0 -60
  176. package/WORKFLOW.html +0 -1986
  177. package/scripts/test-install.mjs +0 -505
  178. package/scripts/validate.mjs +0 -163
@@ -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"}.
@@ -0,0 +1,86 @@
1
+ <!-- tf-schema
2
+ doc: deployment-checklist
3
+ file: docs/{App}-Deployment-Checklist.md
4
+ header: App, Hosting target, Pipeline document, Date, Proven
5
+ section: Who does what | required
6
+ section: Secrets and settings | required
7
+ section: Before the first deploy | required
8
+ section: Deploy | required
9
+ section: After the deploy | required
10
+ section: Rollback | required
11
+ section: Routine operations | required
12
+ section: Troubleshooting | required
13
+ section: Proven | required
14
+ budget: S 2500 4000 | M 2500 4000 | L 2500 4000
15
+ rule: deploy-who-table
16
+ rule: deploy-secrets-once
17
+ rule: deploy-checkboxes
18
+ rule: deploy-proven
19
+ -->
20
+ <!-- Authoring notes (agent only; never visible text).
21
+ One document per hosting target, produced after UAT from the owner's pipeline guidance document
22
+ and the Stack answers Q9 (hosting) and Q10 (production secrets and pipeline). Running the
23
+ application locally is NOT in it; that is the UsageGuide's Execution guide.
24
+ Every item in sections 3 to 6 is a checkbox ("- [ ]") with one action and one observable result;
25
+ no narrative paragraphs anywhere. Each secret or setting name appears in exactly one row of the
26
+ Secrets and settings table and is never re-described elsewhere. Proven says "never" until a real
27
+ deploy has been executed, then the date. Schema: docs/TechieFlow-Document-Schemas.md §3.10. -->
28
+
29
+ # {App} — Deployment Checklist
30
+
31
+ | | |
32
+ |---|---|
33
+ | App | {App} |
34
+ | Hosting target | {one target: VPS, Docker host, IIS, Azure App Service, …} |
35
+ | Pipeline document | {path of the owner's pipeline guidance document} |
36
+ | Date | {YYYY-MM-DD} |
37
+ | Proven | never |
38
+
39
+ ## 1. Who does what
40
+
41
+ | Step | Done by |
42
+ |---|---|
43
+ | {Build and publish the artefact} | pipeline |
44
+ | {Approve the release} | owner |
45
+
46
+ ## 2. Secrets and settings
47
+
48
+ | Name | Where it is set | What breaks without it |
49
+ |---|---|---|
50
+ | {CONNECTION_STRING} | {host environment variable} | {the application cannot start} |
51
+
52
+ ## 3. Before the first deploy
53
+
54
+ - [ ] {One action} — {the result that shows it worked}
55
+
56
+ ## 4. Deploy
57
+
58
+ - [ ] {One action} — {the result that shows it worked}
59
+
60
+ ## 5. After the deploy
61
+
62
+ - [ ] {The command to run} — {the output that proves it worked}
63
+
64
+ ## 6. Rollback
65
+
66
+ - [ ] {One action} — {the result that shows it worked}
67
+
68
+ A rollback does not undo: {database migrations; …}.
69
+
70
+ ## 7. Routine operations
71
+
72
+ | Task | Command |
73
+ |---|---|
74
+ | {Restart the service} | `{command}` |
75
+
76
+ ## 8. Troubleshooting
77
+
78
+ | Symptom | Cause | Fix |
79
+ |---|---|---|
80
+ | {…} | {…} | {…} |
81
+
82
+ ## 9. Proven
83
+
84
+ | What | Executed for real | When |
85
+ |---|---|---|
86
+ | {Deploy to the target} | no | — |
@@ -1,167 +1,90 @@
1
- # {AppName} — Developer Guide (Screen-by-Screen Code Map)
2
-
3
- > {Verification-status banner — REQUIRED, set by the OBSERVE pass (devguide §5a). One of:}
4
- > ✅ **Runtime-verified {YYYY-MM-DD}** — exercised as: {roles}. Control render-status **and per-screen visual-status** below are **observed** (data renders + screen looks right), not inferred. Per-screen screenshots in `docs/screenshots/{AppName}/`.
5
- > ⚠ **STATIC-ONLY ({YYYY-MM-DD})** — built from code reading; **NOT yet runtime-verified**. Render/visual status is unconfirmed and no screenshots were captured until `*verify` runs against the running app.
6
-
7
- > **Purpose — this is the document a HUMAN developer uses to trace any screen, control, or number on the page all the way down to the database, so they can find and fix a bug, or verify that AI-generated code is actually correct.** The BRD explains *what* the app does; the Architecture explains *how the system is shaped*; the database design explains *the data*. **None of those tell a developer "the dashboard's Ruling-Planet chart comes from `DashboardService.GetRulingPlanets()` → `KundliRepository.QueryRulingPlanets()` → `usp_RulingPlanets`."** This guide does exactly that, per user role, per screen, down to the stored procedure or query.
8
- >
9
- > It documents the **AS-BUILT code**, not the plan. Regenerate it with `*devguide {AppName}` after meaningful code changes (it is also refreshed automatically at handoff). It is a **human-readable** doc — it is rendered to HTML; it is NOT one of the AI checklists.
10
-
11
- <!-- AGENT-ONLY AUTHORING NOTES. Everything in this comment is an instruction to the DRAFTING
12
- AGENT, not content for the document's human reader. Carry it into the generated document
13
- ONLY as this HTML comment (or drop it entirely) — NEVER as visible text: the owner reads
14
- the rendered HTML and must not see authoring instructions (generate-html.md strips any
15
- that leaked from older templates). The two blockquotes ABOVE (verification-status banner +
16
- Purpose) ARE reader-facing and stay visible.
17
-
18
- DEPTH MANDATE (read before drafting): every screen entry must connect the visible UI to the
19
- code that produces it: the Razor page/component (with file path), each meaningful CONTROL on
20
- it, and the full DATA LINEAGE for each control/action — Razor component → service method →
21
- data-access method → stored procedure name / SQL query. If a value is calculated, say where
22
- and how. "It's handled in the service" is NOT acceptable — name the method and the file.
23
- A developer who has never seen the code must be able to open this guide, find the screen,
24
- and know exactly which files to open to fix a bug.
25
-
26
- TWO RULES THAT KEEP THIS GUIDE TRUE (not hallucinated):
27
- • Landing-truth — a screen's "Reached via" / where a role lands after login MUST be read from
28
- the routing/redirect code (the NavigateTo(...) after login, the default @page "/", the auth
29
- redirect) and cite file:line. NEVER infer it from the folder a page lives in or its name
30
- (e.g. don't assume an Admin lands on an Admin Dashboard just because the page is under Admin/).
31
- • Render-truth — confirm the data actually REACHES AND RENDERS in each control, not merely
32
- that a method/proc exists. Check the @if guards, whether the query's columns map to the
33
- model (case/underscore), computed getters that can throw/blank, and required component
34
- parameters that must be declared (e.g. a grid's Pagination). Tag each control renders /
35
- renders-empty (suspected defect — why) / {unresolved — TODO}; a suspected defect is also
36
- logged to the checklist.
1
+ <!-- tf-schema
2
+ doc: devguide
3
+ file: docs/{App}-DevGuide.md
4
+ header: App, Kind, Size, Verified on, Date
5
+ section: Architecture cheat-sheet | required | max 300
6
+ section: Roles and menu map | app
7
+ section: Screen-by-screen code map | required
8
+ section: Cross-cutting flows | required
9
+ section: Known issues | required
10
+ entries: Screen-by-screen code map |
11
+ per-entry: 300 450
12
+ budget: S 4000 6000 | M 7000 10000 | L 7000 10000
13
+ rule: entry-screenshot
14
+ rule: entry-call-chain
15
+ rule: entry-break-table
37
16
  -->
38
-
39
- ## Table of Contents
40
-
41
- 1. [How to use this guide](#how-to-use-this-guide)
42
- 2. [Architecture cheat-sheet](#architecture-cheat-sheet)
43
- 3. [Roles and menu map](#roles-and-menu-map)
44
- 4. [Screen-by-screen code map](#screen-by-screen-code-map)
45
- 5. [Cross-cutting flows](#cross-cutting-flows)
46
- 6. [How to fix a bug with this guide](#how-to-fix-a-bug-with-this-guide)
47
-
48
- ---
49
-
50
- ## How to use this guide
51
-
52
- - **Find your screen** in §4, grouped by user role. Each screen tells you the route, the Razor file, every control, and where each control's data comes from.
53
- - **Chasing a wrong number / missing data?** Find the control in that screen's *Data lineage* table → it names the service method → the data-access method → the stored proc / query. Open those files in order.
54
- - **Verifying AI-generated code?** Compare what this guide claims against the actual files. If a row says `usp_GetDashboardKpis` but the service actually calls inline SQL, the guide (or the code) is wrong — that mismatch is exactly the kind of hallucination this guide is meant to catch.
55
- - **For a large app (many roles / screens)** this guide is split into one file per role, kept together in the `docs/devguides/` subfolder (so they don't clutter `docs/`) — see the [index](#roles-and-menu-map). Open only the role file you need.
56
- - **Library variant (a library is documented by its PUBLIC SURFACE, not its sample app's screens — `devguide.md §0`).** Replace "Roles and menu map" with a **catalog by category/module**, and each item block documents **Purpose · Public API surface** (the consumer's contract, read at file:line) **· Internal flow** (file:line) **· Demo & usage** (the `demos/`/`samples/` page or sample code + screenshot where it has UI + a copy-paste snippet) **· Known issues**. The unit depends on what the package ships:
57
- - **UI-component library** (e.g. TrBlazeUI) → **component-by-component**; API surface = every `[Parameter]`/`EventCallback`/`@typeparam`; categories = Inputs / Layout / Overlays / Data display / Feedback / Icons; snippet = `<Component … />`.
58
- - **Service/SDK library** (e.g. TechieRag) → **service/API-by-service**; API surface = the `AddXxx(...)` DI registration + options + facade/interface method signatures; modules = e.g. Ingestion / Embedding / Query-RAG / LLM / Resilience+Token / Admin; snippet = `services.AddXxx(...)` + an `IFacade` call.
59
-
60
- The "find your screen / chase a wrong number" guidance above reads as "find your component/service / chase a broken parameter or method". Any public item the sample app does **not** exercise is marked **`⚠ no demo coverage`** (a sample gap logged to the checklist) — the sample app is part of the library's deliverable, not just a backdrop.
17
+ <!-- Authoring notes (agent only; never visible text).
18
+ A developer's map from each screen to the code that serves it, written so they can set breakpoints
19
+ and debug it. Documents the code AS BUILT, read at file:line; never inferred from folder names.
20
+ One `###` per screen (per component for a UI library, linked to the sample-app screen that shows it;
21
+ per public service for a service library: registration, call chain, where to break; owner 2026-09-06).
22
+ Each entry: the screenshot captured from the running app; one "Call chain:" line, page method to
23
+ service class and method to data-access class and method; a where-to-break table, one row per step:
24
+ file and line, function, the variable to watch, the value it should hold. Line numbers are as of
25
+ "Verified on"; the function name is what to search for when a line has moved.
26
+ Produced when the build completes the checklist; refreshed at handoff.
27
+ Large project: one DevGuide per phase (docs/{App}-DevGuide.md, docs/{App}-P2-DevGuide.md, …) with a
28
+ header row "| Phase | n of m |". Cross-cutting flows are written once, in phase 1; a later phase
29
+ repeats them only if it changed them, otherwise one line points at phase 1's section. -->
30
+
31
+ # {App} — Developer Guide
32
+
33
+ | | |
34
+ |---|---|
35
+ | App | {App} |
36
+ | Kind | app or library |
37
+ | Size | Small, Medium or Large |
38
+ | Verified on | {YYYY-MM-DD, the run the screenshots and line numbers come from} |
39
+ | Date | {YYYY-MM-DD} |
61
40
 
62
41
  ## Architecture cheat-sheet
63
42
 
64
- Brief — just enough to navigate the code. (Full detail lives in `docs/{AppName}-Architecture.md`.)
65
-
66
- | Layer | Project / folder | What lives here | Example types |
67
- |-------|------------------|-----------------|---------------|
68
- | UI (Blazor) | `src/{AppName}.Web` | Razor pages/components, layouts, nav menu | `Pages/`, `Components/`, `Shared/NavMenu.razor` |
69
- | App services | `src/{AppName}.Application` (or `.Services`) | Business logic, orchestration | `DashboardService`, `KundliService` |
70
- | Data access | `src/{AppName}.Infrastructure` (or `.Data`) | Repositories, DbContext, Dapper queries | `KundliRepository`, `AppDbContext` |
71
- | Database | `database/` / `src/{AppName}.Db` | Tables, stored procs, seed scripts | `usp_*.sql`, migrations |
43
+ ```mermaid
44
+ flowchart LR
45
+ UI["Pages"] --> Svc["Services"] --> Data["Data access"] --> DB[("Database")]
46
+ ```
72
47
 
73
- - **Stored-proc vs ORM vs inline SQL:** {state the project's convention — e.g. "reads go through stored procs `usp_*`; writes via EF Core SaveChanges" — fill from the actual code}.
74
- - **How a Razor component gets its data:** {e.g. "components inject a `*Service`; services inject a `*Repository`; repositories call `usp_*` via Dapper" — fill from the actual code}.
48
+ | Layer | Project or folder | What lives here |
49
+ |---|---|---|
50
+ | UI | `src/{App}/Pages` | {…} |
51
+ | Services | `src/{App}.Core/Services` | {…} |
52
+ | Data access | `src/{App}.Core/Data` | {…} |
75
53
 
76
54
  ## Roles and menu map
77
55
 
78
- The app has these user roles (from `docs/{AppName}-UsageGuide.md` test-users + the authorization policies in code). For a **split** guide, this index and every role file live together in `docs/devguides/`, and each role links to its own file (relative `./{AppName}-DevGuide-{Role}.md`).
79
-
80
- | Role | Test user (see UsageGuide) | Authorization (policy / role claim in code) | Menus this role sees | Detail file |
81
- |------|----------------------------|----------------------------------------------|----------------------|-------------|
82
- | {App Admin} | {admin@…} | {`[Authorize(Roles="Admin")]` / policy name} | {Dashboard, Users, Settings, …} | [{App}-DevGuide-AppAdmin.md](./{AppName}-DevGuide-AppAdmin.md) |
83
- | {App Manager} | {manager@…} | {…} | {Dashboard, Reports, …} | [{App}-DevGuide-AppManager.md](./{AppName}-DevGuide-AppManager.md) |
84
- | {End user} | {user1@…} | {…} | {Home, Profile, …} | [{App}-DevGuide-EndUser.md](./{AppName}-DevGuide-EndUser.md) |
85
-
86
- For each role, list the **menu → menu-item → screen** mapping so a developer knows, for a given role, what appears and what each item opens:
87
-
88
- ### {Role} — menu structure
89
- - **{Menu group}** → **{Menu item}** → opens `{Route}` (`{RazorFile}`) — see [§4 {Role} · {Screen}](#role--screen)
90
- - ...
56
+ | Role | Test user | Menu items and the screen each opens |
57
+ |---|---|---|
58
+ | {Role} | {user #} | {Menu → screen (`/route`)} |
91
59
 
92
60
  ## Screen-by-screen code map
93
61
 
94
- One subsection per screen, grouped by role, in navigation order. **In a split guide, the per-role file carries only that role's screens.** Repeat the block below for every screen.
95
-
96
- ---
97
-
98
- ### {Role} · {Screen / Page name}
62
+ ### {Screen name} (`/route`)
99
63
 
100
- - **Route:** `{@page "/dashboard"}`
101
- - **Razor file:** `src/{AppName}.Web/Pages/Dashboard.razor` (+ code-behind `Dashboard.razor.cs` if present)
102
- - **Reached via:** {Menu group → menu item}; **Log in as:** {test user from UsageGuide}
103
- - **What this screen does:** {one or two lines}
104
- - **Visual status:** {✅ looks-right (runtime-confirmed {date}) | ⚠ visual-broken (DEFECT — {what} @ {width}, {date}) | static-only (unconfirmed)}
64
+ ![{Screen name}](screenshots/{App}/{screen-slug}.png)
105
65
 
106
- **Screenshot** — the real rendered screen (captured by the OBSERVE pass, devguide §5a). Review this for layout/overlap issues.
66
+ **Call chain:** `{Page}.razor.cs:{HandleX}` → `{Service}.{Method}` → `{DataAccess}.{Method}` → `{table or procedure}`
107
67
 
108
- ![{Screen} — {Role}](../screenshots/{AppName}/{role}-{screen-slug}.png)
68
+ | File and line | Function | Watch | Expected value |
69
+ |---|---|---|---|
70
+ | `src/{App}/Pages/{Page}.razor.cs:127` | `HandleX` | `aModel.Email` | the email typed in the box |
71
+ | `src/{App}.Core/Services/{Service}.cs:54` | `{Method}` | `vResult` | {…} |
72
+ | `src/{App}.Core/Data/{DataAccess}.cs:31` | `{Method}` | `vRows.Count` | {…} |
109
73
 
110
- <!-- Path is relative to where this guide lives: `screenshots/...` from docs/, `../screenshots/...` from docs/devguides/. STATIC-ONLY guides omit the image (no shot captured). -->
111
-
112
-
113
- **Screen flowchart** — show every meaningful control on the screen and where its data comes from. (Follow the Mermaid authoring rules in `.tfcore/templates/v4custom/html-render-shell.md §5.5` — quote every label, never use `end` as a node id.)
114
-
115
- ```mermaid
116
- flowchart TD
117
- P["Dashboard.razor"] --> C1["Kundli list (grid)"]
118
- P --> C2["Ruling-Planet chart"]
119
- P --> C3["Ruling-Planet table"]
120
- C1 --> S1["DashboardService.GetKundliList()"]
121
- C2 --> S2["DashboardService.GetRulingPlanets()"]
122
- C3 --> S2
123
- S1 --> R1["KundliRepository.QueryList()"]
124
- S2 --> R2["KundliRepository.QueryRulingPlanets()"]
125
- R1 --> DB1[("usp_GetKundliList")]
126
- R2 --> DB2[("usp_RulingPlanets")]
127
- ```
128
-
129
- **Controls on this screen**
130
-
131
- | Control | Type | Purpose | Populated / calculated by |
132
- |---------|------|---------|---------------------------|
133
- | {Kundli list} | {grid} | {lists kundlis for the tenant} | {`DashboardService.GetKundliList()`} |
134
- | {Ruling-Planet chart} | {chart} | {shows current ruling planets} | {`DashboardService.GetRulingPlanets()` — values computed in `RulingPlanetCalculator`} |
135
-
136
- **Data lineage** — the full path for each control/action. This is the heart of the guide.
137
-
138
- | Control / Action | Razor component (file) | Service method (file) | Data-access method (file) | Stored proc / Query | Notes / calculation |
139
- |------------------|------------------------|-----------------------|---------------------------|---------------------|---------------------|
140
- | {Load Kundli list} | {`Dashboard.razor` line ~40} | {`DashboardService.GetKundliList()`} | {`KundliRepository.QueryList()`} | {`usp_GetKundliList`} | {paged; tenant-filtered} |
141
- | {Ruling-Planet chart} | {`Dashboard.razor` `<RulingPlanetChart>`} | {`DashboardService.GetRulingPlanets()`} | {`KundliRepository.QueryRulingPlanets()`} | {`usp_RulingPlanets`} | {planet strengths computed in `RulingPlanetCalculator.Compute()` from the proc rows} |
142
- | {Save / submit action} | {…} | {…} | {…} | {…} | {…} |
143
-
144
- **Business rules / calculations on this screen**
145
- - {Any non-trivial computation, validation, or derived value — name the method that does it.}
146
-
147
- **Known issues / gotchas**
148
- - {Anything fragile, any TR-NNN library gap, any `Blocked` REQ touching this screen.}
149
-
150
- _(Repeat the `### {Role} · {Screen}` block for every screen the role can reach.)_
151
-
152
- ---
74
+ **Calculations on this screen:** {method name and what it computes, or "none"}
153
75
 
154
76
  ## Cross-cutting flows
155
77
 
156
- Flows that span screens or run in the background (auth/login, token refresh, background jobs, notifications, file ingestion). One subsection each with a Mermaid diagram and the same service → data-access → proc lineage. Skip if the app has none.
78
+ ### Sign-in
79
+ **Call chain:** {…}
80
+
81
+ | File and line | Function | Watch | Expected value |
82
+ |---|---|---|---|
83
+ | {…} | {…} | {…} | {…} |
157
84
 
158
- ## How to fix a bug with this guide
85
+ ### Configuration, logging, errors
86
+ {One line each: where it is wired, file and line.}
159
87
 
160
- 1. Reproduce the bug and note **which screen** and **which control** shows it.
161
- 2. Open §4, find that role + screen, find the control in the **Data lineage** table.
162
- 3. Walk the lineage **top-down**: Razor component → service method → data-access method → stored proc/query. The bug is in one of those four.
163
- 4. If the visible value is *calculated*, the lineage row names the calculator method — check it.
164
- 5. After fixing, re-run the screen's walkthrough in `docs/{AppName}-UsageGuide.md`, then re-generate this guide (`*devguide {AppName}`) if the code path changed.
88
+ ## Known issues
165
89
 
166
- ---
167
- _Generated/refreshed by `*devguide {AppName}`. Reflects the code as built at the time shown in the subtitle — regenerate after code changes._
90
+ - {one line each, with the REQ or feedback id}
@@ -0,0 +1,35 @@
1
+ <!-- tf-schema
2
+ doc: phases
3
+ file: docs/{App}-Phases.md
4
+ header: App, Kind, Size, Date
5
+ section: Phases | required
6
+ budget: S 300 600 | M 300 600 | L 300 600
7
+ rule: phases-table
8
+ -->
9
+ <!-- Authoring notes (agent only; never visible text).
10
+ Large projects only. One row per phase; each phase fits Medium on its own (at most 20 screens,
11
+ 100 requirements). Phase 1 keeps the plain file names (docs/{App}-BRD.md, -Checklist, -UIDesign,
12
+ -DevGuide); phase 2 onward are docs/{App}-P2-BRD.md and so on. BRD-N and REQ- ids run on across
13
+ phases and are never reused, so the ranges never overlap. An item added to an earlier phase after a
14
+ later phase exists takes the next free id and the row gets a second range: "BRD-1 to BRD-73, BRD-111 to BRD-118". Every screen sits in exactly one phase;
15
+ the screens of a phase are exactly the "### Screen:" entries of that phase's UIDesign.
16
+ Status is planned, building or done. The phase being worked is appPhase in core-config.yaml
17
+ (bash .tfcore/utils/tf-day1-files.sh {App} --phase N); handoff moves it on.
18
+ tf-doc-check.sh --app {App} refuses a screen in two phases, an id in two phases, a BRD id outside
19
+ its phase's range, and a phase row without its BRD file. -->
20
+
21
+ # {App} — Phases
22
+
23
+ | | |
24
+ |---|---|
25
+ | App | {App} |
26
+ | Kind | app |
27
+ | Size | Large |
28
+ | Date | {YYYY-MM-DD} |
29
+
30
+ ## Phases
31
+
32
+ | Phase | Name | Screens | BRD range | Status |
33
+ |---|---|---|---|---|
34
+ | 1 | {Name} | {Screen, Screen, Screen} | BRD-1 to BRD-{N} | planned |
35
+ | 2 | {Name} | {Screen, Screen} | BRD-{N+1} to BRD-{M} | planned |