@paths.design/caws-cli 7.0.2 → 7.0.3

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 (117) hide show
  1. package/dist/budget-derivation.js +5 -4
  2. package/dist/commands/diagnose.js +24 -19
  3. package/dist/commands/init.js +51 -4
  4. package/dist/commands/specs.js +40 -1
  5. package/dist/commands/status.js +2 -2
  6. package/dist/commands/tool.js +2 -3
  7. package/dist/config/index.js +17 -8
  8. package/dist/generators/working-spec.js +19 -6
  9. package/dist/scaffold/git-hooks.js +127 -29
  10. package/dist/scaffold/index.js +53 -7
  11. package/dist/templates/.caws/tools/README.md +20 -0
  12. package/dist/templates/.cursor/README.md +311 -0
  13. package/dist/templates/.cursor/hooks/audit.sh +55 -0
  14. package/dist/templates/.cursor/hooks/block-dangerous.sh +83 -0
  15. package/dist/templates/.cursor/hooks/caws-quality-check.sh +52 -0
  16. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +130 -0
  17. package/dist/templates/.cursor/hooks/caws-tool-validation.sh +121 -0
  18. package/dist/templates/.cursor/hooks/format.sh +38 -0
  19. package/dist/templates/.cursor/hooks/naming-check.sh +64 -0
  20. package/dist/templates/.cursor/hooks/scan-secrets.sh +46 -0
  21. package/dist/templates/.cursor/hooks/scope-guard.sh +52 -0
  22. package/dist/templates/.cursor/hooks/validate-spec.sh +83 -0
  23. package/dist/templates/.cursor/hooks.json +59 -0
  24. package/dist/templates/.cursor/rules/00-claims-verification.mdc +144 -0
  25. package/dist/templates/.cursor/rules/01-working-style.mdc +50 -0
  26. package/dist/templates/.cursor/rules/02-quality-gates.mdc +370 -0
  27. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +33 -0
  28. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +23 -0
  29. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +23 -0
  30. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +36 -0
  31. package/dist/templates/.cursor/rules/07-process-ops.mdc +20 -0
  32. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +16 -0
  33. package/dist/templates/.cursor/rules/09-docstrings.mdc +89 -0
  34. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +390 -0
  35. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +385 -0
  36. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +516 -0
  37. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +588 -0
  38. package/dist/templates/.cursor/rules/README.md +148 -0
  39. package/dist/templates/.github/copilot/instructions.md +311 -0
  40. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +5 -0
  41. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +5 -0
  42. package/dist/templates/.vscode/launch.json +56 -0
  43. package/dist/templates/.vscode/settings.json +93 -0
  44. package/dist/templates/.windsurf/workflows/caws-guided-development.md +92 -0
  45. package/dist/templates/COMMIT_CONVENTIONS.md +86 -0
  46. package/dist/templates/OIDC_SETUP.md +300 -0
  47. package/dist/templates/agents.md +1047 -0
  48. package/dist/templates/codemod/README.md +1 -0
  49. package/dist/templates/codemod/test.js +93 -0
  50. package/dist/templates/docs/README.md +150 -0
  51. package/dist/templates/scripts/quality-gates/check-god-objects.js +146 -0
  52. package/dist/templates/scripts/quality-gates/run-quality-gates.js +50 -0
  53. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +1997 -0
  54. package/dist/tool-loader.js +6 -1
  55. package/dist/tool-validator.js +8 -2
  56. package/dist/utils/detection.js +4 -3
  57. package/dist/utils/git-lock.js +118 -0
  58. package/dist/utils/gitignore-updater.js +148 -0
  59. package/dist/utils/quality-gates.js +47 -7
  60. package/dist/utils/spec-resolver.js +23 -3
  61. package/dist/utils/yaml-validation.js +155 -0
  62. package/dist/validation/spec-validation.js +81 -2
  63. package/package.json +2 -2
  64. package/templates/.caws/schemas/waivers.schema.json +30 -0
  65. package/templates/.caws/schemas/working-spec.schema.json +133 -0
  66. package/templates/.caws/templates/working-spec.template.yml +74 -0
  67. package/templates/.caws/tools/README.md +20 -0
  68. package/templates/.caws/tools/scope-guard.js +208 -0
  69. package/templates/.caws/tools-allow.json +331 -0
  70. package/templates/.caws/waivers.yml +19 -0
  71. package/templates/.cursor/hooks/scope-guard.sh +2 -2
  72. package/templates/.cursor/hooks/validate-spec.sh +42 -7
  73. package/templates/apps/tools/caws/COMPLETION_REPORT.md +0 -331
  74. package/templates/apps/tools/caws/MIGRATION_SUMMARY.md +0 -360
  75. package/templates/apps/tools/caws/README.md +0 -463
  76. package/templates/apps/tools/caws/TEST_STATUS.md +0 -365
  77. package/templates/apps/tools/caws/attest.js +0 -357
  78. package/templates/apps/tools/caws/ci-optimizer.js +0 -642
  79. package/templates/apps/tools/caws/config.ts +0 -245
  80. package/templates/apps/tools/caws/cross-functional.js +0 -876
  81. package/templates/apps/tools/caws/dashboard.js +0 -1112
  82. package/templates/apps/tools/caws/flake-detector.ts +0 -362
  83. package/templates/apps/tools/caws/gates.js +0 -198
  84. package/templates/apps/tools/caws/gates.ts +0 -271
  85. package/templates/apps/tools/caws/language-adapters.ts +0 -381
  86. package/templates/apps/tools/caws/language-support.d.ts +0 -367
  87. package/templates/apps/tools/caws/language-support.d.ts.map +0 -1
  88. package/templates/apps/tools/caws/language-support.js +0 -585
  89. package/templates/apps/tools/caws/legacy-assessment.ts +0 -408
  90. package/templates/apps/tools/caws/legacy-assessor.js +0 -764
  91. package/templates/apps/tools/caws/mutant-analyzer.js +0 -734
  92. package/templates/apps/tools/caws/perf-budgets.ts +0 -349
  93. package/templates/apps/tools/caws/prompt-lint.js.backup +0 -274
  94. package/templates/apps/tools/caws/property-testing.js +0 -707
  95. package/templates/apps/tools/caws/provenance.d.ts +0 -14
  96. package/templates/apps/tools/caws/provenance.d.ts.map +0 -1
  97. package/templates/apps/tools/caws/provenance.js +0 -132
  98. package/templates/apps/tools/caws/provenance.js.backup +0 -73
  99. package/templates/apps/tools/caws/provenance.ts +0 -211
  100. package/templates/apps/tools/caws/security-provenance.ts +0 -483
  101. package/templates/apps/tools/caws/shared/base-tool.ts +0 -281
  102. package/templates/apps/tools/caws/shared/config-manager.ts +0 -366
  103. package/templates/apps/tools/caws/shared/gate-checker.ts +0 -849
  104. package/templates/apps/tools/caws/shared/types.ts +0 -444
  105. package/templates/apps/tools/caws/shared/validator.ts +0 -305
  106. package/templates/apps/tools/caws/shared/waivers-manager.ts +0 -174
  107. package/templates/apps/tools/caws/spec-test-mapper.ts +0 -391
  108. package/templates/apps/tools/caws/test-quality.js +0 -578
  109. package/templates/apps/tools/caws/validate.js +0 -76
  110. package/templates/apps/tools/caws/validate.ts +0 -228
  111. package/templates/apps/tools/caws/waivers.js +0 -344
  112. /package/{templates/apps/tools/caws → dist/templates/.caws}/schemas/waivers.schema.json +0 -0
  113. /package/{templates/apps/tools/caws → dist/templates/.caws}/schemas/working-spec.schema.json +0 -0
  114. /package/{templates/apps/tools/caws → dist/templates/.caws}/templates/working-spec.template.yml +0 -0
  115. /package/{templates/apps/tools/caws → dist/templates/.caws/tools}/scope-guard.js +0 -0
  116. /package/{templates/apps/tools/caws → dist/templates/.caws}/tools-allow.json +0 -0
  117. /package/{templates/apps/tools/caws → dist/templates/.caws}/waivers.yml +0 -0
