@opengsd/gsd-core 1.12.0 → 1.13.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 (286) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.opencode/plugins/gsd-core.js +12 -0
  4. package/agents/gsd-executor.md +63 -35
  5. package/agents/gsd-plan-checker.md +76 -57
  6. package/agents/gsd-planner.md +14 -0
  7. package/agents/gsd-ui-checker.md +19 -3
  8. package/agents/gsd-ui-researcher.md +29 -0
  9. package/agents/gsd-verifier.md +23 -1
  10. package/bin/install.js +239 -67
  11. package/commands/gsd/execute-phase.md +1 -1
  12. package/commands/gsd/ns-workflow.md +2 -1
  13. package/commands/gsd/phase.md +1 -1
  14. package/commands/gsd/quick-batch.md +105 -0
  15. package/commands/gsd/surface.md +18 -8
  16. package/gsd-core/bin/gsd-tools.cjs +195 -50
  17. package/gsd-core/bin/lib/capability-activation.cjs +27 -0
  18. package/gsd-core/bin/lib/capability-registry.cjs +514 -114
  19. package/gsd-core/bin/lib/capability-state.cjs +7 -1
  20. package/gsd-core/bin/lib/capability-validator.cjs +120 -4
  21. package/gsd-core/bin/lib/capability-writer.cjs +14 -4
  22. package/gsd-core/bin/lib/check-command-router.cjs +85 -2
  23. package/gsd-core/bin/lib/claude-orchestration.cjs +10 -25
  24. package/gsd-core/bin/lib/clusters.cjs +1 -0
  25. package/gsd-core/bin/lib/command-aliases.cjs +16 -0
  26. package/gsd-core/bin/lib/commands.cjs +337 -13
  27. package/gsd-core/bin/lib/config-loader.cjs +3 -0
  28. package/gsd-core/bin/lib/core-utils.cjs +34 -7
  29. package/gsd-core/bin/lib/decisions.cjs +213 -1
  30. package/gsd-core/bin/lib/edge-probe.cjs +14 -1
  31. package/gsd-core/bin/lib/file-overlap-partitioner.cjs +74 -0
  32. package/gsd-core/bin/lib/frontmatter.cjs +137 -23
  33. package/gsd-core/bin/lib/gap-checker.cjs +22 -13
  34. package/gsd-core/bin/lib/git-base-branch.cjs +10 -2
  35. package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +8 -2
  36. package/gsd-core/bin/lib/health-diagnostic-rules/roadmap-disk-consistency.cjs +54 -11
  37. package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +75 -22
  38. package/gsd-core/bin/lib/host-integration.cjs +57 -5
  39. package/gsd-core/bin/lib/init-command-router.cjs +14 -0
  40. package/gsd-core/bin/lib/init.cjs +132 -15
  41. package/gsd-core/bin/lib/install-engine.cjs +184 -12
  42. package/gsd-core/bin/lib/install-model-override-resolver.cjs +45 -0
  43. package/gsd-core/bin/lib/install-profiles.cjs +22 -14
  44. package/gsd-core/bin/lib/installer-migration-report.cjs +1 -0
  45. package/gsd-core/bin/lib/io.cjs +35 -0
  46. package/gsd-core/bin/lib/loop-resolver.cjs +14 -8
  47. package/gsd-core/bin/lib/markdown-table.cjs +123 -0
  48. package/gsd-core/bin/lib/milestone.cjs +22 -2
  49. package/gsd-core/bin/lib/phase-command-router.cjs +13 -6
  50. package/gsd-core/bin/lib/phase-id.cjs +251 -9
  51. package/gsd-core/bin/lib/phase.cjs +774 -35
  52. package/gsd-core/bin/lib/plan-document.cjs +10 -0
  53. package/gsd-core/bin/lib/planning-snapshot.cjs +147 -20
  54. package/gsd-core/bin/lib/planning-workspace.cjs +103 -28
  55. package/gsd-core/bin/lib/quick-batch-command-router.cjs +285 -0
  56. package/gsd-core/bin/lib/quick-batch-dispatch.cjs +250 -0
  57. package/gsd-core/bin/lib/quick-batch.cjs +840 -0
  58. package/gsd-core/bin/lib/review-lane-descriptor.cjs +53 -5
  59. package/gsd-core/bin/lib/review-lane-invocation.cjs +73 -1
  60. package/gsd-core/bin/lib/review-lane-runner.cjs +136 -10
  61. package/gsd-core/bin/lib/roadmap-parser.cjs +499 -26
  62. package/gsd-core/bin/lib/roadmap.cjs +187 -58
  63. package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +233 -33
  64. package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +16 -17
  65. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +286 -108
  66. package/gsd-core/bin/lib/runtime-hooks-surface.cjs +215 -43
  67. package/gsd-core/bin/lib/shell-command-projection.cjs +4 -0
  68. package/gsd-core/bin/lib/smart-entry.cjs +7 -9
  69. package/gsd-core/bin/lib/state-document.cjs +30 -5
  70. package/gsd-core/bin/lib/state-md-schema.cjs +23 -13
  71. package/gsd-core/bin/lib/state-transition.cjs +333 -44
  72. package/gsd-core/bin/lib/state.cjs +684 -125
  73. package/gsd-core/bin/lib/surface.cjs +23 -8
  74. package/gsd-core/bin/lib/tdd-red-evidence.cjs +133 -0
  75. package/gsd-core/bin/lib/uat.cjs +1419 -515
  76. package/gsd-core/bin/lib/update-context.cjs +6 -2
  77. package/gsd-core/bin/lib/validate.cjs +230 -12
  78. package/gsd-core/bin/lib/verification-command-router.cjs +2 -1
  79. package/gsd-core/bin/lib/verification.cjs +273 -12
  80. package/gsd-core/bin/lib/verify-command-router.cjs +1 -0
  81. package/gsd-core/bin/lib/verify.cjs +346 -16
  82. package/gsd-core/bin/lib/workstream-inventory.cjs +20 -2
  83. package/gsd-core/bin/lib/worktree-safety.cjs +8 -0
  84. package/gsd-core/bin/shared/config-schema.manifest.json +8 -0
  85. package/gsd-core/bin/verify-reapply-patches.cjs +70 -3
  86. package/gsd-core/references/agent-contracts.md +3 -3
  87. package/gsd-core/references/edge-probe.md +17 -13
  88. package/gsd-core/references/execute-mvp-tdd.md +18 -16
  89. package/gsd-core/references/execute-phase-response-language.md +6 -0
  90. package/gsd-core/references/executor-examples.md +42 -0
  91. package/gsd-core/references/few-shot-examples/plan-checker.md +15 -15
  92. package/gsd-core/references/mvp-concepts.md +2 -2
  93. package/gsd-core/references/plan-checker-examples.md +41 -0
  94. package/gsd-core/references/planner-antipatterns.md +25 -0
  95. package/gsd-core/references/planner-chunked.md +5 -1
  96. package/gsd-core/references/planner-coupling.md +42 -0
  97. package/gsd-core/references/planner-quick-batch.md +71 -0
  98. package/gsd-core/references/planner-reviews.md +47 -0
  99. package/gsd-core/references/planner-revision.md +75 -2
  100. package/gsd-core/references/planning-config.md +2 -1
  101. package/gsd-core/references/response-language-directive.md +9 -0
  102. package/gsd-core/references/revision-loop.md +118 -11
  103. package/gsd-core/references/tdd.md +14 -9
  104. package/gsd-core/references/verifier-evidence-gate.md +160 -0
  105. package/gsd-core/templates/phase-prompt.md +4 -0
  106. package/gsd-core/templates/verification-report.md +5 -0
  107. package/gsd-core/workflows/add-backlog.md +2 -0
  108. package/gsd-core/workflows/add-phase.md +2 -0
  109. package/gsd-core/workflows/add-tests.md +1 -1
  110. package/gsd-core/workflows/add-todo.md +1 -1
  111. package/gsd-core/workflows/ai-integration-phase.md +1 -1
  112. package/gsd-core/workflows/analyze-dependencies.md +2 -0
  113. package/gsd-core/workflows/audit-fix.md +2 -0
  114. package/gsd-core/workflows/audit-milestone.md +2 -0
  115. package/gsd-core/workflows/audit-uat.md +2 -0
  116. package/gsd-core/workflows/autonomous.md +2 -0
  117. package/gsd-core/workflows/check-todos.md +1 -1
  118. package/gsd-core/workflows/cleanup.md +1 -1
  119. package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +15 -13
  120. package/gsd-core/workflows/code-review-fix.md +2 -0
  121. package/gsd-core/workflows/code-review.md +73 -31
  122. package/gsd-core/workflows/complete-milestone.md +13 -4
  123. package/gsd-core/workflows/debug.md +1 -1
  124. package/gsd-core/workflows/diagnose-issues.md +5 -1
  125. package/gsd-core/workflows/discuss-phase/modes/advisor.md +2 -0
  126. package/gsd-core/workflows/discuss-phase/modes/all.md +2 -0
  127. package/gsd-core/workflows/discuss-phase/modes/analyze.md +2 -0
  128. package/gsd-core/workflows/discuss-phase/modes/auto.md +2 -0
  129. package/gsd-core/workflows/discuss-phase/modes/batch.md +2 -0
  130. package/gsd-core/workflows/discuss-phase/modes/chain.md +2 -0
  131. package/gsd-core/workflows/discuss-phase/modes/default.md +2 -0
  132. package/gsd-core/workflows/discuss-phase/modes/power.md +2 -0
  133. package/gsd-core/workflows/discuss-phase/modes/text.md +2 -0
  134. package/gsd-core/workflows/discuss-phase/templates/context.md +2 -0
  135. package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +2 -0
  136. package/gsd-core/workflows/discuss-phase-assumptions.md +1 -1
  137. package/gsd-core/workflows/discuss-phase-power.md +2 -0
  138. package/gsd-core/workflows/discuss-phase.md +1 -1
  139. package/gsd-core/workflows/do.md +43 -13
  140. package/gsd-core/workflows/docs-update.md +1 -1
  141. package/gsd-core/workflows/edit-phase.md +2 -0
  142. package/gsd-core/workflows/eval-review.md +1 -1
  143. package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +2 -0
  144. package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +17 -1
  145. package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +8 -2
  146. package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +2 -0
  147. package/gsd-core/workflows/execute-phase/steps/tdd-applicability-resolution.md +25 -0
  148. package/gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md +2 -0
  149. package/gsd-core/workflows/execute-phase.md +32 -14
  150. package/gsd-core/workflows/execute-plan.md +8 -8
  151. package/gsd-core/workflows/explore.md +2 -0
  152. package/gsd-core/workflows/extract-learnings.md +2 -0
  153. package/gsd-core/workflows/fast.md +6 -0
  154. package/gsd-core/workflows/forensics.md +2 -0
  155. package/gsd-core/workflows/graduation.md +1 -1
  156. package/gsd-core/workflows/health.md +1 -1
  157. package/gsd-core/workflows/help/modes/brief.md +2 -0
  158. package/gsd-core/workflows/help/modes/default.md +2 -0
  159. package/gsd-core/workflows/help/modes/full.md +12 -0
  160. package/gsd-core/workflows/help/modes/topic.md +2 -0
  161. package/gsd-core/workflows/help.md +2 -0
  162. package/gsd-core/workflows/import.md +3 -3
  163. package/gsd-core/workflows/inbox.md +1 -1
  164. package/gsd-core/workflows/ingest-docs.md +1 -1
  165. package/gsd-core/workflows/insert-phase.md +2 -0
  166. package/gsd-core/workflows/list-phase-assumptions.md +2 -0
  167. package/gsd-core/workflows/list-seeds.md +2 -0
  168. package/gsd-core/workflows/list-workspaces.md +2 -0
  169. package/gsd-core/workflows/manager.md +3 -3
  170. package/gsd-core/workflows/map-codebase.md +2 -0
  171. package/gsd-core/workflows/milestone-summary.md +2 -0
  172. package/gsd-core/workflows/mvp-phase.md +1 -1
  173. package/gsd-core/workflows/new-milestone.md +1 -1
  174. package/gsd-core/workflows/new-project.md +5 -3
  175. package/gsd-core/workflows/new-workspace.md +1 -1
  176. package/gsd-core/workflows/next.md +2 -0
  177. package/gsd-core/workflows/node-repair.md +2 -0
  178. package/gsd-core/workflows/note.md +2 -0
  179. package/gsd-core/workflows/onboard.md +1 -1
  180. package/gsd-core/workflows/pause-work.md +19 -4
  181. package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +100 -18
  182. package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +2 -0
  183. package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +9 -0
  184. package/gsd-core/workflows/plan-phase.md +130 -12
  185. package/gsd-core/workflows/plan-review-convergence.md +102 -10
  186. package/gsd-core/workflows/plant-seed.md +1 -1
  187. package/gsd-core/workflows/pr-branch.md +11 -3
  188. package/gsd-core/workflows/profile-user.md +1 -1
  189. package/gsd-core/workflows/progress/steps/forensic-audit.md +1 -1
  190. package/gsd-core/workflows/progress.md +25 -3
  191. package/gsd-core/workflows/quick/steps/plan-checker-loop.md +37 -2
  192. package/gsd-core/workflows/quick/steps/research-phase.md +3 -3
  193. package/gsd-core/workflows/quick-batch/steps/batch-init.md +55 -0
  194. package/gsd-core/workflows/quick-batch/steps/completion.md +65 -0
  195. package/gsd-core/workflows/quick-batch/steps/merge-wave.md +100 -0
  196. package/gsd-core/workflows/quick-batch/steps/plan-checker-loop.md +147 -0
  197. package/gsd-core/workflows/quick-batch/steps/planner-wave.md +158 -0
  198. package/gsd-core/workflows/quick-batch/steps/research-phase.md +95 -0
  199. package/gsd-core/workflows/quick-batch/steps/resume-mode.md +49 -0
  200. package/gsd-core/workflows/quick-batch/steps/verification-wave.md +73 -0
  201. package/gsd-core/workflows/quick-batch/steps/worktree-dispatch.md +169 -0
  202. package/gsd-core/workflows/quick-batch.md +203 -0
  203. package/gsd-core/workflows/quick.md +13 -3
  204. package/gsd-core/workflows/reapply-patches.md +2 -0
  205. package/gsd-core/workflows/remove-phase.md +2 -0
  206. package/gsd-core/workflows/remove-workspace.md +1 -1
  207. package/gsd-core/workflows/resume-project.md +6 -2
  208. package/gsd-core/workflows/review.md +215 -10
  209. package/gsd-core/workflows/scan.md +2 -0
  210. package/gsd-core/workflows/section-manifest.json +12 -0
  211. package/gsd-core/workflows/secure-phase.md +1 -1
  212. package/gsd-core/workflows/session-report.md +2 -0
  213. package/gsd-core/workflows/settings-advanced.md +2 -0
  214. package/gsd-core/workflows/settings-integrations.md +9 -8
  215. package/gsd-core/workflows/settings.md +1 -1
  216. package/gsd-core/workflows/ship.md +10 -10
  217. package/gsd-core/workflows/sketch-wrap-up.md +2 -0
  218. package/gsd-core/workflows/sketch.md +1 -1
  219. package/gsd-core/workflows/smart-entry.md +1 -1
  220. package/gsd-core/workflows/spec-phase.md +24 -19
  221. package/gsd-core/workflows/spike-wrap-up.md +2 -0
  222. package/gsd-core/workflows/spike.md +1 -1
  223. package/gsd-core/workflows/stats.md +2 -0
  224. package/gsd-core/workflows/sync-skills.md +12 -4
  225. package/gsd-core/workflows/thread.md +2 -0
  226. package/gsd-core/workflows/transition.md +2 -0
  227. package/gsd-core/workflows/ui-phase.md +26 -5
  228. package/gsd-core/workflows/ui-review.md +1 -1
  229. package/gsd-core/workflows/ultraplan-phase.md +2 -0
  230. package/gsd-core/workflows/undo.md +1 -1
  231. package/gsd-core/workflows/update.md +41 -38
  232. package/gsd-core/workflows/validate-phase.md +1 -1
  233. package/gsd-core/workflows/verify-work.md +49 -3
  234. package/hooks/dist/gsd-check-update-worker.js +19 -2
  235. package/hooks/dist/gsd-context-monitor.js +283 -12
  236. package/hooks/dist/gsd-node-runner.sh +1 -0
  237. package/hooks/dist/gsd-prompt-guard.js +30 -5
  238. package/hooks/dist/gsd-read-guard.js +2 -0
  239. package/hooks/dist/gsd-read-injection-scanner.js +5 -5
  240. package/hooks/dist/gsd-secret-read-guard.js +1079 -0
  241. package/hooks/dist/gsd-statusline.js +7 -3
  242. package/hooks/dist/gsd-validate-commit.sh +444 -7
  243. package/hooks/dist/gsd-workflow-guard.js +2 -1
  244. package/hooks/dist/lib/git-cmd.js +210 -1
  245. package/hooks/dist/lib/injection-patterns.js +36 -6
  246. package/hooks/dist/managed-hooks-registry.cjs +1 -0
  247. package/hooks/gsd-check-update-worker.js +19 -2
  248. package/hooks/gsd-context-monitor.js +283 -12
  249. package/hooks/gsd-node-runner.sh +1 -0
  250. package/hooks/gsd-prompt-guard.js +30 -5
  251. package/hooks/gsd-read-guard.js +2 -0
  252. package/hooks/gsd-read-injection-scanner.js +5 -5
  253. package/hooks/gsd-secret-read-guard.js +1079 -0
  254. package/hooks/gsd-statusline.js +7 -3
  255. package/hooks/gsd-validate-commit.sh +444 -7
  256. package/hooks/gsd-workflow-guard.js +2 -1
  257. package/hooks/hooks.json +6 -0
  258. package/hooks/lib/git-cmd.js +210 -1
  259. package/hooks/lib/injection-patterns.js +36 -6
  260. package/hooks/managed-hooks-registry.cjs +1 -0
  261. package/package.json +5 -5
  262. package/scripts/build-hooks.js +11 -4
  263. package/scripts/ci-test-scope.cjs +7 -0
  264. package/scripts/docs-guard-registry.cjs +10 -0
  265. package/scripts/gen-loop-host-contract.cjs +67 -15
  266. package/scripts/lib/shellcheck-fetch.cjs +247 -0
  267. package/scripts/lint-allow-test-rule-refs.allowlist.json +0 -6
  268. package/scripts/lint-allow-test-rule-refs.effective-ceiling.json +1 -1
  269. package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +1 -1
  270. package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +5 -0
  271. package/scripts/lint-phase-enumeration-drift.cjs +24 -6
  272. package/scripts/lint-phase-id-drift.cjs +133 -8
  273. package/scripts/lint-portable-grep.cjs +176 -0
  274. package/scripts/lint-response-language-coverage.cjs +524 -0
  275. package/scripts/lint-test-file-count.allowlist.json +3 -1
  276. package/scripts/lint-workflow-shellcheck-baseline.json +1027 -0
  277. package/scripts/lint-workflow-shellcheck.cjs +614 -0
  278. package/scripts/npm-audit-baseline.cjs +376 -0
  279. package/scripts/prompt-injection-scan.sh +8 -0
  280. package/scripts/require-issue-link-policy.cjs +16 -1
  281. package/skills/gsd-execute-phase/SKILL.md +1 -1
  282. package/skills/gsd-ns-workflow/SKILL.md +1 -0
  283. package/skills/gsd-phase/SKILL.md +1 -1
  284. package/skills/gsd-quick-batch/SKILL.md +105 -0
  285. package/skills/gsd-surface/SKILL.md +18 -8
  286. package/vscode/package.json +1 -1
