gsd-pi 2.49.0-dev.c319e08 → 2.49.0-dev.de3d9f6

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 (42) hide show
  1. package/dist/resources/extensions/gsd/auto/session.js +0 -4
  2. package/dist/resources/extensions/gsd/guided-flow-queue.js +11 -10
  3. package/dist/resources/extensions/gsd/worktree-resolver.js +0 -24
  4. package/dist/web/standalone/.next/BUILD_ID +1 -1
  5. package/dist/web/standalone/.next/app-path-routes-manifest.json +18 -18
  6. package/dist/web/standalone/.next/build-manifest.json +2 -2
  7. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  8. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  9. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  10. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  17. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  21. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  22. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  24. package/dist/web/standalone/.next/server/app/index.html +1 -1
  25. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  27. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  30. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app-paths-manifest.json +18 -18
  32. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  33. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  34. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  35. package/package.json +1 -1
  36. package/src/resources/extensions/gsd/auto/session.ts +0 -5
  37. package/src/resources/extensions/gsd/guided-flow-queue.ts +12 -11
  38. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -67
  39. package/src/resources/extensions/gsd/worktree-resolver.ts +0 -31
  40. package/src/resources/extensions/gsd/tests/queue-completed-milestone-perf.test.ts +0 -155
  41. /package/dist/web/standalone/.next/static/{QBhWLjeTSHlwrt9jbPmIz → ceckLbAMjhzHaQ3RPtJnT}/_buildManifest.js +0 -0
  42. /package/dist/web/standalone/.next/static/{QBhWLjeTSHlwrt9jbPmIz → ceckLbAMjhzHaQ3RPtJnT}/_ssgManifest.js +0 -0
