gsd-pi 2.48.0-dev.2e7390c → 2.48.0-dev.ced2eca

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 (60) hide show
  1. package/dist/resources/extensions/gsd/auto-dispatch.js +17 -2
  2. package/dist/resources/extensions/gsd/auto-post-unit.js +17 -3
  3. package/dist/resources/extensions/gsd/auto-worktree.js +5 -2
  4. package/dist/resources/extensions/gsd/commands/handlers/auto.js +43 -3
  5. package/dist/resources/extensions/gsd/git-service.js +11 -10
  6. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +223 -56
  7. package/dist/resources/extensions/gsd/prompts/run-uat.md +4 -4
  8. package/dist/resources/extensions/gsd/worktree-command.js +1 -1
  9. package/dist/web/standalone/.next/BUILD_ID +1 -1
  10. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  11. package/dist/web/standalone/.next/build-manifest.json +2 -2
  12. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  13. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  14. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  15. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  17. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  21. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  22. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  24. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/index.html +1 -1
  30. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  33. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  37. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  38. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  39. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  40. package/dist/worktree-cli.js +1 -1
  41. package/package.json +1 -1
  42. package/src/resources/extensions/github-sync/tests/commit-linking.test.ts +8 -4
  43. package/src/resources/extensions/gsd/auto-dispatch.ts +18 -1
  44. package/src/resources/extensions/gsd/auto-post-unit.ts +18 -3
  45. package/src/resources/extensions/gsd/auto-worktree.ts +4 -2
  46. package/src/resources/extensions/gsd/commands/handlers/auto.ts +46 -3
  47. package/src/resources/extensions/gsd/git-service.ts +12 -11
  48. package/src/resources/extensions/gsd/prompts/discuss-headless.md +223 -56
  49. package/src/resources/extensions/gsd/prompts/run-uat.md +4 -4
  50. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +2 -2
  51. package/src/resources/extensions/gsd/tests/auto-stash-merge.test.ts +1 -1
  52. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +14 -12
  53. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +1 -1
  54. package/src/resources/extensions/gsd/tests/git-service.test.ts +19 -9
  55. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +2 -2
  56. package/src/resources/extensions/gsd/tests/parallel-merge.test.ts +6 -6
  57. package/src/resources/extensions/gsd/tests/run-uat.test.ts +68 -0
  58. package/src/resources/extensions/gsd/worktree-command.ts +1 -1
  59. /package/dist/web/standalone/.next/static/{uTZ196cPUij3KcIDCweR6 → PTL5V00OW8q4-092tUQKx}/_buildManifest.js +0 -0
  60. /package/dist/web/standalone/.next/static/{uTZ196cPUij3KcIDCweR6 → PTL5V00OW8q4-092tUQKx}/_ssgManifest.js +0 -0
@@ -343,6 +343,74 @@ test('(m) non-artifact UAT skip', async () => {
343
343
  }
344
344
  });
345
345
 
346
+ test('(o) verdict gate: PARTIAL is acceptable for mixed/human-experience/live-runtime UAT types', () => {
347
+ // This test verifies the contract that extractUatType correctly identifies
348
+ // the modes where PARTIAL should not block progression.
349
+ // The verdict gate in auto-dispatch.ts uses this to build acceptableVerdicts.
350
+ const mixedType = extractUatType(makeUatContent('mixed'));
351
+ const humanExpType = extractUatType(makeUatContent('human-experience'));
352
+ const liveRuntimeType = extractUatType(makeUatContent('live-runtime'));
353
+ const artifactType = extractUatType(makeUatContent('artifact-driven'));
354
+ const browserType = extractUatType(makeUatContent('browser-executable'));
355
+ const runtimeExecType = extractUatType(makeUatContent('runtime-executable'));
356
+
357
+ // These modes should allow PARTIAL (non-fully-automatable)
358
+ const partialAcceptableModes = ['mixed', 'human-experience', 'live-runtime'];
359
+ assert.ok(
360
+ partialAcceptableModes.includes(mixedType!),
361
+ `mixed → "${mixedType}" is in partialAcceptableModes`,
362
+ );
363
+ assert.ok(
364
+ partialAcceptableModes.includes(humanExpType!),
365
+ `human-experience → "${humanExpType}" is in partialAcceptableModes`,
366
+ );
367
+ assert.ok(
368
+ partialAcceptableModes.includes(liveRuntimeType!),
369
+ `live-runtime → "${liveRuntimeType}" is in partialAcceptableModes`,
370
+ );
371
+
372
+ // These modes should NOT allow PARTIAL (fully automatable)
373
+ assert.ok(
374
+ !partialAcceptableModes.includes(artifactType!),
375
+ `artifact-driven → "${artifactType}" is NOT in partialAcceptableModes`,
376
+ );
377
+ assert.ok(
378
+ !partialAcceptableModes.includes(browserType!),
379
+ `browser-executable → "${browserType}" is NOT in partialAcceptableModes`,
380
+ );
381
+ assert.ok(
382
+ !partialAcceptableModes.includes(runtimeExecType!),
383
+ `runtime-executable → "${runtimeExecType}" is NOT in partialAcceptableModes`,
384
+ );
385
+ });
386
+
387
+ test('(p) run-uat prompt allows PASS when human-only checks remain as NEEDS-HUMAN', () => {
388
+ const promptResult = loadPromptFromWorktree('run-uat', {
389
+ workingDirectory: '/tmp/test-project',
390
+ milestoneId: 'M001',
391
+ sliceId: 'S01',
392
+ uatPath: '.gsd/milestones/M001/slices/S01/S01-UAT.md',
393
+ uatResultPath: '.gsd/milestones/M001/slices/S01/S01-UAT-RESULT.md',
394
+ uatType: 'mixed',
395
+ inlinedContext: '<!-- no context -->',
396
+ });
397
+
398
+ // PASS verdict should be usable when automatable checks pass (even with NEEDS-HUMAN remaining)
399
+ assert.ok(
400
+ /PASS.*automatable checks passed/i.test(promptResult),
401
+ 'prompt defines PASS as valid when all automatable checks passed',
402
+ );
403
+ assert.ok(
404
+ /PARTIAL.*automatable checks.*(skipped|inconclusive)/i.test(promptResult),
405
+ 'prompt reserves PARTIAL for when automatable checks themselves are inconclusive',
406
+ );
407
+ // human-experience mode should NOT force PARTIAL when automatable checks pass
408
+ assert.ok(
409
+ !promptResult.includes('use an overall verdict of `PARTIAL`'),
410
+ 'prompt does not force PARTIAL verdict for human-experience mode',
411
+ );
412
+ });
413
+
346
414
  test('(n) stale replay guard', async () => {
347
415
  const base = createFixtureBase();
348
416
  try {
@@ -661,7 +661,7 @@ async function handleMerge(
661
661
  // --- Deterministic merge path (preferred) ---
662
662
  // Try a direct squash-merge first. Only fall back to LLM on conflict.
663
663
  const commitType = inferCommitType(name);
664
- const commitMessage = `${commitType}(${name}): merge worktree ${name}`;
664
+ const commitMessage = `${commitType}: merge worktree ${name}\n\nGSD-Worktree: ${name}`;
665
665
 
666
666
  // Reconcile worktree DB into main DB before squash merge
667
667
  const wtDbPath = join(worktreePath(basePath, name), ".gsd", "gsd.db");