@@ -0,0 +1,1027 @@
1
+ [
2
+ {
3
+ "file": "gsd-core/workflows/add-tests.md",
4
+ "code": "2035",
5
+ "message": "Use ./*glob* or -- *glob* so names with dashes won't become options."
6
+ },
7
+ {
8
+ "file": "gsd-core/workflows/add-todo.md",
9
+ "code": "2102",
10
+ "message": "Ranges can only match single chars (mentioned due to duplicates)."
11
+ },
12
+ {
13
+ "file": "gsd-core/workflows/ai-integration-phase.md",
14
+ "code": "2012",
15
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
16
+ },
17
+ {
18
+ "file": "gsd-core/workflows/autonomous.md",
19
+ "code": "2012",
20
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
21
+ },
22
+ {
23
+ "file": "gsd-core/workflows/autonomous.md",
24
+ "code": "2086",
25
+ "message": "Double quote to prevent globbing and word splitting."
26
+ },
27
+ {
28
+ "file": "gsd-core/workflows/autonomous.md",
29
+ "code": "2086",
30
+ "message": "Double quote to prevent globbing and word splitting."
31
+ },
32
+ {
33
+ "file": "gsd-core/workflows/autonomous.md",
34
+ "code": "2086",
35
+ "message": "Double quote to prevent globbing and word splitting."
36
+ },
37
+ {
38
+ "file": "gsd-core/workflows/autonomous.md",
39
+ "code": "2086",
40
+ "message": "Double quote to prevent globbing and word splitting."
41
+ },
42
+ {
43
+ "file": "gsd-core/workflows/autonomous.md",
44
+ "code": "2086",
45
+ "message": "Double quote to prevent globbing and word splitting."
46
+ },
47
+ {
48
+ "file": "gsd-core/workflows/autonomous.md",
49
+ "code": "2086",
50
+ "message": "Double quote to prevent globbing and word splitting."
51
+ },
52
+ {
53
+ "file": "gsd-core/workflows/autonomous.md",
54
+ "code": "2086",
55
+ "message": "Double quote to prevent globbing and word splitting."
56
+ },
57
+ {
58
+ "file": "gsd-core/workflows/check-todos.md",
59
+ "code": "2102",
60
+ "message": "Ranges can only match single chars (mentioned due to duplicates)."
61
+ },
62
+ {
63
+ "file": "gsd-core/workflows/check-todos.md",
64
+ "code": "2102",
65
+ "message": "Ranges can only match single chars (mentioned due to duplicates)."
66
+ },
67
+ {
68
+ "file": "gsd-core/workflows/cleanup.md",
69
+ "code": "1083",
70
+ "message": "This { is literal. Check expression (missing ;/\\n?) or quote it."
71
+ },
72
+ {
73
+ "file": "gsd-core/workflows/cleanup.md",
74
+ "code": "1083",
75
+ "message": "This { is literal. Check expression (missing ;/\\n?) or quote it."
76
+ },
77
+ {
78
+ "file": "gsd-core/workflows/cleanup.md",
79
+ "code": "1083",
80
+ "message": "This { is literal. Check expression (missing ;/\\n?) or quote it."
81
+ },
82
+ {
83
+ "file": "gsd-core/workflows/cleanup.md",
84
+ "code": "1083",
85
+ "message": "This } is literal. Check expression (missing ;/\\n?) or quote it."
86
+ },
87
+ {
88
+ "file": "gsd-core/workflows/cleanup.md",
89
+ "code": "1083",
90
+ "message": "This } is literal. Check expression (missing ;/\\n?) or quote it."
91
+ },
92
+ {
93
+ "file": "gsd-core/workflows/cleanup.md",
94
+ "code": "1083",
95
+ "message": "This } is literal. Check expression (missing ;/\\n?) or quote it."
96
+ },
97
+ {
98
+ "file": "gsd-core/workflows/code-review-fix.md",
99
+ "code": "1009",
100
+ "message": "The mentioned syntax error was in this then clause."
101
+ },
102
+ {
103
+ "file": "gsd-core/workflows/code-review-fix.md",
104
+ "code": "1036",
105
+ "message": "'(' is invalid here. Did you forget to escape it?"
106
+ },
107
+ {
108
+ "file": "gsd-core/workflows/code-review-fix.md",
109
+ "code": "1061",
110
+ "message": "Couldn't find 'done' for this 'do'."
111
+ },
112
+ {
113
+ "file": "gsd-core/workflows/code-review-fix.md",
114
+ "code": "1062",
115
+ "message": "Expected 'done' matching previously mentioned 'do'."
116
+ },
117
+ {
118
+ "file": "gsd-core/workflows/code-review-fix.md",
119
+ "code": "1065",
120
+ "message": "Trying to declare parameters? Don't. Use () and refer to params as $1, $2.."
121
+ },
122
+ {
123
+ "file": "gsd-core/workflows/code-review-fix.md",
124
+ "code": "1072",
125
+ "message": "Expected 'done'. Fix any mentioned problems and try again."
126
+ },
127
+ {
128
+ "file": "gsd-core/workflows/code-review-fix.md",
129
+ "code": "1073",
130
+ "message": "Couldn't parse this while loop. Fix to allow more checks."
131
+ },
132
+ {
133
+ "file": "gsd-core/workflows/code-review.md",
134
+ "code": "1009",
135
+ "message": "The mentioned syntax error was in this test expression."
136
+ },
137
+ {
138
+ "file": "gsd-core/workflows/code-review.md",
139
+ "code": "1035",
140
+ "message": "You need a space after the [ and before the ]."
141
+ },
142
+ {
143
+ "file": "gsd-core/workflows/code-review.md",
144
+ "code": "1072",
145
+ "message": "Expected end of single quoted string. Fix any mentioned problems and try again."
146
+ },
147
+ {
148
+ "file": "gsd-core/workflows/code-review.md",
149
+ "code": "1073",
150
+ "message": "Couldn't parse this single quoted string. Fix to allow more checks."
151
+ },
152
+ {
153
+ "file": "gsd-core/workflows/code-review.md",
154
+ "code": "1078",
155
+ "message": "Did you forget to close this single quoted string?"
156
+ },
157
+ {
158
+ "file": "gsd-core/workflows/code-review.md",
159
+ "code": "1078",
160
+ "message": "Did you forget to close this single quoted string?"
161
+ },
162
+ {
163
+ "file": "gsd-core/workflows/code-review.md",
164
+ "code": "1079",
165
+ "message": "This is actually an end quote, but due to next char it looks suspect."
166
+ },
167
+ {
168
+ "file": "gsd-core/workflows/code-review.md",
169
+ "code": "1079",
170
+ "message": "This is actually an end quote, but due to next char it looks suspect."
171
+ },
172
+ {
173
+ "file": "gsd-core/workflows/code-review.md",
174
+ "code": "2088",
175
+ "message": "Tilde does not expand in quotes. Use $HOME."
176
+ },
177
+ {
178
+ "file": "gsd-core/workflows/code-review.md",
179
+ "code": "2153",
180
+ "message": "Possible misspelling: DEPTH_OVERRIDE may not be assigned. Did you mean DEPTH_OVERRIDES?"
181
+ },
182
+ {
183
+ "file": "gsd-core/workflows/code-review/steps/dispatch-fix.md",
184
+ "code": "1036",
185
+ "message": "'(' is invalid here. Did you forget to escape it?"
186
+ },
187
+ {
188
+ "file": "gsd-core/workflows/code-review/steps/dispatch-fix.md",
189
+ "code": "1046",
190
+ "message": "Couldn't find 'fi' for this 'if'."
191
+ },
192
+ {
193
+ "file": "gsd-core/workflows/code-review/steps/dispatch-fix.md",
194
+ "code": "1047",
195
+ "message": "Expected 'fi' matching previously mentioned 'if'."
196
+ },
197
+ {
198
+ "file": "gsd-core/workflows/code-review/steps/dispatch-fix.md",
199
+ "code": "1065",
200
+ "message": "Trying to declare parameters? Don't. Use () and refer to params as $1, $2.."
201
+ },
202
+ {
203
+ "file": "gsd-core/workflows/code-review/steps/dispatch-fix.md",
204
+ "code": "1072",
205
+ "message": "Expected 'fi'. Fix any mentioned problems and try again."
206
+ },
207
+ {
208
+ "file": "gsd-core/workflows/code-review/steps/dispatch-fix.md",
209
+ "code": "1073",
210
+ "message": "Couldn't parse this if expression. Fix to allow more checks."
211
+ },
212
+ {
213
+ "file": "gsd-core/workflows/code-review/steps/structural-pre-pass.md",
214
+ "code": "1009",
215
+ "message": "The mentioned syntax error was in this variable assignment."
216
+ },
217
+ {
218
+ "file": "gsd-core/workflows/code-review/steps/structural-pre-pass.md",
219
+ "code": "1036",
220
+ "message": "'(' is invalid here. Did you forget to escape it?"
221
+ },
222
+ {
223
+ "file": "gsd-core/workflows/code-review/steps/structural-pre-pass.md",
224
+ "code": "1072",
225
+ "message": "Expected end of $(..) expression. Fix any mentioned problems and try again."
226
+ },
227
+ {
228
+ "file": "gsd-core/workflows/code-review/steps/structural-pre-pass.md",
229
+ "code": "1073",
230
+ "message": "Couldn't parse this command expansion. Fix to allow more checks."
231
+ },
232
+ {
233
+ "file": "gsd-core/workflows/code-review/steps/structural-pre-pass.md",
234
+ "code": "1083",
235
+ "message": "This { is literal. Check expression (missing ;/\\n?) or quote it."
236
+ },
237
+ {
238
+ "file": "gsd-core/workflows/code-review/steps/structural-pre-pass.md",
239
+ "code": "2086",
240
+ "message": "Double quote to prevent globbing and word splitting."
241
+ },
242
+ {
243
+ "file": "gsd-core/workflows/code-review/steps/structural-pre-pass.md",
244
+ "code": "2157",
245
+ "message": "Argument to -z is always false due to literal strings."
246
+ },
247
+ {
248
+ "file": "gsd-core/workflows/complete-milestone.md",
249
+ "code": "2001",
250
+ "message": "See if you can use ${variable//search/replace} instead."
251
+ },
252
+ {
253
+ "file": "gsd-core/workflows/complete-milestone.md",
254
+ "code": "2001",
255
+ "message": "See if you can use ${variable//search/replace} instead."
256
+ },
257
+ {
258
+ "file": "gsd-core/workflows/complete-milestone.md",
259
+ "code": "2038",
260
+ "message": "Use 'find .. -print0 | xargs -0 ..' or 'find .. -exec .. +' to allow non-alphanumeric filenames."
261
+ },
262
+ {
263
+ "file": "gsd-core/workflows/complete-milestone.md",
264
+ "code": "2086",
265
+ "message": "Double quote to prevent globbing and word splitting."
266
+ },
267
+ {
268
+ "file": "gsd-core/workflows/complete-milestone.md",
269
+ "code": "2086",
270
+ "message": "Double quote to prevent globbing and word splitting."
271
+ },
272
+ {
273
+ "file": "gsd-core/workflows/complete-milestone.md",
274
+ "code": "2086",
275
+ "message": "Double quote to prevent globbing and word splitting."
276
+ },
277
+ {
278
+ "file": "gsd-core/workflows/debug.md",
279
+ "code": "2010",
280
+ "message": "Don't use ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames."
281
+ },
282
+ {
283
+ "file": "gsd-core/workflows/discuss-phase-assumptions.md",
284
+ "code": "2086",
285
+ "message": "Double quote to prevent globbing and word splitting."
286
+ },
287
+ {
288
+ "file": "gsd-core/workflows/discuss-phase.md",
289
+ "code": "2010",
290
+ "message": "Don't use ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames."
291
+ },
292
+ {
293
+ "file": "gsd-core/workflows/discuss-phase.md",
294
+ "code": "2012",
295
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
296
+ },
297
+ {
298
+ "file": "gsd-core/workflows/discuss-phase.md",
299
+ "code": "2012",
300
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
301
+ },
302
+ {
303
+ "file": "gsd-core/workflows/discuss-phase.md",
304
+ "code": "2086",
305
+ "message": "Double quote to prevent globbing and word splitting."
306
+ },
307
+ {
308
+ "file": "gsd-core/workflows/discuss-phase.md",
309
+ "code": "2086",
310
+ "message": "Double quote to prevent globbing and word splitting."
311
+ },
312
+ {
313
+ "file": "gsd-core/workflows/discuss-phase.md",
314
+ "code": "2086",
315
+ "message": "Double quote to prevent globbing and word splitting."
316
+ },
317
+ {
318
+ "file": "gsd-core/workflows/discuss-phase.md",
319
+ "code": "2086",
320
+ "message": "Double quote to prevent globbing and word splitting."
321
+ },
322
+ {
323
+ "file": "gsd-core/workflows/docs-update/steps/dispatch-monorepo-packages.md",
324
+ "code": "2043",
325
+ "message": "This loop will only ever run once. Bad quoting or missing glob/expansion?"
326
+ },
327
+ {
328
+ "file": "gsd-core/workflows/eval-review.md",
329
+ "code": "2012",
330
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
331
+ },
332
+ {
333
+ "file": "gsd-core/workflows/eval-review.md",
334
+ "code": "2012",
335
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
336
+ },
337
+ {
338
+ "file": "gsd-core/workflows/execute-phase.md",
339
+ "code": "2012",
340
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
341
+ },
342
+ {
343
+ "file": "gsd-core/workflows/execute-phase.md",
344
+ "code": "2016",
345
+ "message": "Expressions don't expand in single quotes, use double quotes for that."
346
+ },
347
+ {
348
+ "file": "gsd-core/workflows/execute-phase.md",
349
+ "code": "2043",
350
+ "message": "This loop will only ever run once. Bad quoting or missing glob/expansion?"
351
+ },
352
+ {
353
+ "file": "gsd-core/workflows/execute-phase.md",
354
+ "code": "2086",
355
+ "message": "Double quote to prevent globbing and word splitting."
356
+ },
357
+ {
358
+ "file": "gsd-core/workflows/execute-phase.md",
359
+ "code": "2086",
360
+ "message": "Double quote to prevent globbing and word splitting."
361
+ },
362
+ {
363
+ "file": "gsd-core/workflows/execute-phase.md",
364
+ "code": "2086",
365
+ "message": "Double quote to prevent globbing and word splitting."
366
+ },
367
+ {
368
+ "file": "gsd-core/workflows/execute-phase.md",
369
+ "code": "2086",
370
+ "message": "Double quote to prevent globbing and word splitting."
371
+ },
372
+ {
373
+ "file": "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md",
374
+ "code": "2016",
375
+ "message": "Expressions don't expand in single quotes, use double quotes for that."
376
+ },
377
+ {
378
+ "file": "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md",
379
+ "code": "2016",
380
+ "message": "Expressions don't expand in single quotes, use double quotes for that."
381
+ },
382
+ {
383
+ "file": "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md",
384
+ "code": "2016",
385
+ "message": "Expressions don't expand in single quotes, use double quotes for that."
386
+ },
387
+ {
388
+ "file": "gsd-core/workflows/execute-phase/steps/gap-closure-artifacts.md",
389
+ "code": "2086",
390
+ "message": "Double quote to prevent globbing and word splitting."
391
+ },
392
+ {
393
+ "file": "gsd-core/workflows/execute-phase/steps/wave-post-gate-hooks.md",
394
+ "code": "2086",
395
+ "message": "Double quote to prevent globbing and word splitting."
396
+ },
397
+ {
398
+ "file": "gsd-core/workflows/execute-plan.md",
399
+ "code": "2086",
400
+ "message": "Double quote to prevent globbing and word splitting."
401
+ },
402
+ {
403
+ "file": "gsd-core/workflows/execute-plan.md",
404
+ "code": "2086",
405
+ "message": "Double quote to prevent globbing and word splitting."
406
+ },
407
+ {
408
+ "file": "gsd-core/workflows/execute-plan.md",
409
+ "code": "2086",
410
+ "message": "Double quote to prevent globbing and word splitting."
411
+ },
412
+ {
413
+ "file": "gsd-core/workflows/forensics.md",
414
+ "code": "2086",
415
+ "message": "Double quote to prevent globbing and word splitting."
416
+ },
417
+ {
418
+ "file": "gsd-core/workflows/health.md",
419
+ "code": "2086",
420
+ "message": "Double quote to prevent globbing and word splitting."
421
+ },
422
+ {
423
+ "file": "gsd-core/workflows/health.md",
424
+ "code": "2086",
425
+ "message": "Double quote to prevent globbing and word splitting."
426
+ },
427
+ {
428
+ "file": "gsd-core/workflows/import.md",
429
+ "code": "2194",
430
+ "message": "This word is constant. Did you forget the $ on a variable?"
431
+ },
432
+ {
433
+ "file": "gsd-core/workflows/ingest-docs.md",
434
+ "code": "2157",
435
+ "message": "Argument to -n is always true due to literal strings."
436
+ },
437
+ {
438
+ "file": "gsd-core/workflows/ingest-docs.md",
439
+ "code": "2194",
440
+ "message": "This word is constant. Did you forget the $ on a variable?"
441
+ },
442
+ {
443
+ "file": "gsd-core/workflows/ingest-docs.md",
444
+ "code": "2194",
445
+ "message": "This word is constant. Did you forget the $ on a variable?"
446
+ },
447
+ {
448
+ "file": "gsd-core/workflows/milestone-summary.md",
449
+ "code": "2046",
450
+ "message": "Quote this to prevent word splitting."
451
+ },
452
+ {
453
+ "file": "gsd-core/workflows/milestone-summary.md",
454
+ "code": "2086",
455
+ "message": "Double quote to prevent globbing and word splitting."
456
+ },
457
+ {
458
+ "file": "gsd-core/workflows/milestone-summary.md",
459
+ "code": "2086",
460
+ "message": "Double quote to prevent globbing and word splitting."
461
+ },
462
+ {
463
+ "file": "gsd-core/workflows/milestone-summary.md",
464
+ "code": "2086",
465
+ "message": "Double quote to prevent globbing and word splitting."
466
+ },
467
+ {
468
+ "file": "gsd-core/workflows/new-milestone.md",
469
+ "code": "2012",
470
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
471
+ },
472
+ {
473
+ "file": "gsd-core/workflows/new-project.md",
474
+ "code": "2012",
475
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
476
+ },
477
+ {
478
+ "file": "gsd-core/workflows/new-project.md",
479
+ "code": "2012",
480
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
481
+ },
482
+ {
483
+ "file": "gsd-core/workflows/new-workspace.md",
484
+ "code": "2164",
485
+ "message": "Use 'cd ... || exit' or 'cd ... || return' in case cd fails."
486
+ },
487
+ {
488
+ "file": "gsd-core/workflows/new-workspace.md",
489
+ "code": "2164",
490
+ "message": "Use 'cd ... || exit' or 'cd ... || return' in case cd fails."
491
+ },
492
+ {
493
+ "file": "gsd-core/workflows/next.md",
494
+ "code": "2181",
495
+ "message": "Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?."
496
+ },
497
+ {
498
+ "file": "gsd-core/workflows/next.md",
499
+ "code": "2181",
500
+ "message": "Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?."
501
+ },
502
+ {
503
+ "file": "gsd-core/workflows/pause-work.md",
504
+ "code": "2012",
505
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
506
+ },
507
+ {
508
+ "file": "gsd-core/workflows/pause-work.md",
509
+ "code": "2012",
510
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
511
+ },
512
+ {
513
+ "file": "gsd-core/workflows/pause-work.md",
514
+ "code": "2012",
515
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
516
+ },
517
+ {
518
+ "file": "gsd-core/workflows/pause-work.md",
519
+ "code": "2012",
520
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
521
+ },
522
+ {
523
+ "file": "gsd-core/workflows/pause-work.md",
524
+ "code": "2102",
525
+ "message": "Ranges can only match single chars (mentioned due to duplicates)."
526
+ },
527
+ {
528
+ "file": "gsd-core/workflows/plan-phase.md",
529
+ "code": "2010",
530
+ "message": "Don't use ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames."
531
+ },
532
+ {
533
+ "file": "gsd-core/workflows/plan-phase.md",
534
+ "code": "2012",
535
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
536
+ },
537
+ {
538
+ "file": "gsd-core/workflows/plan-phase.md",
539
+ "code": "2012",
540
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
541
+ },
542
+ {
543
+ "file": "gsd-core/workflows/plan-phase.md",
544
+ "code": "2012",
545
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
546
+ },
547
+ {
548
+ "file": "gsd-core/workflows/plan-phase.md",
549
+ "code": "2012",
550
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
551
+ },
552
+ {
553
+ "file": "gsd-core/workflows/plan-phase.md",
554
+ "code": "2012",
555
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
556
+ },
557
+ {
558
+ "file": "gsd-core/workflows/plan-phase.md",
559
+ "code": "2012",
560
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
561
+ },
562
+ {
563
+ "file": "gsd-core/workflows/plan-phase.md",
564
+ "code": "2012",
565
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
566
+ },
567
+ {
568
+ "file": "gsd-core/workflows/plan-phase.md",
569
+ "code": "2012",
570
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
571
+ },
572
+ {
573
+ "file": "gsd-core/workflows/plan-phase.md",
574
+ "code": "2086",
575
+ "message": "Double quote to prevent globbing and word splitting."
576
+ },
577
+ {
578
+ "file": "gsd-core/workflows/plan-phase.md",
579
+ "code": "2086",
580
+ "message": "Double quote to prevent globbing and word splitting."
581
+ },
582
+ {
583
+ "file": "gsd-core/workflows/plan-phase.md",
584
+ "code": "2086",
585
+ "message": "Double quote to prevent globbing and word splitting."
586
+ },
587
+ {
588
+ "file": "gsd-core/workflows/plan-phase.md",
589
+ "code": "2086",
590
+ "message": "Double quote to prevent globbing and word splitting."
591
+ },
592
+ {
593
+ "file": "gsd-core/workflows/plan-phase.md",
594
+ "code": "2086",
595
+ "message": "Double quote to prevent globbing and word splitting."
596
+ },
597
+ {
598
+ "file": "gsd-core/workflows/plan-phase.md",
599
+ "code": "2086",
600
+ "message": "Double quote to prevent globbing and word splitting."
601
+ },
602
+ {
603
+ "file": "gsd-core/workflows/plan-phase.md",
604
+ "code": "2086",
605
+ "message": "Double quote to prevent globbing and word splitting."
606
+ },
607
+ {
608
+ "file": "gsd-core/workflows/plan-phase.md",
609
+ "code": "2235",
610
+ "message": "Use { ..; } instead of (..) to avoid subshell overhead."
611
+ },
612
+ {
613
+ "file": "gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md",
614
+ "code": "2086",
615
+ "message": "Double quote to prevent globbing and word splitting."
616
+ },
617
+ {
618
+ "file": "gsd-core/workflows/plan-review-convergence.md",
619
+ "code": "2086",
620
+ "message": "Double quote to prevent globbing and word splitting."
621
+ },
622
+ {
623
+ "file": "gsd-core/workflows/plan-review-convergence.md",
624
+ "code": "2086",
625
+ "message": "Double quote to prevent globbing and word splitting."
626
+ },
627
+ {
628
+ "file": "gsd-core/workflows/plan-review-convergence.md",
629
+ "code": "2327",
630
+ "message": "This command substitution will be empty because the command's output gets redirected away."
631
+ },
632
+ {
633
+ "file": "gsd-core/workflows/plan-review-convergence.md",
634
+ "code": "2328",
635
+ "message": "This redirection takes output away from the command substitution (use tee to duplicate)."
636
+ },
637
+ {
638
+ "file": "gsd-core/workflows/plant-seed.md",
639
+ "code": "2012",
640
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
641
+ },
642
+ {
643
+ "file": "gsd-core/workflows/plant-seed.md",
644
+ "code": "2086",
645
+ "message": "Double quote to prevent globbing and word splitting."
646
+ },
647
+ {
648
+ "file": "gsd-core/workflows/pr-branch.md",
649
+ "code": "2086",
650
+ "message": "Double quote to prevent globbing and word splitting."
651
+ },
652
+ {
653
+ "file": "gsd-core/workflows/pr-branch.md",
654
+ "code": "2181",
655
+ "message": "Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?."
656
+ },
657
+ {
658
+ "file": "gsd-core/workflows/progress.md",
659
+ "code": "2102",
660
+ "message": "Ranges can only match single chars (mentioned due to duplicates)."
661
+ },
662
+ {
663
+ "file": "gsd-core/workflows/progress.md",
664
+ "code": "2102",
665
+ "message": "Ranges can only match single chars (mentioned due to duplicates)."
666
+ },
667
+ {
668
+ "file": "gsd-core/workflows/quick-batch.md",
669
+ "code": "2046",
670
+ "message": "Quote this to prevent word splitting."
671
+ },
672
+ {
673
+ "file": "gsd-core/workflows/quick-batch.md",
674
+ "code": "2046",
675
+ "message": "Quote this to prevent word splitting."
676
+ },
677
+ {
678
+ "file": "gsd-core/workflows/quick.md",
679
+ "code": "2086",
680
+ "message": "Double quote to prevent globbing and word splitting."
681
+ },
682
+ {
683
+ "file": "gsd-core/workflows/quick.md",
684
+ "code": "2086",
685
+ "message": "Double quote to prevent globbing and word splitting."
686
+ },
687
+ {
688
+ "file": "gsd-core/workflows/quick.md",
689
+ "code": "2086",
690
+ "message": "Double quote to prevent globbing and word splitting."
691
+ },
692
+ {
693
+ "file": "gsd-core/workflows/reapply-patches.md",
694
+ "code": "2088",
695
+ "message": "Tilde does not expand in quotes. Use $HOME."
696
+ },
697
+ {
698
+ "file": "gsd-core/workflows/remove-workspace.md",
699
+ "code": "2164",
700
+ "message": "Use 'cd ... || exit' or 'cd ... || return' in case cd fails."
701
+ },
702
+ {
703
+ "file": "gsd-core/workflows/review.md",
704
+ "code": "2086",
705
+ "message": "Double quote to prevent globbing and word splitting."
706
+ },
707
+ {
708
+ "file": "gsd-core/workflows/review.md",
709
+ "code": "2086",
710
+ "message": "Double quote to prevent globbing and word splitting."
711
+ },
712
+ {
713
+ "file": "gsd-core/workflows/review.md",
714
+ "code": "2086",
715
+ "message": "Double quote to prevent globbing and word splitting."
716
+ },
717
+ {
718
+ "file": "gsd-core/workflows/review.md",
719
+ "code": "2086",
720
+ "message": "Double quote to prevent globbing and word splitting."
721
+ },
722
+ {
723
+ "file": "gsd-core/workflows/review.md",
724
+ "code": "2086",
725
+ "message": "Double quote to prevent globbing and word splitting."
726
+ },
727
+ {
728
+ "file": "gsd-core/workflows/review.md",
729
+ "code": "2086",
730
+ "message": "Double quote to prevent globbing and word splitting."
731
+ },
732
+ {
733
+ "file": "gsd-core/workflows/review.md",
734
+ "code": "2086",
735
+ "message": "Double quote to prevent globbing and word splitting."
736
+ },
737
+ {
738
+ "file": "gsd-core/workflows/secure-phase.md",
739
+ "code": "2012",
740
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
741
+ },
742
+ {
743
+ "file": "gsd-core/workflows/settings-advanced.md",
744
+ "code": "2261",
745
+ "message": "Multiple redirections compete for stdin. Use cat, tee, or pass filenames instead."
746
+ },
747
+ {
748
+ "file": "gsd-core/workflows/settings-advanced.md",
749
+ "code": "2261",
750
+ "message": "Multiple redirections compete for stdin. Use cat, tee, or pass filenames instead."
751
+ },
752
+ {
753
+ "file": "gsd-core/workflows/settings-advanced.md",
754
+ "code": "2261",
755
+ "message": "Multiple redirections compete for stdin. Use cat, tee, or pass filenames instead."
756
+ },
757
+ {
758
+ "file": "gsd-core/workflows/settings-advanced.md",
759
+ "code": "2261",
760
+ "message": "Multiple redirections compete for stdin. Use cat, tee, or pass filenames instead."
761
+ },
762
+ {
763
+ "file": "gsd-core/workflows/settings-advanced.md",
764
+ "code": "2261",
765
+ "message": "Multiple redirections compete for stdout. Use cat, tee, or pass filenames instead."
766
+ },
767
+ {
768
+ "file": "gsd-core/workflows/settings-advanced.md",
769
+ "code": "2261",
770
+ "message": "Multiple redirections compete for stdout. Use cat, tee, or pass filenames instead."
771
+ },
772
+ {
773
+ "file": "gsd-core/workflows/settings-advanced.md",
774
+ "code": "2261",
775
+ "message": "Multiple redirections compete for stdout. Use cat, tee, or pass filenames instead."
776
+ },
777
+ {
778
+ "file": "gsd-core/workflows/settings-advanced.md",
779
+ "code": "2261",
780
+ "message": "Multiple redirections compete for stdout. Use cat, tee, or pass filenames instead."
781
+ },
782
+ {
783
+ "file": "gsd-core/workflows/settings.md",
784
+ "code": "2261",
785
+ "message": "Multiple redirections compete for stdin. Use cat, tee, or pass filenames instead."
786
+ },
787
+ {
788
+ "file": "gsd-core/workflows/settings.md",
789
+ "code": "2261",
790
+ "message": "Multiple redirections compete for stdin. Use cat, tee, or pass filenames instead."
791
+ },
792
+ {
793
+ "file": "gsd-core/workflows/settings.md",
794
+ "code": "2261",
795
+ "message": "Multiple redirections compete for stdin. Use cat, tee, or pass filenames instead."
796
+ },
797
+ {
798
+ "file": "gsd-core/workflows/settings.md",
799
+ "code": "2261",
800
+ "message": "Multiple redirections compete for stdout. Use cat, tee, or pass filenames instead."
801
+ },
802
+ {
803
+ "file": "gsd-core/workflows/settings.md",
804
+ "code": "2261",
805
+ "message": "Multiple redirections compete for stdout. Use cat, tee, or pass filenames instead."
806
+ },
807
+ {
808
+ "file": "gsd-core/workflows/settings.md",
809
+ "code": "2261",
810
+ "message": "Multiple redirections compete for stdout. Use cat, tee, or pass filenames instead."
811
+ },
812
+ {
813
+ "file": "gsd-core/workflows/ship.md",
814
+ "code": "2012",
815
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
816
+ },
817
+ {
818
+ "file": "gsd-core/workflows/ship.md",
819
+ "code": "2086",
820
+ "message": "Double quote to prevent globbing and word splitting."
821
+ },
822
+ {
823
+ "file": "gsd-core/workflows/ship.md",
824
+ "code": "2086",
825
+ "message": "Double quote to prevent globbing and word splitting."
826
+ },
827
+ {
828
+ "file": "gsd-core/workflows/ship.md",
829
+ "code": "2086",
830
+ "message": "Double quote to prevent globbing and word splitting."
831
+ },
832
+ {
833
+ "file": "gsd-core/workflows/ship.md",
834
+ "code": "2086",
835
+ "message": "Double quote to prevent globbing and word splitting."
836
+ },
837
+ {
838
+ "file": "gsd-core/workflows/ship.md",
839
+ "code": "2086",
840
+ "message": "Double quote to prevent globbing and word splitting."
841
+ },
842
+ {
843
+ "file": "gsd-core/workflows/ship.md",
844
+ "code": "2086",
845
+ "message": "Double quote to prevent globbing and word splitting."
846
+ },
847
+ {
848
+ "file": "gsd-core/workflows/ship.md",
849
+ "code": "2086",
850
+ "message": "Double quote to prevent globbing and word splitting."
851
+ },
852
+ {
853
+ "file": "gsd-core/workflows/ship.md",
854
+ "code": "2086",
855
+ "message": "Double quote to prevent globbing and word splitting."
856
+ },
857
+ {
858
+ "file": "gsd-core/workflows/ship.md",
859
+ "code": "2086",
860
+ "message": "Double quote to prevent globbing and word splitting."
861
+ },
862
+ {
863
+ "file": "gsd-core/workflows/ship.md",
864
+ "code": "2086",
865
+ "message": "Double quote to prevent globbing and word splitting."
866
+ },
867
+ {
868
+ "file": "gsd-core/workflows/sketch.md",
869
+ "code": "2012",
870
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
871
+ },
872
+ {
873
+ "file": "gsd-core/workflows/spec-phase.md",
874
+ "code": "2010",
875
+ "message": "Don't use ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames."
876
+ },
877
+ {
878
+ "file": "gsd-core/workflows/spec-phase.md",
879
+ "code": "2086",
880
+ "message": "Double quote to prevent globbing and word splitting."
881
+ },
882
+ {
883
+ "file": "gsd-core/workflows/spike.md",
884
+ "code": "2012",
885
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
886
+ },
887
+ {
888
+ "file": "gsd-core/workflows/sync-skills.md",
889
+ "code": "2010",
890
+ "message": "Don't use ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames."
891
+ },
892
+ {
893
+ "file": "gsd-core/workflows/sync-skills.md",
894
+ "code": "2010",
895
+ "message": "Don't use ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames."
896
+ },
897
+ {
898
+ "file": "gsd-core/workflows/sync-skills.md",
899
+ "code": "2115",
900
+ "message": "Use \"${var:?}\" to ensure this never expands to / ."
901
+ },
902
+ {
903
+ "file": "gsd-core/workflows/sync-skills.md",
904
+ "code": "2115",
905
+ "message": "Use \"${var:?}\" to ensure this never expands to / ."
906
+ },
907
+ {
908
+ "file": "gsd-core/workflows/sync-skills.md",
909
+ "code": "2181",
910
+ "message": "Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?."
911
+ },
912
+ {
913
+ "file": "gsd-core/workflows/sync-skills.md",
914
+ "code": "2181",
915
+ "message": "Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?."
916
+ },
917
+ {
918
+ "file": "gsd-core/workflows/sync-skills.md",
919
+ "code": "2181",
920
+ "message": "Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?."
921
+ },
922
+ {
923
+ "file": "gsd-core/workflows/sync-skills.md",
924
+ "code": "2199",
925
+ "message": "Arrays implicitly concatenate in [[ ]]. Use a loop (or explicit * instead of @)."
926
+ },
927
+ {
928
+ "file": "gsd-core/workflows/sync-skills.md",
929
+ "code": "2199",
930
+ "message": "Arrays implicitly concatenate in [[ ]]. Use a loop (or explicit * instead of @)."
931
+ },
932
+ {
933
+ "file": "gsd-core/workflows/sync-skills.md",
934
+ "code": "2199",
935
+ "message": "Arrays implicitly concatenate in [[ ]]. Use a loop (or explicit * instead of @)."
936
+ },
937
+ {
938
+ "file": "gsd-core/workflows/sync-skills.md",
939
+ "code": "2199",
940
+ "message": "Arrays implicitly concatenate in [[ ]]. Use a loop (or explicit * instead of @)."
941
+ },
942
+ {
943
+ "file": "gsd-core/workflows/sync-skills.md",
944
+ "code": "2207",
945
+ "message": "Prefer mapfile or read -a to split command output (or quote to avoid splitting)."
946
+ },
947
+ {
948
+ "file": "gsd-core/workflows/ui-phase.md",
949
+ "code": "2012",
950
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
951
+ },
952
+ {
953
+ "file": "gsd-core/workflows/ui-phase.md",
954
+ "code": "2012",
955
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
956
+ },
957
+ {
958
+ "file": "gsd-core/workflows/ui-review.md",
959
+ "code": "2012",
960
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
961
+ },
962
+ {
963
+ "file": "gsd-core/workflows/ui-review.md",
964
+ "code": "2012",
965
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
966
+ },
967
+ {
968
+ "file": "gsd-core/workflows/undo.md",
969
+ "code": "2086",
970
+ "message": "Double quote to prevent globbing and word splitting."
971
+ },
972
+ {
973
+ "file": "gsd-core/workflows/undo.md",
974
+ "code": "2086",
975
+ "message": "Double quote to prevent globbing and word splitting."
976
+ },
977
+ {
978
+ "file": "gsd-core/workflows/update.md",
979
+ "code": "2046",
980
+ "message": "Quote this to prevent word splitting."
981
+ },
982
+ {
983
+ "file": "gsd-core/workflows/update.md",
984
+ "code": "2046",
985
+ "message": "Quote this to prevent word splitting."
986
+ },
987
+ {
988
+ "file": "gsd-core/workflows/update.md",
989
+ "code": "2088",
990
+ "message": "Tilde does not expand in quotes. Use $HOME."
991
+ },
992
+ {
993
+ "file": "gsd-core/workflows/validate-phase.md",
994
+ "code": "2012",
995
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
996
+ },
997
+ {
998
+ "file": "gsd-core/workflows/verify-work.md",
999
+ "code": "2012",
1000
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
1001
+ },
1002
+ {
1003
+ "file": "gsd-core/workflows/verify-work.md",
1004
+ "code": "2012",
1005
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
1006
+ },
1007
+ {
1008
+ "file": "gsd-core/workflows/verify-work.md",
1009
+ "code": "2086",
1010
+ "message": "Double quote to prevent globbing and word splitting."
1011
+ },
1012
+ {
1013
+ "file": "gsd-core/workflows/verify-work.md",
1014
+ "code": "2086",
1015
+ "message": "Double quote to prevent globbing and word splitting."
1016
+ },
1017
+ {
1018
+ "file": "gsd-core/workflows/verify-work/steps/automated-ui-verification.md",
1019
+ "code": "2012",
1020
+ "message": "Use find instead of ls to better handle non-alphanumeric filenames."
1021
+ },
1022
+ {
1023
+ "file": "gsd-core/workflows/verify-work/steps/mvp-uat-framing.md",
1024
+ "code": "2086",
1025
+ "message": "Double quote to prevent globbing and word splitting."
1026
+ }
1027
+ ]