@techierathore/techieflow 1.0.0
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.
- package/.claude/commands/TechieFlow/agents/analyst.md +97 -0
- package/.claude/commands/TechieFlow/agents/architect.md +84 -0
- package/.claude/commands/TechieFlow/agents/flow-master.md +217 -0
- package/.claude/commands/TechieFlow/agents/verifier.md +72 -0
- package/.claude/commands/TechieFlow/tasks/_metrics-emit-gate.md +138 -0
- package/.claude/commands/TechieFlow/tasks/_smoke-test-policy.md +98 -0
- package/.claude/commands/TechieFlow/tasks/_status-update-gate.md +78 -0
- package/.claude/commands/TechieFlow/tasks/_yolo-mode.md +77 -0
- package/.claude/commands/TechieFlow/tasks/advanced-elicitation.md +117 -0
- package/.claude/commands/TechieFlow/tasks/amend-docs.md +149 -0
- package/.claude/commands/TechieFlow/tasks/author-brd.md +79 -0
- package/.claude/commands/TechieFlow/tasks/build-phase.md +231 -0
- package/.claude/commands/TechieFlow/tasks/create-deep-research-prompt.md +278 -0
- package/.claude/commands/TechieFlow/tasks/create-doc.md +101 -0
- package/.claude/commands/TechieFlow/tasks/day1-brownfield.md +507 -0
- package/.claude/commands/TechieFlow/tasks/day1-greenfield.md +224 -0
- package/.claude/commands/TechieFlow/tasks/devguide.md +224 -0
- package/.claude/commands/TechieFlow/tasks/document-project.md +343 -0
- package/.claude/commands/TechieFlow/tasks/execute-checklist.md +86 -0
- package/.claude/commands/TechieFlow/tasks/facilitate-brainstorming-session.md +136 -0
- package/.claude/commands/TechieFlow/tasks/fix-issues.md +134 -0
- package/.claude/commands/TechieFlow/tasks/generate-html.md +115 -0
- package/.claude/commands/TechieFlow/tasks/handoff-phase.md +126 -0
- package/.claude/commands/TechieFlow/tasks/index-docs.md +173 -0
- package/.claude/commands/TechieFlow/tasks/kb-mode-interaction.md +75 -0
- package/.claude/commands/TechieFlow/tasks/log-miss.md +160 -0
- package/.claude/commands/TechieFlow/tasks/metrics-report.md +143 -0
- package/.claude/commands/TechieFlow/tasks/mockups.md +122 -0
- package/.claude/commands/TechieFlow/tasks/productguide.md +105 -0
- package/.claude/commands/TechieFlow/tasks/refresh-status.md +135 -0
- package/.claude/commands/TechieFlow/tasks/render-workflow-docs.md +117 -0
- package/.claude/commands/TechieFlow/tasks/shard-doc.md +185 -0
- package/.claude/commands/TechieFlow/tasks/split-brd.md +131 -0
- package/.claude/commands/TechieFlow/tasks/triage-issues.md +157 -0
- package/.claude/commands/TechieFlow/tasks/verify-phase.md +579 -0
- package/.claude/commands/generate-html.md +124 -0
- package/.codex/config.toml +46 -0
- package/.codex/hooks.json +63 -0
- package/.codex/rules/techieflow.rules +8 -0
- package/.opencode/command/generate-html.md +129 -0
- package/.opencode/plugin/techieflow.js +350 -0
- package/.tfcore/TOKEN-GUIDE.md +59 -0
- package/.tfcore/agents/analyst.md +97 -0
- package/.tfcore/agents/architect.md +84 -0
- package/.tfcore/agents/flow-master.md +217 -0
- package/.tfcore/agents/verifier.md +72 -0
- package/.tfcore/checklists/architect-checklist.md +438 -0
- package/.tfcore/core-config.yaml +47 -0
- package/.tfcore/data/brainstorming-techniques.md +36 -0
- package/.tfcore/data/elicitation-methods.md +154 -0
- package/.tfcore/data/techieflow-kb.md +807 -0
- package/.tfcore/data/technical-preferences.md +3 -0
- package/.tfcore/enhanced-ide-development-workflow.md +248 -0
- package/.tfcore/hooks/block-git.sh +301 -0
- package/.tfcore/hooks/codex-adapter.py +248 -0
- package/.tfcore/hooks/guard-artifacts.sh +101 -0
- package/.tfcore/hooks/guard-status-html.sh +102 -0
- package/.tfcore/hooks/guard-status.sh +124 -0
- package/.tfcore/hooks/guard-verify.sh +108 -0
- package/.tfcore/hooks/metrics-session.sh +129 -0
- package/.tfcore/hooks/session-pointer.sh +52 -0
- package/.tfcore/hooks/sweep-artifacts.sh +198 -0
- package/.tfcore/install-manifest.yaml +231 -0
- package/.tfcore/routing.yaml +105 -0
- package/.tfcore/tasks/_metrics-emit-gate.md +138 -0
- package/.tfcore/tasks/_smoke-test-policy.md +98 -0
- package/.tfcore/tasks/_status-update-gate.md +78 -0
- package/.tfcore/tasks/_yolo-mode.md +77 -0
- package/.tfcore/tasks/advanced-elicitation.md +117 -0
- package/.tfcore/tasks/amend-docs.md +149 -0
- package/.tfcore/tasks/author-brd.md +79 -0
- package/.tfcore/tasks/build-phase.md +231 -0
- package/.tfcore/tasks/create-deep-research-prompt.md +278 -0
- package/.tfcore/tasks/create-doc.md +101 -0
- package/.tfcore/tasks/day1-brownfield.md +507 -0
- package/.tfcore/tasks/day1-greenfield.md +224 -0
- package/.tfcore/tasks/devguide.md +224 -0
- package/.tfcore/tasks/document-project.md +343 -0
- package/.tfcore/tasks/execute-checklist.md +86 -0
- package/.tfcore/tasks/facilitate-brainstorming-session.md +136 -0
- package/.tfcore/tasks/fix-issues.md +134 -0
- package/.tfcore/tasks/generate-html.md +115 -0
- package/.tfcore/tasks/handoff-phase.md +126 -0
- package/.tfcore/tasks/index-docs.md +173 -0
- package/.tfcore/tasks/kb-mode-interaction.md +75 -0
- package/.tfcore/tasks/log-miss.md +160 -0
- package/.tfcore/tasks/metrics-report.md +143 -0
- package/.tfcore/tasks/mockups.md +122 -0
- package/.tfcore/tasks/productguide.md +105 -0
- package/.tfcore/tasks/refresh-status.md +135 -0
- package/.tfcore/tasks/render-workflow-docs.md +117 -0
- package/.tfcore/tasks/shard-doc.md +185 -0
- package/.tfcore/tasks/split-brd.md +131 -0
- package/.tfcore/tasks/triage-issues.md +157 -0
- package/.tfcore/tasks/verify-phase.md +579 -0
- package/.tfcore/telemetry/SCHEMA.md +678 -0
- package/.tfcore/telemetry/install-metrics.sh +390 -0
- package/.tfcore/telemetry/pre-commit +94 -0
- package/.tfcore/telemetry/tf-metrics.sh +1415 -0
- package/.tfcore/templates/architecture-tmpl.yaml +650 -0
- package/.tfcore/templates/brainstorming-output-tmpl.yaml +156 -0
- package/.tfcore/templates/brownfield-architecture-tmpl.yaml +476 -0
- package/.tfcore/templates/competitor-analysis-tmpl.yaml +306 -0
- package/.tfcore/templates/front-end-architecture-tmpl.yaml +218 -0
- package/.tfcore/templates/fullstack-architecture-tmpl.yaml +823 -0
- package/.tfcore/templates/market-research-tmpl.yaml +252 -0
- package/.tfcore/templates/project-brief-tmpl.yaml +221 -0
- package/.tfcore/templates/v4custom/app-agents-md-tmpl.md +61 -0
- package/.tfcore/templates/v4custom/app-architecture-tmpl.md +127 -0
- package/.tfcore/templates/v4custom/app-brd-tmpl.md +204 -0
- package/.tfcore/templates/v4custom/app-checklist-tmpl.md +90 -0
- package/.tfcore/templates/v4custom/app-claude-md-tmpl.md +33 -0
- package/.tfcore/templates/v4custom/app-devguide-tmpl.md +167 -0
- package/.tfcore/templates/v4custom/app-editorconfig-tmpl.editorconfig +44 -0
- package/.tfcore/templates/v4custom/app-library-feedback-tmpl.md +31 -0
- package/.tfcore/templates/v4custom/app-productguide-tmpl.md +54 -0
- package/.tfcore/templates/v4custom/app-project-status-tmpl.md +98 -0
- package/.tfcore/templates/v4custom/app-uidesign-tmpl.md +48 -0
- package/.tfcore/templates/v4custom/app-usageguide-tmpl.md +67 -0
- package/.tfcore/templates/v4custom/build-invocation-ladder.md +190 -0
- package/.tfcore/templates/v4custom/html-render-shell.md +502 -0
- package/.tfcore/templates/v4custom/metrics-report-template.md +273 -0
- package/.tfcore/templates/v4custom/opencode-operating-contract.md +56 -0
- package/.tfcore/user-guide.md +633 -0
- package/.tfcore/utils/techieflow-doc-template.md +325 -0
- package/.tfcore/utils/tf-assets.sh +310 -0
- package/.tfcore/utils/tf-codex-bind.py +196 -0
- package/.tfcore/utils/tf-codex-telemetry.py +60 -0
- package/.tfcore/utils/tf-emit.sh +1075 -0
- package/.tfcore/utils/tf-gitignore-audit.sh +281 -0
- package/.tfcore/utils/tf-goal.sh +421 -0
- package/.tfcore/utils/tf-harness.sh +160 -0
- package/.tfcore/utils/tf-mockup-parity.mjs +555 -0
- package/.tfcore/utils/tf-mockup-parity.sh +65 -0
- package/.tfcore/utils/tf-opencode-audit.py +126 -0
- package/.tfcore/utils/tf-perf.sh +241 -0
- package/.tfcore/utils/tf-render-html.py +715 -0
- package/.tfcore/utils/tf-render-html.sh +28 -0
- package/.tfcore/utils/tf-routing-bind.sh +216 -0
- package/.tfcore/utils/tf-routing.sh +247 -0
- package/.tfcore/utils/tf-yolo.sh +119 -0
- package/.tfcore/working-in-the-brownfield.md +606 -0
- package/LICENSE +201 -0
- package/README.md +1212 -0
- package/WORKFLOW.html +1986 -0
- package/docs/TechieFlow-Installation.md +299 -0
- package/opencode.jsonc +929 -0
- package/package.json +60 -0
- package/scripts/install.mjs +992 -0
- package/scripts/test-install.mjs +505 -0
- package/scripts/validate.mjs +155 -0
|
@@ -0,0 +1,204 @@
|
|
|
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.
|
|
26
|
+
-->
|
|
27
|
+
|
|
28
|
+
|
|
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
|
+
```
|
|
98
|
+
|
|
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
|
+
```
|
|
110
|
+
|
|
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
|
+
```
|
|
119
|
+
|
|
120
|
+
## 9. Feature catalog
|
|
121
|
+
|
|
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. -->
|
|
134
|
+
|
|
135
|
+
### F-{CODE}: {Feature name}
|
|
136
|
+
|
|
137
|
+
**Personas:** <who uses it> · **Phase:** <0/1/2/… or MVP/Later>
|
|
138
|
+
|
|
139
|
+
<1-2 paragraphs: what this feature does and why it exists.>
|
|
140
|
+
|
|
141
|
+
| Screen | Route | Description |
|
|
142
|
+
|--------|-------|-------------|
|
|
143
|
+
| … | `/…` | … |
|
|
144
|
+
|
|
145
|
+
**Workflow:**
|
|
146
|
+
1. <step>
|
|
147
|
+
2. <step>
|
|
148
|
+
|
|
149
|
+
```mermaid
|
|
150
|
+
flowchart LR
|
|
151
|
+
A["input"] --> B{"decision"} --> C["output"]
|
|
152
|
+
```
|
|
153
|
+
|
|
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
|
|
197
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
198
|
+
|
|
199
|
+
## 15. Glossary
|
|
200
|
+
- TrBlazeUI, TechieRag, REQ-UI-*, REQ-FN-*, REQ-RAG-*, REQ-NFR-*
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
Last updated: {YYYY-MM-DD}
|
|
204
|
+
Highest BRD ID: BRD-{N}
|
|
@@ -0,0 +1,90 @@
|
|
|
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)
|
|
13
|
+
|
|
14
|
+
## 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
|
+
|
|
17
|
+
## Requirements Status
|
|
18
|
+
|
|
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
|
+
============================================================ -->
|
|
36
|
+
|
|
37
|
+
| ID | Requirement | Status | % | Remarks | Details |
|
|
38
|
+
|----|-------------|--------|---|---------|---------|
|
|
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
|
|
51
|
+
|
|
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.
|
|
56
|
+
|
|
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`)
|
|
65
|
+
|
|
66
|
+
<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
|
|
71
|
+
|
|
72
|
+
<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>.
|
|
86
|
+
|
|
87
|
+
## Non-functional
|
|
88
|
+
|
|
89
|
+
<a id="d-req-nfr-001"></a>
|
|
90
|
+
- **REQ-NFR-001** — <perf / security / accessibility>.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# {AppName} — Claude Code session memory
|
|
2
|
+
|
|
3
|
+
<!-- Since 2026-08-20 the harness-neutral project memory lives in AGENTS.md
|
|
4
|
+
(app-agents-md-tmpl.md — required reading, hard rules, project basics,
|
|
5
|
+
REQ prefixes, verification, slash-command table). Claude Code pulls it in
|
|
6
|
+
through the @import below; OpenCode auto-loads AGENTS.md directly and
|
|
7
|
+
never reads this file. Keep ONLY Claude-specific material here.
|
|
8
|
+
AGENTS.md is committed; this file stays gitignored. -->
|
|
9
|
+
|
|
10
|
+
@AGENTS.md
|
|
11
|
+
|
|
12
|
+
## Permissions and tool preference (read before using Bash)
|
|
13
|
+
|
|
14
|
+
`.claude/settings.json` auto-allows every dedicated tool (Read, Edit, Write, Glob, Grep, MultiEdit, Task, WebFetch, WebSearch, TodoWrite, NotebookEdit) and **all Bash** (bare `Bash` allow). Only deletes (`rm`, `rmdir`) and `sudo` prompt; **`git` / `gh` are DENIED** (Hard rule 1 — git is manual; a PreToolUse hook also blocks compound forms like `cd x && git log`); catastrophic `rm -rf` paths are denied.
|
|
15
|
+
|
|
16
|
+
**Still: never reach for bash for file inspection or file writing.** The dedicated tools are faster, diff-aware, and keep the transcript readable:
|
|
17
|
+
|
|
18
|
+
| Want to | Bash (avoid) | Use this tool instead |
|
|
19
|
+
|---------|--------------|------------------------|
|
|
20
|
+
| Check if a file exists | `if [ -f x ]; then ...` | **Read** — returns content or "file does not exist" |
|
|
21
|
+
| Get file size / mtime | `wc -c < x`, `date -r x` | **Read** (you usually want content anyway) — or skip mtime entirely and use today's date |
|
|
22
|
+
| Write a file | `cat <<EOF > x` or `echo … > x` | **Write** |
|
|
23
|
+
| Edit a file | `sed -i 's/a/b/' x` | **Edit** with old_string / new_string |
|
|
24
|
+
| Find files by pattern | `find . -name '*.cs'` | **Glob** |
|
|
25
|
+
| Search file contents | `grep -r pattern src/` | **Grep** |
|
|
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
|
+
| Loop over a list of files | `for f in ...; do ...; done` | Multiple parallel Read/Edit calls in one assistant turn |
|
|
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.
|
|
30
|
+
|
|
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
|
+
|
|
33
|
+
Reserve Bash for things that genuinely need a shell: `dotnet build`, `dotnet test`, `dotnet run`, `npm install`, `winrun "..."`, `playwright …`, single-command file listings like `ls src/`. Anything more complex than a single command — use a dedicated tool.
|
|
@@ -0,0 +1,167 @@
|
|
|
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.
|
|
37
|
+
-->
|
|
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.
|
|
61
|
+
|
|
62
|
+
## Architecture cheat-sheet
|
|
63
|
+
|
|
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 |
|
|
72
|
+
|
|
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}.
|
|
75
|
+
|
|
76
|
+
## Roles and menu map
|
|
77
|
+
|
|
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
|
+
- ...
|
|
91
|
+
|
|
92
|
+
## Screen-by-screen code map
|
|
93
|
+
|
|
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}
|
|
99
|
+
|
|
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)}
|
|
105
|
+
|
|
106
|
+
**Screenshot** — the real rendered screen (captured by the OBSERVE pass, devguide §5a). Review this for layout/overlap issues.
|
|
107
|
+
|
|
108
|
+

