@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
@@ -0,0 +1,85 @@
1
+ <!-- tf-schema
2
+ doc: decision-request
3
+ file: docs/{App}-Decision-Request.md
4
+ header: App, Written, Waiting on
5
+ section: What happened | required | max 250
6
+ section: What I need you to decide | required
7
+ section: What I do when you answer | required | max 200
8
+ section: Copy this back to me | required | max 250
9
+ entries: What I need you to decide |
10
+ per-entry: 150 300
11
+ rule: entry-decision-options
12
+ rule: entry-recommendation
13
+ rule: paste-back-block
14
+ rule: no-glossary
15
+ target-lines: 120
16
+ max-lines: 260
17
+ -->
18
+ <!-- Authoring notes (agent only; never visible text).
19
+
20
+ WHEN TO WRITE ONE. A command has hit a choice only the owner can make and the
21
+ answer changes what gets built. Write this file, render it to HTML, and say one
22
+ line in the terminal: which file to open, and that it holds N decisions. Never
23
+ argue the decision out in the terminal — that fills the context and buries the
24
+ question. Everything the owner needs is in the file.
25
+
26
+ WHO READS IT. The owner, and nobody else. No task ever loads a Decision Request
27
+ as input, and it is never named in core-config.yaml. The way the answer comes
28
+ back is the owner pasting the block from §"Copy this back to me" — that pasted
29
+ prompt is the input, and the file's job is done the moment it is answered.
30
+
31
+ HOW IT IS WRITTEN. Plain, simple English, the way you would explain it to
32
+ someone who has not read a line of the framework. No coined terms. No framework
33
+ shorthand. No requirement ids in the question itself — name the thing, not its
34
+ number. If a word needs defining, it is the wrong word: change it. A glossary
35
+ section is refused by `rule: no-glossary`, because a document that has to teach
36
+ its own vocabulary before it can ask its question was written for the wrong
37
+ reader.
38
+
39
+ WHAT IT IS NOT. Not a defect report — that is the feedback file. Not an
40
+ architecture decision record — that is DECISIONS.md, written after the fact.
41
+ This file asks a question and then stops existing: when it is answered, it moves
42
+ unchanged to docs/OldDocs/ and the live name is free for the next one.
43
+
44
+ ONE LIVE FILE. All open decisions go in this one file as separate entries. Never
45
+ a dated copy, never a -v2. -->
46
+
47
+ # {App} — decisions I need from you
48
+
49
+ | | |
50
+ |---|---|
51
+ | App | {App} |
52
+ | Written | {YYYY-MM-DD} |
53
+ | Waiting on | {N} decisions. Nothing has been changed yet. |
54
+
55
+ ## What happened
56
+
57
+ {Two short paragraphs, at most 250 words. What was being done, what stopped it, and
58
+ why the choice is yours rather than something to be worked out. Plain words.}
59
+
60
+ ## What I need you to decide
61
+
62
+ ### {1. The short name of the choice}
63
+
64
+ {One paragraph: what the choice actually is, in plain words.}
65
+
66
+ | Option | What happens | What it costs |
67
+ |---|---|---|
68
+ | **A — {name}** | {what the project looks like afterwards} | {work, and what is given up} |
69
+ | **B — {name}** | {what the project looks like afterwards} | {work, and what is given up} |
70
+
71
+ **My recommendation: {A}** — {one sentence saying why.}
72
+
73
+ ## What I do when you answer
74
+
75
+ {The steps, in order, one line each. What gets edited, what gets re-checked, roughly
76
+ how long. So the answer is given with the consequences in view.}
77
+
78
+ ## Copy this back to me
79
+
80
+ {One fenced block per decision. Each block is a complete instruction that stands on
81
+ its own — the owner pastes it and nothing else needs saying.}
82
+
83
+ ```
84
+ {App}: decision 1 — go with option A. {The one thing that changes.}
85
+ ```
@@ -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}
@@ -1,31 +1,86 @@
1
- <!-- ============================================================
2
- ONE FEEDBACK FILE PER LIBRARY — never a combined file.
3
- TrBlazeUI and TechieRag are separate codebases with separate
4
- teams; each team receives (or pulls) only its own file:
5
- docs/{AppName}-TrBlazeUI-Feedback.md (issue IDs TR-NNN)
6
- docs/{AppName}-TechieRag-Feedback.md (issue IDs TR-RAG-NNN)
7
- A future library {LibName} gets docs/{AppName}-{LibName}-Feedback.md
8
- with its own ID prefix (WORKFLOW.html §9.1).
9
- Create a library's file on the FIRST issue for that library;
10
- substitute {Library} and the ID prefix below.
11
- ============================================================ -->
12
-
13
- # {Library} Feedback — surfaced during {AppName}
14
-
15
- ## Summary (filled by /flow-master on consolidation)
16
- - 0 blockers, 0 major, 0 minor, 0 nice-to-have
17
- - Last consolidated: {YYYY-MM-DD}
18
-
19
- ## Issues
20
-
21
- <!-- Append entries as gaps are found. IDs are append-only, never renumbered.
22
- TrBlazeUI → TR-NNN · TechieRag → TR-RAG-NNN -->
23
-
24
- ### TR-001 — <short title>
25
- - **Severity:** blocker | major | minor | nice-to-have
26
- - **Repro:** <minimal code snippet>
27
- - **Expected:** …
28
- - **Actual:** …
29
- - **Encountered in:** REQ-UI-013
30
- - **Workaround:** <what you did in app code>
31
- - **Suggested fix:** <hypothesis for the library team>
1
+ <!-- tf-schema
2
+ doc: feedback
3
+ file: docs/{App}-{Upstream}-Feedback.md
4
+ header: App, Upstream, Updated
5
+ section: Summary | required | max 200
6
+ section: Entries | required
7
+ section: Replies from* | optional
8
+ section: Resolution status* | optional
9
+ entries: Entries |
10
+ per-entry: 120 250
11
+ rule: entry-feedback-fields
12
+ rule: entry-blocks-line
13
+ rule: feedback-blocking-count
14
+ rule: no-glossary
15
+ -->
16
+ <!-- Authoring notes (agent only; never visible text).
17
+
18
+ ONE FEEDBACK FILE PER UPSTREAM — never a combined file. Each upstream owns a
19
+ separate codebase and receives only its own file:
20
+
21
+ docs/{App}-TrBlazeUI-Feedback.md ids TR-NNN (the UI library)
22
+ docs/{App}-TechieRag-Feedback.md ids TR-RAG-NNN (the RAG library)
23
+ docs/{App}-TechieFlow-Feedback.md ids TF-NNN (the framework itself)
24
+
25
+ A future library {LibName} gets docs/{App}-{LibName}-Feedback.md with its own
26
+ prefix. Create the file on the FIRST entry for that upstream.
27
+
28
+ REPORTING IS NEVER REFUSED. If something upstream is wrong, file it — whatever
29
+ the severity, whatever the day. What this schema constrains is the SHAPE, not
30
+ the right to report:
31
+
32
+ 1. Every entry says whether it BLOCKS the work, in one word. That is the field
33
+ the owner reads first, and it decides whether the run stops.
34
+ 2. A non-blocking entry is filed and the work CONTINUES. Never stop, never ask,
35
+ never write a page of analysis about it mid-run. One entry, then carry on.
36
+ 3. 250 words for the REPORT, hard: the eight fields, and nothing else. An entry is
37
+ a bug report, not an essay. Evidence goes in a code block, not in prose.
38
+ Working-out that is genuinely worth keeping goes under a `#### Detail` heading
39
+ inside the entry, and is not counted — so a thorough analysis costs nothing and
40
+ an unreadable entry is still refused.
41
+ 4. Plain English. No coined terms, no framework shorthand, no word the reader
42
+ would have to look up. If you find yourself writing a glossary, the words
43
+ are wrong — change the words. `rule: no-glossary` refuses the section.
44
+ 5. A decision for the owner does NOT go in this file. It goes in a Decision
45
+ Request (`app-decision-request-tmpl.md`), which is written for the owner and
46
+ carries the prompt to paste back.
47
+
48
+ "Replies from {Upstream}" holds the upstream team's answers, newest block first.
49
+ Ids are append-only and never renumbered. A fixed entry keeps its body and gains
50
+ a resolution line; the record of what was wrong is the point. -->
51
+
52
+ # {Upstream} feedback — found while building {App}
53
+
54
+ | | |
55
+ |---|---|
56
+ | App | {App} |
57
+ | Upstream | {Upstream} |
58
+ | Updated | {YYYY-MM-DD} |
59
+
60
+ ## Summary
61
+
62
+ {N} entries: {n} blocking now, {n} filed and not blocking, {n} fixed upstream.
63
+
64
+ {One sentence naming what is blocked right now, or the sentence "Nothing is blocked."}
65
+
66
+ ## Entries
67
+
68
+ ### {TF-001} — {one line saying what is wrong}
69
+
70
+ - **Severity:** blocker | major | minor
71
+ - **Blocks:** yes — {the row or command that cannot proceed} | no — {what was done instead, and the work carried on}
72
+ - **Repro:** {the shortest command or snippet that shows it}
73
+ - **Expected:** {what should have happened}
74
+ - **Actual:** {what happened}
75
+ - **Encountered in:** {REQ-UI-013, or the command that was running}
76
+ - **Workaround:** {what was done in this project, or "none"}
77
+ - **Suggested fix:** {one concrete change for the upstream team}
78
+
79
+ #### Detail
80
+
81
+ {Optional, and not counted against the 250 words: the root cause, the reasoning, the
82
+ longer version of the fix. Everything above must stand on its own without it.}
83
+
84
+ ## Replies from {Upstream}
85
+
86
+ <!-- The upstream team's answers, newest block first. Left in full: this is the record. -->
@@ -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 |