@drafthq/draft 2.7.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.
Files changed (158) hide show
  1. package/.claude-plugin/marketplace.json +38 -0
  2. package/.claude-plugin/plugin.json +26 -0
  3. package/LICENSE +21 -0
  4. package/README.md +272 -0
  5. package/bin/README.md +49 -0
  6. package/cli/bin/draft.js +13 -0
  7. package/cli/src/cli.js +113 -0
  8. package/cli/src/hosts/claude-code.js +46 -0
  9. package/cli/src/hosts/codex.js +33 -0
  10. package/cli/src/hosts/cursor.js +50 -0
  11. package/cli/src/hosts/index.js +24 -0
  12. package/cli/src/hosts/opencode.js +39 -0
  13. package/cli/src/installer.js +61 -0
  14. package/cli/src/lib/fsx.js +34 -0
  15. package/cli/src/lib/graph.js +23 -0
  16. package/cli/src/lib/log.js +32 -0
  17. package/cli/src/lib/paths.js +14 -0
  18. package/core/agents/architect.md +338 -0
  19. package/core/agents/debugger.md +193 -0
  20. package/core/agents/ops.md +104 -0
  21. package/core/agents/planner.md +158 -0
  22. package/core/agents/rca.md +314 -0
  23. package/core/agents/reviewer.md +256 -0
  24. package/core/agents/writer.md +110 -0
  25. package/core/guardrails/README.md +4 -0
  26. package/core/guardrails/code-quality.md +4 -0
  27. package/core/guardrails/dependency-triage.md +4 -0
  28. package/core/guardrails/design-norms.md +4 -0
  29. package/core/guardrails/language-standards.md +4 -0
  30. package/core/guardrails/review-checks.md +4 -0
  31. package/core/guardrails/secure-patterns.md +4 -0
  32. package/core/guardrails/security.md +4 -0
  33. package/core/guardrails.md +22 -0
  34. package/core/knowledge-base.md +127 -0
  35. package/core/methodology.md +1221 -0
  36. package/core/shared/condensation.md +224 -0
  37. package/core/shared/context-verify.md +44 -0
  38. package/core/shared/cross-skill-dispatch.md +127 -0
  39. package/core/shared/discovery-schema.md +75 -0
  40. package/core/shared/draft-context-loading.md +282 -0
  41. package/core/shared/git-report-metadata.md +106 -0
  42. package/core/shared/graph-query.md +239 -0
  43. package/core/shared/graph-usage-report.md +22 -0
  44. package/core/shared/jira-sync.md +170 -0
  45. package/core/shared/parallel-analysis.md +386 -0
  46. package/core/shared/parallel-fanout.md +10 -0
  47. package/core/shared/pattern-learning.md +146 -0
  48. package/core/shared/red-flags.md +58 -0
  49. package/core/shared/template-contract.md +22 -0
  50. package/core/shared/template-hygiene.md +10 -0
  51. package/core/shared/tool-resolver.md +10 -0
  52. package/core/shared/vcs-commands.md +97 -0
  53. package/core/shared/verification-gates.md +47 -0
  54. package/core/templates/CHANGELOG.md +70 -0
  55. package/core/templates/ai-context-export.md +8 -0
  56. package/core/templates/ai-context.md +270 -0
  57. package/core/templates/ai-profile.md +41 -0
  58. package/core/templates/architecture.md +203 -0
  59. package/core/templates/dependency-graph.md +103 -0
  60. package/core/templates/discovery.md +79 -0
  61. package/core/templates/guardrails.md +143 -0
  62. package/core/templates/hld.md +327 -0
  63. package/core/templates/intake-questions.md +403 -0
  64. package/core/templates/jira.md +119 -0
  65. package/core/templates/lld.md +283 -0
  66. package/core/templates/metadata.json +66 -0
  67. package/core/templates/plan.md +130 -0
  68. package/core/templates/product.md +110 -0
  69. package/core/templates/rca.md +86 -0
  70. package/core/templates/root-architecture.md +127 -0
  71. package/core/templates/root-product.md +53 -0
  72. package/core/templates/root-tech-stack.md +117 -0
  73. package/core/templates/service-index.md +55 -0
  74. package/core/templates/session-summary.md +8 -0
  75. package/core/templates/spec.md +165 -0
  76. package/core/templates/tech-matrix.md +101 -0
  77. package/core/templates/tech-stack.md +169 -0
  78. package/core/templates/track-architecture.md +311 -0
  79. package/core/templates/workflow.md +187 -0
  80. package/integrations/agents/AGENTS.md +24384 -0
  81. package/integrations/copilot/.github/copilot-instructions.md +24384 -0
  82. package/integrations/gemini/.gemini.md +26 -0
  83. package/package.json +53 -0
  84. package/scripts/fetch-memory-engine.sh +116 -0
  85. package/scripts/lib.sh +256 -0
  86. package/scripts/tools/_lib.sh +220 -0
  87. package/scripts/tools/adr-index.sh +117 -0
  88. package/scripts/tools/check-graph-usage-report.sh +95 -0
  89. package/scripts/tools/check-scope-conflicts.sh +139 -0
  90. package/scripts/tools/check-skill-line-caps.sh +115 -0
  91. package/scripts/tools/check-template-noop.sh +87 -0
  92. package/scripts/tools/check-track-hygiene.sh +230 -0
  93. package/scripts/tools/classify-files.sh +231 -0
  94. package/scripts/tools/cycle-detect.sh +75 -0
  95. package/scripts/tools/detect-test-framework.sh +135 -0
  96. package/scripts/tools/diff-templates-vs-tracks.sh +176 -0
  97. package/scripts/tools/emit-skill-metrics.sh +71 -0
  98. package/scripts/tools/fix-whitespace.sh +192 -0
  99. package/scripts/tools/freshness-check.sh +143 -0
  100. package/scripts/tools/git-metadata.sh +203 -0
  101. package/scripts/tools/graph-callers.sh +74 -0
  102. package/scripts/tools/graph-impact.sh +93 -0
  103. package/scripts/tools/graph-snapshot.sh +102 -0
  104. package/scripts/tools/hotspot-rank.sh +75 -0
  105. package/scripts/tools/manage-symlinks.sh +85 -0
  106. package/scripts/tools/mermaid-from-graph.sh +92 -0
  107. package/scripts/tools/migrate-track-frontmatter.sh +241 -0
  108. package/scripts/tools/parse-git-log.sh +135 -0
  109. package/scripts/tools/parse-reports.sh +114 -0
  110. package/scripts/tools/render-track.sh +145 -0
  111. package/scripts/tools/run-coverage.sh +153 -0
  112. package/scripts/tools/scan-markers.sh +144 -0
  113. package/scripts/tools/skill-caps.conf +24 -0
  114. package/scripts/tools/validate-frontmatter.sh +125 -0
  115. package/scripts/tools/verify-citations.sh +250 -0
  116. package/scripts/tools/verify-doc-anchors.sh +204 -0
  117. package/scripts/tools/verify-graph-binary.sh +154 -0
  118. package/skills/GRAPH.md +332 -0
  119. package/skills/adr/SKILL.md +374 -0
  120. package/skills/assist-review/SKILL.md +49 -0
  121. package/skills/bughunt/SKILL.md +668 -0
  122. package/skills/bughunt/references/regression-tests.md +399 -0
  123. package/skills/change/SKILL.md +267 -0
  124. package/skills/coverage/SKILL.md +336 -0
  125. package/skills/debug/SKILL.md +201 -0
  126. package/skills/decompose/SKILL.md +656 -0
  127. package/skills/deep-review/SKILL.md +326 -0
  128. package/skills/deploy-checklist/SKILL.md +254 -0
  129. package/skills/discover/SKILL.md +66 -0
  130. package/skills/docs/SKILL.md +42 -0
  131. package/skills/documentation/SKILL.md +197 -0
  132. package/skills/draft/SKILL.md +177 -0
  133. package/skills/draft/context-files.md +57 -0
  134. package/skills/draft/intent-mapping.md +37 -0
  135. package/skills/draft/quality-guide.md +51 -0
  136. package/skills/graph/SKILL.md +107 -0
  137. package/skills/impact/SKILL.md +86 -0
  138. package/skills/implement/SKILL.md +794 -0
  139. package/skills/incident-response/SKILL.md +245 -0
  140. package/skills/index/SKILL.md +848 -0
  141. package/skills/init/SKILL.md +1784 -0
  142. package/skills/init/references/architecture-spec.md +1259 -0
  143. package/skills/integrations/SKILL.md +53 -0
  144. package/skills/jira/SKILL.md +577 -0
  145. package/skills/jira/references/review.md +1322 -0
  146. package/skills/learn/SKILL.md +478 -0
  147. package/skills/new-track/SKILL.md +841 -0
  148. package/skills/ops/SKILL.md +57 -0
  149. package/skills/plan/SKILL.md +60 -0
  150. package/skills/quick-review/SKILL.md +216 -0
  151. package/skills/revert/SKILL.md +178 -0
  152. package/skills/review/SKILL.md +1114 -0
  153. package/skills/standup/SKILL.md +183 -0
  154. package/skills/status/SKILL.md +183 -0
  155. package/skills/tech-debt/SKILL.md +318 -0
  156. package/skills/testing-strategy/SKILL.md +195 -0
  157. package/skills/tour/SKILL.md +38 -0
  158. package/skills/upload/SKILL.md +117 -0
