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