@@ -1,155 +0,0 @@
1
- /**
2
- * Regression test for #2379: /gsd queue fails with 429 rate limit on projects
3
- * with many completed milestones.
4
- *
5
- * The bug: buildExistingMilestonesContext iterates over ALL milestones
6
- * (including completed ones) and calls loadFile for CONTEXT, SUMMARY,
7
- * CONTEXT-DRAFT, and ROADMAP files on each — causing excessive I/O that
8
- * triggers rate limits on large projects.
9
- *
10
- * The fix: completed milestones should emit a short summary line without
11
- * loading their heavy artifact files (CONTEXT.md, SUMMARY.md, etc.).
12
- */
13
-
14
- import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
15
- import { join } from "node:path";
16
- import { tmpdir } from "node:os";
17
-
18
- import { buildExistingMilestonesContext } from "../guided-flow-queue.ts";
19
- import type { GSDState, MilestoneRegistryEntry } from "../types.ts";
20
- import { createTestContext } from "./test-helpers.ts";
21
-
22
- const { assertTrue, assertEq, report } = createTestContext();
23
-
24
- // ─── Fixture: project with many completed milestones ─────────────────────
25
-
26
- const tmpBase = mkdtempSync(join(tmpdir(), "gsd-queue-perf-"));
27
- const gsd = join(tmpBase, ".gsd");
28
- mkdirSync(join(gsd, "milestones"), { recursive: true });
29
-
30
- const COMPLETED_COUNT = 25;
31
- const ACTIVE_COUNT = 1;
32
- const PENDING_COUNT = 2;
33
-
34
- const allMilestoneIds: string[] = [];
35
- const registry: MilestoneRegistryEntry[] = [];
36
-
37
- // Create 25 completed milestones with CONTEXT.md and SUMMARY.md files
38
- for (let i = 1; i <= COMPLETED_COUNT; i++) {
39
- const mid = `M${String(i).padStart(3, "0")}`;
40
- allMilestoneIds.push(mid);
41
- registry.push({ id: mid, title: `Completed milestone ${i}`, status: "complete" });
42
- mkdirSync(join(gsd, "milestones", mid), { recursive: true });
43
- writeFileSync(
44
- join(gsd, "milestones", mid, `${mid}-CONTEXT.md`),
45
- `# ${mid}: Completed milestone ${i}\n\nThis is a large context document for ${mid}.\n${"Lorem ipsum dolor sit amet. ".repeat(50)}\n`,
46
- );
47
- writeFileSync(
48
- join(gsd, "milestones", mid, `${mid}-SUMMARY.md`),
49
- `# ${mid} Summary\n\nDelivered feature ${i} successfully.\n`,
50
- );
51
- }
52
-
53
- // Create 1 active milestone
54
- {
55
- const mid = `M${String(COMPLETED_COUNT + 1).padStart(3, "0")}`;
56
- allMilestoneIds.push(mid);
57
- registry.push({ id: mid, title: "Active milestone", status: "active" });
58
- mkdirSync(join(gsd, "milestones", mid), { recursive: true });
59
- writeFileSync(
60
- join(gsd, "milestones", mid, `${mid}-CONTEXT.md`),
61
- `# ${mid}: Active milestone\n\nCurrently in progress.\n`,
62
- );
63
- writeFileSync(
64
- join(gsd, "milestones", mid, `${mid}-ROADMAP.md`),
65
- `# ${mid} Roadmap\n\nSlices planned.\n`,
66
- );
67
- }
68
-
69
- // Create 2 pending milestones
70
- for (let i = 0; i < PENDING_COUNT; i++) {
71
- const mid = `M${String(COMPLETED_COUNT + ACTIVE_COUNT + 1 + i).padStart(3, "0")}`;
72
- allMilestoneIds.push(mid);
73
- registry.push({ id: mid, title: `Pending milestone ${i + 1}`, status: "pending" });
74
- mkdirSync(join(gsd, "milestones", mid), { recursive: true });
75
- writeFileSync(
76
- join(gsd, "milestones", mid, `${mid}-CONTEXT.md`),
77
- `# ${mid}: Pending milestone ${i + 1}\n\nQueued work.\n`,
78
- );
79
- }
80
-
81
- const state: GSDState = {
82
- activeMilestone: { id: `M${String(COMPLETED_COUNT + 1).padStart(3, "0")}`, title: "Active milestone" },
83
- activeSlice: null,
84
- activeTask: null,
85
- phase: "executing",
86
- recentDecisions: [],
87
- blockers: [],
88
- nextAction: "",
89
- registry,
90
- };
91
-
92
- // ─── Test: completed milestones should NOT have their files loaded ────────
93
-
94
- console.log("\n=== Queue completed milestone performance (#2379) ===");
95
-
96
- const context = await buildExistingMilestonesContext(tmpBase, allMilestoneIds, state);
97
-
98
- // Active and pending milestones SHOULD have full context loaded
99
- const activeMid = `M${String(COMPLETED_COUNT + 1).padStart(3, "0")}`;
100
- assertTrue(
101
- context.includes("Currently in progress"),
102
- "Active milestone context content should be loaded",
103
- );
104
- assertTrue(
105
- context.includes("Slices planned"),
106
- "Active milestone roadmap should be loaded",
107
- );
108
-
109
- for (let i = 0; i < PENDING_COUNT; i++) {
110
- const mid = `M${String(COMPLETED_COUNT + ACTIVE_COUNT + 1 + i).padStart(3, "0")}`;
111
- assertTrue(
112
- context.includes(`Pending milestone ${i + 1}`),
113
- `Pending milestone ${mid} context should be loaded`,
114
- );
115
- }
116
-
117
- // Completed milestones should NOT have their CONTEXT.md body or SUMMARY.md
118
- // content loaded — only a status line
119
- for (let i = 1; i <= COMPLETED_COUNT; i++) {
120
- const mid = `M${String(i).padStart(3, "0")}`;
121
-
122
- // Should still mention the milestone ID and status
123
- assertTrue(
124
- context.includes(mid),
125
- `Completed milestone ${mid} should still be referenced`,
126
- );
127
-
128
- // Should NOT contain the heavy context body text
129
- assertTrue(
130
- !context.includes(`This is a large context document for ${mid}`),
131
- `Completed milestone ${mid} should NOT have its full CONTEXT.md body loaded`,
132
- );
133
-
134
- // Should NOT contain the summary body
135
- assertTrue(
136
- !context.includes(`Delivered feature ${i} successfully`),
137
- `Completed milestone ${mid} should NOT have its SUMMARY.md body loaded`,
138
- );
139
- }
140
-
141
- // ─── Test: the overall context should be reasonable in size ──────────────
142
-
143
- // With 25 completed milestones NOT loading files, the context should be
144
- // significantly smaller than if all files were loaded
145
- const contextLines = context.split("\n").length;
146
- assertTrue(
147
- contextLines < 200,
148
- `Context should be concise (got ${contextLines} lines); completed milestones should not inflate it`,
149
- );
150
-
151
- // ─── Cleanup ──────────────────────────────────────────────────────────────
152
-
153
- rmSync(tmpBase, { recursive: true, force: true });
154
-
155
- report();