@ginkoai/cli 2.0.6 → 2.1.1
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/dist/commands/epic/index.d.ts +29 -0
- package/dist/commands/epic/index.d.ts.map +1 -0
- package/dist/commands/epic/index.js +94 -0
- package/dist/commands/epic/index.js.map +1 -0
- package/dist/commands/epic/status.d.ts +40 -0
- package/dist/commands/epic/status.d.ts.map +1 -0
- package/dist/commands/epic/status.js +244 -0
- package/dist/commands/epic/status.js.map +1 -0
- package/dist/commands/graph/api-client.d.ts +221 -1
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js +141 -2
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/graph/load.d.ts.map +1 -1
- package/dist/commands/graph/load.js +40 -2
- package/dist/commands/graph/load.js.map +1 -1
- package/dist/commands/handoff.d.ts +3 -3
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +32 -3
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/migrate/index.d.ts +27 -0
- package/dist/commands/migrate/index.d.ts.map +1 -0
- package/dist/commands/migrate/index.js +76 -0
- package/dist/commands/migrate/index.js.map +1 -0
- package/dist/commands/migrate/status-migration.d.ts +58 -0
- package/dist/commands/migrate/status-migration.d.ts.map +1 -0
- package/dist/commands/migrate/status-migration.js +323 -0
- package/dist/commands/migrate/status-migration.js.map +1 -0
- package/dist/commands/nudging/index.d.ts +24 -0
- package/dist/commands/nudging/index.d.ts.map +1 -0
- package/dist/commands/nudging/index.js +175 -0
- package/dist/commands/nudging/index.js.map +1 -0
- package/dist/commands/sprint/create.d.ts +26 -0
- package/dist/commands/sprint/create.d.ts.map +1 -0
- package/dist/commands/sprint/create.js +269 -0
- package/dist/commands/sprint/create.js.map +1 -0
- package/dist/commands/sprint/index.d.ts.map +1 -1
- package/dist/commands/sprint/index.js +28 -0
- package/dist/commands/sprint/index.js.map +1 -1
- package/dist/commands/sprint/quick-fix.d.ts +25 -0
- package/dist/commands/sprint/quick-fix.d.ts.map +1 -0
- package/dist/commands/sprint/quick-fix.js +151 -0
- package/dist/commands/sprint/quick-fix.js.map +1 -0
- package/dist/commands/sprint/sprint-pipeline-enhanced.d.ts.map +1 -1
- package/dist/commands/sprint/sprint-pipeline-enhanced.js +37 -0
- package/dist/commands/sprint/sprint-pipeline-enhanced.js.map +1 -1
- package/dist/commands/sprint/status.d.ts +42 -0
- package/dist/commands/sprint/status.d.ts.map +1 -0
- package/dist/commands/sprint/status.js +298 -0
- package/dist/commands/sprint/status.js.map +1 -0
- package/dist/commands/start/start-reflection.d.ts +53 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +464 -71
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/sync/sprint-syncer.d.ts +19 -12
- package/dist/commands/sync/sprint-syncer.d.ts.map +1 -1
- package/dist/commands/sync/sprint-syncer.js +58 -140
- package/dist/commands/sync/sprint-syncer.js.map +1 -1
- package/dist/commands/sync/sync-command.d.ts.map +1 -1
- package/dist/commands/sync/sync-command.js +6 -18
- package/dist/commands/sync/sync-command.js.map +1 -1
- package/dist/commands/task/index.d.ts +25 -0
- package/dist/commands/task/index.d.ts.map +1 -0
- package/dist/commands/task/index.js +100 -0
- package/dist/commands/task/index.js.map +1 -0
- package/dist/commands/task/status.d.ts +46 -0
- package/dist/commands/task/status.d.ts.map +1 -0
- package/dist/commands/task/status.js +348 -0
- package/dist/commands/task/status.js.map +1 -0
- package/dist/commands/team/index.d.ts +5 -0
- package/dist/commands/team/index.d.ts.map +1 -1
- package/dist/commands/team/index.js +28 -0
- package/dist/commands/team/index.js.map +1 -1
- package/dist/commands/team/status.d.ts +16 -0
- package/dist/commands/team/status.d.ts.map +1 -0
- package/dist/commands/team/status.js +180 -0
- package/dist/commands/team/status.js.map +1 -0
- package/dist/index.js +21 -32
- package/dist/index.js.map +1 -1
- package/dist/lib/adoption-score.d.ts +69 -0
- package/dist/lib/adoption-score.d.ts.map +1 -0
- package/dist/lib/adoption-score.js +206 -0
- package/dist/lib/adoption-score.js.map +1 -0
- package/dist/lib/coaching-level.d.ts +127 -0
- package/dist/lib/coaching-level.d.ts.map +1 -0
- package/dist/lib/coaching-level.js +406 -0
- package/dist/lib/coaching-level.js.map +1 -0
- package/dist/lib/context-loader-events.d.ts.map +1 -1
- package/dist/lib/context-loader-events.js +7 -26
- package/dist/lib/context-loader-events.js.map +1 -1
- package/dist/lib/event-logger.d.ts +42 -0
- package/dist/lib/event-logger.d.ts.map +1 -1
- package/dist/lib/event-logger.js +77 -0
- package/dist/lib/event-logger.js.map +1 -1
- package/dist/lib/output-formatter.d.ts +8 -2
- package/dist/lib/output-formatter.d.ts.map +1 -1
- package/dist/lib/output-formatter.js +98 -18
- package/dist/lib/output-formatter.js.map +1 -1
- package/dist/lib/pending-updates.d.ts +148 -0
- package/dist/lib/pending-updates.d.ts.map +1 -0
- package/dist/lib/pending-updates.js +301 -0
- package/dist/lib/pending-updates.js.map +1 -0
- package/dist/lib/planning-menu.d.ts +69 -0
- package/dist/lib/planning-menu.d.ts.map +1 -0
- package/dist/lib/planning-menu.js +342 -0
- package/dist/lib/planning-menu.js.map +1 -0
- package/dist/lib/sprint-loader.d.ts +86 -14
- package/dist/lib/sprint-loader.d.ts.map +1 -1
- package/dist/lib/sprint-loader.js +293 -98
- package/dist/lib/sprint-loader.js.map +1 -1
- package/dist/lib/state-cache.d.ts +142 -0
- package/dist/lib/state-cache.d.ts.map +1 -0
- package/dist/lib/state-cache.js +259 -0
- package/dist/lib/state-cache.js.map +1 -0
- package/dist/lib/targeted-coaching.d.ts +71 -0
- package/dist/lib/targeted-coaching.d.ts.map +1 -0
- package/dist/lib/targeted-coaching.js +318 -0
- package/dist/lib/targeted-coaching.js.map +1 -0
- package/dist/lib/task-graph-sync.d.ts +105 -0
- package/dist/lib/task-graph-sync.d.ts.map +1 -0
- package/dist/lib/task-graph-sync.js +178 -0
- package/dist/lib/task-graph-sync.js.map +1 -0
- package/dist/lib/task-parser.d.ts +109 -0
- package/dist/lib/task-parser.d.ts.map +1 -0
- package/dist/lib/task-parser.js +407 -0
- package/dist/lib/task-parser.js.map +1 -0
- package/dist/lib/user-sprint.d.ts +53 -0
- package/dist/lib/user-sprint.d.ts.map +1 -1
- package/dist/lib/user-sprint.js +137 -2
- package/dist/lib/user-sprint.js.map +1 -1
- package/dist/lib/work-reconciliation.d.ts +59 -0
- package/dist/lib/work-reconciliation.d.ts.map +1 -0
- package/dist/lib/work-reconciliation.js +267 -0
- package/dist/lib/work-reconciliation.js.map +1 -0
- package/dist/templates/ai-instructions-template.d.ts.map +1 -1
- package/dist/templates/ai-instructions-template.js +7 -5
- package/dist/templates/ai-instructions-template.js.map +1 -1
- package/dist/templates/epic-template.md +0 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +7 -5
- package/dist/types/config.js.map +1 -1
- package/dist/utils/synthesis.d.ts +4 -0
- package/dist/utils/synthesis.d.ts.map +1 -1
- package/dist/utils/synthesis.js +12 -18
- package/dist/utils/synthesis.js.map +1 -1
- package/dist/utils/version-check.d.ts +26 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +186 -0
- package/dist/utils/version-check.js.map +1 -0
- package/package.json +2 -2
package/dist/lib/user-sprint.js
CHANGED
|
@@ -41,8 +41,8 @@ export async function getUserCurrentSprint() {
|
|
|
41
41
|
return null;
|
|
42
42
|
}
|
|
43
43
|
const data = await fs.readJSON(filePath);
|
|
44
|
-
// Validate required fields
|
|
45
|
-
if (!data.sprintId
|
|
44
|
+
// Validate required fields (sprintFile can be empty for graph-based sprints)
|
|
45
|
+
if (!data.sprintId) {
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
48
|
return data;
|
|
@@ -141,7 +141,142 @@ export async function validateUserSprint(assignment) {
|
|
|
141
141
|
* Get sprint file path from user assignment
|
|
142
142
|
*/
|
|
143
143
|
export async function getSprintFileFromAssignment(assignment) {
|
|
144
|
+
// Graph-based sprints have no local file
|
|
145
|
+
if (!assignment.sprintFile) {
|
|
146
|
+
return '';
|
|
147
|
+
}
|
|
144
148
|
const projectRoot = await requireGinkoRoot();
|
|
145
149
|
return path.join(projectRoot, assignment.sprintFile);
|
|
146
150
|
}
|
|
151
|
+
// =============================================================================
|
|
152
|
+
// EPIC-016 Sprint 4: Work Structure Detection (t01)
|
|
153
|
+
// =============================================================================
|
|
154
|
+
/**
|
|
155
|
+
* Check if user has structured work (sprint with incomplete tasks)
|
|
156
|
+
*
|
|
157
|
+
* Decision matrix:
|
|
158
|
+
* | Has Sprint | Has Tasks | Consecutive Adhoc | Result |
|
|
159
|
+
* |------------|-----------|-------------------|--------|
|
|
160
|
+
* | Yes | Yes | Any | Has structured work |
|
|
161
|
+
* | Yes | No (100%) | Any | No structure (complete) |
|
|
162
|
+
* | No | N/A | <= 1 | No structure (new) |
|
|
163
|
+
* | No | N/A | > 1 | No structure (adhoc pattern) |
|
|
164
|
+
*
|
|
165
|
+
* @param userSprint - User's current sprint assignment
|
|
166
|
+
* @param sprintChecklist - Sprint task data from graph/file (with progress info)
|
|
167
|
+
* @returns WorkStructureStatus with decision
|
|
168
|
+
*/
|
|
169
|
+
export function checkWorkStructure(userSprint, sprintChecklist) {
|
|
170
|
+
// Case 1: No sprint assignment
|
|
171
|
+
if (!userSprint || !userSprint.sprintId) {
|
|
172
|
+
return {
|
|
173
|
+
hasStructuredWork: false,
|
|
174
|
+
sprintId: null,
|
|
175
|
+
incompleteTasks: 0,
|
|
176
|
+
consecutiveAdhocSessions: userSprint?.consecutiveAdhocSessions || 0,
|
|
177
|
+
shouldShowPlanningMenu: true,
|
|
178
|
+
reason: 'no_sprint'
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// Case 2: Sprint assigned but no checklist data (graph unavailable)
|
|
182
|
+
if (!sprintChecklist) {
|
|
183
|
+
// Trust the sprint assignment, assume structured
|
|
184
|
+
return {
|
|
185
|
+
hasStructuredWork: true,
|
|
186
|
+
sprintId: userSprint.sprintId,
|
|
187
|
+
incompleteTasks: -1, // Unknown
|
|
188
|
+
consecutiveAdhocSessions: 0,
|
|
189
|
+
shouldShowPlanningMenu: false,
|
|
190
|
+
reason: 'has_sprint'
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// Calculate incomplete tasks
|
|
194
|
+
let incompleteTasks;
|
|
195
|
+
if (sprintChecklist.progress) {
|
|
196
|
+
incompleteTasks = sprintChecklist.progress.total - sprintChecklist.progress.complete;
|
|
197
|
+
}
|
|
198
|
+
else if (sprintChecklist.tasks) {
|
|
199
|
+
incompleteTasks = sprintChecklist.tasks.filter(t => t.state === 'todo' || t.state === 'in_progress').length;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
incompleteTasks = -1; // Unknown
|
|
203
|
+
}
|
|
204
|
+
// Case 3: Sprint with incomplete tasks
|
|
205
|
+
if (incompleteTasks > 0 || incompleteTasks === -1) {
|
|
206
|
+
return {
|
|
207
|
+
hasStructuredWork: true,
|
|
208
|
+
sprintId: userSprint.sprintId,
|
|
209
|
+
incompleteTasks,
|
|
210
|
+
consecutiveAdhocSessions: 0,
|
|
211
|
+
shouldShowPlanningMenu: false,
|
|
212
|
+
reason: 'has_sprint'
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
// Case 4: Sprint 100% complete
|
|
216
|
+
return {
|
|
217
|
+
hasStructuredWork: false,
|
|
218
|
+
sprintId: userSprint.sprintId,
|
|
219
|
+
incompleteTasks: 0,
|
|
220
|
+
consecutiveAdhocSessions: userSprint.consecutiveAdhocSessions || 0,
|
|
221
|
+
shouldShowPlanningMenu: true,
|
|
222
|
+
reason: 'all_tasks_complete'
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Increment ad-hoc session counter
|
|
227
|
+
* Called when user chooses ad-hoc work in planning menu
|
|
228
|
+
*/
|
|
229
|
+
export async function incrementAdhocSessionCount() {
|
|
230
|
+
const filePath = await getUserSprintFilePath();
|
|
231
|
+
let data = {};
|
|
232
|
+
try {
|
|
233
|
+
if (await fs.pathExists(filePath)) {
|
|
234
|
+
data = await fs.readJSON(filePath);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
// Start fresh if file is corrupted
|
|
239
|
+
}
|
|
240
|
+
const newCount = (data.consecutiveAdhocSessions || 0) + 1;
|
|
241
|
+
data.isAdhoc = true;
|
|
242
|
+
data.consecutiveAdhocSessions = newCount;
|
|
243
|
+
data.lastAdhocSessionAt = new Date().toISOString();
|
|
244
|
+
await fs.ensureDir(path.dirname(filePath));
|
|
245
|
+
await fs.writeJSON(filePath, data, { spaces: 2 });
|
|
246
|
+
return newCount;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Reset ad-hoc session counter
|
|
250
|
+
* Called when user starts structured work (creates/selects epic/sprint)
|
|
251
|
+
*/
|
|
252
|
+
export async function resetAdhocSessionCount() {
|
|
253
|
+
const filePath = await getUserSprintFilePath();
|
|
254
|
+
try {
|
|
255
|
+
if (await fs.pathExists(filePath)) {
|
|
256
|
+
const data = await fs.readJSON(filePath);
|
|
257
|
+
data.isAdhoc = false;
|
|
258
|
+
data.consecutiveAdhocSessions = 0;
|
|
259
|
+
await fs.writeJSON(filePath, data, { spaces: 2 });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// Ignore errors - non-critical
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Create sprint assignment from sprint ID (for graph-based sprints)
|
|
268
|
+
*/
|
|
269
|
+
export function createAssignmentFromSprintId(sprintId, sprintName, assignedBy = 'auto') {
|
|
270
|
+
// Extract epic ID from sprint ID (e.g., e016_s04 -> e016, adhoc_260126_s01 -> adhoc_260126)
|
|
271
|
+
const parts = sprintId.split('_s');
|
|
272
|
+
const epicId = parts[0] || sprintId;
|
|
273
|
+
return {
|
|
274
|
+
sprintId,
|
|
275
|
+
epicId,
|
|
276
|
+
sprintFile: '', // Graph-based, no local file
|
|
277
|
+
sprintName,
|
|
278
|
+
assignedAt: new Date().toISOString(),
|
|
279
|
+
assignedBy
|
|
280
|
+
};
|
|
281
|
+
}
|
|
147
282
|
//# sourceMappingURL=user-sprint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-sprint.js","sourceRoot":"","sources":["../../src/lib/user-sprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"user-sprint.js","sourceRoot":"","sources":["../../src/lib/user-sprint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2026-01-26
|
|
5
|
+
* @tags: [reconciliation, handoff, untracked-work, coaching, epic-016-s04]
|
|
6
|
+
* @related: [handoff.ts, planning-menu.ts, user-sprint.ts, event-logger.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [prompts, chalk, simple-git, event-logger]
|
|
10
|
+
*/
|
|
11
|
+
export interface WorkReconciliationResult {
|
|
12
|
+
hasUntrackedWork: boolean;
|
|
13
|
+
untrackedCommits: number;
|
|
14
|
+
untrackedFiles: number;
|
|
15
|
+
userAction: 'tracked' | 'skipped' | 'no-work' | 'cancelled';
|
|
16
|
+
taskCreated?: string;
|
|
17
|
+
}
|
|
18
|
+
interface SessionWorkSummary {
|
|
19
|
+
commits: Array<{
|
|
20
|
+
hash: string;
|
|
21
|
+
message: string;
|
|
22
|
+
date: string;
|
|
23
|
+
}>;
|
|
24
|
+
modifiedFiles: string[];
|
|
25
|
+
hasActiveTask: boolean;
|
|
26
|
+
currentSprintId: string | null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get summary of work done in current session
|
|
30
|
+
*/
|
|
31
|
+
declare function getSessionWorkSummary(): Promise<SessionWorkSummary>;
|
|
32
|
+
/**
|
|
33
|
+
* Determine if there's significant untracked work
|
|
34
|
+
*/
|
|
35
|
+
declare function hasSignificantUntrackedWork(summary: SessionWorkSummary): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Check for untracked work and prompt user if significant
|
|
38
|
+
*
|
|
39
|
+
* Called during handoff to catch work that should be tracked.
|
|
40
|
+
* Non-blocking - if user declines, handoff continues normally.
|
|
41
|
+
*
|
|
42
|
+
* @returns Reconciliation result with user's action
|
|
43
|
+
*/
|
|
44
|
+
export declare function reconcileWork(): Promise<WorkReconciliationResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Quick check if reconciliation might be needed (for verbose output)
|
|
47
|
+
*/
|
|
48
|
+
export declare function hasUntrackedWork(): Promise<boolean>;
|
|
49
|
+
export declare const __testing: {
|
|
50
|
+
UNTRACKED_THRESHOLD: {
|
|
51
|
+
commits: number;
|
|
52
|
+
files: number;
|
|
53
|
+
};
|
|
54
|
+
IGNORED_PATTERNS: RegExp[];
|
|
55
|
+
getSessionWorkSummary: typeof getSessionWorkSummary;
|
|
56
|
+
hasSignificantUntrackedWork: typeof hasSignificantUntrackedWork;
|
|
57
|
+
};
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=work-reconciliation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-reconciliation.d.ts","sourceRoot":"","sources":["../../src/lib/work-reconciliation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyBH,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAyBD;;GAEG;AACH,iBAAe,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CA4ClE;AAED;;GAEG;AACH,iBAAS,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAWzE;AAkID;;;;;;;GAOG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAyBvE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOzD;AAMD,eAAO,MAAM,SAAS;;;;;;;;CAKrB,CAAC"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2026-01-26
|
|
5
|
+
* @tags: [reconciliation, handoff, untracked-work, coaching, epic-016-s04]
|
|
6
|
+
* @related: [handoff.ts, planning-menu.ts, user-sprint.ts, event-logger.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [prompts, chalk, simple-git, event-logger]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Handoff Reconciliation (EPIC-016 Sprint 4 t06)
|
|
13
|
+
*
|
|
14
|
+
* Catches untracked work at session end by:
|
|
15
|
+
* 1. Detecting meaningful changes (commits, modified files)
|
|
16
|
+
* 2. Comparing against tracked sprint/task work
|
|
17
|
+
* 3. Prompting user to create ad-hoc tasks for untracked work
|
|
18
|
+
*
|
|
19
|
+
* Goal: Ensure all significant work is captured for knowledge graph
|
|
20
|
+
* without being annoying or slowing down the workflow.
|
|
21
|
+
*/
|
|
22
|
+
import prompts from 'prompts';
|
|
23
|
+
import chalk from 'chalk';
|
|
24
|
+
import simpleGit from 'simple-git';
|
|
25
|
+
import { logEvent } from './event-logger.js';
|
|
26
|
+
import { getUserCurrentSprint } from './user-sprint.js';
|
|
27
|
+
import { createQuickFixTask } from '../commands/sprint/quick-fix.js';
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// Constants
|
|
30
|
+
// =============================================================================
|
|
31
|
+
// Minimum thresholds for prompting about untracked work
|
|
32
|
+
const UNTRACKED_THRESHOLD = {
|
|
33
|
+
commits: 1, // Prompt if 1+ commits without task
|
|
34
|
+
files: 5, // Or 5+ modified files
|
|
35
|
+
};
|
|
36
|
+
// File patterns to ignore when counting modified files
|
|
37
|
+
const IGNORED_PATTERNS = [
|
|
38
|
+
/^\.ginko\//,
|
|
39
|
+
/^node_modules\//,
|
|
40
|
+
/\.log$/,
|
|
41
|
+
/\.tmp$/,
|
|
42
|
+
/\.lock$/,
|
|
43
|
+
];
|
|
44
|
+
// =============================================================================
|
|
45
|
+
// Work Detection
|
|
46
|
+
// =============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Get summary of work done in current session
|
|
49
|
+
*/
|
|
50
|
+
async function getSessionWorkSummary() {
|
|
51
|
+
const git = simpleGit();
|
|
52
|
+
// Get current sprint info
|
|
53
|
+
const userSprint = await getUserCurrentSprint();
|
|
54
|
+
const hasActiveTask = userSprint !== null;
|
|
55
|
+
const currentSprintId = userSprint?.sprintId || null;
|
|
56
|
+
// Get recent commits (last 24 hours or since last handoff marker)
|
|
57
|
+
let commits = [];
|
|
58
|
+
try {
|
|
59
|
+
const log = await git.log({
|
|
60
|
+
'--since': '24 hours ago',
|
|
61
|
+
maxCount: 20,
|
|
62
|
+
});
|
|
63
|
+
commits = log.all.map(c => ({
|
|
64
|
+
hash: c.hash.slice(0, 7),
|
|
65
|
+
message: c.message.split('\n')[0],
|
|
66
|
+
date: c.date,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Git log failed - might not be a git repo
|
|
71
|
+
}
|
|
72
|
+
// Get modified files (staged + unstaged)
|
|
73
|
+
let modifiedFiles = [];
|
|
74
|
+
try {
|
|
75
|
+
const status = await git.status();
|
|
76
|
+
modifiedFiles = [
|
|
77
|
+
...status.modified,
|
|
78
|
+
...status.staged,
|
|
79
|
+
...status.not_added,
|
|
80
|
+
].filter(f => !IGNORED_PATTERNS.some(p => p.test(f)));
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Git status failed
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
commits,
|
|
87
|
+
modifiedFiles,
|
|
88
|
+
hasActiveTask,
|
|
89
|
+
currentSprintId,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Determine if there's significant untracked work
|
|
94
|
+
*/
|
|
95
|
+
function hasSignificantUntrackedWork(summary) {
|
|
96
|
+
// If user has an active task, assume work is tracked
|
|
97
|
+
if (summary.hasActiveTask) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
// Check thresholds
|
|
101
|
+
return (summary.commits.length >= UNTRACKED_THRESHOLD.commits ||
|
|
102
|
+
summary.modifiedFiles.length >= UNTRACKED_THRESHOLD.files);
|
|
103
|
+
}
|
|
104
|
+
// =============================================================================
|
|
105
|
+
// User Prompts
|
|
106
|
+
// =============================================================================
|
|
107
|
+
/**
|
|
108
|
+
* Prompt user about untracked work
|
|
109
|
+
*/
|
|
110
|
+
async function promptForUntrackedWork(summary) {
|
|
111
|
+
console.log('');
|
|
112
|
+
console.log(chalk.yellow('📋 You have work that may not be tracked:'));
|
|
113
|
+
if (summary.commits.length > 0) {
|
|
114
|
+
console.log(chalk.dim(` ${summary.commits.length} commit(s) in the last 24h`));
|
|
115
|
+
// Show first commit message as context
|
|
116
|
+
if (summary.commits[0]) {
|
|
117
|
+
console.log(chalk.dim(` Latest: "${summary.commits[0].message.slice(0, 50)}..."`));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (summary.modifiedFiles.length > 0) {
|
|
121
|
+
console.log(chalk.dim(` ${summary.modifiedFiles.length} modified file(s)`));
|
|
122
|
+
}
|
|
123
|
+
console.log('');
|
|
124
|
+
const { action } = await prompts({
|
|
125
|
+
type: 'select',
|
|
126
|
+
name: 'action',
|
|
127
|
+
message: 'Would you like to track this work?',
|
|
128
|
+
choices: [
|
|
129
|
+
{
|
|
130
|
+
title: 'Yes, create a quick task',
|
|
131
|
+
description: 'Track this work with a simple description',
|
|
132
|
+
value: 'track',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
title: 'No, skip this time',
|
|
136
|
+
description: 'Continue without tracking',
|
|
137
|
+
value: 'skip',
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
});
|
|
141
|
+
if (action === undefined) {
|
|
142
|
+
return {
|
|
143
|
+
hasUntrackedWork: true,
|
|
144
|
+
untrackedCommits: summary.commits.length,
|
|
145
|
+
untrackedFiles: summary.modifiedFiles.length,
|
|
146
|
+
userAction: 'cancelled',
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (action === 'skip') {
|
|
150
|
+
// Log that user skipped tracking
|
|
151
|
+
await logEvent({
|
|
152
|
+
category: 'decision',
|
|
153
|
+
description: 'Skipped tracking untracked work at handoff',
|
|
154
|
+
tags: ['handoff', 'untracked-work', 'skipped'],
|
|
155
|
+
impact: 'low',
|
|
156
|
+
}).catch(() => { });
|
|
157
|
+
return {
|
|
158
|
+
hasUntrackedWork: true,
|
|
159
|
+
untrackedCommits: summary.commits.length,
|
|
160
|
+
untrackedFiles: summary.modifiedFiles.length,
|
|
161
|
+
userAction: 'skipped',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// User wants to track - get description
|
|
165
|
+
const { description } = await prompts({
|
|
166
|
+
type: 'text',
|
|
167
|
+
name: 'description',
|
|
168
|
+
message: 'Brief description of the work:',
|
|
169
|
+
initial: summary.commits[0]?.message.slice(0, 50) || '',
|
|
170
|
+
validate: (v) => v.trim().length >= 5 ? true : 'Please provide a brief description',
|
|
171
|
+
});
|
|
172
|
+
if (!description) {
|
|
173
|
+
return {
|
|
174
|
+
hasUntrackedWork: true,
|
|
175
|
+
untrackedCommits: summary.commits.length,
|
|
176
|
+
untrackedFiles: summary.modifiedFiles.length,
|
|
177
|
+
userAction: 'cancelled',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
// Create quick-fix task
|
|
181
|
+
try {
|
|
182
|
+
const result = await createQuickFixTask(description.trim());
|
|
183
|
+
if (result.success && result.taskId) {
|
|
184
|
+
console.log(chalk.green(`✓ Created: ${result.taskId}`));
|
|
185
|
+
return {
|
|
186
|
+
hasUntrackedWork: true,
|
|
187
|
+
untrackedCommits: summary.commits.length,
|
|
188
|
+
untrackedFiles: summary.modifiedFiles.length,
|
|
189
|
+
userAction: 'tracked',
|
|
190
|
+
taskCreated: result.taskId,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
console.log(chalk.dim('Task creation skipped (graph may not be initialized)'));
|
|
196
|
+
}
|
|
197
|
+
// Log the work even if task creation failed
|
|
198
|
+
await logEvent({
|
|
199
|
+
category: 'feature',
|
|
200
|
+
description: `Handoff work: ${description}`,
|
|
201
|
+
tags: ['handoff', 'untracked-work', 'logged'],
|
|
202
|
+
impact: 'medium',
|
|
203
|
+
}).catch(() => { });
|
|
204
|
+
return {
|
|
205
|
+
hasUntrackedWork: true,
|
|
206
|
+
untrackedCommits: summary.commits.length,
|
|
207
|
+
untrackedFiles: summary.modifiedFiles.length,
|
|
208
|
+
userAction: 'tracked',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
// =============================================================================
|
|
212
|
+
// Main Function
|
|
213
|
+
// =============================================================================
|
|
214
|
+
/**
|
|
215
|
+
* Check for untracked work and prompt user if significant
|
|
216
|
+
*
|
|
217
|
+
* Called during handoff to catch work that should be tracked.
|
|
218
|
+
* Non-blocking - if user declines, handoff continues normally.
|
|
219
|
+
*
|
|
220
|
+
* @returns Reconciliation result with user's action
|
|
221
|
+
*/
|
|
222
|
+
export async function reconcileWork() {
|
|
223
|
+
try {
|
|
224
|
+
const summary = await getSessionWorkSummary();
|
|
225
|
+
if (!hasSignificantUntrackedWork(summary)) {
|
|
226
|
+
return {
|
|
227
|
+
hasUntrackedWork: false,
|
|
228
|
+
untrackedCommits: 0,
|
|
229
|
+
untrackedFiles: 0,
|
|
230
|
+
userAction: 'no-work',
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
return await promptForUntrackedWork(summary);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
// Non-critical - don't block handoff on reconciliation errors
|
|
237
|
+
console.warn(chalk.dim('Work reconciliation skipped:'), error instanceof Error ? error.message : String(error));
|
|
238
|
+
return {
|
|
239
|
+
hasUntrackedWork: false,
|
|
240
|
+
untrackedCommits: 0,
|
|
241
|
+
untrackedFiles: 0,
|
|
242
|
+
userAction: 'no-work',
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Quick check if reconciliation might be needed (for verbose output)
|
|
248
|
+
*/
|
|
249
|
+
export async function hasUntrackedWork() {
|
|
250
|
+
try {
|
|
251
|
+
const summary = await getSessionWorkSummary();
|
|
252
|
+
return hasSignificantUntrackedWork(summary);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// =============================================================================
|
|
259
|
+
// Exports for Testing
|
|
260
|
+
// =============================================================================
|
|
261
|
+
export const __testing = {
|
|
262
|
+
UNTRACKED_THRESHOLD,
|
|
263
|
+
IGNORED_PATTERNS,
|
|
264
|
+
getSessionWorkSummary,
|
|
265
|
+
hasSignificantUntrackedWork,
|
|
266
|
+
};
|
|
267
|
+
//# sourceMappingURL=work-reconciliation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-reconciliation.js","sourceRoot":"","sources":["../../src/lib/work-reconciliation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-instructions-template.d.ts","sourceRoot":"","sources":["../../src/templates/ai-instructions-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CA4G/C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAmC3C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAkB5C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAwChD;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAuCxC;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,
|
|
1
|
+
{"version":3,"file":"ai-instructions-template.d.ts","sourceRoot":"","sources":["../../src/templates/ai-instructions-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CA4G/C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAmC3C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAkB5C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAwChD;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAuCxC;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAiEjD;IAEA,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM;IAuDpF,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAqBpC,OAAO,CAAC,MAAM,CAAC,8BAA8B;IA0C7C,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAerC,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAQlC"}
|
|
@@ -293,7 +293,7 @@ ginko sync --type ADR # Sync only ADRs
|
|
|
293
293
|
|
|
294
294
|
| Question Type | File Location |
|
|
295
295
|
|--------------|---------------|
|
|
296
|
-
| Sprint progress | \`docs/sprints/
|
|
296
|
+
| Sprint progress | \`docs/sprints/SPRINT-*.md\` (scan for active sprint) |
|
|
297
297
|
| Architecture decisions | \`docs/adr/ADR-*.md\` |
|
|
298
298
|
| Project goals | \`docs/PROJECT-CHARTER.md\` |
|
|
299
299
|
| Recent activity | \`.ginko/sessions/[user]/current-events.jsonl\` |
|
|
@@ -302,11 +302,13 @@ ginko sync --type ADR # Sync only ADRs
|
|
|
302
302
|
### Common Query Recipes
|
|
303
303
|
|
|
304
304
|
**"What's our sprint progress?"**
|
|
305
|
-
→
|
|
305
|
+
→ Use graph query or scan sprint files:
|
|
306
306
|
\`\`\`bash
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
307
|
+
# Via graph (preferred - EPIC-015 Sprint 3)
|
|
308
|
+
ginko graph query "current sprint progress"
|
|
309
|
+
|
|
310
|
+
# Fallback: scan sprint files
|
|
311
|
+
ls docs/sprints/SPRINT-*.md | tail -1 | xargs grep -c "\\[x\\]" # complete tasks
|
|
310
312
|
\`\`\`
|
|
311
313
|
|
|
312
314
|
**"How do we handle X?" / "What's our approach to X?"**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-instructions-template.js","sourceRoot":"","sources":["../../src/templates/ai-instructions-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAU,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4GnD,CAAC;IAEQ,MAAM,CAAU,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC/C,CAAC;IAEQ,MAAM,CAAU,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;CAkBhD,CAAC;IAEQ,MAAM,CAAU,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCpD,CAAC;IAEQ,MAAM,CAAU,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuC5C,CAAC;IAEQ,MAAM,CAAU,yBAAyB,GAAG
|
|
1
|
+
{"version":3,"file":"ai-instructions-template.js","sourceRoot":"","sources":["../../src/templates/ai-instructions-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAU,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4GnD,CAAC;IAEQ,MAAM,CAAU,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC/C,CAAC;IAEQ,MAAM,CAAU,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;CAkBhD,CAAC;IAEQ,MAAM,CAAU,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCpD,CAAC;IAEQ,MAAM,CAAU,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuC5C,CAAC;IAEQ,MAAM,CAAU,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiErD,CAAC;IAEA,MAAM,CAAC,QAAQ,CAAC,SAA4B,EAAE,oBAA6B;QACzE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,IAAI,cAAc,CAAC;QACnD,OAAO,KAAK,SAAS,CAAC,WAAW,MAAM,MAAM;;;cAGnC,SAAS,CAAC,WAAW;oBACf,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;mBAC/B,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7B,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;yBAC1B,SAAS,CAAC,cAAc;mBAC9B,SAAS,CAAC,IAAI;;EAE/B,IAAI,CAAC,uBAAuB;;;EAG5B,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;;EAErC,IAAI,CAAC,mBAAmB;;EAExB,IAAI,CAAC,oBAAoB;;EAEzB,IAAI,CAAC,wBAAwB;;EAE7B,IAAI,CAAC,gBAAgB;;EAErB,IAAI,CAAC,yBAAyB;;EAE9B,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC;;EAE9C,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;;EAEtC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;;;2BAGT,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,SAAS;;EAEnE,oBAAoB,IAAI,EAAE;;;;;;;;;;;;;;;;CAgB3B,CAAC;IACA,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,SAA4B;QAC/D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,SAAS,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,oBAAoB,SAAS,CAAC,cAAc,YAAY,CAAC,CAAC;YACxE,QAAQ,CAAC,IAAI,CAAC,uBAAuB,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5H,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC;IAClF,CAAC;IAEO,MAAM,CAAC,8BAA8B,CAAC,SAA4B;QACxE,MAAM,QAAQ,GAAa,CAAC,gCAAgC,CAAC,CAAC;QAE9D,yBAAyB;QACzB,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtF,QAAQ,CAAC,IAAI,CAAC;;;;oDAIgC,CAAC,CAAC;QAClD,CAAC;QAED,uBAAuB;QACvB,IAAI,SAAS,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC;;;;uCAImB,CAAC,CAAC;QACrC,CAAC;QAED,eAAe;QACf,IAAI,SAAS,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC;;;;0CAIsB,CAAC,CAAC;QACxC,CAAC;QAED,sBAAsB;QACtB,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC;;;;wCAIoB,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEO,MAAM,CAAC,sBAAsB,CAAC,SAA4B;QAChE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO;;oDAEuC,CAAC;QACjD,CAAC;QAED,OAAO;wBACa,SAAS,CAAC,WAAW,IAAI,UAAU;;;;oCAIvB,CAAC;IACnC,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,SAA4B;QAC5D,OAAO;;;;uBAIY,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,SAAS;iDAChB,CAAC;IAChD,CAAC"}
|
|
@@ -261,7 +261,6 @@ updated: YYYY-MM-DD
|
|
|
261
261
|
## Sprint Tasks
|
|
262
262
|
|
|
263
263
|
### TASK-1: [Task Title] ([Effort])
|
|
264
|
-
**Status:** [ ] Not Started
|
|
265
264
|
**Priority:** HIGH
|
|
266
265
|
|
|
267
266
|
**Goal:** [What this task achieves]
|
|
@@ -279,7 +278,6 @@ Avoid: [gotcha-name]
|
|
|
279
278
|
---
|
|
280
279
|
|
|
281
280
|
### TASK-2: [Task Title] ([Effort])
|
|
282
|
-
**Status:** [ ] Not Started
|
|
283
281
|
**Priority:** MEDIUM
|
|
284
282
|
|
|
285
283
|
...
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,QAAQ,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.js
CHANGED
|
@@ -22,7 +22,7 @@ export const DEFAULT_GINKO_CONFIG = {
|
|
|
22
22
|
paths: {
|
|
23
23
|
docs: "docs",
|
|
24
24
|
sprints: "docs/sprints",
|
|
25
|
-
|
|
25
|
+
// EPIC-015 Sprint 3: currentSprint path deprecated - sprint state comes from graph
|
|
26
26
|
prds: "docs/PRD",
|
|
27
27
|
adrs: "docs/adr",
|
|
28
28
|
architecture: "docs/architecture",
|
|
@@ -34,16 +34,18 @@ export const DEFAULT_GINKO_CONFIG = {
|
|
|
34
34
|
workMode: {
|
|
35
35
|
default: "think-build",
|
|
36
36
|
documentationDepth: {
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
37
|
+
// EPIC-015 Sprint 3: currentSprint removed - sprint state comes from graph
|
|
38
|
+
"hack-ship": ["sprints", "sessions"],
|
|
39
|
+
"think-build": ["sprints", "sessions", "adrs", "prds"],
|
|
40
|
+
"full-planning": ["sprints", "sessions", "adrs", "prds", "architecture", "bestPractices"]
|
|
40
41
|
}
|
|
41
42
|
},
|
|
42
43
|
contextLoading: {
|
|
43
44
|
progressive: true,
|
|
44
45
|
maxDepth: 3,
|
|
45
46
|
followReferences: true,
|
|
46
|
-
|
|
47
|
+
// EPIC-015 Sprint 3: currentSprint removed - sprint state comes from graph
|
|
48
|
+
priorityOrder: ["sessions", "sprints", "prds", "adrs", "context"]
|
|
47
49
|
}
|
|
48
50
|
};
|
|
49
51
|
/**
|
package/dist/types/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6DH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,OAAO,EAAE,4CAA4C;IACrD,OAAO,EAAE,KAAK;IACd,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;KACf;IACD,KAAK,EAAE;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,cAAc;QACvB,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6DH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,OAAO,EAAE,4CAA4C;IACrD,OAAO,EAAE,KAAK;IACd,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;KACf;IACD,KAAK,EAAE;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,cAAc;QACvB,mFAAmF;QACnF,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,mBAAmB;QACjC,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,wBAAwB;QACjC,QAAQ,EAAE,iBAAiB;QAC3B,aAAa,EAAE,uBAAuB;KACvC;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,aAAa;QACtB,kBAAkB,EAAE;YAClB,2EAA2E;YAC3E,WAAW,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;YACpC,aAAa,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;YACtD,eAAe,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC;SAC1F;KACF;IACD,cAAc,EAAE;QACd,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,CAAC;QACX,gBAAgB,EAAE,IAAI;QACtB,2EAA2E;QAC3E,aAAa,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;KAClE;CACF,CAAC;AA0FF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAQ;IACjC,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE;QACL,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,UAAU;YACf,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,cAAc;SACxB;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gBAAgB;YACzB,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EAAE,gBAAgB;YACzB,QAAQ,EAAE,iBAAiB;YAC3B,aAAa,EAAE,uBAAuB;SACvC;KACF;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;KACpB;CACF,CAAC"}
|