@@ -0,0 +1,331 @@
1
+ [
2
+ "node",
3
+ "npm",
4
+ "yarn",
5
+ "pnpm",
6
+ "git",
7
+ "docker",
8
+ "kubectl",
9
+ "aws",
10
+ "azure",
11
+ "gcloud",
12
+ "terraform",
13
+ "ansible",
14
+ "curl",
15
+ "wget",
16
+ "grep",
17
+ "sed",
18
+ "awk",
19
+ "bash",
20
+ "sh",
21
+ "zsh",
22
+ "fish",
23
+ "python",
24
+ "python3",
25
+ "pip",
26
+ "pip3",
27
+ "virtualenv",
28
+ "conda",
29
+ "java",
30
+ "javac",
31
+ "gradle",
32
+ "maven",
33
+ "go",
34
+ "gofmt",
35
+ "rust",
36
+ "cargo",
37
+ "rustfmt",
38
+ "clippy",
39
+ "ruby",
40
+ "gem",
41
+ "bundle",
42
+ "rbenv",
43
+ "php",
44
+ "composer",
45
+ "dotnet",
46
+ "nuget",
47
+ "swift",
48
+ "xcodebuild",
49
+ "make",
50
+ "cmake",
51
+ "ninja",
52
+ "gcc",
53
+ "clang",
54
+ "ld",
55
+ "ar",
56
+ "strip",
57
+ "objdump",
58
+ "nm",
59
+ "readelf",
60
+ "file",
61
+ "hexdump",
62
+ "xxd",
63
+ "base64",
64
+ "openssl",
65
+ "ssh",
66
+ "scp",
67
+ "rsync",
68
+ "tar",
69
+ "gzip",
70
+ "bzip2",
71
+ "xz",
72
+ "zip",
73
+ "unzip",
74
+ "7z",
75
+ "jq",
76
+ "yq",
77
+ "xmlstarlet",
78
+ "html-xml-utils",
79
+ "pandoc",
80
+ "asciidoc",
81
+ "rst2html",
82
+ "markdown",
83
+ "remark",
84
+ "prettier",
85
+ "eslint",
86
+ "tslint",
87
+ "stylelint",
88
+ "htmlhint",
89
+ "csslint",
90
+ "jsonlint",
91
+ "yamllint",
92
+ "shellcheck",
93
+ "hadolint",
94
+ "dockerfile_lint",
95
+ "markdownlint",
96
+ "proselint",
97
+ "vale",
98
+ "alex",
99
+ "write-good",
100
+ "textlint",
101
+ "redpen",
102
+ "languagetool",
103
+ "grammarly",
104
+ "codespell",
105
+ "typos",
106
+ "aspell",
107
+ "hunspell",
108
+ "sort",
109
+ "uniq",
110
+ "cut",
111
+ "paste",
112
+ "join",
113
+ "split",
114
+ "tr",
115
+ "column",
116
+ "fold",
117
+ "fmt",
118
+ "pr",
119
+ "head",
120
+ "tail",
121
+ "wc",
122
+ "nl",
123
+ "od",
124
+ "strings",
125
+ "iconv",
126
+ "dos2unix",
127
+ "unix2dos",
128
+ "mac2unix",
129
+ "unix2mac",
130
+ "pbcopy",
131
+ "pbpaste",
132
+ "xclip",
133
+ "xsel",
134
+ "tmux",
135
+ "screen",
136
+ "vim",
137
+ "nvim",
138
+ "emacs",
139
+ "nano",
140
+ "micro",
141
+ "code",
142
+ "atom",
143
+ "sublime",
144
+ "vimr",
145
+ "macvim",
146
+ "gvim",
147
+ "vscode",
148
+ "intellij",
149
+ "pycharm",
150
+ "webstorm",
151
+ "phpstorm",
152
+ "rubymine",
153
+ "clion",
154
+ "goland",
155
+ "rider",
156
+ "datagrip",
157
+ "android-studio",
158
+ "xcode",
159
+ "eclipse",
160
+ "netbeans",
161
+ "idea",
162
+ "studio",
163
+ "vs",
164
+ "visualstudio",
165
+ "monodevelop",
166
+ "xamarin",
167
+ "rider",
168
+ "resharper",
169
+ "testcafe",
170
+ "cypress",
171
+ "playwright",
172
+ "puppeteer",
173
+ "selenium",
174
+ "webdriver",
175
+ "jest",
176
+ "mocha",
177
+ "jasmine",
178
+ "karma",
179
+ "vitest",
180
+ "testing-library",
181
+ "enzyme",
182
+ "react-testing-library",
183
+ "vue-test-utils",
184
+ "angular-testing-library",
185
+ "svelte-testing-library",
186
+ "lit-testing-library",
187
+ "ember-testing",
188
+ "backbone-testing",
189
+ "jquery-testing",
190
+ "dojo-testing",
191
+ "dojo",
192
+ "mootools",
193
+ "prototype",
194
+ "yui",
195
+ "extjs",
196
+ "sencha",
197
+ "backbone",
198
+ "marionette",
199
+ "chaplin",
200
+ "thorax",
201
+ "handlebars",
202
+ "mustache",
203
+ "underscore",
204
+ "lodash",
205
+ "ramda",
206
+ "functional",
207
+ "lazy",
208
+ "bluebird",
209
+ "q",
210
+ "deferred",
211
+ "async",
212
+ "await",
213
+ "generator",
214
+ "co",
215
+ "redux",
216
+ "mobx",
217
+ "flux",
218
+ "reflux",
219
+ "alt",
220
+ "flummox",
221
+ "delorean",
222
+ "cerebral",
223
+ "kea",
224
+ "zustand",
225
+ "jotai",
226
+ "recoil",
227
+ "valtio",
228
+ "effector",
229
+ "xstate",
230
+ "robot",
231
+ "easy-peasy",
232
+ "pullstate",
233
+ "akita",
234
+ "ngrx",
235
+ "ngxs",
236
+ "akita",
237
+ "elf",
238
+ "pinia",
239
+ "overmind",
240
+ "stately",
241
+ "context",
242
+ "useContext",
243
+ "useReducer",
244
+ "useState",
245
+ "useEffect",
246
+ "useMemo",
247
+ "useCallback",
248
+ "useRef",
249
+ "useImperativeHandle",
250
+ "useLayoutEffect",
251
+ "useDebugValue",
252
+ "useDeferredValue",
253
+ "useTransition",
254
+ "useId",
255
+ "useSyncExternalStore",
256
+ "createContext",
257
+ "createElement",
258
+ "cloneElement",
259
+ "isValidElement",
260
+ "ReactDOM",
261
+ "render",
262
+ "hydrate",
263
+ "createRoot",
264
+ "unmountComponentAtNode",
265
+ "findDOMNode",
266
+ "createPortal",
267
+ "unstable_batchedUpdates",
268
+ "flushSync",
269
+ "React",
270
+ "Component",
271
+ "PureComponent",
272
+ "memo",
273
+ "lazy",
274
+ "Suspense",
275
+ "ErrorBoundary",
276
+ "Profiler",
277
+ "StrictMode",
278
+ "Fragment",
279
+ "createRef",
280
+ "forwardRef",
281
+ "createContext",
282
+ "createElement",
283
+ "cloneElement",
284
+ "isValidElement",
285
+ "Children",
286
+ "map",
287
+ "forEach",
288
+ "count",
289
+ "only",
290
+ "toArray",
291
+ "ReactDOM",
292
+ "render",
293
+ "hydrate",
294
+ "createRoot",
295
+ "unmountComponentAtNode",
296
+ "findDOMNode",
297
+ "createPortal",
298
+ "unstable_batchedUpdates",
299
+ "flushSync",
300
+ "React",
301
+ "Component",
302
+ "PureComponent",
303
+ "memo",
304
+ "lazy",
305
+ "Suspense",
306
+ "ErrorBoundary",
307
+ "Profiler",
308
+ "StrictMode",
309
+ "Fragment",
310
+ "createRef",
311
+ "forwardRef",
312
+ "createContext",
313
+ "createElement",
314
+ "cloneElement",
315
+ "isValidElement",
316
+ "Children",
317
+ "map",
318
+ "forEach",
319
+ "count",
320
+ "only",
321
+ "toArray",
322
+ "ReactDOM",
323
+ "render",
324
+ "hydrate",
325
+ "createRoot",
326
+ "unmountComponentAtNode",
327
+ "findDOMNode",
328
+ "createPortal",
329
+ "unstable_batchedUpdates",
330
+ "flushSync"
331
+ ]
@@ -0,0 +1,19 @@
1
+ waivers:
2
+ # Example waiver for urgent fixes
3
+ # - id: "HOTFIX-001"
4
+ # description: "Urgent security fix - mutation testing waived"
5
+ # gates: ["mutation", "coverage"]
6
+ # reason: "urgent_fix"
7
+ # approver: "senior-dev"
8
+ # expires_at: "2025-10-07T10:00:00.000Z"
9
+ # projects: ["FEAT-1234"]
10
+ # max_trust_score: 79
11
+
12
+ # Example waiver for experimental features
13
+ # - id: "EXP-001"
14
+ # description: "Experimental feature - relaxed testing"
15
+ # gates: ["mutation", "contracts"]
16
+ # reason: "experimental"
17
+ # approver: "tech-lead"
18
+ # expires_at: "2025-10-14T10:00:00.000Z"
19
+ # max_trust_score: 75
@@ -22,7 +22,7 @@ if [ ! -f ".caws/working-spec.yaml" ] && [ ! -f ".caws/working-spec.yml" ]; then
22
22
  fi