@@ -0,0 +1,195 @@
1
+ ---
2
+ name: testing-strategy
3
+ description: Design test strategies and test plans with coverage targets. Complements /draft:coverage which measures what this skill plans. Auto-loaded by /draft:implement before TDD.
4
+ ---
5
+
6
+ # Testing Strategy
7
+
8
+ You are designing a testing strategy and test plan for this project or track.
9
+
10
+ ## Red Flags — STOP if you're:
11
+
12
+ - Writing a strategy without understanding the codebase
13
+ - Setting unrealistic coverage targets (100% is rarely appropriate)
14
+ - Focusing only on unit tests and ignoring integration/E2E
15
+ - Ignoring existing test infrastructure and conventions
16
+ - Not considering the testing pyramid for this project's architecture
17
+
18
+ **A good testing strategy matches the architecture. Not every project needs the same pyramid.**
19
+
20
+ ---
21
+
22
+ ## Pre-Check
23
+
24
+ ### 0. Capture Git Context
25
+
26
+ Before starting, capture the current git state:
27
+
28
+ ```bash
29
+ git branch --show-current # Current branch name
30
+ git rev-parse --short HEAD # Current commit hash
31
+ ```
32
+
33
+ Store this for the report header. The strategy is scoped to this specific branch/commit.
34
+
35
+ ### 1. Verify Draft Context
36
+
37
+ ```bash
38
+ ls draft/ 2>/dev/null
39
+ ```
40
+
41
+ If `draft/` doesn't exist, this skill can still run standalone with reduced context.
42
+
43
+ ### 2. Load Draft Context (if available)
44
+
45
+ Read and follow the base procedure in `core/shared/draft-context-loading.md`.
46
+
47
+ ## Step 1: Parse Arguments
48
+
49
+ - `/draft:testing-strategy` — Project-wide strategy (default if no active track)
50
+ - `/draft:testing-strategy track <id>` — Track-scoped strategy
51
+ - `/draft:testing-strategy module <name>` — Module-scoped strategy
52
+
53
+ ## Step 2: Analyze Codebase
54
+
55
+ 1. **Identify component types:**
56
+ - APIs (REST, GraphQL, gRPC)
57
+ - Data pipelines (ETL, streaming)
58
+ - Frontend (React, Vue, etc.)
59
+ - Infrastructure (Terraform, K8s configs)
60
+ - Libraries/SDKs
61
+ - CLI tools
62
+
63
+ 2. **Discover existing tests:**
64
+ ```bash
65
+ find . -name "*test*" -o -name "*spec*" | head -50
66
+ ```
67
+ Identify: test frameworks, test directories, existing coverage config, test runners.
68
+
69
+ 3. **Assess current coverage:**
70
+ Check for existing coverage reports or configuration:
71
+ ```bash
72
+ ls coverage/ .nyc_output/ htmlcov/ .coverage 2>/dev/null
73
+ ```
74
+
75
+ 4. **Read project context:**
76
+ - `draft/tech-stack.md` — Test frameworks, testing conventions
77
+ - `draft/workflow.md` — TDD preferences (strict/flexible/none)
78
+ - `draft/.ai-context.md` — INVARIANTS section (critical paths), module boundaries, concurrency model
79
+ - `draft/guardrails.md` — Anti-patterns that need test coverage
80
+ - `draft/product.md` — Critical user flows that demand E2E tests
81
+
82
+ ## Step 3: Design Strategy
83
+
84
+ ### Testing Pyramid
85
+
86
+ Tailor to the project architecture:
87
+
88
+ ```
89
+ ┌─────────┐
90
+ │ E2E │ Few, critical paths only
91
+ ├─────────┤
92
+ │ Integr. │ Service boundaries, DB, APIs
93
+ ├─────────┤
94
+ │ Unit │ Business logic, utilities
95
+ └─────────┘
96
+ ```
97
+
98
+ Adjust the pyramid shape per architecture. A microservices backend may need a wider integration band. A UI-heavy app may need more E2E. A library may be almost entirely unit tests.
99
+
100
+ ### Per-Component Strategy
101
+
102
+ | Component Type | Unit | Integration | E2E | Focus |
103
+ |---------------|------|-------------|-----|-------|
104
+ | API endpoints | Input validation, handlers | DB queries, auth | Critical flows | Contract testing |
105
+ | Data pipelines | Transform logic | Source/sink connections | Full pipeline | Data integrity |
106
+ | Frontend | Component rendering, hooks | API integration | User journeys | Visual regression |
107
+ | Infrastructure | Config validation | Resource provisioning | Deployment | Drift detection |
108
+ | Libraries | Public API surface | Cross-module | Consumer scenarios | Backward compat |
109
+ | CLI tools | Argument parsing, logic | File I/O, system calls | Full workflows | Exit codes, output |
110
+
111
+ ### Coverage Targets
112
+
113
+ Set realistic targets based on component criticality:
114
+ - **Critical paths** (from .ai-context.md INVARIANTS): 95%+
115
+ - **Business logic**: 85-90%
116
+ - **Utilities/helpers**: 80%
117
+ - **Infrastructure/config**: 70%
118
+ - **Generated code**: Exclude from targets
119
+ - **Vendor/third-party wrappers**: 60%
120
+
121
+ ### Test Quality Guidelines
122
+
123
+ Coverage alone is insufficient. Include guidance on:
124
+ - **Assertion density:** At least one meaningful assertion per test (not just "doesn't throw")
125
+ - **Boundary testing:** Edge cases, empty inputs, max values, off-by-one
126
+ - **Error paths:** Test failure modes, not just happy paths
127
+ - **Isolation:** Unit tests must not depend on external services, filesystem, or network
128
+ - **Determinism:** No time-dependent, order-dependent, or flaky tests
129
+ - **Naming:** Test names describe the scenario and expected outcome
130
+
131
+ ## Step 4: Gap Analysis
132
+
133
+ Compare current state to targets:
134
+ 1. Run test discovery to count existing tests per module
135
+ 2. Identify modules with zero test coverage
136
+ 3. Identify critical paths (from INVARIANTS) without integration tests
137
+ 4. Identify user flows (from product.md) without E2E coverage
138
+ 5. Identify anti-patterns (from guardrails.md) without regression tests
139
+ 6. Prioritize gaps by risk: high-risk untested > low-risk untested
140
+
141
+ Present as a gap matrix:
142
+
143
+ | Module | Current Tests | Target | Gap | Risk | Priority |
144
+ |--------|--------------|--------|-----|------|----------|
145
+ | ... | ... | ... | ... | ... | ... |
146
+
147
+ ## Step 5: Generate Test Plan
148
+
149
+ Priority test cases to write, ordered by impact:
150
+
151
+ 1. Tests for critical invariants (from .ai-context.md)
152
+ 2. Tests for anti-patterns (from guardrails.md) — regression prevention
153
+ 3. Integration tests for service boundaries
154
+ 4. E2E tests for critical user flows (from product.md)
155
+ 5. Regression tests for known bugs
156
+ 6. Property-based tests for complex business logic (if framework supports it)
157
+ 7. Performance tests for latency-sensitive paths
158
+
159
+ For each priority test, specify:
160
+ - **What:** Description of the test scenario
161
+ - **Why:** Which invariant, anti-pattern, or flow it protects
162
+ - **How:** Test type (unit/integration/E2E), framework, key assertions
163
+ - **Where:** File path where the test should live
164
+
165
+ ## Step 6: Save Output
166
+
167
+ **MANDATORY: Include YAML frontmatter with git metadata.** Follow `core/shared/git-report-metadata.md`.
168
+
169
+ Include the report header table immediately after frontmatter:
170
+
171
+ ```markdown
172
+ | Field | Value |
173
+ |-------|-------|
174
+ | **Branch** | `{LOCAL_BRANCH}` → `{REMOTE/BRANCH}` |
175
+ | **Commit** | `{SHORT_SHA}` — {COMMIT_MESSAGE} |
176
+ | **Generated** | {ISO_TIMESTAMP} |
177
+ | **Synced To** | `{FULL_SHA}` |
178
+ ```
179
+
180
+ Save to:
181
+ - Project-wide: `draft/testing-strategy.md`
182
+ - Track-scoped: `draft/tracks/<id>/testing-strategy.md`
183
+
184
+ ## Cross-Skill Dispatch
185
+
186
+ - **Auto-loaded by:** `/draft:implement` (before TDD cycle)
187
+ - **Suggested by:** `/draft:decompose` (after module definition), `/draft:init` (after setup)
188
+ - **Feeds into:** `/draft:coverage` (measurement against targets set here)
189
+ - **References:** `/draft:bughunt` findings as regression test candidates
190
+
191
+ ## Error Handling
192
+
193
+ **If no test infrastructure found:** Recommend test framework based on tech-stack.md, include setup steps needed before tests can be written
194
+ **If no draft context:** Generate generic strategy, suggest running `/draft:init` for better results
195
+ **If conflicting test patterns found:** Document both patterns, recommend consolidation as a tech-debt item
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: tour
3
+ description: Interactive onboarding walkthrough for a new engineer. Use for "give me a tour", "onboard me", "walk me through the codebase".
4
+ ---
5
+
6
+ # Draft Tour: Interactive Onboarding
7
+
8
+ Provide an interactive codebase walk-through based on existing architecture and guardrail constraints.
9
+
10
+ ## Red Flags - STOP if you're:
11
+ - Dumping the entire `architecture.md` into the chat window.
12
+ - Giving answers to foundational pattern questions before prompting the developer to guess.
13
+ - Explaining code the developer hasn't explicitly asked to view yet.
14
+
15
+ ---
16
+
17
+ ## Execution Constraints
18
+
19
+ 1. **Load Context:** Read `draft/architecture.md`, `draft/tech-stack.md`, and `draft/guardrails.md`.
20
+ 2. **Interactive Cadence:** Ask the developer if they are familiar with the tech stack constraints found in `draft/tech-stack.md`.
21
+ 3. **Module Introduction:** Instead of listing all modules, introduce the "Entry Point" module first.
22
+ 4. **Active Challenge:** After explaining a module's responsibility, challenge the developer: "Based on our *Context-Driven Development* rules, how do you think we handle data persistence here?" Wait for their answer before revealing the architecture strategy.
23
+ - If the answer is correct, confirm briefly and cite the supporting line in `architecture.md` / `guardrails.md`.
24
+ - If the answer is partially right, name what they got right, then ask a narrower follow-up (e.g., "Right that we cache reads — what's the invalidation trigger?") before revealing the rest.
25
+ - If the answer is wrong, do not just hand them the answer. Quote the specific guardrail or HLD section that contradicts it, then re-prompt with a hint scoped to that section.
26
+ 5. **Traceability:** Highlight `draft/.state/facts.json` showing how module constraints have evolved.
27
+ 6. **Track Lifecycle Walk:** Show the full feature lifecycle and who owns each gate:
28
+ - `/draft:new-track` → `spec.md` (requirements + classification + approvers) + `plan.md` (phases/tasks)
29
+ - `/draft:decompose` → `hld.md` (always, with graph-derived diagrams) + `lld.md` (when --lld or High-complexity module)
30
+ - **Approvers (HLD):** Technical Leads, Architecture Review Board, Cloud Operations (SaaS), QA Leads (on-prem), PM Leads
31
+ - **Approvers (LLD):** Team Leads, Technical Leads, Quality Assurance
32
+ - `/draft:implement` → TDD loop reading lld.md/hld.md for stub generation
33
+ - `/draft:upload` → blocks `git upload` for high/mission-critical tracks until HLD §Approvals signed
34
+ - `/draft:deploy-checklist` → blocks deploy until HLD §Checklist + LLD §Alerting Thresholds populated
35
+ - Walk a real example track from `draft/tracks/` if any exist; otherwise sketch a hypothetical low-criticality flow.
36
+ 7. **Completion:** Guide the developer to create their first test track using `/draft:new-track` so they understand the artifact loop end-to-end.
37
+
38
+ ---
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: upload
3
+ description: Pre-upload gate for track handoff. Verifies review status, HLD approvals, deploy checklist, and validator chain before git upload or PR submission.
4
+ ---
5
+
6
+ # Upload for Review
7
+
8
+ Gate track completion before `git upload`, `git push`, or opening a PR for human review.
9
+
10
+ ## Red Flags — STOP if you're:
11
+
12
+ See [shared red flags](../../core/shared/red-flags.md).
13
+
14
+ Skill-specific:
15
+ - Uploading without a passing `/draft:review` on the track
16
+ - Skipping HLD §Approvals for `criticality ∈ {high, mission-critical}` tracks
17
+ - Treating a deploy checklist with `status: BLOCKED` as passing
18
+ - Pushing when validator tools report hygiene or citation drift
19
+
20
+ **Upload is a gate, not a shortcut around review.**
21
+
22
+ ---
23
+
24
+ ## Step 1: Resolve Track
25
+
26
+ 1. Parse `track <id|name>` from arguments, or auto-detect the active `[~]` track from `draft/tracks.md`.
27
+ 2. Load `draft/tracks/<id>/spec.md`, `plan.md`, `metadata.json`, and `hld.md` when present.
28
+ 3. If no track resolves, error: "No track to upload. Specify `track <id>` or activate a track."
29
+
30
+ ---
31
+
32
+ ## Step 2: Pre-Upload Verification
33
+
34
+ ### 2.1 Review gate
35
+
36
+ - Require `review-report-latest.md` on the track with verdict `PASS` or `PASS WITH NOTES`.
37
+ - If missing or `FAIL`, stop and instruct: run `/draft:review track <id>` first.
38
+
39
+ ### 2.2 Deploy checklist (auto-invoke)
40
+
41
+ Run `/draft:deploy-checklist track <id>` when no fresh passing checklist exists.
42
+
43
+ ### 2.5 Checklist status
44
+
45
+ - Read `draft/tracks/<id>/deploy-checklist-latest.md` (or timestamped sibling).
46
+ - If frontmatter contains `status: BLOCKED`, **stop** — checklist is not a passing gate.
47
+ - Critical unchecked items block upload.
48
+
49
+ ### 2.3 Validator chain
50
+
51
+ Run the WS-9 chain from [verification-gates.md](../../core/shared/verification-gates.md) against the track directory. Any non-zero exit aborts upload.
52
+
53
+ ```bash
54
+ TRACK_DIR="draft/tracks/<id>"
55
+ DRAFT_TOOLS="${DRAFT_PLUGIN_ROOT:-$HOME/.claude/plugins/draft}/scripts/tools"
56
+ [ -d "$DRAFT_TOOLS" ] || DRAFT_TOOLS="$HOME/.cursor/plugins/local/draft/scripts/tools"
57
+ [ -d "$DRAFT_TOOLS" ] || DRAFT_TOOLS="$PWD/scripts/tools"
58
+
59
+ "$DRAFT_TOOLS/check-track-hygiene.sh" "$TRACK_DIR"
60
+ "$DRAFT_TOOLS/verify-citations.sh" "$TRACK_DIR"
61
+ "$DRAFT_TOOLS/verify-doc-anchors.sh" "$TRACK_DIR"
62
+ "$DRAFT_TOOLS/diff-templates-vs-tracks.sh" "$TRACK_DIR"
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Step 3: HLD / LLD Approval Gate
68
+
69
+ ### 3.1 HLD §Approvals (high-criticality)
70
+
71
+ When `spec.md` frontmatter `classification.criticality` is `high` or `mission-critical`:
72
+
73
+ - Every required row in `hld.md` §Approvals must have a populated **Date** column.
74
+ - If HLD was edited after the latest signed Date, stop — re-circulate for sign-off.
75
+ - For `low` / unset criticality, warn if approvers are placeholders but do not block.
76
+
77
+ ### 3.2 LLD presence
78
+
79
+ When LLD was generated for the track, ensure Team Lead / QA approval rows are populated before upload (same Date rule as HLD).
80
+
81
+ ---
82
+
83
+ ## Step 4: Upload Execution
84
+
85
+ After all gates pass:
86
+
87
+ 1. Confirm branch and commit range with the user.
88
+ 2. Run the project's upload command (`git upload`, `git push`, or `gh pr create` per `draft/workflow.md`).
89
+ 3. Capture the review URL or change ID.
90
+
91
+ Update `draft/tracks/<id>/metadata.json`:
92
+
93
+ ```json
94
+ {
95
+ "lastUploaded": "<ISO-8601>",
96
+ "uploadCount": <N+1>
97
+ }
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Step 5: Post-Upload
103
+
104
+ - If Jira is linked, sync via [jira-sync.md](../../core/shared/jira-sync.md): comment "Code uploaded for review. {URL}".
105
+ - If new public APIs lack docs, suggest `/draft:documentation api`.
106
+
107
+ ---
108
+
109
+ ## Cross-Skill Dispatch
110
+
111
+ - **Auto-invokes:** `/draft:deploy-checklist`
112
+ - **Requires:** `/draft:review` PASS (or PASS WITH NOTES)
113
+ - **Suggested by:** `/draft:implement` (track completion), `/draft:documentation` (pre-upload API docs)
114
+
115
+ ## Graph Usage Report
116
+
117
+ Emit the canonical footer from [graph-usage-report.md](../../core/shared/graph-usage-report.md) when graph queries were used during validation.