@use-the-fork/spindle 0.0.0-stage → 0.0.2

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 (245) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -2
  3. package/build/Assets/Blueprints/Catalog.js +110 -0
  4. package/build/Assets/Blueprints/agents/general.agent.md +67 -0
  5. package/build/Assets/Blueprints/agents/sdd-code-reviewer.agent.md +62 -0
  6. package/build/Assets/Blueprints/agents/sdd-code-slop-reviewer.agent.md +59 -0
  7. package/build/Assets/Blueprints/agents/sdd-implementer.agent.md +77 -0
  8. package/build/Assets/Blueprints/agents/sdd-orchestrator.agent.md +42 -0
  9. package/build/Assets/Blueprints/agents/sdd-re-review.agent.md +57 -0
  10. package/build/Assets/Blueprints/agents/sdd-reviewer.agent.md +89 -0
  11. package/build/Assets/Blueprints/agents/sdd-task-reviewer.agent.md +54 -0
  12. package/build/Assets/Blueprints/agents/shared-codebase-analyzer.agent.md +151 -0
  13. package/build/Assets/Blueprints/agents/shared-codebase-locator.agent.md +130 -0
  14. package/build/Assets/Blueprints/agents/shared-codebase-pattern-finder.agent.md +247 -0
  15. package/build/Assets/Blueprints/agents/shared-explore.agent.md +53 -0
  16. package/build/Assets/Blueprints/agents/shared-r.agent.md +17 -0
  17. package/build/Assets/Blueprints/agents/shared-rw.agent.md +17 -0
  18. package/build/Assets/Blueprints/agents/shared-rwx.agent.md +17 -0
  19. package/build/Assets/Blueprints/agents/shared-web-search-researcher.agent.md +122 -0
  20. package/build/Assets/Blueprints/instructions/code-commenting.instructions.md +39 -0
  21. package/build/Assets/Blueprints/instructions/source-architecture.instructions.md +15 -0
  22. package/build/Assets/Blueprints/skills/asd-ste100/CREDITS.MD +1 -0
  23. package/build/Assets/Blueprints/skills/asd-ste100/SKILL.md +83 -0
  24. package/build/Assets/Blueprints/skills/asd-ste100/examples/before-after.md +107 -0
  25. package/build/Assets/Blueprints/skills/asd-ste100/references/writing-rules.md +65 -0
  26. package/build/Assets/Blueprints/skills/author-agent/SKILL.md +26 -0
  27. package/build/Assets/Blueprints/skills/author-design/SKILL.md +38 -0
  28. package/build/Assets/Blueprints/skills/author-instruction/SKILL.md +28 -0
  29. package/build/Assets/Blueprints/skills/author-skill/SKILL.md +26 -0
  30. package/build/Assets/Blueprints/skills/grill/SKILL.md +33 -0
  31. package/build/Assets/Blueprints/skills/grill-design/SKILL.md +41 -0
  32. package/build/Assets/Blueprints/skills/grill-with-docs/SKILL.md +14 -0
  33. package/build/Assets/Blueprints/skills/implement/SKILL.md +79 -0
  34. package/build/Assets/Blueprints/skills/implement-spec/SKILL.md +34 -0
  35. package/build/Assets/Blueprints/skills/improve-codebase-architecture/HTML-REPORT.md +129 -0
  36. package/build/Assets/Blueprints/skills/improve-codebase-architecture/SKILL.md +74 -0
  37. package/build/Assets/Blueprints/skills/int-code-review/SKILL.md +76 -0
  38. package/build/Assets/Blueprints/skills/int-code-slop-review/SKILL.md +238 -0
  39. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/_sections.md +36 -0
  40. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/_template.md +42 -0
  41. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/comments-closing-brace-labels.md +112 -0
  42. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/comments-empty-docblocks.md +132 -0
  43. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/comments-narration.md +118 -0
  44. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/comments-placeholder.md +130 -0
  45. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/defensive-generic-catch.md +153 -0
  46. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/defensive-impossible-null.md +157 -0
  47. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/defensive-missing-real.md +157 -0
  48. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/naming-generic-placeholders.md +120 -0
  49. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/naming-over-descriptive.md +108 -0
  50. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/naming-suffix-abuse.md +167 -0
  51. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/naming-type-in-name.md +100 -0
  52. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/over-eng-dependency-creep.md +114 -0
  53. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/over-eng-premature-interface.md +136 -0
  54. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/over-eng-single-method-class.md +161 -0
  55. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/over-eng-useless-wrapper.md +140 -0
  56. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/style-as-any-escape.md +127 -0
  57. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/style-debug-artifacts.md +144 -0
  58. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/style-hyper-consistent.md +84 -0
  59. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/style-no-hack-scars.md +113 -0
  60. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/style-trivial-boilerplate.md +191 -0
  61. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/test-doesnt-throw.md +132 -0
  62. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/test-mirror-implementation.md +125 -0
  63. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/test-mock-everything.md +148 -0
  64. package/build/Assets/Blueprints/skills/int-code-slop-review/rules/test-snapshot-abuse.md +131 -0
  65. package/build/Assets/Blueprints/skills/int-codebase-design/SKILL.md +116 -0
  66. package/build/Assets/Blueprints/skills/int-codebase-design/references/DEEPENING.md +37 -0
  67. package/build/Assets/Blueprints/skills/int-codebase-design/references/DESIGN-IT-TWICE.md +44 -0
  68. package/build/Assets/Blueprints/skills/int-domain-modeling/SKILL.md +78 -0
  69. package/build/Assets/Blueprints/skills/int-domain-modeling/references/ADR-FORMAT.md +47 -0
  70. package/build/Assets/Blueprints/skills/int-domain-modeling/references/GLOSSARY-FORMAT.md +60 -0
  71. package/build/Assets/Blueprints/skills/int-prototype/LOGIC.md +67 -0
  72. package/build/Assets/Blueprints/skills/int-prototype/SKILL.md +30 -0
  73. package/build/Assets/Blueprints/skills/int-prototype/UI.md +112 -0
  74. package/build/Assets/Blueprints/skills/int-retrospective/SKILL.md +88 -0
  75. package/build/Assets/Blueprints/skills/int-retrospective/assets/retrospective-prompt.md +38 -0
  76. package/build/Assets/Blueprints/skills/int-retrospective/references/assessment.md +56 -0
  77. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/SKILL.md +64 -0
  78. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/assets/implementer-prompt.md +40 -0
  79. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/assets/reviewer-prompt.md +43 -0
  80. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/references/aggregate-review.md +7 -0
  81. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/references/corrective-rounds.md +72 -0
  82. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/references/example-workflow.md +25 -0
  83. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/references/full-spec.md +72 -0
  84. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/references/implementer-corrections.md +9 -0
  85. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/references/review-inputs.md +26 -0
  86. package/build/Assets/Blueprints/skills/int-subagent-driven-dev/references/verification-evidence.md +7 -0
  87. package/build/Assets/Blueprints/skills/int-test-driven-development/SKILL.md +51 -0
  88. package/build/Assets/Blueprints/skills/int-test-driven-development/references/mocking.md +31 -0
  89. package/build/Assets/Blueprints/skills/int-test-driven-development/references/tests.md +68 -0
  90. package/build/Assets/Blueprints/skills/int-testing-agent-guidance/SKILL.md +53 -0
  91. package/build/Assets/Blueprints/skills/int-verification-before-completion/SKILL.md +25 -0
  92. package/build/Assets/Blueprints/skills/int-writing-agents/SKILL.md +66 -0
  93. package/build/Assets/Blueprints/skills/int-writing-for-agents/SKILL.md +86 -0
  94. package/build/Assets/Blueprints/skills/int-writing-instruction/SKILL.md +57 -0
  95. package/build/Assets/Blueprints/skills/int-writing-skills/SKILL.md +129 -0
  96. package/build/Assets/Blueprints/skills/int-writing-skills/assets/interactive.md +83 -0
  97. package/build/Assets/Blueprints/skills/int-writing-skills/assets/reference.md +32 -0
  98. package/build/Assets/Blueprints/skills/int-writing-skills/references/arguments.md +50 -0
  99. package/build/Assets/Blueprints/skills/int-writing-skills/references/interactive-skills.md +53 -0
  100. package/build/Assets/Blueprints/skills/int-writing-skills/references/persuasion-principles.md +220 -0
  101. package/build/Assets/Blueprints/skills/int-writing-skills/references/reference-skills.md +20 -0
  102. package/build/Assets/Blueprints/skills/int-writing-skills/references/testing-skills.md +48 -0
  103. package/build/Assets/Blueprints/skills/retrospective/SKILL.md +16 -0
  104. package/build/Assets/Blueprints/skills/setup-project/SKILL.md +66 -0
  105. package/build/Assets/Blueprints/skills/to-spec/SKILL.md +53 -0
  106. package/build/Assets/Blueprints/skills/to-tickets/SKILL.md +49 -0
  107. package/build/Assets/Blueprints/skills/update-tooling/SKILL.md +86 -0
  108. package/build/Assets/Templates/Catalog.js +12 -0
  109. package/build/Assets/Templates/Catalog.ts +17 -0
  110. package/build/Assets/Templates/project/copilot-instructions.md +17 -0
  111. package/build/Assets/Templates/project/domain.md +51 -0
  112. package/build/Assets/Templates/project/ticket-tracker.md +33 -0
  113. package/build/Assets/Templates/sdd/design.md +25 -0
  114. package/build/Assets/Templates/sdd/spec.md +29 -0
  115. package/build/Assets/Templates/sdd/ticket.md +15 -0
  116. package/build/BlueprintManagement/BlueprintManagementServiceProvider.js +15 -0
  117. package/build/BlueprintManagement/Catalog/BlueprintCatalog.js +238 -0
  118. package/build/BlueprintManagement/Commands/BlueprintCommandOptions.js +9 -0
  119. package/build/BlueprintManagement/Commands/ConflictPolicy.js +6 -0
  120. package/build/BlueprintManagement/Commands/InitCommand.js +117 -0
  121. package/build/BlueprintManagement/Commands/Prompts.js +66 -0
  122. package/build/BlueprintManagement/Commands/UpdateCommand.js +86 -0
  123. package/build/BlueprintManagement/Handlers/Agents/AgentHandler.js +21 -0
  124. package/build/BlueprintManagement/Handlers/BlueprintHandlers.js +4 -0
  125. package/build/BlueprintManagement/Handlers/Instructions/InstructionHandler.js +21 -0
  126. package/build/BlueprintManagement/Handlers/Skills/SkillHandler.js +10 -0
  127. package/build/BlueprintManagement/Reconciliation/BlueprintCatalogPlanner.js +87 -0
  128. package/build/BlueprintManagement/Reconciliation/BlueprintRemovalCoordinator.js +78 -0
  129. package/build/BlueprintManagement/Services/BlueprintReconciliationService.js +391 -0
  130. package/build/BlueprintManagement/Services/InstallationService.js +54 -0
  131. package/build/BlueprintManagement/Support/BlueprintFiles.js +113 -0
  132. package/build/BlueprintManagement/Types/Blueprint.js +1 -0
  133. package/build/BlueprintManagement/Types/Installation.js +1 -0
  134. package/build/BlueprintManagement/Types/Reconciliation.js +1 -0
  135. package/build/BlueprintManagement/Versioning/BlueprintVersion.js +70 -0
  136. package/build/BlueprintManagement/Versioning/BlueprintVersioning.js +55 -0
  137. package/build/Commands/Command.js +3 -0
  138. package/build/Commands/CommandOptions.js +12 -0
  139. package/build/Config/Config.js +3 -0
  140. package/build/Foundation/Application.js +112 -0
  141. package/build/Foundation/ApplicationBuilder.js +23 -0
  142. package/build/Foundation/Bootstrap/Bootstrapper.js +2 -0
  143. package/build/Foundation/Bootstrap/DiscoverGitRoot.js +8 -0
  144. package/build/Foundation/Bootstrap/LoadConsoleArgs.js +47 -0
  145. package/build/Foundation/Bootstrap/LoadProjectConfiguration.js +144 -0
  146. package/build/Foundation/Bootstrap/RegisterProviders.js +12 -0
  147. package/build/Foundation/Bootstrap/RequireProjectConfiguration.js +14 -0
  148. package/build/Foundation/ConsoleInvocation.js +1 -0
  149. package/build/Foundation/Container.js +185 -0
  150. package/build/Foundation/FoundationServiceProvider.js +5 -0
  151. package/build/Foundation/Kernel.js +30 -0
  152. package/build/Foundation/Service.js +23 -0
  153. package/build/Foundation/ServiceProvider.js +12 -0
  154. package/build/Git/GitServiceProvider.js +8 -0
  155. package/build/Git/Services/GitService.js +26 -0
  156. package/build/Project/ProjectServiceProvider.js +8 -0
  157. package/build/Project/Services/ProjectService.js +124 -0
  158. package/build/SubagentDrivenDevelopment/Commands/ChecksRecordCommand.js +35 -0
  159. package/build/SubagentDrivenDevelopment/Commands/ChecksRequireCommand.js +33 -0
  160. package/build/SubagentDrivenDevelopment/Commands/ClaimCommand.js +23 -0
  161. package/build/SubagentDrivenDevelopment/Commands/CorrectCommand.js +37 -0
  162. package/build/SubagentDrivenDevelopment/Commands/CreateCommand.js +26 -0
  163. package/build/SubagentDrivenDevelopment/Commands/FindingCreateCommand.js +39 -0
  164. package/build/SubagentDrivenDevelopment/Commands/FindingUpdateCommand.js +36 -0
  165. package/build/SubagentDrivenDevelopment/Commands/FinishCommand.js +23 -0
  166. package/build/SubagentDrivenDevelopment/Commands/ImplementCommand.js +23 -0
  167. package/build/SubagentDrivenDevelopment/Commands/NextCommand.js +21 -0
  168. package/build/SubagentDrivenDevelopment/Commands/ReadyCommand.js +21 -0
  169. package/build/SubagentDrivenDevelopment/Commands/RequirementsDecideCommand.js +33 -0
  170. package/build/SubagentDrivenDevelopment/Commands/ResumeCommand.js +31 -0
  171. package/build/SubagentDrivenDevelopment/Commands/ReviewCommand.js +55 -0
  172. package/build/SubagentDrivenDevelopment/Commands/ReviewRequireCommand.js +12 -0
  173. package/build/SubagentDrivenDevelopment/Commands/StatusCommand.js +21 -0
  174. package/build/SubagentDrivenDevelopment/Commands/SubmitCommand.js +59 -0
  175. package/build/SubagentDrivenDevelopment/Commands/TicketCommentCommand.js +24 -0
  176. package/build/SubagentDrivenDevelopment/Commands/TicketCreateCommand.js +25 -0
  177. package/build/SubagentDrivenDevelopment/Commands/TicketUpdateCommand.js +31 -0
  178. package/build/SubagentDrivenDevelopment/Commands/groups.js +36 -0
  179. package/build/SubagentDrivenDevelopment/Evidence/GitEvidence.js +449 -0
  180. package/build/SubagentDrivenDevelopment/Evidence/ReportEvidence.js +80 -0
  181. package/build/SubagentDrivenDevelopment/Models/Assignments.js +1 -0
  182. package/build/SubagentDrivenDevelopment/Models/Evidence.js +1 -0
  183. package/build/SubagentDrivenDevelopment/Models/Findings.js +1 -0
  184. package/build/SubagentDrivenDevelopment/Models/Options.js +1 -0
  185. package/build/SubagentDrivenDevelopment/Models/Workflow.js +16 -0
  186. package/build/SubagentDrivenDevelopment/Persistence/AssignmentSchema.js +155 -0
  187. package/build/SubagentDrivenDevelopment/Persistence/CheckSchema.js +71 -0
  188. package/build/SubagentDrivenDevelopment/Persistence/FeatureWorkspace.js +76 -0
  189. package/build/SubagentDrivenDevelopment/Persistence/FileSystem.js +28 -0
  190. package/build/SubagentDrivenDevelopment/Persistence/FindingSchema.js +81 -0
  191. package/build/SubagentDrivenDevelopment/Persistence/LedgerRepository.js +322 -0
  192. package/build/SubagentDrivenDevelopment/Persistence/PathSafety.js +62 -0
  193. package/build/SubagentDrivenDevelopment/Persistence/ProgressSchema.js +95 -0
  194. package/build/SubagentDrivenDevelopment/Persistence/ReadinessReader.js +40 -0
  195. package/build/SubagentDrivenDevelopment/Persistence/ReviewSchema.js +68 -0
  196. package/build/SubagentDrivenDevelopment/Persistence/TicketRepository.js +147 -0
  197. package/build/SubagentDrivenDevelopment/Persistence/WorkspaceTransaction.js +282 -0
  198. package/build/SubagentDrivenDevelopment/Policies/AcceptancePolicy.js +100 -0
  199. package/build/SubagentDrivenDevelopment/Policies/AssignmentPolicy.js +36 -0
  200. package/build/SubagentDrivenDevelopment/Policies/CheckPolicy.js +93 -0
  201. package/build/SubagentDrivenDevelopment/Policies/FindingPolicy.js +53 -0
  202. package/build/SubagentDrivenDevelopment/Policies/InputValidation.js +36 -0
  203. package/build/SubagentDrivenDevelopment/Policies/ReadinessPolicy.js +26 -0
  204. package/build/SubagentDrivenDevelopment/Policies/RequiredReviewers.js +12 -0
  205. package/build/SubagentDrivenDevelopment/Policies/ReviewPolicy.js +87 -0
  206. package/build/SubagentDrivenDevelopment/Policies/WorkflowPolicy.js +85 -0
  207. package/build/SubagentDrivenDevelopment/Services/AssignmentService.js +269 -0
  208. package/build/SubagentDrivenDevelopment/Services/ChecksService.js +319 -0
  209. package/build/SubagentDrivenDevelopment/Services/CorrectionService.js +273 -0
  210. package/build/SubagentDrivenDevelopment/Services/DeliveryCorrectionService.js +253 -0
  211. package/build/SubagentDrivenDevelopment/Services/DeliveryFindingService.js +302 -0
  212. package/build/SubagentDrivenDevelopment/Services/DeliveryService.js +160 -0
  213. package/build/SubagentDrivenDevelopment/Services/DeliverySubmissionService.js +273 -0
  214. package/build/SubagentDrivenDevelopment/Services/FeatureCreationService.js +138 -0
  215. package/build/SubagentDrivenDevelopment/Services/FeatureInspectionService.js +399 -0
  216. package/build/SubagentDrivenDevelopment/Services/FindingService.js +392 -0
  217. package/build/SubagentDrivenDevelopment/Services/IntegrationService.js +258 -0
  218. package/build/SubagentDrivenDevelopment/Services/ReadinessService.js +21 -0
  219. package/build/SubagentDrivenDevelopment/Services/RequirementsService.js +216 -0
  220. package/build/SubagentDrivenDevelopment/Services/ReviewService.js +471 -0
  221. package/build/SubagentDrivenDevelopment/Services/SubmissionService.js +299 -0
  222. package/build/SubagentDrivenDevelopment/Services/TicketService.js +186 -0
  223. package/build/SubagentDrivenDevelopment/SubagentDrivenDevelopmentServiceProvider.js +113 -0
  224. package/build/Support/Records.js +5 -0
  225. package/build/Support/Repository.js +139 -0
  226. package/build/Support/Stacks.js +10 -0
  227. package/build/TemplateRendering/Computed/ComputedContextService.js +13 -0
  228. package/build/TemplateRendering/Computed/ComputedVariableProvider.js +6 -0
  229. package/build/TemplateRendering/Computed/ComputedVariableProviders.js +6 -0
  230. package/build/TemplateRendering/Computed/Providers/InternalSkillDescriptionProvider.js +6 -0
  231. package/build/TemplateRendering/Computed/Providers/SpindlePackageManagerProvider.js +11 -0
  232. package/build/TemplateRendering/Computed/ResolveRenderContext.js +18 -0
  233. package/build/TemplateRendering/Rendering/RenderText.js +43 -0
  234. package/build/TemplateRendering/TemplateRenderingServiceProvider.js +8 -0
  235. package/build/Tooling/Commands/ToolingAddCommand.js +29 -0
  236. package/build/Tooling/Commands/ToolingListCommand.js +19 -0
  237. package/build/Tooling/Commands/ToolingRemoveCommand.js +19 -0
  238. package/build/Tooling/Commands/ToolingUpdateCommand.js +30 -0
  239. package/build/Tooling/Commands/groups.js +4 -0
  240. package/build/Tooling/Models/ToolingEntry.js +1 -0
  241. package/build/Tooling/Services/ToolingService.js +278 -0
  242. package/build/Tooling/ToolingServiceProvider.js +15 -0
  243. package/build/cli.js +36 -0
  244. package/build/index.js +31 -0
  245. package/package.json +54 -3
