@slope-dev/slope 1.59.2 → 1.61.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 (207) hide show
  1. package/README.md +6 -0
  2. package/dist/cli/actor.d.ts +18 -0
  3. package/dist/cli/actor.d.ts.map +1 -0
  4. package/dist/cli/actor.js +133 -0
  5. package/dist/cli/actor.js.map +1 -0
  6. package/dist/cli/commands/agent.d.ts.map +1 -1
  7. package/dist/cli/commands/agent.js +10 -8
  8. package/dist/cli/commands/agent.js.map +1 -1
  9. package/dist/cli/commands/briefing.d.ts.map +1 -1
  10. package/dist/cli/commands/briefing.js +12 -1
  11. package/dist/cli/commands/briefing.js.map +1 -1
  12. package/dist/cli/commands/claim.d.ts.map +1 -1
  13. package/dist/cli/commands/claim.js +10 -6
  14. package/dist/cli/commands/claim.js.map +1 -1
  15. package/dist/cli/commands/commit-ready.d.ts.map +1 -1
  16. package/dist/cli/commands/commit-ready.js +4 -2
  17. package/dist/cli/commands/commit-ready.js.map +1 -1
  18. package/dist/cli/commands/init.d.ts.map +1 -1
  19. package/dist/cli/commands/init.js +6 -0
  20. package/dist/cli/commands/init.js.map +1 -1
  21. package/dist/cli/commands/interview.d.ts.map +1 -1
  22. package/dist/cli/commands/interview.js +5 -0
  23. package/dist/cli/commands/interview.js.map +1 -1
  24. package/dist/cli/commands/next.d.ts +1 -1
  25. package/dist/cli/commands/next.d.ts.map +1 -1
  26. package/dist/cli/commands/next.js +31 -2
  27. package/dist/cli/commands/next.js.map +1 -1
  28. package/dist/cli/commands/now.d.ts +3 -0
  29. package/dist/cli/commands/now.d.ts.map +1 -1
  30. package/dist/cli/commands/now.js +14 -2
  31. package/dist/cli/commands/now.js.map +1 -1
  32. package/dist/cli/commands/release.d.ts.map +1 -1
  33. package/dist/cli/commands/release.js +7 -3
  34. package/dist/cli/commands/release.js.map +1 -1
  35. package/dist/cli/commands/retro.d.ts.map +1 -1
  36. package/dist/cli/commands/retro.js +27 -6
  37. package/dist/cli/commands/retro.js.map +1 -1
  38. package/dist/cli/commands/review-run.d.ts +2 -0
  39. package/dist/cli/commands/review-run.d.ts.map +1 -1
  40. package/dist/cli/commands/review-run.js +38 -8
  41. package/dist/cli/commands/review-run.js.map +1 -1
  42. package/dist/cli/commands/review-state.d.ts +2 -5
  43. package/dist/cli/commands/review-state.d.ts.map +1 -1
  44. package/dist/cli/commands/review-state.js +211 -47
  45. package/dist/cli/commands/review-state.js.map +1 -1
  46. package/dist/cli/commands/review.d.ts +9 -1
  47. package/dist/cli/commands/review.d.ts.map +1 -1
  48. package/dist/cli/commands/review.js +67 -39
  49. package/dist/cli/commands/review.js.map +1 -1
  50. package/dist/cli/commands/roadmap.d.ts.map +1 -1
  51. package/dist/cli/commands/roadmap.js +291 -9
  52. package/dist/cli/commands/roadmap.js.map +1 -1
  53. package/dist/cli/commands/sprint.d.ts.map +1 -1
  54. package/dist/cli/commands/sprint.js +594 -68
  55. package/dist/cli/commands/sprint.js.map +1 -1
  56. package/dist/cli/commands/start.d.ts.map +1 -1
  57. package/dist/cli/commands/start.js +20 -4
  58. package/dist/cli/commands/start.js.map +1 -1
  59. package/dist/cli/commands/ticket.d.ts.map +1 -1
  60. package/dist/cli/commands/ticket.js +31 -9
  61. package/dist/cli/commands/ticket.js.map +1 -1
  62. package/dist/cli/commands/version.d.ts +12 -0
  63. package/dist/cli/commands/version.d.ts.map +1 -1
  64. package/dist/cli/commands/version.js +169 -4
  65. package/dist/cli/commands/version.js.map +1 -1
  66. package/dist/cli/git-preflight.d.ts +9 -0
  67. package/dist/cli/git-preflight.d.ts.map +1 -0
  68. package/dist/cli/git-preflight.js +36 -0
  69. package/dist/cli/git-preflight.js.map +1 -0
  70. package/dist/cli/guards/claim-required.d.ts.map +1 -1
  71. package/dist/cli/guards/claim-required.js +19 -4
  72. package/dist/cli/guards/claim-required.js.map +1 -1
  73. package/dist/cli/guards/next-action.js +1 -1
  74. package/dist/cli/guards/next-action.js.map +1 -1
  75. package/dist/cli/guards/phase-boundary.js +60 -10
  76. package/dist/cli/guards/phase-boundary.js.map +1 -1
  77. package/dist/cli/guards/post-push.d.ts.map +1 -1
  78. package/dist/cli/guards/post-push.js +8 -2
  79. package/dist/cli/guards/post-push.js.map +1 -1
  80. package/dist/cli/guards/pr-review.d.ts +6 -0
  81. package/dist/cli/guards/pr-review.d.ts.map +1 -1
  82. package/dist/cli/guards/pr-review.js +22 -11
  83. package/dist/cli/guards/pr-review.js.map +1 -1
  84. package/dist/cli/guards/review-tier.d.ts.map +1 -1
  85. package/dist/cli/guards/review-tier.js +2 -3
  86. package/dist/cli/guards/review-tier.js.map +1 -1
  87. package/dist/cli/guards/roadmap-edit-shipped.d.ts.map +1 -1
  88. package/dist/cli/guards/roadmap-edit-shipped.js +143 -7
  89. package/dist/cli/guards/roadmap-edit-shipped.js.map +1 -1
  90. package/dist/cli/guards/scope-drift.d.ts.map +1 -1
  91. package/dist/cli/guards/scope-drift.js +8 -2
  92. package/dist/cli/guards/scope-drift.js.map +1 -1
  93. package/dist/cli/guards/session-briefing.d.ts.map +1 -1
  94. package/dist/cli/guards/session-briefing.js +24 -2
  95. package/dist/cli/guards/session-briefing.js.map +1 -1
  96. package/dist/cli/guards/sprint-completion.d.ts.map +1 -1
  97. package/dist/cli/guards/sprint-completion.js +107 -18
  98. package/dist/cli/guards/sprint-completion.js.map +1 -1
  99. package/dist/cli/guards/workflow-step-gate.d.ts.map +1 -1
  100. package/dist/cli/guards/workflow-step-gate.js +25 -6
  101. package/dist/cli/guards/workflow-step-gate.js.map +1 -1
  102. package/dist/cli/index.js +4 -2
  103. package/dist/cli/index.js.map +1 -1
  104. package/dist/cli/registry.d.ts.map +1 -1
  105. package/dist/cli/registry.js +45 -3
  106. package/dist/cli/registry.js.map +1 -1
  107. package/dist/cli/reviewer-agents.d.ts +22 -0
  108. package/dist/cli/reviewer-agents.d.ts.map +1 -0
  109. package/dist/cli/reviewer-agents.js +141 -0
  110. package/dist/cli/reviewer-agents.js.map +1 -0
  111. package/dist/cli/roadmap-source-store.d.ts +37 -0
  112. package/dist/cli/roadmap-source-store.d.ts.map +1 -0
  113. package/dist/cli/roadmap-source-store.js +298 -0
  114. package/dist/cli/roadmap-source-store.js.map +1 -0
  115. package/dist/cli/sprint-inference.js +1 -1
  116. package/dist/cli/sprint-inference.js.map +1 -1
  117. package/dist/cli/sprint-rollover.d.ts +102 -0
  118. package/dist/cli/sprint-rollover.d.ts.map +1 -0
  119. package/dist/cli/sprint-rollover.js +558 -0
  120. package/dist/cli/sprint-rollover.js.map +1 -0
  121. package/dist/cli/sprint-state.d.ts +99 -2
  122. package/dist/cli/sprint-state.d.ts.map +1 -1
  123. package/dist/cli/sprint-state.js +349 -14
  124. package/dist/cli/sprint-state.js.map +1 -1
  125. package/dist/cli/template-generator.d.ts.map +1 -1
  126. package/dist/cli/template-generator.js +45 -32
  127. package/dist/cli/template-generator.js.map +1 -1
  128. package/dist/cli/workflow-resync.d.ts +2 -0
  129. package/dist/cli/workflow-resync.d.ts.map +1 -1
  130. package/dist/cli/workflow-resync.js +34 -12
  131. package/dist/cli/workflow-resync.js.map +1 -1
  132. package/dist/core/analyzers/git.d.ts.map +1 -1
  133. package/dist/core/analyzers/git.js +95 -5
  134. package/dist/core/analyzers/git.js.map +1 -1
  135. package/dist/core/briefing.d.ts.map +1 -1
  136. package/dist/core/briefing.js +254 -14
  137. package/dist/core/briefing.js.map +1 -1
  138. package/dist/core/builder.d.ts +16 -2
  139. package/dist/core/builder.d.ts.map +1 -1
  140. package/dist/core/builder.js +82 -5
  141. package/dist/core/builder.js.map +1 -1
  142. package/dist/core/constants.d.ts.map +1 -1
  143. package/dist/core/constants.js +1 -0
  144. package/dist/core/constants.js.map +1 -1
  145. package/dist/core/findings.d.ts +20 -0
  146. package/dist/core/findings.d.ts.map +1 -0
  147. package/dist/core/findings.js +85 -0
  148. package/dist/core/findings.js.map +1 -0
  149. package/dist/core/generators/first-sprint.js +1 -1
  150. package/dist/core/generators/first-sprint.js.map +1 -1
  151. package/dist/core/generators/roadmap.js +3 -3
  152. package/dist/core/generators/roadmap.js.map +1 -1
  153. package/dist/core/index.d.ts +10 -4
  154. package/dist/core/index.d.ts.map +1 -1
  155. package/dist/core/index.js +5 -1
  156. package/dist/core/index.js.map +1 -1
  157. package/dist/core/interview-engine.d.ts.map +1 -1
  158. package/dist/core/interview-engine.js +5 -4
  159. package/dist/core/interview-engine.js.map +1 -1
  160. package/dist/core/interview-metaphor.d.ts +5 -0
  161. package/dist/core/interview-metaphor.d.ts.map +1 -0
  162. package/dist/core/interview-metaphor.js +20 -0
  163. package/dist/core/interview-metaphor.js.map +1 -0
  164. package/dist/core/interview-steps.d.ts.map +1 -1
  165. package/dist/core/interview-steps.js +3 -6
  166. package/dist/core/interview-steps.js.map +1 -1
  167. package/dist/core/interview.d.ts.map +1 -1
  168. package/dist/core/interview.js +5 -6
  169. package/dist/core/interview.js.map +1 -1
  170. package/dist/core/roadmap-focus.d.ts +101 -0
  171. package/dist/core/roadmap-focus.d.ts.map +1 -0
  172. package/dist/core/roadmap-focus.js +293 -0
  173. package/dist/core/roadmap-focus.js.map +1 -0
  174. package/dist/core/roadmap-sources.d.ts +52 -0
  175. package/dist/core/roadmap-sources.d.ts.map +1 -0
  176. package/dist/core/roadmap-sources.js +483 -0
  177. package/dist/core/roadmap-sources.js.map +1 -0
  178. package/dist/core/roadmap.d.ts +25 -1
  179. package/dist/core/roadmap.d.ts.map +1 -1
  180. package/dist/core/roadmap.js +62 -45
  181. package/dist/core/roadmap.js.map +1 -1
  182. package/dist/core/types.d.ts +11 -1
  183. package/dist/core/types.d.ts.map +1 -1
  184. package/dist/core/workflow-engine.d.ts.map +1 -1
  185. package/dist/core/workflow-engine.js +17 -2
  186. package/dist/core/workflow-engine.js.map +1 -1
  187. package/dist/mcp/registry.d.ts +1 -1
  188. package/dist/mcp/registry.d.ts.map +1 -1
  189. package/dist/mcp/registry.js +5 -4
  190. package/dist/mcp/registry.js.map +1 -1
  191. package/dist/store/index.d.ts +13 -0
  192. package/dist/store/index.d.ts.map +1 -1
  193. package/dist/store/index.js +60 -7
  194. package/dist/store/index.js.map +1 -1
  195. package/package.json +1 -1
  196. package/src/core/workflows/sprint-standard.yaml +7 -1
  197. package/templates/claude-code/CLAUDE.md +3 -1
  198. package/templates/claude-code/commands/post-sprint.md +2 -0
  199. package/templates/claude-code/commands/start-sprint.md +10 -5
  200. package/templates/claude-code/rules/sprint-checklist.md +13 -10
  201. package/templates/codex/plugins/slope/.codex-plugin/plugin.json +1 -1
  202. package/templates/codex/plugins/slope/skills/slope-retro/SKILL.md +1 -1
  203. package/templates/codex/plugins/slope/skills/slope-sprint/SKILL.md +5 -4
  204. package/templates/cursor/rules/slope-sprint-checklist.mdc +11 -8
  205. package/templates/generic/SLOPE-CHECKLIST.md +13 -9
  206. package/templates/pi/skills/post-sprint.md +2 -0
  207. package/templates/pi/skills/start-sprint.md +10 -5
