@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.
- package/README.md +6 -0
- package/dist/cli/actor.d.ts +18 -0
- package/dist/cli/actor.d.ts.map +1 -0
- package/dist/cli/actor.js +133 -0
- package/dist/cli/actor.js.map +1 -0
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +10 -8
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/briefing.d.ts.map +1 -1
- package/dist/cli/commands/briefing.js +12 -1
- package/dist/cli/commands/briefing.js.map +1 -1
- package/dist/cli/commands/claim.d.ts.map +1 -1
- package/dist/cli/commands/claim.js +10 -6
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/commit-ready.d.ts.map +1 -1
- package/dist/cli/commands/commit-ready.js +4 -2
- package/dist/cli/commands/commit-ready.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +6 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/interview.d.ts.map +1 -1
- package/dist/cli/commands/interview.js +5 -0
- package/dist/cli/commands/interview.js.map +1 -1
- package/dist/cli/commands/next.d.ts +1 -1
- package/dist/cli/commands/next.d.ts.map +1 -1
- package/dist/cli/commands/next.js +31 -2
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/now.d.ts +3 -0
- package/dist/cli/commands/now.d.ts.map +1 -1
- package/dist/cli/commands/now.js +14 -2
- package/dist/cli/commands/now.js.map +1 -1
- package/dist/cli/commands/release.d.ts.map +1 -1
- package/dist/cli/commands/release.js +7 -3
- package/dist/cli/commands/release.js.map +1 -1
- package/dist/cli/commands/retro.d.ts.map +1 -1
- package/dist/cli/commands/retro.js +27 -6
- package/dist/cli/commands/retro.js.map +1 -1
- package/dist/cli/commands/review-run.d.ts +2 -0
- package/dist/cli/commands/review-run.d.ts.map +1 -1
- package/dist/cli/commands/review-run.js +38 -8
- package/dist/cli/commands/review-run.js.map +1 -1
- package/dist/cli/commands/review-state.d.ts +2 -5
- package/dist/cli/commands/review-state.d.ts.map +1 -1
- package/dist/cli/commands/review-state.js +211 -47
- package/dist/cli/commands/review-state.js.map +1 -1
- package/dist/cli/commands/review.d.ts +9 -1
- package/dist/cli/commands/review.d.ts.map +1 -1
- package/dist/cli/commands/review.js +67 -39
- package/dist/cli/commands/review.js.map +1 -1
- package/dist/cli/commands/roadmap.d.ts.map +1 -1
- package/dist/cli/commands/roadmap.js +291 -9
- package/dist/cli/commands/roadmap.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +594 -68
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +20 -4
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/ticket.d.ts.map +1 -1
- package/dist/cli/commands/ticket.js +31 -9
- package/dist/cli/commands/ticket.js.map +1 -1
- package/dist/cli/commands/version.d.ts +12 -0
- package/dist/cli/commands/version.d.ts.map +1 -1
- package/dist/cli/commands/version.js +169 -4
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/git-preflight.d.ts +9 -0
- package/dist/cli/git-preflight.d.ts.map +1 -0
- package/dist/cli/git-preflight.js +36 -0
- package/dist/cli/git-preflight.js.map +1 -0
- package/dist/cli/guards/claim-required.d.ts.map +1 -1
- package/dist/cli/guards/claim-required.js +19 -4
- package/dist/cli/guards/claim-required.js.map +1 -1
- package/dist/cli/guards/next-action.js +1 -1
- package/dist/cli/guards/next-action.js.map +1 -1
- package/dist/cli/guards/phase-boundary.js +60 -10
- package/dist/cli/guards/phase-boundary.js.map +1 -1
- package/dist/cli/guards/post-push.d.ts.map +1 -1
- package/dist/cli/guards/post-push.js +8 -2
- package/dist/cli/guards/post-push.js.map +1 -1
- package/dist/cli/guards/pr-review.d.ts +6 -0
- package/dist/cli/guards/pr-review.d.ts.map +1 -1
- package/dist/cli/guards/pr-review.js +22 -11
- package/dist/cli/guards/pr-review.js.map +1 -1
- package/dist/cli/guards/review-tier.d.ts.map +1 -1
- package/dist/cli/guards/review-tier.js +2 -3
- package/dist/cli/guards/review-tier.js.map +1 -1
- package/dist/cli/guards/roadmap-edit-shipped.d.ts.map +1 -1
- package/dist/cli/guards/roadmap-edit-shipped.js +143 -7
- package/dist/cli/guards/roadmap-edit-shipped.js.map +1 -1
- package/dist/cli/guards/scope-drift.d.ts.map +1 -1
- package/dist/cli/guards/scope-drift.js +8 -2
- package/dist/cli/guards/scope-drift.js.map +1 -1
- package/dist/cli/guards/session-briefing.d.ts.map +1 -1
- package/dist/cli/guards/session-briefing.js +24 -2
- package/dist/cli/guards/session-briefing.js.map +1 -1
- package/dist/cli/guards/sprint-completion.d.ts.map +1 -1
- package/dist/cli/guards/sprint-completion.js +107 -18
- package/dist/cli/guards/sprint-completion.js.map +1 -1
- package/dist/cli/guards/workflow-step-gate.d.ts.map +1 -1
- package/dist/cli/guards/workflow-step-gate.js +25 -6
- package/dist/cli/guards/workflow-step-gate.js.map +1 -1
- package/dist/cli/index.js +4 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +45 -3
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli/reviewer-agents.d.ts +22 -0
- package/dist/cli/reviewer-agents.d.ts.map +1 -0
- package/dist/cli/reviewer-agents.js +141 -0
- package/dist/cli/reviewer-agents.js.map +1 -0
- package/dist/cli/roadmap-source-store.d.ts +37 -0
- package/dist/cli/roadmap-source-store.d.ts.map +1 -0
- package/dist/cli/roadmap-source-store.js +298 -0
- package/dist/cli/roadmap-source-store.js.map +1 -0
- package/dist/cli/sprint-inference.js +1 -1
- package/dist/cli/sprint-inference.js.map +1 -1
- package/dist/cli/sprint-rollover.d.ts +102 -0
- package/dist/cli/sprint-rollover.d.ts.map +1 -0
- package/dist/cli/sprint-rollover.js +558 -0
- package/dist/cli/sprint-rollover.js.map +1 -0
- package/dist/cli/sprint-state.d.ts +99 -2
- package/dist/cli/sprint-state.d.ts.map +1 -1
- package/dist/cli/sprint-state.js +349 -14
- package/dist/cli/sprint-state.js.map +1 -1
- package/dist/cli/template-generator.d.ts.map +1 -1
- package/dist/cli/template-generator.js +45 -32
- package/dist/cli/template-generator.js.map +1 -1
- package/dist/cli/workflow-resync.d.ts +2 -0
- package/dist/cli/workflow-resync.d.ts.map +1 -1
- package/dist/cli/workflow-resync.js +34 -12
- package/dist/cli/workflow-resync.js.map +1 -1
- package/dist/core/analyzers/git.d.ts.map +1 -1
- package/dist/core/analyzers/git.js +95 -5
- package/dist/core/analyzers/git.js.map +1 -1
- package/dist/core/briefing.d.ts.map +1 -1
- package/dist/core/briefing.js +254 -14
- package/dist/core/briefing.js.map +1 -1
- package/dist/core/builder.d.ts +16 -2
- package/dist/core/builder.d.ts.map +1 -1
- package/dist/core/builder.js +82 -5
- package/dist/core/builder.js.map +1 -1
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +1 -0
- package/dist/core/constants.js.map +1 -1
- package/dist/core/findings.d.ts +20 -0
- package/dist/core/findings.d.ts.map +1 -0
- package/dist/core/findings.js +85 -0
- package/dist/core/findings.js.map +1 -0
- package/dist/core/generators/first-sprint.js +1 -1
- package/dist/core/generators/first-sprint.js.map +1 -1
- package/dist/core/generators/roadmap.js +3 -3
- package/dist/core/generators/roadmap.js.map +1 -1
- package/dist/core/index.d.ts +10 -4
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/interview-engine.d.ts.map +1 -1
- package/dist/core/interview-engine.js +5 -4
- package/dist/core/interview-engine.js.map +1 -1
- package/dist/core/interview-metaphor.d.ts +5 -0
- package/dist/core/interview-metaphor.d.ts.map +1 -0
- package/dist/core/interview-metaphor.js +20 -0
- package/dist/core/interview-metaphor.js.map +1 -0
- package/dist/core/interview-steps.d.ts.map +1 -1
- package/dist/core/interview-steps.js +3 -6
- package/dist/core/interview-steps.js.map +1 -1
- package/dist/core/interview.d.ts.map +1 -1
- package/dist/core/interview.js +5 -6
- package/dist/core/interview.js.map +1 -1
- package/dist/core/roadmap-focus.d.ts +101 -0
- package/dist/core/roadmap-focus.d.ts.map +1 -0
- package/dist/core/roadmap-focus.js +293 -0
- package/dist/core/roadmap-focus.js.map +1 -0
- package/dist/core/roadmap-sources.d.ts +52 -0
- package/dist/core/roadmap-sources.d.ts.map +1 -0
- package/dist/core/roadmap-sources.js +483 -0
- package/dist/core/roadmap-sources.js.map +1 -0
- package/dist/core/roadmap.d.ts +25 -1
- package/dist/core/roadmap.d.ts.map +1 -1
- package/dist/core/roadmap.js +62 -45
- package/dist/core/roadmap.js.map +1 -1
- package/dist/core/types.d.ts +11 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/workflow-engine.d.ts.map +1 -1
- package/dist/core/workflow-engine.js +17 -2
- package/dist/core/workflow-engine.js.map +1 -1
- package/dist/mcp/registry.d.ts +1 -1
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +5 -4
- package/dist/mcp/registry.js.map +1 -1
- package/dist/store/index.d.ts +13 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +60 -7
- package/dist/store/index.js.map +1 -1
- package/package.json +1 -1
- package/src/core/workflows/sprint-standard.yaml +7 -1
- package/templates/claude-code/CLAUDE.md +3 -1
- package/templates/claude-code/commands/post-sprint.md +2 -0
- package/templates/claude-code/commands/start-sprint.md +10 -5
- package/templates/claude-code/rules/sprint-checklist.md +13 -10
- package/templates/codex/plugins/slope/.codex-plugin/plugin.json +1 -1
- package/templates/codex/plugins/slope/skills/slope-retro/SKILL.md +1 -1
- package/templates/codex/plugins/slope/skills/slope-sprint/SKILL.md +5 -4
- package/templates/cursor/rules/slope-sprint-checklist.mdc +11 -8
- package/templates/generic/SLOPE-CHECKLIST.md +13 -9
- package/templates/pi/skills/post-sprint.md +2 -0
- 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):
|
|
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;
|
|
1
|
+
{"version":3,"file":"sprint-state.d.ts","sourceRoot":"","sources":["../../src/cli/sprint-state.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/sprint-state.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
64
|
-
if (
|
|
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
|
-
|
|
75
|
-
|
|
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 =>
|
|
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
|
|
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,
|
|
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"}
|