@@ -0,0 +1,55 @@
1
+ import { Command } from "../../Commands/Command.js";
2
+ import { reviewSchema } from "./groups.js";
3
+ import { ReviewRequireCommand } from "./ReviewRequireCommand.js";
4
+ import { ReviewService } from "../Services/ReviewService.js";
5
+ export class ReviewCommand extends Command {
6
+ static register(root, createApp) {
7
+ reviewSchema(root).action(async (action, options) => {
8
+ if (action === "require") {
9
+ if (options.type && options.agent && options.type !== options.agent) {
10
+ throw new Error("--type and --agent must identify the same review agent.");
11
+ }
12
+ const reviewType = options.type ?? options.agent;
13
+ if (options.scope !== "delivery") {
14
+ throw new Error("Feature review requirements need --scope delivery.");
15
+ }
16
+ if (!options.spec || !reviewType || !options.details || !options.author) {
17
+ throw new Error("review require needs --spec, --scope delivery, --type, --details, and --author.");
18
+ }
19
+ if (options.inventory)
20
+ throw new Error("--inventory is not valid with 'review require'.");
21
+ const command = await (await createApp()).make(ReviewRequireCommand);
22
+ console.log(JSON.stringify(await command.run({
23
+ ...options,
24
+ spec: options.spec,
25
+ type: reviewType,
26
+ details: options.details,
27
+ author: options.author,
28
+ }), null, 2));
29
+ return;
30
+ }
31
+ if (action !== undefined)
32
+ throw new Error(`Unknown review action: ${action}.`);
33
+ if (options.type || options.agent || options.details) {
34
+ throw new Error("--type, --agent, and --details are only valid with 'review require'.");
35
+ }
36
+ if (!options.spec ||
37
+ options.scope !== "delivery" ||
38
+ !options.inventory ||
39
+ !options.author) {
40
+ throw new Error("Feature review requires --spec, --scope delivery, --inventory, and --author.");
41
+ }
42
+ const command = await (await createApp()).make(ReviewCommand);
43
+ console.log(JSON.stringify(await command.run({
44
+ ...options,
45
+ spec: options.spec,
46
+ inventory: options.inventory,
47
+ author: options.author,
48
+ }), null, 2));
49
+ });
50
+ }
51
+ async run(options) {
52
+ this.assertApplicationBooted();
53
+ return (await this.app.make(ReviewService)).review(options);
54
+ }
55
+ }
@@ -0,0 +1,12 @@
1
+ import { Command } from "../../Commands/Command.js";
2
+ import { reviewSchema } from "./groups.js";
3
+ import { ReviewService } from "../Services/ReviewService.js";
4
+ export class ReviewRequireCommand extends Command {
5
+ static register(root, _createApp) {
6
+ reviewSchema(root);
7
+ }
8
+ async run(options) {
9
+ this.assertApplicationBooted();
10
+ return (await this.app.make(ReviewService)).reviewRequire(options);
11
+ }
12
+ }
@@ -0,0 +1,21 @@
1
+ import { Command } from "../../Commands/Command.js";
2
+ import { CommandOptions } from "../../Commands/CommandOptions.js";
3
+ import { group } from "./groups.js";
4
+ import { FeatureInspectionService } from "../Services/FeatureInspectionService.js";
5
+ export class StatusCommand extends Command {
6
+ static register(root, createApp) {
7
+ group(root)
8
+ .command("status")
9
+ .description("Inspect state, permitted actions, assignments, and blockers.")
10
+ .requiredOption("--spec <path>", "Feature spec path", CommandOptions.once("--spec"))
11
+ .allowExcessArguments(false)
12
+ .action(async (options) => {
13
+ const command = await (await createApp()).make(StatusCommand);
14
+ console.log(JSON.stringify(await command.run(options), null, 2));
15
+ });
16
+ }
17
+ async run(options) {
18
+ this.assertApplicationBooted();
19
+ return (await this.app.make(FeatureInspectionService)).status(options);
20
+ }
21
+ }
@@ -0,0 +1,59 @@
1
+ import { Command } from "../../Commands/Command.js";
2
+ import { CommandOptions } from "../../Commands/CommandOptions.js";
3
+ import { group } from "./groups.js";
4
+ import { SubmissionService } from "../Services/SubmissionService.js";
5
+ export class SubmitCommand extends Command {
6
+ static register(root, createApp) {
7
+ let findingsDeclared = false;
8
+ let noFindingsDeclared = false;
9
+ const submitCommand = group(root)
10
+ .command("submit")
11
+ .description("Register an implementation or review report.")
12
+ .requiredOption("--spec <path>", "Feature spec path", CommandOptions.once("--spec"))
13
+ .option("--ticket <id>", "Ticket ID", CommandOptions.once("--ticket"))
14
+ .option("--scope <scope>", "Workflow scope: delivery")
15
+ .requiredOption("--role <role>", "Assignment role")
16
+ .option("--assignment <id>", "Exact review assignment ID", CommandOptions.once("--assignment"))
17
+ .option("--report <path>", "Implementation report path", CommandOptions.once("--report"))
18
+ .option("--result <result>", "Review result: passed, failed, unavailable", CommandOptions.once("--result"))
19
+ .option("--findings <ids...>", "Complete canonical finding ID list for this report")
20
+ .option("--no-findings", "Explicitly attest that the review report has no findings")
21
+ .option("--unavailable", "Record that the assigned report is unavailable")
22
+ .option("--details <details>", "Required details for failed or unavailable results", CommandOptions.once("--details"))
23
+ .requiredOption("--author <author>", "Controller author", CommandOptions.once("--author"))
24
+ .allowExcessArguments(false);
25
+ submitCommand.on("option:findings", () => {
26
+ findingsDeclared = true;
27
+ });
28
+ submitCommand.on("option:no-findings", () => {
29
+ noFindingsDeclared = true;
30
+ });
31
+ submitCommand.action(async (options) => {
32
+ const command = await (await createApp()).make(SubmitCommand);
33
+ if (options.scope !== undefined && options.scope !== "delivery") {
34
+ throw new Error("--scope must be 'delivery'.");
35
+ }
36
+ if (Boolean(options.ticket) === (options.scope === "delivery")) {
37
+ throw new Error("submit needs exactly one of --ticket or --scope delivery.");
38
+ }
39
+ if (findingsDeclared && noFindingsDeclared) {
40
+ throw new Error("--findings and --no-findings cannot be combined.");
41
+ }
42
+ const { findings, ...submission } = options;
43
+ console.log(JSON.stringify(await command.run({
44
+ ...submission,
45
+ ...(options.role === "review"
46
+ ? findings === false
47
+ ? { noFindings: true }
48
+ : Array.isArray(findings)
49
+ ? { findingIds: findings }
50
+ : {}
51
+ : {}),
52
+ }), null, 2));
53
+ });
54
+ }
55
+ async run(options) {
56
+ this.assertApplicationBooted();
57
+ return (await this.app.make(SubmissionService)).submit(options);
58
+ }
59
+ }
@@ -0,0 +1,24 @@
1
+ import { Command } from "../../Commands/Command.js";
2
+ import { CommandOptions } from "../../Commands/CommandOptions.js";
3
+ import { group } from "./groups.js";
4
+ import { TicketService } from "../Services/TicketService.js";
5
+ export class TicketCommentCommand extends Command {
6
+ static register(root, createApp) {
7
+ group(root, "ticket")
8
+ .command("comment")
9
+ .description("Append an attributed ticket comment.")
10
+ .requiredOption("--spec <path>", "Feature spec path", CommandOptions.once("--spec"))
11
+ .requiredOption("--ticket <id>", "Ticket ID", CommandOptions.once("--ticket"))
12
+ .requiredOption("--details <details>", "Comment text", CommandOptions.once("--details"))
13
+ .requiredOption("--author <author>", "Acting author", CommandOptions.once("--author"))
14
+ .allowExcessArguments(false)
15
+ .action(async (options) => {
16
+ const command = await (await createApp()).make(TicketCommentCommand);
17
+ console.log(JSON.stringify(await command.run(options), null, 2));
18
+ });
19
+ }
20
+ async run(options) {
21
+ this.assertApplicationBooted();
22
+ return (await this.app.make(TicketService)).ticketComment(options);
23
+ }
24
+ }
@@ -0,0 +1,25 @@
1
+ import { Command } from "../../Commands/Command.js";
2
+ import { CommandOptions } from "../../Commands/CommandOptions.js";
3
+ import { group } from "./groups.js";
4
+ import { TicketService } from "../Services/TicketService.js";
5
+ export class TicketCreateCommand extends Command {
6
+ static register(root, createApp) {
7
+ group(root, "ticket")
8
+ .command("create")
9
+ .description("Create an attributed ticket in the selected feature.")
10
+ .requiredOption("--spec <path>", "Feature spec path", CommandOptions.once("--spec"))
11
+ .requiredOption("--title <title>", "Ticket title", CommandOptions.once("--title"))
12
+ .requiredOption("--reporter <reporter>", "Ticket reporter", CommandOptions.once("--reporter"))
13
+ .requiredOption("--category <category>", "Ticket category", CommandOptions.once("--category"))
14
+ .requiredOption("--author <author>", "Acting author", CommandOptions.once("--author"))
15
+ .allowExcessArguments(false)
16
+ .action(async (options) => {
17
+ const command = await (await createApp()).make(TicketCreateCommand);
18
+ console.log(JSON.stringify(await command.run(options), null, 2));
19
+ });
20
+ }
21
+ async run(options) {
22
+ this.assertApplicationBooted();
23
+ return (await this.app.make(TicketService)).ticketCreate(options);
24
+ }
25
+ }
@@ -0,0 +1,31 @@
1
+ import { Command } from "../../Commands/Command.js";
2
+ import { CommandOptions } from "../../Commands/CommandOptions.js";
3
+ import { group } from "./groups.js";
4
+ import { TicketService } from "../Services/TicketService.js";
5
+ export class TicketUpdateCommand extends Command {
6
+ static register(root, createApp) {
7
+ group(root, "ticket")
8
+ .command("update")
9
+ .description("Update ticket fields, status, blocker, or dependencies.")
10
+ .requiredOption("--spec <path>", "Feature spec path", CommandOptions.once("--spec"))
11
+ .requiredOption("--ticket <id>", "Ticket ID", CommandOptions.once("--ticket"))
12
+ .option("--title <title>", "Updated ticket title", CommandOptions.once("--title"))
13
+ .option("--reporter <reporter>", "Updated ticket reporter", CommandOptions.once("--reporter"))
14
+ .option("--category <category>", "Ticket category: bug or enhancement")
15
+ .option("--status <status>", "Ticket status: open, in-progress, or closed")
16
+ .option("--blocker <reason>", "Explicit reason the ticket cannot proceed")
17
+ .option("--clear-blocker", "Remove the explicit ticket blocker")
18
+ .option("--blocked-by <tickets...>", "Authoritative dependency ticket IDs")
19
+ .option("--clear-blocked-by", "Remove all ticket dependencies")
20
+ .requiredOption("--author <author>", "Acting author", CommandOptions.once("--author"))
21
+ .allowExcessArguments(false)
22
+ .action(async (options) => {
23
+ const command = await (await createApp()).make(TicketUpdateCommand);
24
+ console.log(JSON.stringify(await command.run(options), null, 2));
25
+ });
26
+ }
27
+ async run(options) {
28
+ this.assertApplicationBooted();
29
+ return (await this.app.make(TicketService)).ticketUpdate(options);
30
+ }
31
+ }
@@ -0,0 +1,36 @@
1
+ import { CommandOptions } from "../../Commands/CommandOptions.js";
2
+ const descriptions = {
3
+ ticket: "Create and maintain feature tickets.",
4
+ finding: "Register canonical review findings and explicit rulings.",
5
+ requirements: "Record explicit requirements decisions before fresh review.",
6
+ checks: "Declare and record required checks.",
7
+ };
8
+ export function group(root, name) {
9
+ const program = root.commands.find((command) => command.name() === "sdd") ??
10
+ root
11
+ .command("sdd")
12
+ .description("Subagent-driven development workflow")
13
+ .allowExcessArguments(false);
14
+ if (!name)
15
+ return program;
16
+ return (program.commands.find((command) => command.name() === name) ??
17
+ program.command(name).description(descriptions[name]));
18
+ }
19
+ export function reviewSchema(root) {
20
+ const program = group(root);
21
+ const existing = program.commands.find((command) => command.name() === "review");
22
+ if (existing)
23
+ return existing;
24
+ return program
25
+ .command("review")
26
+ .description("Require a specialist or freeze the feature inventory for review.")
27
+ .argument("[action]", "Use 'require' to pin a justified specialist reviewer")
28
+ .option("--spec <path>", "Feature spec path", CommandOptions.once("--spec"))
29
+ .option("--scope <scope>", "Workflow scope: delivery")
30
+ .option("--inventory <json>", "Controller-confirmed Git-derived inventory as a JSON string array", CommandOptions.once("--inventory"))
31
+ .option("--author <author>", "Controller author", CommandOptions.once("--author"))
32
+ .option("--type <name>", "Review-eligible Blueprint agent key to require", CommandOptions.once("--type"))
33
+ .option("--agent <name>", "Alias for --type", CommandOptions.once("--agent"))
34
+ .option("--details <text>", "Justified specialist review objective", CommandOptions.once("--details"))
35
+ .allowExcessArguments(false);
36
+ }