@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.
- package/.claude-plugin/marketplace.json +38 -0
- package/.claude-plugin/plugin.json +26 -0
- package/LICENSE +21 -0
- package/README.md +272 -0
- package/bin/README.md +49 -0
- package/cli/bin/draft.js +13 -0
- package/cli/src/cli.js +113 -0
- package/cli/src/hosts/claude-code.js +46 -0
- package/cli/src/hosts/codex.js +33 -0
- package/cli/src/hosts/cursor.js +50 -0
- package/cli/src/hosts/index.js +24 -0
- package/cli/src/hosts/opencode.js +39 -0
- package/cli/src/installer.js +61 -0
- package/cli/src/lib/fsx.js +34 -0
- package/cli/src/lib/graph.js +23 -0
- package/cli/src/lib/log.js +32 -0
- package/cli/src/lib/paths.js +14 -0
- package/core/agents/architect.md +338 -0
- package/core/agents/debugger.md +193 -0
- package/core/agents/ops.md +104 -0
- package/core/agents/planner.md +158 -0
- package/core/agents/rca.md +314 -0
- package/core/agents/reviewer.md +256 -0
- package/core/agents/writer.md +110 -0
- package/core/guardrails/README.md +4 -0
- package/core/guardrails/code-quality.md +4 -0
- package/core/guardrails/dependency-triage.md +4 -0
- package/core/guardrails/design-norms.md +4 -0
- package/core/guardrails/language-standards.md +4 -0
- package/core/guardrails/review-checks.md +4 -0
- package/core/guardrails/secure-patterns.md +4 -0
- package/core/guardrails/security.md +4 -0
- package/core/guardrails.md +22 -0
- package/core/knowledge-base.md +127 -0
- package/core/methodology.md +1221 -0
- package/core/shared/condensation.md +224 -0
- package/core/shared/context-verify.md +44 -0
- package/core/shared/cross-skill-dispatch.md +127 -0
- package/core/shared/discovery-schema.md +75 -0
- package/core/shared/draft-context-loading.md +282 -0
- package/core/shared/git-report-metadata.md +106 -0
- package/core/shared/graph-query.md +239 -0
- package/core/shared/graph-usage-report.md +22 -0
- package/core/shared/jira-sync.md +170 -0
- package/core/shared/parallel-analysis.md +386 -0
- package/core/shared/parallel-fanout.md +10 -0
- package/core/shared/pattern-learning.md +146 -0
- package/core/shared/red-flags.md +58 -0
- package/core/shared/template-contract.md +22 -0
- package/core/shared/template-hygiene.md +10 -0
- package/core/shared/tool-resolver.md +10 -0
- package/core/shared/vcs-commands.md +97 -0
- package/core/shared/verification-gates.md +47 -0
- package/core/templates/CHANGELOG.md +70 -0
- package/core/templates/ai-context-export.md +8 -0
- package/core/templates/ai-context.md +270 -0
- package/core/templates/ai-profile.md +41 -0
- package/core/templates/architecture.md +203 -0
- package/core/templates/dependency-graph.md +103 -0
- package/core/templates/discovery.md +79 -0
- package/core/templates/guardrails.md +143 -0
- package/core/templates/hld.md +327 -0
- package/core/templates/intake-questions.md +403 -0
- package/core/templates/jira.md +119 -0
- package/core/templates/lld.md +283 -0
- package/core/templates/metadata.json +66 -0
- package/core/templates/plan.md +130 -0
- package/core/templates/product.md +110 -0
- package/core/templates/rca.md +86 -0
- package/core/templates/root-architecture.md +127 -0
- package/core/templates/root-product.md +53 -0
- package/core/templates/root-tech-stack.md +117 -0
- package/core/templates/service-index.md +55 -0
- package/core/templates/session-summary.md +8 -0
- package/core/templates/spec.md +165 -0
- package/core/templates/tech-matrix.md +101 -0
- package/core/templates/tech-stack.md +169 -0
- package/core/templates/track-architecture.md +311 -0
- package/core/templates/workflow.md +187 -0
- package/integrations/agents/AGENTS.md +24384 -0
- package/integrations/copilot/.github/copilot-instructions.md +24384 -0
- package/integrations/gemini/.gemini.md +26 -0
- package/package.json +53 -0
- package/scripts/fetch-memory-engine.sh +116 -0
- package/scripts/lib.sh +256 -0
- package/scripts/tools/_lib.sh +220 -0
- package/scripts/tools/adr-index.sh +117 -0
- package/scripts/tools/check-graph-usage-report.sh +95 -0
- package/scripts/tools/check-scope-conflicts.sh +139 -0
- package/scripts/tools/check-skill-line-caps.sh +115 -0
- package/scripts/tools/check-template-noop.sh +87 -0
- package/scripts/tools/check-track-hygiene.sh +230 -0
- package/scripts/tools/classify-files.sh +231 -0
- package/scripts/tools/cycle-detect.sh +75 -0
- package/scripts/tools/detect-test-framework.sh +135 -0
- package/scripts/tools/diff-templates-vs-tracks.sh +176 -0
- package/scripts/tools/emit-skill-metrics.sh +71 -0
- package/scripts/tools/fix-whitespace.sh +192 -0
- package/scripts/tools/freshness-check.sh +143 -0
- package/scripts/tools/git-metadata.sh +203 -0
- package/scripts/tools/graph-callers.sh +74 -0
- package/scripts/tools/graph-impact.sh +93 -0
- package/scripts/tools/graph-snapshot.sh +102 -0
- package/scripts/tools/hotspot-rank.sh +75 -0
- package/scripts/tools/manage-symlinks.sh +85 -0
- package/scripts/tools/mermaid-from-graph.sh +92 -0
- package/scripts/tools/migrate-track-frontmatter.sh +241 -0
- package/scripts/tools/parse-git-log.sh +135 -0
- package/scripts/tools/parse-reports.sh +114 -0
- package/scripts/tools/render-track.sh +145 -0
- package/scripts/tools/run-coverage.sh +153 -0
- package/scripts/tools/scan-markers.sh +144 -0
- package/scripts/tools/skill-caps.conf +24 -0
- package/scripts/tools/validate-frontmatter.sh +125 -0
- package/scripts/tools/verify-citations.sh +250 -0
- package/scripts/tools/verify-doc-anchors.sh +204 -0
- package/scripts/tools/verify-graph-binary.sh +154 -0
- package/skills/GRAPH.md +332 -0
- package/skills/adr/SKILL.md +374 -0
- package/skills/assist-review/SKILL.md +49 -0
- package/skills/bughunt/SKILL.md +668 -0
- package/skills/bughunt/references/regression-tests.md +399 -0
- package/skills/change/SKILL.md +267 -0
- package/skills/coverage/SKILL.md +336 -0
- package/skills/debug/SKILL.md +201 -0
- package/skills/decompose/SKILL.md +656 -0
- package/skills/deep-review/SKILL.md +326 -0
- package/skills/deploy-checklist/SKILL.md +254 -0
- package/skills/discover/SKILL.md +66 -0
- package/skills/docs/SKILL.md +42 -0
- package/skills/documentation/SKILL.md +197 -0
- package/skills/draft/SKILL.md +177 -0
- package/skills/draft/context-files.md +57 -0
- package/skills/draft/intent-mapping.md +37 -0
- package/skills/draft/quality-guide.md +51 -0
- package/skills/graph/SKILL.md +107 -0
- package/skills/impact/SKILL.md +86 -0
- package/skills/implement/SKILL.md +794 -0
- package/skills/incident-response/SKILL.md +245 -0
- package/skills/index/SKILL.md +848 -0
- package/skills/init/SKILL.md +1784 -0
- package/skills/init/references/architecture-spec.md +1259 -0
- package/skills/integrations/SKILL.md +53 -0
- package/skills/jira/SKILL.md +577 -0
- package/skills/jira/references/review.md +1322 -0
- package/skills/learn/SKILL.md +478 -0
- package/skills/new-track/SKILL.md +841 -0
- package/skills/ops/SKILL.md +57 -0
- package/skills/plan/SKILL.md +60 -0
- package/skills/quick-review/SKILL.md +216 -0
- package/skills/revert/SKILL.md +178 -0
- package/skills/review/SKILL.md +1114 -0
- package/skills/standup/SKILL.md +183 -0
- package/skills/status/SKILL.md +183 -0
- package/skills/tech-debt/SKILL.md +318 -0
- package/skills/testing-strategy/SKILL.md +195 -0
- package/skills/tour/SKILL.md +38 -0
- 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.
|