23
23
 
24
24
  # Check if scope-guard tool exists
25
- if [ -f "apps/tools/caws/scope-guard.js" ]; then
25
+ if [ -f ".caws/tools/scope-guard.js" ]; then
26
26
  # Extract file paths from attachments
27
27
  FILE_PATHS=$(echo "$ATTACHMENTS" | jq -r '.[] | select(.type=="file") | .file_path' 2>/dev/null || echo "")
28
28
 
@@ -31,7 +31,7 @@ if [ -f "apps/tools/caws/scope-guard.js" ]; then
31
31
  OUT_OF_SCOPE=()
32
32
  while IFS= read -r file; do
33
33
  if [ -n "$file" ]; then
34
- if ! node apps/tools/caws/scope-guard.js check "$file" 2>/dev/null; then
34
+ if ! node .caws/tools/scope-guard.js check "$file" 2>/dev/null; then
35
35
  OUT_OF_SCOPE+=("$file")
36
36
  fi
37
37
  fi
@@ -14,27 +14,62 @@ INPUT=$(cat)
14
14
  # Extract file path from input
15
15
  FILE_PATH=$(echo "$INPUT" | jq -r '.file_path // ""')
16
16
 
17
- # Only validate if working-spec.yaml was edited
18
- if [[ "$FILE_PATH" == *"working-spec.yaml"* ]] || [[ "$FILE_PATH" == *"working-spec.yml"* ]]; then
19
- echo "🔍 Validating CAWS working spec..." >&2
17
+ # Validate if any CAWS YAML file was edited (.caws/**/*.yaml or .caws/**/*.yml)
18
+ if [[ "$FILE_PATH" == *".caws/"* ]] && ([[ "$FILE_PATH" == *.yaml ]] || [[ "$FILE_PATH" == *.yml ]]); then
19
+ echo "🔍 Validating CAWS spec file..." >&2
20
20
 
