specweave 0.6.7 → 0.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/README.md +1 -1
- package/CLAUDE.md +920 -107
- package/README.md +143 -207
- package/bin/specweave.js +67 -0
- package/dist/adapters/adapter-interface.d.ts +11 -11
- package/dist/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/adapters/adapter-interface.js +1 -1
- package/dist/adapters/adapter-loader.d.ts +1 -2
- package/dist/adapters/adapter-loader.d.ts.map +1 -1
- package/dist/adapters/adapter-loader.js +3 -6
- package/dist/adapters/adapter-loader.js.map +1 -1
- package/dist/adapters/agents-md-generator.d.ts +3 -3
- package/dist/adapters/agents-md-generator.js +3 -3
- package/dist/adapters/generic/adapter.d.ts +2 -2
- package/dist/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/adapters/generic/adapter.js +28 -9
- package/dist/adapters/generic/adapter.js.map +1 -1
- package/dist/cli/commands/abandon.d.ts +13 -0
- package/dist/cli/commands/abandon.d.ts.map +1 -0
- package/dist/cli/commands/abandon.js +15 -0
- package/dist/cli/commands/abandon.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +141 -40
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/pause.d.ts +13 -0
- package/dist/cli/commands/pause.d.ts.map +1 -0
- package/dist/cli/commands/pause.js +15 -0
- package/dist/cli/commands/pause.js.map +1 -0
- package/dist/cli/commands/qa.d.ts +54 -0
- package/dist/cli/commands/qa.d.ts.map +1 -0
- package/dist/cli/commands/qa.js +98 -0
- package/dist/cli/commands/qa.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +12 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +14 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +23 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/ado.d.ts +57 -0
- package/dist/cli/helpers/issue-tracker/ado.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/ado.js +223 -0
- package/dist/cli/helpers/issue-tracker/ado.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/github.d.ts +65 -0
- package/dist/cli/helpers/issue-tracker/github.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/github.js +284 -0
- package/dist/cli/helpers/issue-tracker/github.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.d.ts +22 -0
- package/dist/cli/helpers/issue-tracker/index.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.js +270 -0
- package/dist/cli/helpers/issue-tracker/index.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/jira.d.ts +61 -0
- package/dist/cli/helpers/issue-tracker/jira.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/jira.js +265 -0
- package/dist/cli/helpers/issue-tracker/jira.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/types.d.ts +86 -0
- package/dist/cli/helpers/issue-tracker/types.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/types.js +16 -0
- package/dist/cli/helpers/issue-tracker/types.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/utils.d.ts +103 -0
- package/dist/cli/helpers/issue-tracker/utils.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/utils.js +240 -0
- package/dist/cli/helpers/issue-tracker/utils.js.map +1 -0
- package/dist/core/increment/limits.d.ts +68 -0
- package/dist/core/increment/limits.d.ts.map +1 -0
- package/dist/core/increment/limits.js +224 -0
- package/dist/core/increment/limits.js.map +1 -0
- package/dist/core/increment/metadata-manager.d.ts +114 -0
- package/dist/core/increment/metadata-manager.d.ts.map +1 -0
- package/dist/core/increment/metadata-manager.js +320 -0
- package/dist/core/increment/metadata-manager.js.map +1 -0
- package/dist/core/increment/status-commands.d.ts +43 -0
- package/dist/core/increment/status-commands.d.ts.map +1 -0
- package/dist/core/increment/status-commands.js +277 -0
- package/dist/core/increment/status-commands.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +1 -0
- package/dist/core/plugin-detector.d.ts.map +1 -1
- package/dist/core/plugin-detector.js +25 -0
- package/dist/core/plugin-detector.js.map +1 -1
- package/dist/core/qa/qa-runner.d.ts +16 -0
- package/dist/core/qa/qa-runner.d.ts.map +1 -0
- package/dist/core/qa/qa-runner.js +404 -0
- package/dist/core/qa/qa-runner.js.map +1 -0
- package/dist/core/qa/quality-gate-decider.d.ts +53 -0
- package/dist/core/qa/quality-gate-decider.d.ts.map +1 -0
- package/dist/core/qa/quality-gate-decider.js +268 -0
- package/dist/core/qa/quality-gate-decider.js.map +1 -0
- package/dist/core/qa/risk-calculator.d.ts +126 -0
- package/dist/core/qa/risk-calculator.d.ts.map +1 -0
- package/dist/core/qa/risk-calculator.js +247 -0
- package/dist/core/qa/risk-calculator.js.map +1 -0
- package/dist/core/qa/types.d.ts +315 -0
- package/dist/core/qa/types.d.ts.map +1 -0
- package/dist/core/qa/types.js +8 -0
- package/dist/core/qa/types.js.map +1 -0
- package/dist/core/types/config.d.ts +37 -2
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js +16 -0
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/increment-metadata.d.ts +120 -0
- package/dist/core/types/increment-metadata.d.ts.map +1 -0
- package/dist/core/types/increment-metadata.js +138 -0
- package/dist/core/types/increment-metadata.js.map +1 -0
- package/dist/hooks/lib/invoke-translator-skill.d.ts +60 -0
- package/dist/hooks/lib/invoke-translator-skill.d.ts.map +1 -0
- package/dist/hooks/lib/invoke-translator-skill.js +201 -0
- package/dist/hooks/lib/invoke-translator-skill.js.map +1 -0
- package/dist/hooks/lib/translate-file.d.ts +59 -0
- package/dist/hooks/lib/translate-file.d.ts.map +1 -0
- package/dist/hooks/lib/translate-file.js +350 -0
- package/dist/hooks/lib/translate-file.js.map +1 -0
- package/dist/locales/en/cli.json +3 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts +22 -0
- package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -0
- package/dist/metrics/calculators/change-failure-rate.js +70 -0
- package/dist/metrics/calculators/change-failure-rate.js.map +1 -0
- package/dist/metrics/calculators/deployment-frequency.d.ts +20 -0
- package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -0
- package/dist/metrics/calculators/deployment-frequency.js +61 -0
- package/dist/metrics/calculators/deployment-frequency.js.map +1 -0
- package/dist/metrics/calculators/lead-time.d.ts +22 -0
- package/dist/metrics/calculators/lead-time.d.ts.map +1 -0
- package/dist/metrics/calculators/lead-time.js +82 -0
- package/dist/metrics/calculators/lead-time.js.map +1 -0
- package/dist/metrics/calculators/mttr.d.ts +21 -0
- package/dist/metrics/calculators/mttr.d.ts.map +1 -0
- package/dist/metrics/calculators/mttr.js +60 -0
- package/dist/metrics/calculators/mttr.js.map +1 -0
- package/dist/metrics/dora-calculator.d.ts +24 -0
- package/dist/metrics/dora-calculator.d.ts.map +1 -0
- package/dist/metrics/dora-calculator.js +104 -0
- package/dist/metrics/dora-calculator.js.map +1 -0
- package/dist/metrics/github-client.d.ts +51 -0
- package/dist/metrics/github-client.d.ts.map +1 -0
- package/dist/metrics/github-client.js +133 -0
- package/dist/metrics/github-client.js.map +1 -0
- package/dist/metrics/types.d.ts +112 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +10 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/metrics/utils/percentile.d.ts +25 -0
- package/dist/metrics/utils/percentile.d.ts.map +1 -0
- package/dist/metrics/utils/percentile.js +46 -0
- package/dist/metrics/utils/percentile.js.map +1 -0
- package/dist/metrics/utils/tier-classifier.d.ts +61 -0
- package/dist/metrics/utils/tier-classifier.d.ts.map +1 -0
- package/dist/metrics/utils/tier-classifier.js +100 -0
- package/dist/metrics/utils/tier-classifier.js.map +1 -0
- package/dist/utils/auth-helpers.d.ts +58 -0
- package/dist/utils/auth-helpers.d.ts.map +1 -0
- package/dist/utils/auth-helpers.js +108 -0
- package/dist/utils/auth-helpers.js.map +1 -0
- package/dist/utils/env-file.d.ts +88 -0
- package/dist/utils/env-file.d.ts.map +1 -0
- package/dist/utils/env-file.js +180 -0
- package/dist/utils/env-file.js.map +1 -0
- package/dist/utils/plugin-detection.d.ts +50 -0
- package/dist/utils/plugin-detection.d.ts.map +1 -0
- package/dist/utils/plugin-detection.js +229 -0
- package/dist/utils/plugin-detection.js.map +1 -0
- package/dist/utils/secrets-loader.d.ts +88 -0
- package/dist/utils/secrets-loader.d.ts.map +1 -0
- package/dist/utils/secrets-loader.js +271 -0
- package/dist/utils/secrets-loader.js.map +1 -0
- package/dist/utils/translation.d.ts +187 -0
- package/dist/utils/translation.d.ts.map +1 -0
- package/dist/utils/translation.js +414 -0
- package/dist/utils/translation.js.map +1 -0
- package/package.json +28 -44
- package/plugins/specweave/.claude-plugin/plugin.json +3 -3
- package/plugins/specweave/agents/pm/AGENT.md +330 -54
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +1035 -0
- package/plugins/specweave/agents/test-aware-planner/templates/README.md +118 -0
- package/plugins/specweave/agents/test-aware-planner/templates/task-non-testable.md.template +24 -0
- package/plugins/specweave/agents/test-aware-planner/templates/task-testable.md.template +53 -0
- package/plugins/specweave/agents/test-aware-planner/templates/tasks-frontmatter.md.template +11 -0
- package/plugins/specweave/commands/README.md +88 -163
- package/plugins/specweave/commands/specweave-abandon.md +314 -0
- package/plugins/specweave/commands/specweave-check-tests.md +546 -0
- package/plugins/specweave/commands/{do.md → specweave-do.md} +5 -5
- package/plugins/specweave/commands/{done.md → specweave-done.md} +2 -0
- package/plugins/specweave/commands/{increment.md → specweave-increment.md} +231 -4
- package/plugins/specweave/commands/specweave-pause.md +189 -0
- package/plugins/specweave/commands/specweave-qa.md +245 -0
- package/plugins/specweave/commands/specweave-resume.md +216 -0
- package/plugins/specweave/commands/specweave-status.md +397 -0
- package/plugins/specweave/commands/specweave-sync-tasks.md +256 -0
- package/plugins/specweave/commands/{translate.md → specweave-translate.md} +3 -3
- package/plugins/specweave/commands/specweave-update-scope.md +351 -0
- package/plugins/specweave/commands/{validate.md → specweave-validate.md} +2 -0
- package/plugins/specweave/commands/specweave.md +21 -21
- package/plugins/specweave/hooks/docs-changed.sh +23 -3
- package/plugins/specweave/hooks/human-input-required.sh +23 -3
- package/plugins/specweave/hooks/post-increment-planning.sh +335 -0
- package/plugins/specweave/hooks/post-task-completion.sh +161 -1
- package/plugins/specweave/hooks/pre-implementation.sh +23 -3
- package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
- package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +9 -9
- package/plugins/specweave/skills/increment-planner/SKILL.md +400 -212
- package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +499 -0
- package/plugins/specweave/skills/plugin-detector/SKILL.md +114 -1
- package/plugins/specweave/skills/project-kickstarter/SKILL.md +74 -1
- package/plugins/specweave/skills/{rfc-generator → spec-generator}/SKILL.md +22 -29
- package/plugins/specweave/skills/specweave-detector/SKILL.md +3 -3
- package/plugins/specweave/skills/specweave-framework/SKILL.md +2 -2
- package/plugins/specweave-ado/.claude-plugin/plugin.json +18 -4
- package/plugins/specweave-ado/agents/ado-manager/AGENT.md +426 -0
- package/plugins/specweave-ado/commands/close-workitem.md +52 -0
- package/plugins/specweave-ado/commands/create-workitem.md +53 -0
- package/plugins/specweave-ado/commands/status.md +53 -0
- package/plugins/specweave-ado/commands/sync.md +55 -0
- package/plugins/specweave-ado/lib/ado-client.ts +361 -0
- package/plugins/specweave-ado/reference/ado-specweave-mapping.md +552 -0
- package/plugins/specweave-ado/skills/ado-sync/SKILL.md +344 -193
- package/plugins/specweave-docs/skills/docusaurus/SKILL.md +73 -0
- package/plugins/specweave-github/agents/github-manager/AGENT.md +49 -0
- package/plugins/specweave-github/commands/{github-close-issue.md → close-issue.md} +1 -1
- package/plugins/specweave-github/commands/{github-create-issue.md → create-issue.md} +1 -1
- package/plugins/specweave-github/commands/{github-status.md → status.md} +1 -1
- package/plugins/specweave-github/commands/{github-sync-tasks.md → sync-tasks.md} +1 -1
- package/plugins/specweave-github/commands/{github-sync.md → sync.md} +1 -1
- package/plugins/specweave-github/reference/github-specweave-mapping.md +377 -0
- package/plugins/specweave-github/skills/github-sync/SKILL.md +11 -3
- package/plugins/specweave-infrastructure/commands/{specweave.monitor-setup.md → monitor-setup.md} +5 -0
- package/plugins/specweave-infrastructure/commands/{specweave.slo-implement.md → slo-implement.md} +5 -0
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +380 -0
- package/plugins/specweave-jira/commands/{specweave.sync-jira.md → sync.md} +1 -1
- package/plugins/specweave-jira/reference/jira-specweave-mapping.md +508 -0
- package/plugins/specweave-ml/commands/ml-deploy.md +1 -1
- package/plugins/specweave-ml/commands/ml-evaluate.md +1 -1
- package/plugins/specweave-ml/commands/ml-explain.md +1 -1
- package/plugins/specweave-ml/commands/{specweave.ml-pipeline.md → ml-pipeline.md} +5 -0
- package/src/templates/AGENTS.md.template +652 -1
- package/src/templates/CLAUDE.md.template +36 -21
- package/src/templates/COMPLETION-REPORT.template.md +128 -0
- package/src/templates/README.md.template +17 -16
- package/src/templates/docs/README.md +11 -9
- package/src/templates/docs/spec-template.md +229 -0
- package/dist/adapters/copilot/adapter.d.ts +0 -86
- package/dist/adapters/copilot/adapter.d.ts.map +0 -1
- package/dist/adapters/copilot/adapter.js +0 -396
- package/dist/adapters/copilot/adapter.js.map +0 -1
- package/plugins/.specweave/logs/hooks-debug.log +0 -24
- package/plugins/.specweave/logs/last-hook-fire +0 -1
- package/plugins/.specweave/logs/last-todowrite-time +0 -1
- package/plugins/.specweave/logs/tasks.log +0 -6
- package/plugins/specweave/commands/inc.md +0 -85
- package/plugins/specweave/commands/list-increments.md +0 -180
- package/src/adapters/README.md +0 -311
- package/src/adapters/adapter-base.ts +0 -182
- package/src/adapters/adapter-interface.ts +0 -166
- package/src/adapters/adapter-loader.ts +0 -259
- package/src/adapters/agents-md-generator.ts +0 -228
- package/src/adapters/claude/README.md +0 -233
- package/src/adapters/claude/adapter.ts +0 -468
- package/src/adapters/claude-md-generator.ts +0 -377
- package/src/adapters/codex/README.md +0 -105
- package/src/adapters/codex/adapter.ts +0 -333
- package/src/adapters/copilot/README.md +0 -240
- package/src/adapters/copilot/adapter.ts +0 -444
- package/src/adapters/cursor/.cursor/context/docs-context.md +0 -62
- package/src/adapters/cursor/.cursor/context/increments-context.md +0 -71
- package/src/adapters/cursor/.cursor/context/strategy-context.md +0 -73
- package/src/adapters/cursor/.cursor/context/tests-context.md +0 -89
- package/src/adapters/cursor/README.md +0 -283
- package/src/adapters/cursor/adapter.ts +0 -451
- package/src/adapters/doc-generator.ts +0 -331
- package/src/adapters/gemini/README.md +0 -97
- package/src/adapters/gemini/adapter.ts +0 -298
- package/src/adapters/generic/README.md +0 -277
- package/src/adapters/generic/adapter.ts +0 -359
- package/src/adapters/registry.yaml +0 -187
- /package/plugins/specweave/commands/{costs.md → specweave-costs.md} +0 -0
- /package/plugins/specweave/commands/{next.md → specweave-next.md} +0 -0
- /package/plugins/specweave/commands/{progress.md → specweave-progress.md} +0 -0
- /package/plugins/specweave/commands/{sync-docs.md → specweave-sync-docs.md} +0 -0
- /package/plugins/specweave/commands/{tdd-cycle.md → specweave-tdd-cycle.md} +0 -0
- /package/plugins/specweave/commands/{tdd-green.md → specweave-tdd-green.md} +0 -0
- /package/plugins/specweave/commands/{tdd-red.md → specweave-tdd-red.md} +0 -0
- /package/plugins/specweave/commands/{tdd-refactor.md → specweave-tdd-refactor.md} +0 -0
|
@@ -1,245 +1,396 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ado-sync
|
|
3
|
-
description:
|
|
4
|
-
allowed-tools: Read, Write, Edit, Task, Bash
|
|
3
|
+
description: Bidirectional synchronization between SpecWeave increments and Azure DevOps work items. Creates work items from increments, tracks progress via comments, updates increment status from work item state, and closes work items when increments complete. Activates for: Azure DevOps, ADO, work items, project management, sync to ADO, ADO integration, TFS integration.
|
|
5
4
|
---
|
|
6
5
|
|
|
7
|
-
#
|
|
6
|
+
# Azure DevOps Sync Skill
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
**Purpose**: Seamlessly sync SpecWeave increments with Azure DevOps work items for unified project tracking.
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
**Capabilities**:
|
|
11
|
+
- Create ADO work items from increments
|
|
12
|
+
- Sync task progress → ADO comments
|
|
13
|
+
- Update increment status from ADO state
|
|
14
|
+
- Close work items when increments complete
|
|
15
|
+
- Support for Epics, Features, User Stories
|
|
17
16
|
|
|
18
17
|
---
|
|
19
18
|
|
|
20
|
-
##
|
|
19
|
+
## When This Skill Activates
|
|
20
|
+
|
|
21
|
+
**Keywords**: Azure DevOps, ADO, work items, sync to ADO, ADO integration, TFS, Visual Studio Team Services
|
|
22
|
+
|
|
23
|
+
**Examples**:
|
|
24
|
+
- "Sync this increment with Azure DevOps"
|
|
25
|
+
- "Create ADO work item for this feature"
|
|
26
|
+
- "Update work item #12345 with progress"
|
|
27
|
+
- "Close ADO work item when done"
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Prerequisites
|
|
23
32
|
|
|
24
|
-
###
|
|
33
|
+
### 1. ADO Plugin Installed
|
|
25
34
|
|
|
26
35
|
```bash
|
|
27
|
-
# Check
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
fi
|
|
36
|
+
# Check if installed
|
|
37
|
+
/plugin list --installed | grep specweave-ado
|
|
38
|
+
|
|
39
|
+
# Install if needed
|
|
40
|
+
/plugin install specweave-ado@specweave
|
|
33
41
|
```
|
|
34
42
|
|
|
35
|
-
###
|
|
43
|
+
### 2. Azure DevOps Personal Access Token (PAT)
|
|
36
44
|
|
|
45
|
+
**Create PAT**:
|
|
46
|
+
1. Go to https://dev.azure.com/{organization}/_usersSettings/tokens
|
|
47
|
+
2. Click "New Token"
|
|
48
|
+
3. Name: "SpecWeave Sync"
|
|
49
|
+
4. Scopes: Work Items (Read & Write), Comments (Read & Write)
|
|
50
|
+
5. Copy token → Set environment variable
|
|
51
|
+
|
|
52
|
+
**Set Token**:
|
|
53
|
+
```bash
|
|
54
|
+
export AZURE_DEVOPS_PAT="your-token-here"
|
|
37
55
|
```
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- File: `.env` (gitignored, secure)
|
|
57
|
-
- Format:
|
|
58
|
-
```
|
|
59
|
-
AZURE_DEVOPS_PAT=your-ado-pat-here-52-chars-base64
|
|
60
|
-
AZURE_DEVOPS_ORG=your-organization-name
|
|
61
|
-
AZURE_DEVOPS_PROJECT=your-project-name
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**Security**:
|
|
65
|
-
✅ .env is in .gitignore (never committed to git)
|
|
66
|
-
✅ Token is 52 characters, base64-encoded
|
|
67
|
-
✅ Stored locally only (not in source code)
|
|
68
|
-
|
|
69
|
-
Please provide:
|
|
70
|
-
1. Your Azure DevOps PAT:
|
|
71
|
-
2. Your organization name (e.g., "mycompany"):
|
|
72
|
-
3. Your project name (e.g., "MyProject"):
|
|
56
|
+
|
|
57
|
+
### 3. ADO Configuration
|
|
58
|
+
|
|
59
|
+
Add to `.specweave/config.json`:
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"externalPM": {
|
|
63
|
+
"tool": "ado",
|
|
64
|
+
"enabled": true,
|
|
65
|
+
"config": {
|
|
66
|
+
"organization": "myorg",
|
|
67
|
+
"project": "MyProject",
|
|
68
|
+
"workItemType": "Epic",
|
|
69
|
+
"areaPath": "MyProject\\Team A",
|
|
70
|
+
"syncOnTaskComplete": true
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
73
74
|
```
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Commands Available
|
|
76
79
|
|
|
80
|
+
### `/specweave-ado:create-workitem <increment-id>`
|
|
81
|
+
|
|
82
|
+
**Purpose**: Create ADO work item from increment
|
|
83
|
+
|
|
84
|
+
**Example**:
|
|
77
85
|
```bash
|
|
78
|
-
|
|
79
|
-
if [ ${#AZURE_DEVOPS_PAT} -ne 52 ]; then
|
|
80
|
-
echo "⚠️ Warning: PAT length unexpected"
|
|
81
|
-
echo "Expected: 52 characters (base64-encoded)"
|
|
82
|
-
echo "Got: ${#AZURE_DEVOPS_PAT} characters"
|
|
83
|
-
echo "This might not be a valid Azure DevOps PAT"
|
|
84
|
-
fi
|
|
85
|
-
|
|
86
|
-
# Validate organization name (no special chars)
|
|
87
|
-
if [[ ! "$AZURE_DEVOPS_ORG" =~ ^[a-zA-Z0-9-]+$ ]]; then
|
|
88
|
-
echo "⚠️ Warning: Organization name contains unexpected characters"
|
|
89
|
-
echo "Expected: alphanumeric and hyphens only"
|
|
90
|
-
echo "Got: $AZURE_DEVOPS_ORG"
|
|
91
|
-
fi
|
|
92
|
-
|
|
93
|
-
# Validate project name (no special chars except spaces)
|
|
94
|
-
if [ -z "$AZURE_DEVOPS_PROJECT" ]; then
|
|
95
|
-
echo "❌ Error: Project name is empty"
|
|
96
|
-
exit 1
|
|
97
|
-
fi
|
|
86
|
+
/specweave-ado:create-workitem 0005
|
|
98
87
|
```
|
|
99
88
|
|
|
100
|
-
|
|
89
|
+
**Result**:
|
|
90
|
+
- Creates Epic/Feature/User Story in ADO
|
|
91
|
+
- Links work item to increment (metadata)
|
|
92
|
+
- Adds initial comment with spec summary
|
|
93
|
+
- Sets tags: `specweave`, `increment-0005`
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### `/specweave-ado:sync <increment-id>`
|
|
98
|
+
|
|
99
|
+
**Purpose**: Sync increment progress with ADO work item
|
|
101
100
|
|
|
101
|
+
**Example**:
|
|
102
102
|
```bash
|
|
103
|
-
|
|
104
|
-
cat >> .env << EOF
|
|
105
|
-
AZURE_DEVOPS_PAT=$AZURE_DEVOPS_PAT
|
|
106
|
-
AZURE_DEVOPS_ORG=$AZURE_DEVOPS_ORG
|
|
107
|
-
AZURE_DEVOPS_PROJECT=$AZURE_DEVOPS_PROJECT
|
|
108
|
-
EOF
|
|
109
|
-
|
|
110
|
-
# Ensure .env is gitignored
|
|
111
|
-
if ! grep -q "^\\.env$" .gitignore; then
|
|
112
|
-
echo ".env" >> .gitignore
|
|
113
|
-
fi
|
|
114
|
-
|
|
115
|
-
# Create .env.example for team
|
|
116
|
-
cat > .env.example << 'EOF'
|
|
117
|
-
# Azure DevOps Personal Access Token
|
|
118
|
-
# Get from: https://dev.azure.com/{org}/_usersSettings/tokens
|
|
119
|
-
# Scopes: Work Items (Read, Write, Manage), Code (Read), Project (Read)
|
|
120
|
-
AZURE_DEVOPS_PAT=your-ado-pat-52-chars-base64
|
|
121
|
-
AZURE_DEVOPS_ORG=your-organization-name
|
|
122
|
-
AZURE_DEVOPS_PROJECT=your-project-name
|
|
123
|
-
EOF
|
|
124
|
-
|
|
125
|
-
echo "✅ Credentials saved to .env (gitignored)"
|
|
126
|
-
echo "✅ Created .env.example for team (commit this)"
|
|
103
|
+
/specweave-ado:sync 0005
|
|
127
104
|
```
|
|
128
105
|
|
|
129
|
-
|
|
106
|
+
**Result**:
|
|
107
|
+
- Calculates task completion (%)
|
|
108
|
+
- Updates work item description
|
|
109
|
+
- Adds comment with progress update
|
|
110
|
+
- Updates state (New → Active → Resolved)
|
|
130
111
|
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### `/specweave-ado:close-workitem <increment-id>`
|
|
115
|
+
|
|
116
|
+
**Purpose**: Close ADO work item when increment complete
|
|
117
|
+
|
|
118
|
+
**Example**:
|
|
131
119
|
```bash
|
|
132
|
-
|
|
133
|
-
export AZURE_DEVOPS_PAT=$(grep AZURE_DEVOPS_PAT .env | cut -d '=' -f2)
|
|
134
|
-
export AZURE_DEVOPS_ORG=$(grep AZURE_DEVOPS_ORG .env | cut -d '=' -f2)
|
|
135
|
-
export AZURE_DEVOPS_PROJECT=$(grep AZURE_DEVOPS_PROJECT .env | cut -d '=' -f2)
|
|
136
|
-
|
|
137
|
-
# Create Base64 Basic Auth header (PAT as username, empty password)
|
|
138
|
-
AUTH=$(echo -n ":$AZURE_DEVOPS_PAT" | base64)
|
|
139
|
-
|
|
140
|
-
# Use in Azure DevOps REST API calls
|
|
141
|
-
curl -H "Authorization: Basic $AUTH" \
|
|
142
|
-
-H "Content-Type: application/json" \
|
|
143
|
-
https://dev.azure.com/$AZURE_DEVOPS_ORG/$AZURE_DEVOPS_PROJECT/_apis/wit/workitems/12345?api-version=7.0
|
|
120
|
+
/specweave-ado:close-workitem 0005
|
|
144
121
|
```
|
|
145
122
|
|
|
146
|
-
|
|
123
|
+
**Result**:
|
|
124
|
+
- Updates work item state → Closed
|
|
125
|
+
- Adds completion comment with summary
|
|
126
|
+
- Marks work item as resolved
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### `/specweave-ado:status <increment-id>`
|
|
131
|
+
|
|
132
|
+
**Purpose**: Check ADO sync status for increment
|
|
147
133
|
|
|
134
|
+
**Example**:
|
|
148
135
|
```bash
|
|
149
|
-
|
|
150
|
-
|
|
136
|
+
/specweave-ado:status 0005
|
|
137
|
+
```
|
|
151
138
|
|
|
152
|
-
|
|
153
|
-
|
|
139
|
+
**Result**:
|
|
140
|
+
```
|
|
141
|
+
ADO Sync Status
|
|
142
|
+
===============
|
|
143
|
+
Increment: 0005-payment-integration
|
|
144
|
+
Work Item: #12345
|
|
145
|
+
URL: https://dev.azure.com/myorg/MyProject/_workitems/edit/12345
|
|
146
|
+
State: Active
|
|
147
|
+
Completion: 60% (6/10 tasks)
|
|
148
|
+
Last Synced: 2025-11-04 10:30:00
|
|
149
|
+
Sync Enabled: ✅
|
|
154
150
|
```
|
|
155
151
|
|
|
156
|
-
|
|
152
|
+
---
|
|
157
153
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
154
|
+
## Automatic Sync
|
|
155
|
+
|
|
156
|
+
### When Task Completes
|
|
157
|
+
|
|
158
|
+
**Trigger**: Post-task-completion hook fires
|
|
159
|
+
|
|
160
|
+
**Flow**:
|
|
161
|
+
1. User marks task complete: `[x] T-005: Add payment tests`
|
|
162
|
+
2. Hook detects ADO sync enabled
|
|
163
|
+
3. Calculate new completion %
|
|
164
|
+
4. Update ADO work item comment:
|
|
165
|
+
```markdown
|
|
166
|
+
## Progress Update
|
|
167
|
+
|
|
168
|
+
**Increment**: 0005-payment-integration
|
|
169
|
+
**Status**: 60% complete (6/10 tasks)
|
|
170
|
+
|
|
171
|
+
### Recently Completed
|
|
172
|
+
- [x] T-005: Add payment tests
|
|
173
|
+
|
|
174
|
+
### Remaining
|
|
175
|
+
- [ ] T-007: Add refund functionality
|
|
176
|
+
- [ ] T-008: Implement subscriptions
|
|
177
|
+
- [ ] T-009: Add analytics
|
|
178
|
+
- [ ] T-010: Security audit
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
🤖 Auto-updated by SpecWeave
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### When Increment Completes
|
|
185
|
+
|
|
186
|
+
**Trigger**: `/specweave:done` command
|
|
187
|
+
|
|
188
|
+
**Flow**:
|
|
189
|
+
1. User runs `/specweave:done 0005`
|
|
190
|
+
2. Validate all tasks complete
|
|
191
|
+
3. Close ADO work item automatically
|
|
192
|
+
4. Add completion comment with summary
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Work Item Types
|
|
197
|
+
|
|
198
|
+
### Epic (Recommended)
|
|
199
|
+
|
|
200
|
+
**Use When**: Large feature spanning multiple sprints
|
|
201
|
+
|
|
202
|
+
**Mapping**:
|
|
203
|
+
- SpecWeave increment → ADO Epic
|
|
204
|
+
- Tasks → Epic description (checklist)
|
|
205
|
+
- Progress → Epic comments
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### Feature
|
|
210
|
+
|
|
211
|
+
**Use When**: Medium-sized feature within a sprint
|
|
212
|
+
|
|
213
|
+
**Mapping**:
|
|
214
|
+
- SpecWeave increment → ADO Feature
|
|
215
|
+
- Tasks → Feature description (checklist)
|
|
216
|
+
- Progress → Feature comments
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
### User Story
|
|
221
|
+
|
|
222
|
+
**Use When**: Small, single-sprint work
|
|
223
|
+
|
|
224
|
+
**Mapping**:
|
|
225
|
+
- SpecWeave increment → ADO User Story
|
|
226
|
+
- Tasks → User Story description (checklist)
|
|
227
|
+
- Progress → User Story comments
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Bidirectional Sync (Optional)
|
|
232
|
+
|
|
233
|
+
**Enable**: Set `bidirectional: true` in config
|
|
234
|
+
|
|
235
|
+
**Flow**: ADO → SpecWeave
|
|
236
|
+
1. User updates work item state in ADO (Active → Resolved)
|
|
237
|
+
2. SpecWeave detects change (polling or webhook)
|
|
238
|
+
3. Updates increment status locally
|
|
239
|
+
4. Notifies user: "Work item #12345 resolved → Increment 0005 marked complete"
|
|
240
|
+
|
|
241
|
+
**Note**: Bidirectional sync requires webhook or polling setup
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Configuration Options
|
|
246
|
+
|
|
247
|
+
**`.specweave/config.json`**:
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"externalPM": {
|
|
251
|
+
"tool": "ado",
|
|
252
|
+
"enabled": true,
|
|
253
|
+
"config": {
|
|
254
|
+
"organization": "myorg",
|
|
255
|
+
"project": "MyProject",
|
|
256
|
+
"personalAccessToken": "${AZURE_DEVOPS_PAT}",
|
|
257
|
+
"workItemType": "Epic",
|
|
258
|
+
"areaPath": "MyProject\\Team A",
|
|
259
|
+
"iterationPath": "MyProject\\Sprint 1",
|
|
260
|
+
"syncOnTaskComplete": true,
|
|
261
|
+
"syncOnIncrementComplete": true,
|
|
262
|
+
"createWorkItemsAutomatically": true,
|
|
263
|
+
"bidirectional": false,
|
|
264
|
+
"tags": ["specweave", "increment"],
|
|
265
|
+
"customFields": {
|
|
266
|
+
"incrementId": "Custom.IncrementId"
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
198
271
|
```
|
|
199
272
|
|
|
200
|
-
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Troubleshooting
|
|
201
276
|
|
|
202
|
-
|
|
277
|
+
### Error: "Personal Access Token invalid"
|
|
203
278
|
|
|
204
|
-
**
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
279
|
+
**Solution**:
|
|
280
|
+
1. Verify token is set: `echo $AZURE_DEVOPS_PAT`
|
|
281
|
+
2. Check token scopes: Work Items (Read & Write)
|
|
282
|
+
3. Ensure token not expired
|
|
283
|
+
4. Regenerate token if needed
|
|
209
284
|
|
|
210
|
-
|
|
211
|
-
1. Go to: https://portal.azure.com/
|
|
212
|
-
2. Navigate to: Azure Active Directory → App Registrations
|
|
213
|
-
3. Create new registration
|
|
214
|
-
4. Add to Azure DevOps organization
|
|
215
|
-
5. Grant appropriate permissions
|
|
216
|
-
6. Use client credentials flow instead of PAT
|
|
285
|
+
---
|
|
217
286
|
|
|
218
|
-
|
|
219
|
-
- ✅ Set expiration to 90 days maximum
|
|
220
|
-
- ✅ Use minimum required scopes
|
|
221
|
-
- ✅ Rotate regularly (set calendar reminder)
|
|
222
|
-
- ✅ Revoke immediately when team member leaves
|
|
223
|
-
- ✅ Create separate PATs for different purposes (dev, prod, CI/CD)
|
|
287
|
+
### Error: "Work item not found"
|
|
224
288
|
|
|
225
|
-
**
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
289
|
+
**Solution**:
|
|
290
|
+
1. Check work item ID is correct
|
|
291
|
+
2. Verify you have access to the project
|
|
292
|
+
3. Ensure work item not deleted
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
### Error: "Organization or project not found"
|
|
229
297
|
|
|
230
|
-
|
|
231
|
-
|
|
298
|
+
**Solution**:
|
|
299
|
+
1. Verify organization name: https://dev.azure.com/{organization}
|
|
300
|
+
2. Check project name (case-sensitive)
|
|
301
|
+
3. Ensure you have access to the project
|
|
232
302
|
|
|
233
|
-
|
|
234
|
-
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## API Rate Limits
|
|
306
|
+
|
|
307
|
+
**Azure DevOps**:
|
|
308
|
+
- Rate limit: 200 requests per minute per PAT
|
|
309
|
+
- Burst limit: 5000 requests per hour
|
|
310
|
+
- Recommendation: Enable rate limiting in config
|
|
311
|
+
|
|
312
|
+
**Config**:
|
|
313
|
+
```json
|
|
314
|
+
{
|
|
315
|
+
"externalPM": {
|
|
316
|
+
"config": {
|
|
317
|
+
"rateLimiting": {
|
|
318
|
+
"enabled": true,
|
|
319
|
+
"maxRequestsPerMinute": 150
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
235
324
|
```
|
|
236
325
|
|
|
237
326
|
---
|
|
238
327
|
|
|
239
|
-
##
|
|
328
|
+
## Security Best Practices
|
|
329
|
+
|
|
330
|
+
### DO:
|
|
331
|
+
- ✅ Store PAT in environment variable (`AZURE_DEVOPS_PAT`)
|
|
332
|
+
- ✅ Use `.env` file (gitignored)
|
|
333
|
+
- ✅ Set minimum required scopes
|
|
334
|
+
- ✅ Rotate PAT every 90 days
|
|
240
335
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
336
|
+
### DON'T:
|
|
337
|
+
- ❌ Commit PAT to git
|
|
338
|
+
- ❌ Share PAT via Slack/email
|
|
339
|
+
- ❌ Use PAT with excessive permissions
|
|
340
|
+
- ❌ Log PAT to console/files
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Related Commands
|
|
345
|
+
|
|
346
|
+
- `/specweave:inc` - Create increment (auto-creates ADO work item if enabled)
|
|
347
|
+
- `/specweave:do` - Execute tasks (auto-syncs progress to ADO)
|
|
348
|
+
- `/specweave:done` - Complete increment (auto-closes ADO work item)
|
|
349
|
+
- `/specweave:status` - Show increment status (includes ADO sync status)
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Examples
|
|
354
|
+
|
|
355
|
+
### Example 1: Create Increment with ADO Sync
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
# User
|
|
359
|
+
"Create increment for payment integration"
|
|
360
|
+
|
|
361
|
+
# SpecWeave (if ADO enabled)
|
|
362
|
+
1. PM agent generates spec.md
|
|
363
|
+
2. Auto-create ADO Epic #12345
|
|
364
|
+
3. Link Epic to increment metadata
|
|
365
|
+
4. Display: "Created increment 0005 → ADO Epic #12345"
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Example 2: Manual Sync
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
# User completed 3 tasks manually
|
|
372
|
+
# Now sync to ADO
|
|
373
|
+
|
|
374
|
+
/specweave-ado:sync 0005
|
|
375
|
+
|
|
376
|
+
# Result: ADO Epic #12345 updated with 30% progress
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Example 3: Check Sync Status
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
/specweave-ado:status 0005
|
|
383
|
+
|
|
384
|
+
# Output:
|
|
385
|
+
# Work Item: #12345
|
|
386
|
+
# URL: https://dev.azure.com/myorg/MyProject/_workitems/edit/12345
|
|
387
|
+
# State: Active
|
|
388
|
+
# Completion: 60%
|
|
389
|
+
# Last Synced: 5 minutes ago
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
---
|
|
244
393
|
|
|
245
|
-
|
|
394
|
+
**Status**: Ready to use
|
|
395
|
+
**Version**: 0.1.0
|
|
396
|
+
**Plugin**: specweave-ado@specweave
|
|
@@ -61,6 +61,79 @@ Activate this skill when you need to:
|
|
|
61
61
|
- "docusaurus from specweave"
|
|
62
62
|
- "host documentation"
|
|
63
63
|
- "static docs site"
|
|
64
|
+
- "internal docs"
|
|
65
|
+
- "engineering playbook"
|
|
66
|
+
- "dual docs sites"
|
|
67
|
+
|
|
68
|
+
## Dual Documentation Sites (SpecWeave)
|
|
69
|
+
|
|
70
|
+
**SpecWeave supports TWO Docusaurus instances** for separating public and internal documentation:
|
|
71
|
+
|
|
72
|
+
### 1. Public Docs (`docs-site/`)
|
|
73
|
+
- **Purpose**: User-facing documentation
|
|
74
|
+
- **Source**: `.specweave/docs/public/`
|
|
75
|
+
- **Port**: 3013
|
|
76
|
+
- **Deployment**: ✅ spec-weave.com (public)
|
|
77
|
+
- **Search**: Algolia (recommended)
|
|
78
|
+
- **Content**: Guides, API docs, tutorials, FAQ
|
|
79
|
+
|
|
80
|
+
**Commands**:
|
|
81
|
+
```bash
|
|
82
|
+
# Start public docs
|
|
83
|
+
npm run docs:public
|
|
84
|
+
# OR
|
|
85
|
+
cd docs-site && npm start
|
|
86
|
+
|
|
87
|
+
# Access: http://localhost:3013
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 2. Internal Docs (`docs-site-internal/`)
|
|
91
|
+
- **Purpose**: Engineering playbook (ADRs, HLD, strategy)
|
|
92
|
+
- **Source**: `.specweave/docs/internal/`
|
|
93
|
+
- **Port**: 3015
|
|
94
|
+
- **Deployment**: ❌ NEVER deploy (local only)
|
|
95
|
+
- **Search**: Local search plugin (no Algolia)
|
|
96
|
+
- **Content**: Architecture, strategy, specs, delivery, operations, governance
|
|
97
|
+
|
|
98
|
+
**Commands**:
|
|
99
|
+
```bash
|
|
100
|
+
# Start internal docs
|
|
101
|
+
npm run docs:internal
|
|
102
|
+
# OR
|
|
103
|
+
cd docs-site-internal && npm start
|
|
104
|
+
|
|
105
|
+
# Access: http://localhost:3015
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Running Both Simultaneously
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Terminal 1: Public docs
|
|
112
|
+
npm run docs:public
|
|
113
|
+
|
|
114
|
+
# Terminal 2: Internal docs
|
|
115
|
+
npm run docs:internal
|
|
116
|
+
|
|
117
|
+
# Access:
|
|
118
|
+
# - Public: http://localhost:3013
|
|
119
|
+
# - Internal: http://localhost:3015
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Key Differences**:
|
|
123
|
+
|
|
124
|
+
| Aspect | Public Docs | Internal Docs |
|
|
125
|
+
|--------|-------------|---------------|
|
|
126
|
+
| **Directory** | `docs-site/` | `docs-site-internal/` |
|
|
127
|
+
| **Source** | `.specweave/docs/public/` | `.specweave/docs/internal/` |
|
|
128
|
+
| **Port** | 3013 | 3015 |
|
|
129
|
+
| **Deployment** | ✅ Deployed | ❌ Local only |
|
|
130
|
+
| **Search** | Algolia | Local plugin |
|
|
131
|
+
| **Warning** | ❌ None | ✅ Red banner |
|
|
132
|
+
| **Content** | User guides | Engineering docs |
|
|
133
|
+
|
|
134
|
+
**Security**: Internal docs have NO deployment config (no `vercel.json`, `netlify.toml`, or GitHub Actions workflow). This prevents accidental public deployment.
|
|
135
|
+
|
|
136
|
+
---
|
|
64
137
|
|
|
65
138
|
## Workflow
|
|
66
139
|
|