|
|
109
|
+
|
|
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
|
+
---
|
|
153
|
+
|
|
154
|
+
## Cross-cutting flows
|
|
155
|
+
|
|
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.
|
|
157
|
+
|
|
158
|
+
## How to fix a bug with this guide
|
|
159
|
+
|
|
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.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
_Generated/refreshed by `*devguide {AppName}`. Reflects the code as built at the time shown in the subtitle — regenerate after code changes._
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
root = true
|
|
2
|
+
|
|
3
|
+
[*]
|
|
4
|
+
indent_style = space
|
|
5
|
+
indent_size = 4
|
|
6
|
+
end_of_line = lf
|
|
7
|
+
charset = utf-8
|
|
8
|
+
trim_trailing_whitespace = true
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
|
|
11
|
+
[*.cs]
|
|
12
|
+
# File-scoped namespaces
|
|
13
|
+
csharp_style_namespace_declarations = file_scoped:warning
|
|
14
|
+
|
|
15
|
+
# Async suffix
|
|
16
|
+
dotnet_naming_rule.async_methods_end_in_async.severity = warning
|
|
17
|
+
dotnet_naming_rule.async_methods_end_in_async.symbols = async_methods
|
|
18
|
+
dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
|
|
19
|
+
dotnet_naming_symbols.async_methods.applicable_kinds = method
|
|
20
|
+
dotnet_naming_symbols.async_methods.required_modifiers = async
|
|
21
|
+
dotnet_naming_style.end_in_async.required_suffix = Async
|
|
22
|
+
dotnet_naming_style.end_in_async.capitalization = pascal_case
|
|
23
|
+
|
|
24
|
+
# Prefer var
|
|
25
|
+
csharp_style_var_for_built_in_types = true:warning
|
|
26
|
+
csharp_style_var_when_type_is_apparent = true:warning
|
|
27
|
+
csharp_style_var_elsewhere = true:warning
|
|
28
|
+
|
|
29
|
+
# Forbid _underscore on private fields
|
|
30
|
+
dotnet_naming_rule.private_fields_no_underscore.severity = warning
|
|
31
|
+
dotnet_naming_rule.private_fields_no_underscore.symbols = private_fields
|
|
32
|
+
dotnet_naming_rule.private_fields_no_underscore.style = pascal_no_underscore
|
|
33
|
+
dotnet_naming_symbols.private_fields.applicable_kinds = field
|
|
34
|
+
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
|
|
35
|
+
dotnet_naming_style.pascal_no_underscore.required_prefix =
|
|
36
|
+
dotnet_naming_style.pascal_no_underscore.capitalization = pascal_case
|
|
37
|
+
|
|
38
|
+
# Nullable reference types
|
|
39
|
+
dotnet_diagnostic.CS8600.severity = warning
|
|
40
|
+
dotnet_diagnostic.CS8602.severity = warning
|
|
41
|
+
dotnet_diagnostic.CS8603.severity = warning
|
|
42
|
+
|
|
43
|
+
# Suppress StyleCop conflicts (uncomment if StyleCop.Analyzers added)
|
|
44
|
+
# dotnet_diagnostic.SA1101.severity = none # don't require this. qualification
|
|
@@ -0,0 +1,31 @@
|
|
|
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>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# {AppName} — Product Guide
|
|
2
|
+
|
|
3
|
+
> **Audience: end users (not developers).** This is the how-to-use-the-app manual — task-oriented, screenshot-illustrated, plain language. It explains *what each screen is for* and *how to do each thing*, not how the code works (that's the DevGuide). It is a HUMAN document → always written as markdown AND rendered to HTML.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
<!-- Auto-maintained. Slug rule: .tfcore/templates/v4custom/html-render-shell.md §1. List each `## <Role/Area>` and its `### <Feature/Screen>` sub-entries. -->
|
|
8
|
+
|
|
9
|
+
1. [Welcome](#welcome)
|
|
10
|
+
2. [Getting started](#getting-started)
|
|
11
|
+
3. [Roles at a glance](#roles-at-a-glance)
|
|
12
|
+
4. [Using {AppName}](#using-appname)
|
|
13
|
+
|
|
14
|
+
## Welcome
|
|
15
|
+
|
|
16
|
+
<one short paragraph: what {AppName} is and who it's for, in product language drawn from the BRD §1/§9 — no jargon, no architecture.>
|
|
17
|
+
|
|
18
|
+
## Getting started
|
|
19
|
+
|
|
20
|
+
- **Sign in:** {how to reach the app + log in; the sign-in screen with its screenshot}.
|
|
21
|
+
- **What you'll see first:** {the landing screen per role — keep it accurate to the real post-login landing, the same one the DevGuide's LANDING-TRUTH established}.
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
## Roles at a glance
|
|
26
|
+
|
|
27
|
+
<one row per user role/persona, plain-language "what this role can do" — derived from the BRD personas + the DevGuide's role→menu map.>
|
|
28
|
+
|
|
29
|
+
| Role | What you can do |
|
|
30
|
+
|------|-----------------|
|
|
31
|
+
| {Role} | {one line} |
|
|
32
|
+
|
|
33
|
+
## Using {AppName}
|
|
34
|
+
|
|
35
|
+
<!-- One `## {Role or Area}` section, then one `### {Feature / Screen}` block per screen, in the order a
|
|
36
|
+
user would naturally use them (navigation order from the DevGuide's menu map). Each block is
|
|
37
|
+
task-oriented and carries the REAL screenshot captured by the DevGuide OBSERVE pass. For a large
|
|
38
|
+
app this section is split per role into docs/productguides/ (see the task). -->
|
|
39
|
+
|
|
40
|
+
### {Feature / Screen name}
|
|
41
|
+
|
|
42
|
+
**What it's for:** {one or two plain sentences — the user benefit, from the BRD feature catalog.}
|
|
43
|
+
|
|
44
|
+
**How to use it:**
|
|
45
|
+
1. {step — what the user clicks/enters}
|
|
46
|
+
2. {step}
|
|
47
|
+
3. {what they should see / the result}
|
|
48
|
+
|
|
49
|
+

|
|
50
|
+
|
|
51
|
+
**Tips & notes:** {gotchas, limits, anything from the UsageGuide's known-limitations that a user should know — plain language, no defect IDs.}
|
|
52
|
+
|
|
53
|
+
<!-- Repeat the ### block for every user-facing screen/feature. Omit purely internal/admin-plumbing
|
|
54
|
+
screens that an external user never touches, unless the role section is the admin guide. -->
|