21
- # Check if CAWS CLI is available
21
+ # First, validate YAML syntax
22
+ if command -v node >/dev/null 2>&1; then
23
+ # Check YAML syntax using Node.js
24
+ YAML_SYNTAX_VALID=$(node -e "
25
+ const yaml = require('js-yaml');
26
+ const fs = require('fs');
27
+ try {
28
+ const content = fs.readFileSync('$FILE_PATH', 'utf8');
29
+ yaml.load(content);
30
+ process.exit(0);
31
+ } catch (error) {
32
+ console.error('YAML syntax error:', error.message);
33
+ if (error.mark) {
34
+ console.error('Line:', error.mark.line + 1, 'Column:', error.mark.column + 1);
35
+ }
36
+ process.exit(1);
37
+ }
38
+ " 2>&1)
39
+
40
+ if [ $? -ne 0 ]; then
41
+ echo '{
42
+ "userMessage": "⚠️ YAML syntax error detected",
43
+ "agentMessage": "The spec file has invalid YAML syntax. Fix syntax errors before continuing.",
44
+ "suggestions": [
45
+ "Check indentation (YAML uses 2 spaces)",
46
+ "Ensure all array items use consistent format",
47
+ "Remove duplicate keys",
48
+ "Consider using '\''caws specs create <id>'\'' instead of manual creation"
49
+ ]
50
+ }' 2>/dev/null
51
+ exit 0
52
+ fi
53
+ fi
54
+
55
+ # Check if CAWS CLI is available for semantic validation
22
56
  if command -v caws &> /dev/null; then