@@ -3,30 +3,127 @@ export declare const SPRINT_PHASES: readonly ["planning", "reviewing", "implemen
3
3
  export type SprintPhase = typeof SPRINT_PHASES[number];
4
4
  /** Gate names that must be completed before PR */
5
5
  export type GateName = 'tests' | 'code_review' | 'architect_review' | 'scorecard' | 'review_md';
6
+ export type ReviewGateName = Extract<GateName, 'code_review' | 'architect_review'>;
7
+ export type ReviewGateProvenance = 'pending' | 'self_review' | 'independent_review' | 'independent_review_waived' | 'manual_override' | 'pr_review';
8
+ export type ReviewGateCompletionProvenance = Exclude<ReviewGateProvenance, 'pending'>;
9
+ export type ReviewGatePriority = 'required' | 'recommended' | 'optional' | 'unspecified';
10
+ export interface ReviewGateRequirement {
11
+ priority: ReviewGatePriority;
12
+ reason?: string;
13
+ source?: string;
14
+ updated_at?: string;
15
+ }
16
+ export interface ReviewGateRequirementInput {
17
+ gate: ReviewGateName;
18
+ priority: Exclude<ReviewGatePriority, 'unspecified'>;
19
+ reason?: string;
20
+ source?: string;
21
+ }
22
+ export interface ReviewGateState {
23
+ provenance: ReviewGateProvenance;
24
+ evidence: string[];
25
+ reviewer?: string;
26
+ notes?: string;
27
+ updated_at?: string;
28
+ }
29
+ export interface ReviewGateCompletionInput {
30
+ provenance: ReviewGateCompletionProvenance;
31
+ evidence?: string[];
32
+ reviewer?: string;
33
+ notes?: string;
34
+ }
35
+ export interface UpdateGateOptions {
36
+ review?: ReviewGateCompletionInput;
37
+ }
6
38
  /** Sprint state persisted to .slope/sprint-state.json */
7
39
  export interface SprintState {
8
40
  sprint: number;
9
41
  phase: SprintPhase;
10
42
  gates: Record<GateName, boolean>;
43
+ review_gates: Record<ReviewGateName, ReviewGateState>;
44
+ review_requirements?: Record<ReviewGateName, ReviewGateRequirement>;
11
45
  started_at: string;
12
46
  updated_at: string;
47
+ rollover?: SprintRolloverLineage;
48
+ }
49
+ export interface SprintRolloverLineage {
50
+ transition_id: string;
51
+ from_sprint: number;
52
+ audit_path: string;
53
+ recorded_at: string;
54
+ forced: boolean;
55
+ reason?: string;
13
56
  }
57
+ export type SprintStateLoadResult = {
58
+ status: 'missing';
59
+ } | {
60
+ status: 'corrupt';
61
+ path: string;
62
+ } | {
63
+ status: 'valid';
64
+ state: SprintState;
65
+ };
66
+ export type SprintStateInitializationResult = {
67
+ status: 'created';
68
+ state: SprintState;
69
+ } | {
70
+ status: 'existing';
71
+ state: SprintState;
72
+ } | {
73
+ status: 'corrupt';
74
+ path: string;
75
+ };
14
76
  /** Validate a user-provided sprint lifecycle phase. */
15
77
  export declare function isSprintPhase(value: string): value is SprintPhase;
78
+ export declare function isReviewGateName(value: string): value is ReviewGateName;
79
+ export declare function createDefaultReviewGates(): Record<ReviewGateName, ReviewGateState>;
80
+ export declare function createDefaultReviewRequirements(): Record<ReviewGateName, ReviewGateRequirement>;
81
+ export declare function validateReviewGateCompletion(input: ReviewGateCompletionInput | undefined): string | null;
82
+ export declare function isReviewGateSatisfied(state: SprintState, gate: ReviewGateName): boolean;
83
+ export declare function isRequiredReviewGate(state: SprintState, gate: ReviewGateName): boolean;
84
+ export declare function waivedReviewGateNames(state: SprintState): ReviewGateName[];
16
85
  /** Load sprint state from .slope/sprint-state.json. Returns null if missing or malformed. */
17
86
  export declare function loadSprintState(cwd: string): SprintState | null;
87
+ /** Strict persisted-state shape used at mutation and rollover trust boundaries. */
88
+ export declare function isValidSprintStateEvidence(value: unknown): value is SprintState;
89
+ /** Distinguish absent local state from corrupt evidence that must fail closed. */
90
+ export declare function loadSprintStateResult(cwd: string): SprintStateLoadResult;
18
91
  /** True when sprint-state represents an active workflow sprint. */
19
92
  export declare function isActiveSprintState(state: SprintState | null): state is SprintState;
20
93
  /** Save sprint state atomically via unique tmp + rename. */
21
94
  export declare function saveSprintState(cwd: string, state: SprintState): void;
22
95
  /** Mutate sprint state while holding the state file lock. Returns null if missing/corrupt. */
23
96
  export declare function mutateSprintState(cwd: string, mutator: (state: SprintState) => boolean): SprintState | null;
24
- /** Update a single gate and save. */
25
- export declare function updateGate(cwd: string, gate: GateName, value: boolean): void;
97
+ /** Update a single gate and save. Returns false when a review gate lacks required provenance. */
98
+ export declare function updateGate(cwd: string, gate: GateName, value: boolean, options?: UpdateGateOptions): boolean;
99
+ /** Create sprint state only when the tracked local slot is truly absent. */
100
+ export declare function initializeSprintState(cwd: string, state: SprintState): SprintStateInitializationResult;
101
+ export interface SprintStateReplacement {
102
+ previous: SprintState;
103
+ current: SprintState;
104
+ replaced: boolean;
105
+ }
106
+ /**
107
+ * Replace sprint state while holding the same lock used by ordinary mutations.
108
+ * The replacer may persist prerequisite audit evidence before returning the
109
+ * new state. Returning null leaves the current state untouched.
110
+ */
111
+ export declare function replaceSprintState(cwd: string, replacer: (state: SprintState) => SprintState | null): SprintStateReplacement | null;
112
+ /** Persist review priorities inferred by `slope review recommend` for the matching active sprint. */
113
+ export declare function updateReviewRequirements(cwd: string, sprint: number, inputs: ReviewGateRequirementInput[]): boolean;
26
114
  /** Update the current sprint lifecycle phase. */
27
115
  export declare function updateSprintPhase(cwd: string, phase: SprintPhase): SprintState | null;
116
+ export interface ConditionalSprintPhaseUpdate {
117
+ state: SprintState | null;
118
+ matched: boolean;
119
+ changed: boolean;
120
+ }
121
+ /** Update phase only if the state still represents the observed sprint. */
122
+ export declare function updateSprintPhaseForSprint(cwd: string, expectedSprint: number, phase: SprintPhase): ConditionalSprintPhaseUpdate;
28
123
  /** Check if all gates are true. */
29
124
  export declare function isSprintComplete(state: SprintState): boolean;
125
+ /** Return machine-readable names of incomplete gates. */
126
+ export declare function pendingGateNames(state: SprintState): GateName[];
30
127
  /** Return human-readable list of incomplete gates. */
31
128
  export declare function pendingGates(state: SprintState): string[];
32
129
  /** Create a fresh sprint state with all gates false. */
@@ -1 +1 @@
1
- {"version":3,"file":"sprint-state.d.ts","sourceRoot":"","sources":["../../src/cli/sprint-state.ts"],"names":[],"mappings":"AAIA,8BAA8B;AAC9B,eAAO,MAAM,aAAa,2EAA4E,CAAC;AACvG,MAAM,MAAM,WAAW,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAEvD,kDAAkD;AAClD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,aAAa,GAAG,kBAAkB,GAAG,WAAW,GAAG,WAAW,CAAC;AAWhG,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAmB/D;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,KAAK,IAAI,WAAW,CAEnF;AAWD,4DAA4D;AAC5D,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAGrE;AAED,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,GAAG,WAAW,GAAG,IAAI,CAU3G;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAK5E;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAKrF;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE5D;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAIzD;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,WAAwB,GAAG,WAAW,CAe9F;AAED,oCAAoC;AACpC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMlD"}
1
+ {"version":3,"file":"sprint-state.d.ts","sourceRoot":"","sources":["../../src/cli/sprint-state.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { readFileSync, existsSync, unlinkSync } from 'node:fs';
2
- import { join } from 'node:path';
2
+ import { isAbsolute, join } from 'node:path';
3
3
  import { atomicWriteFileSync, withFileLockSync } from './atomic-write.js';
4
4
  /** Sprint lifecycle phases */
5
5
  export const SPRINT_PHASES = ['planning', 'reviewing', 'implementing', 'scoring', 'complete'];
@@ -13,10 +13,159 @@ const GATE_LABELS = {
13
13
  };
14
14
  const SPRINT_STATE_FILE = '.slope/sprint-state.json';
15
15
  const ALL_GATES = ['tests', 'code_review', 'architect_review', 'scorecard', 'review_md'];
16
+ const REVIEW_GATES = ['code_review', 'architect_review'];
17
+ const REVIEW_GATE_PROVENANCES = [
18
+ 'pending',
19
+ 'self_review',
20
+ 'independent_review',
21
+ 'independent_review_waived',
22
+ 'manual_override',
23
+ 'pr_review',
24
+ ];
16
25
  /** Validate a user-provided sprint lifecycle phase. */
17
26
  export function isSprintPhase(value) {
18
27
  return SPRINT_PHASES.includes(value);
19
28
  }
29
+ export function isReviewGateName(value) {
30
+ return REVIEW_GATES.includes(value);
31
+ }
32
+ function createDefaultReviewGateState() {
33
+ return { provenance: 'pending', evidence: [] };
34
+ }
35
+ export function createDefaultReviewGates() {
36
+ return {
37
+ code_review: createDefaultReviewGateState(),
38
+ architect_review: createDefaultReviewGateState(),
39
+ };
40
+ }
41
+ function createDefaultReviewGateRequirement() {
42
+ return { priority: 'unspecified' };
43
+ }
44
+ export function createDefaultReviewRequirements() {
45
+ return {
46
+ code_review: createDefaultReviewGateRequirement(),
47
+ architect_review: createDefaultReviewGateRequirement(),
48
+ };
49
+ }
50
+ function normalizeReviewGateState(raw) {
51
+ if (!raw || typeof raw !== 'object')
52
+ return createDefaultReviewGateState();
53
+ const obj = raw;
54
+ const provenance = typeof obj.provenance === 'string' &&
55
+ REVIEW_GATE_PROVENANCES.includes(obj.provenance)
56
+ ? obj.provenance
57
+ : 'pending';
58
+ return {
59
+ provenance,
60
+ evidence: Array.isArray(obj.evidence) ? obj.evidence.filter((item) => typeof item === 'string') : [],
61
+ ...(typeof obj.reviewer === 'string' ? { reviewer: obj.reviewer } : {}),
62
+ ...(typeof obj.notes === 'string' ? { notes: obj.notes } : {}),
63
+ ...(typeof obj.updated_at === 'string' ? { updated_at: obj.updated_at } : {}),
64
+ };
65
+ }
66
+ function normalizeReviewGates(raw) {
67
+ const reviewGates = createDefaultReviewGates();
68
+ if (!raw || typeof raw !== 'object')
69
+ return reviewGates;
70
+ const obj = raw;
71
+ for (const gate of REVIEW_GATES) {
72
+ reviewGates[gate] = normalizeReviewGateState(obj[gate]);
73
+ }
74
+ return reviewGates;
75
+ }
76
+ function normalizeReviewGateRequirement(raw) {
77
+ if (!raw || typeof raw !== 'object')
78
+ return createDefaultReviewGateRequirement();
79
+ const obj = raw;
80
+ const priority = obj.priority === 'required' || obj.priority === 'recommended' || obj.priority === 'optional'
81
+ ? obj.priority
82
+ : 'unspecified';
83
+ return {
84
+ priority,
85
+ ...(typeof obj.reason === 'string' ? { reason: obj.reason } : {}),
86
+ ...(typeof obj.source === 'string' ? { source: obj.source } : {}),
87
+ ...(typeof obj.updated_at === 'string' ? { updated_at: obj.updated_at } : {}),
88
+ };
89
+ }
90
+ function normalizeReviewRequirements(raw) {
91
+ const requirements = createDefaultReviewRequirements();
92
+ if (!raw || typeof raw !== 'object')
93
+ return requirements;
94
+ const obj = raw;
95
+ for (const gate of REVIEW_GATES) {
96
+ requirements[gate] = normalizeReviewGateRequirement(obj[gate]);
97
+ }
98
+ return requirements;
99
+ }
100
+ function cleanEvidence(evidence) {
101
+ return (evidence ?? []).map(item => item.trim()).filter(Boolean);
102
+ }
103
+ export function validateReviewGateCompletion(input) {
104
+ if (!input) {
105
+ return 'review gate requires explicit independent-review evidence, PR review evidence, or weaker-mode override';
106
+ }
107
+ const evidence = cleanEvidence(input.evidence);
108
+ const reviewer = input.reviewer?.trim();
109
+ const notes = input.notes?.trim();
110
+ switch (input.provenance) {
111
+ case 'independent_review':
112
+ if (!reviewer)
113
+ return 'independent review gates require --reviewer=<agent-or-person>';
114
+ if (evidence.length === 0)
115
+ return 'independent review gates require --evidence=<transcript-or-output>';
116
+ return null;
117
+ case 'pr_review':
118
+ if (evidence.length === 0)
119
+ return 'PR review gates require --pr-review=<url-or-id>';
120
+ return null;
121
+ case 'self_review':
122
+ if (!notes)
123
+ return 'self-review gates require --reason=<why-self-review-is-acceptable>';
124
+ return null;
125
+ case 'independent_review_waived':
126
+ if (!notes)
127
+ return 'independent-review waivers require --reason=<why-the-downgrade-is-accepted>';
128
+ return null;
129
+ case 'manual_override':
130
+ if (!notes)
131
+ return 'manual review overrides require --override=<reason>';
132
+ return null;
133
+ }
134
+ }
135
+ function createReviewGateCompletionState(input) {
136
+ if (validateReviewGateCompletion(input))
137
+ return null;
138
+ if (!input)
139
+ return null;
140
+ const reviewer = input.reviewer?.trim();
141
+ const notes = input.notes?.trim();
142
+ return {
143
+ provenance: input.provenance,
144
+ evidence: cleanEvidence(input.evidence),
145
+ ...(reviewer ? { reviewer } : {}),
146
+ ...(notes ? { notes } : {}),
147
+ updated_at: new Date().toISOString(),
148
+ };
149
+ }
150
+ export function isReviewGateSatisfied(state, gate) {
151
+ if (!state.gates[gate])
152
+ return false;
153
+ const review = state.review_gates?.[gate];
154
+ if (!review || review.provenance === 'pending')
155
+ return false;
156
+ return validateReviewGateCompletion({
157
+ provenance: review.provenance,
158
+ evidence: review.evidence,
159
+ reviewer: review.reviewer,
160
+ notes: review.notes,
161
+ }) === null;
162
+ }
163
+ export function isRequiredReviewGate(state, gate) {
164
+ return state.review_requirements?.[gate]?.priority === 'required';
165
+ }
166
+ export function waivedReviewGateNames(state) {
167
+ return REVIEW_GATES.filter(gate => state.gates[gate] === true && state.review_gates?.[gate]?.provenance === 'independent_review_waived');
168
+ }
20
169
  /** Load sprint state from .slope/sprint-state.json. Returns null if missing or malformed. */
21
170
  export function loadSprintState(cwd) {
22
171
  const statePath = join(cwd, SPRINT_STATE_FILE);
@@ -34,12 +183,88 @@ export function loadSprintState(cwd) {
34
183
  return null;
35
184
  }
36
185
  }
37
- return raw;
186
+ return {
187
+ ...raw,
188
+ review_gates: normalizeReviewGates(raw.review_gates),
189
+ review_requirements: normalizeReviewRequirements(raw.review_requirements),
190
+ };
38
191
  }
39
192
  catch {
40
193
  return null;
41
194
  }
42
195
  }
196
+ function validOptionalString(value) {
197
+ return value === undefined || typeof value === 'string';
198
+ }
199
+ function validEvidenceTimestamp(value) {
200
+ return typeof value === 'string' && value.length > 0 && Number.isFinite(Date.parse(value));
201
+ }
202
+ /** Strict persisted-state shape used at mutation and rollover trust boundaries. */
203
+ export function isValidSprintStateEvidence(value) {
204
+ if (!value || typeof value !== 'object' || Array.isArray(value))
205
+ return false;
206
+ const state = value;
207
+ if (typeof state.sprint !== 'number' || !Number.isFinite(state.sprint) || state.sprint <= 0
208
+ || typeof state.phase !== 'string' || !isSprintPhase(state.phase)
209
+ || !validEvidenceTimestamp(state.started_at) || !validEvidenceTimestamp(state.updated_at)
210
+ || !state.gates || typeof state.gates !== 'object')
211
+ return false;
212
+ if (!ALL_GATES.every(gate => typeof state.gates?.[gate] === 'boolean'))
213
+ return false;
214
+ if (state.review_gates !== undefined) {
215
+ if (!state.review_gates || typeof state.review_gates !== 'object')
216
+ return false;
217
+ for (const gate of REVIEW_GATES) {
218
+ const review = state.review_gates[gate];
219
+ if (!review || typeof review !== 'object'
220
+ || !REVIEW_GATE_PROVENANCES.includes(review.provenance)
221
+ || !Array.isArray(review.evidence) || review.evidence.some(item => typeof item !== 'string')
222
+ || !validOptionalString(review.reviewer) || !validOptionalString(review.notes)
223
+ || (review.updated_at !== undefined && !validEvidenceTimestamp(review.updated_at)))
224
+ return false;
225
+ }
226
+ }
227
+ if (state.review_requirements !== undefined) {
228
+ if (!state.review_requirements || typeof state.review_requirements !== 'object')
229
+ return false;
230
+ for (const gate of REVIEW_GATES) {
231
+ const requirement = state.review_requirements[gate];
232
+ if (!requirement || typeof requirement !== 'object'
233
+ || !['required', 'recommended', 'optional', 'unspecified'].includes(requirement.priority)
234
+ || !validOptionalString(requirement.reason) || !validOptionalString(requirement.source)
235
+ || (requirement.updated_at !== undefined && !validEvidenceTimestamp(requirement.updated_at)))
236
+ return false;
237
+ }
238
+ }
239
+ if (state.rollover !== undefined) {
240
+ const lineage = state.rollover;
241
+ const portablePath = typeof lineage.audit_path === 'string' ? lineage.audit_path.replaceAll('\\', '/') : '';
242
+ if (typeof lineage.transition_id !== 'string' || !/^[a-f0-9]{16}$/.test(lineage.transition_id)
243
+ || typeof lineage.from_sprint !== 'number' || !Number.isFinite(lineage.from_sprint) || lineage.from_sprint <= 0
244
+ || !portablePath || isAbsolute(portablePath) || portablePath.split('/').includes('..')
245
+ || !validEvidenceTimestamp(lineage.recorded_at)
246
+ || typeof lineage.forced !== 'boolean'
247
+ || !validOptionalString(lineage.reason))
248
+ return false;
249
+ }
250
+ return true;
251
+ }
252
+ /** Distinguish absent local state from corrupt evidence that must fail closed. */
253
+ export function loadSprintStateResult(cwd) {
254
+ const path = sprintStatePath(cwd);
255
+ if (!existsSync(path))
256
+ return { status: 'missing' };
257
+ try {
258
+ const raw = JSON.parse(readFileSync(path, 'utf8'));
259
+ if (!isValidSprintStateEvidence(raw))
260
+ return { status: 'corrupt', path };
261
+ }
262
+ catch {
263
+ return { status: 'corrupt', path };
264
+ }
265
+ const state = loadSprintState(cwd);
266
+ return state ? { status: 'valid', state } : { status: 'corrupt', path };
267
+ }
43
268
  /** True when sprint-state represents an active workflow sprint. */
44
269
  export function isActiveSprintState(state) {
45
270
  return Boolean(state && state.phase !== 'complete' && !isSprintComplete(state));
@@ -47,8 +272,9 @@ export function isActiveSprintState(state) {
47
272
  function sprintStatePath(cwd) {
48
273
  return join(cwd, SPRINT_STATE_FILE);
49
274
  }
50
- function saveSprintStateUnlocked(filePath, state) {
51
- state.updated_at = new Date().toISOString();
275
+ function saveSprintStateUnlocked(filePath, state, touchUpdatedAt = true) {
276
+ if (touchUpdatedAt)
277
+ state.updated_at = new Date().toISOString();
52
278
  atomicWriteFileSync(filePath, JSON.stringify(state, null, 2) + '\n');
53
279
  }
54
280
  /** Save sprint state atomically via unique tmp + rename. */
@@ -60,21 +286,105 @@ export function saveSprintState(cwd, state) {
60
286
  export function mutateSprintState(cwd, mutator) {
61
287
  const filePath = sprintStatePath(cwd);
62
288
  return withFileLockSync(filePath, () => {
63
- const state = loadSprintState(cwd);
64
- if (!state)
289
+ const loaded = loadSprintStateResult(cwd);
290
+ if (loaded.status !== 'valid')
65
291
  return null;
292
+ const state = loaded.state;
66
293
  if (mutator(state)) {
67
294
  saveSprintStateUnlocked(filePath, state);
68
295
  }
69
296
  return state;
70
297
  });
71
298
  }
72
- /** Update a single gate and save. */
73
- export function updateGate(cwd, gate, value) {
74
- mutateSprintState(cwd, state => {
75
- state.gates[gate] = value;
299
+ /** Update a single gate and save. Returns false when a review gate lacks required provenance. */
300
+ export function updateGate(cwd, gate, value, options = {}) {
301
+ let updated = false;
302
+ const state = mutateSprintState(cwd, current => {
303
+ if (isReviewGateName(gate)) {
304
+ current.review_gates ??= createDefaultReviewGates();
305
+ if (!value) {
306
+ current.gates[gate] = false;
307
+ current.review_gates[gate] = createDefaultReviewGateState();
308
+ updated = true;
309
+ return true;
310
+ }
311
+ else {
312
+ const required = current.review_requirements?.[gate]?.priority === 'required';
313
+ const provenance = options.review?.provenance;
314
+ if (required && (provenance === 'self_review' || provenance === 'manual_override'))
315
+ return false;
316
+ if (!required && provenance === 'independent_review_waived')
317
+ return false;
318
+ const review = createReviewGateCompletionState(options.review);
319
+ if (!review)
320
+ return false;
321
+ current.gates[gate] = true;
322
+ current.review_gates[gate] = review;
323
+ updated = true;
324
+ return true;
325
+ }
326
+ }
327
+ current.gates[gate] = value;
328
+ updated = true;
329
+ return true;
330
+ });
331
+ return Boolean(state && updated);
332
+ }
333
+ /** Create sprint state only when the tracked local slot is truly absent. */
334
+ export function initializeSprintState(cwd, state) {
335
+ const filePath = sprintStatePath(cwd);
336
+ return withFileLockSync(filePath, () => {
337
+ const loaded = loadSprintStateResult(cwd);
338
+ if (loaded.status === 'valid')
339
+ return { status: 'existing', state: loaded.state };
340
+ if (loaded.status === 'corrupt')
341
+ return loaded;
342
+ saveSprintStateUnlocked(filePath, state, false);
343
+ return { status: 'created', state };
344
+ });
345
+ }
346
+ /**
347
+ * Replace sprint state while holding the same lock used by ordinary mutations.
348
+ * The replacer may persist prerequisite audit evidence before returning the
349
+ * new state. Returning null leaves the current state untouched.
350
+ */
351
+ export function replaceSprintState(cwd, replacer) {
352
+ const filePath = sprintStatePath(cwd);
353
+ return withFileLockSync(filePath, () => {
354
+ const loaded = loadSprintStateResult(cwd);
355
+ if (loaded.status !== 'valid') {
356
+ if (loaded.status === 'corrupt')
357
+ throw new Error(`Sprint state is corrupt and was preserved at ${filePath}.`);
358
+ return null;
359
+ }
360
+ const previous = loaded.state;
361
+ const next = replacer(previous);
362
+ if (!next)
363
+ return { previous, current: previous, replaced: false };
364
+ saveSprintStateUnlocked(filePath, next, false);
365
+ return { previous, current: next, replaced: true };
366
+ });
367
+ }
368
+ /** Persist review priorities inferred by `slope review recommend` for the matching active sprint. */
369
+ export function updateReviewRequirements(cwd, sprint, inputs) {
370
+ let updated = false;
371
+ const state = mutateSprintState(cwd, current => {
372
+ if (current.sprint !== sprint)
373
+ return false;
374
+ current.review_requirements ??= createDefaultReviewRequirements();
375
+ const now = new Date().toISOString();
376
+ for (const input of inputs) {
377
+ current.review_requirements[input.gate] = {
378
+ priority: input.priority,
379
+ ...(input.reason?.trim() ? { reason: input.reason.trim() } : {}),
380
+ source: input.source?.trim() || 'review_recommend',
381
+ updated_at: now,
382
+ };
383
+ }
384
+ updated = true;
76
385
  return true;
77
386
  });
387
+ return Boolean(state && updated);
78
388
  }
79
389
  /** Update the current sprint lifecycle phase. */
80
390
  export function updateSprintPhase(cwd, phase) {
@@ -83,15 +393,38 @@ export function updateSprintPhase(cwd, phase) {
83
393
  return true;
84
394
  });
85
395
  }
396
+ /** Update phase only if the state still represents the observed sprint. */
397
+ export function updateSprintPhaseForSprint(cwd, expectedSprint, phase) {
398
+ let matched = false;
399
+ let changed = false;
400
+ const state = mutateSprintState(cwd, current => {
401
+ if (current.sprint !== expectedSprint)
402
+ return false;
403
+ matched = true;
404
+ if (current.phase === phase)
405
+ return false;
406
+ current.phase = phase;
407
+ changed = true;
408
+ return true;
409
+ });
410
+ return { state, matched, changed };
411
+ }
86
412
  /** Check if all gates are true. */
87
413
  export function isSprintComplete(state) {
88
- return ALL_GATES.every(g => state.gates[g] === true);
414
+ return ALL_GATES.every(g => {
415
+ if (state.gates[g] !== true)
416
+ return false;
417
+ return !isReviewGateName(g) || isReviewGateSatisfied(state, g);
418
+ });
419
+ }
420
+ /** Return machine-readable names of incomplete gates. */
421
+ export function pendingGateNames(state) {
422
+ return ALL_GATES
423
+ .filter(g => state.gates[g] !== true || (isReviewGateName(g) && !isReviewGateSatisfied(state, g)));
89
424
  }
90
425
  /** Return human-readable list of incomplete gates. */
91
426
  export function pendingGates(state) {
92
- return ALL_GATES
93
- .filter(g => !state.gates[g])
94
- .map(g => GATE_LABELS[g]);
427
+ return pendingGateNames(state).map(g => GATE_LABELS[g]);
95
428
  }
96
429
  /** Create a fresh sprint state with all gates false. */
97
430
  export function createSprintState(sprint, phase = 'planning') {
@@ -106,6 +439,8 @@ export function createSprintState(sprint, phase = 'planning') {
106
439
  scorecard: false,
107
440
  review_md: false,
108
441
  },
442
+ review_gates: createDefaultReviewGates(),
443
+ review_requirements: createDefaultReviewRequirements(),
109
444
  started_at: now,
110
445
  updated_at: now,
111
446
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sprint-state.js","sourceRoot":"","sources":["../../src/cli/sprint-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sprint-state.js","sourceRoot":"","sources":["../../src/cli/sprint-state.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"template-generator.d.ts","sourceRoot":"","sources":["../../src/cli/template-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAmB3D,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAyCpE;AAID,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAuErE;AAID,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAwCtE;AAID,wBAAgB,kBAAkB,IAAI,MAAM,CAyC3C;AAID,wBAAgB,2BAA2B,IAAI,MAAM,CA+BpD;AAED,wBAAgB,iCAAiC,IAAI,MAAM,CAmC1D;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CA8D9D;AAID,wBAAgB,sBAAsB,IAAI,MAAM,CAuD/C;AAID,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAuD3E;AAED,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAyC5E;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAmCjD;AAID,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,GAAE,QAAQ,GAAG,UAAqB,GAAG,MAAM,CAqD5G;AAID,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAmCtE"}
1
+ {"version":3,"file":"template-generator.d.ts","sourceRoot":"","sources":["../../src/cli/template-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAmB3D,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CA2CpE;AAID,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAyErE;AAID,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAwCtE;AAID,wBAAgB,kBAAkB,IAAI,MAAM,CAyC3C;AAID,wBAAgB,2BAA2B,IAAI,MAAM,CA+BpD;AAED,wBAAgB,iCAAiC,IAAI,MAAM,CAmC1D;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAgE9D;AAID,wBAAgB,sBAAsB,IAAI,MAAM,CAuD/C;AAID,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CA0D3E;AAED,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAyC5E;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAmCjD;AAID,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,GAAE,QAAQ,GAAG,UAAqB,GAAG,MAAM,CAuD5G;AAID,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAqCtE"}