23
57
  # Run CAWS validation with suggestions
24
58
  if VALIDATION=$(caws validate "$FILE_PATH" --quiet 2>&1); then
25
- echo '{"userMessage":"✅ CAWS spec validation passed","agentMessage":"Working specification is valid and complete."}' 2>/dev/null
59
+ echo '{"userMessage":"✅ CAWS spec validation passed","agentMessage":"Specification is valid and complete."}' 2>/dev/null
26
60
  else
27
61
  # Get suggestions for fixing the spec
28
62
  SUGGESTIONS=$(caws validate "$FILE_PATH" --suggestions 2>/dev/null | head -5 | tr '\n' '; ' | sed 's/; $//' || echo "Run caws validate --suggestions for details")
29
63
 
30
64
  echo '{
31
65
  "userMessage": "⚠️ CAWS spec validation failed. Run: caws validate --suggestions",
32
- "agentMessage": "The working-spec.yaml file has validation errors. Please review and fix before continuing.",
66
+ "agentMessage": "The spec file has validation errors. Please review and fix before continuing.",
33
67
  "suggestions": [
34
68
  "Run caws validate --suggestions for detailed error messages",
35
69
  "Check required fields: id, title, risk_tier, mode",
36
70
  "Ensure acceptance criteria are properly defined",
37
- "Verify scope boundaries are appropriate"
71
+ "Verify scope boundaries are appropriate",
72
+ "Consider using '\''caws specs create <id>'\'' for proper structure"
38
73
  ]
39
74
  }' 2>/dev/null
40
75
  fi