@open-agent-toolkit/cli 0.3.37 → 0.3.39

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 (84) hide show
  1. package/README.md +2 -2
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/getting-started/bootstrap.md +15 -16
  4. package/assets/docs/getting-started/tool-packs.md +15 -14
  5. package/assets/docs/provider-sync/commands.md +6 -5
  6. package/assets/docs/provider-sync/manifest-and-drift.md +26 -19
  7. package/assets/docs/provider-sync/pilot-with-a-team.md +17 -17
  8. package/assets/docs/provider-sync/providers.md +4 -4
  9. package/assets/docs/provider-sync/scope-and-surface.md +5 -5
  10. package/assets/docs/reference/cli-reference.md +8 -5
  11. package/assets/docs/reference/oat-directory-structure.md +1 -1
  12. package/assets/docs/reference/project-artifacts.md +12 -3
  13. package/assets/docs/reference/troubleshooting.md +4 -5
  14. package/assets/docs/reference/what-oat-writes.md +54 -59
  15. package/assets/docs/skills/repo-improve.md +23 -19
  16. package/assets/docs/workflows/advanced/workflow-gates.md +7 -1
  17. package/assets/docs/workflows/projects/closeout/closeout-skills.md +9 -6
  18. package/assets/docs/workflows/projects/execution/execution-skills.md +1 -2
  19. package/assets/docs/workflows/projects/execution/implementation-execution.md +3 -2
  20. package/assets/docs/workflows/projects/lifecycle.md +3 -1
  21. package/assets/public-package-versions.json +4 -4
  22. package/assets/skills/oat-project-brief/SKILL.md +1 -1
  23. package/assets/skills/oat-project-brief/references/brief-contract.md +32 -9
  24. package/assets/skills/oat-project-complete/SKILL.md +17 -7
  25. package/assets/skills/oat-project-implement/SKILL.md +2 -2
  26. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +14 -4
  27. package/assets/skills/oat-project-pr-final/SKILL.md +2 -2
  28. package/assets/skills/oat-project-pr-progress/SKILL.md +23 -12
  29. package/assets/skills/oat-repo-knowledge-index/SKILL.md +226 -131
  30. package/dist/commands/doctor/index.d.ts.map +1 -1
  31. package/dist/commands/doctor/index.js +5 -2
  32. package/dist/commands/init/index.d.ts.map +1 -1
  33. package/dist/commands/init/index.js +10 -5
  34. package/dist/commands/init/tools/index.d.ts.map +1 -1
  35. package/dist/commands/init/tools/index.js +106 -28
  36. package/dist/commands/init/tools/project-guidance.js +1 -1
  37. package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
  38. package/dist/commands/project/closeout-check/index.js +4 -8
  39. package/dist/commands/project/delivery/check.d.ts.map +1 -1
  40. package/dist/commands/project/delivery/check.js +32 -14
  41. package/dist/commands/project/delivery/evidence.d.ts +39 -0
  42. package/dist/commands/project/delivery/evidence.d.ts.map +1 -1
  43. package/dist/commands/project/delivery/evidence.js +163 -17
  44. package/dist/commands/project/delivery/refresh.d.ts.map +1 -1
  45. package/dist/commands/project/delivery/refresh.js +13 -16
  46. package/dist/commands/project/journal-check/index.d.ts +2 -0
  47. package/dist/commands/project/journal-check/index.d.ts.map +1 -1
  48. package/dist/commands/project/journal-check/index.js +78 -1
  49. package/dist/commands/project/journal-check/types.d.ts +1 -1
  50. package/dist/commands/project/journal-check/types.d.ts.map +1 -1
  51. package/dist/commands/project/new/index.d.ts.map +1 -1
  52. package/dist/commands/project/new/index.js +1 -0
  53. package/dist/commands/project/new/scaffold.d.ts +1 -1
  54. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  55. package/dist/commands/project/new/scaffold.js +1 -1
  56. package/dist/commands/providers/codex/materialize.d.ts +5 -1
  57. package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
  58. package/dist/commands/providers/codex/materialize.js +6 -1
  59. package/dist/commands/shared/exact-path-commit.d.ts.map +1 -1
  60. package/dist/commands/shared/exact-path-commit.js +11 -1
  61. package/dist/commands/shared/scope-option.d.ts +3 -1
  62. package/dist/commands/shared/scope-option.d.ts.map +1 -1
  63. package/dist/commands/shared/scope-option.js +4 -2
  64. package/dist/commands/status/index.d.ts.map +1 -1
  65. package/dist/commands/status/index.js +4 -1
  66. package/dist/commands/tools/install/index.d.ts.map +1 -1
  67. package/dist/commands/tools/install/index.js +1 -1
  68. package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +11 -0
  69. package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -1
  70. package/dist/commands/tools/shared/pack-lifecycle-outcome.js +16 -0
  71. package/dist/config/oat-config.d.ts +6 -1
  72. package/dist/config/oat-config.d.ts.map +1 -1
  73. package/dist/config/oat-config.js +14 -22
  74. package/dist/index.d.ts +6 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +16 -0
  77. package/dist/providers/codex/codec/config-merge.d.ts +19 -0
  78. package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
  79. package/dist/providers/codex/codec/config-merge.js +75 -8
  80. package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
  81. package/dist/providers/codex/codec/sync-extension.js +84 -38
  82. package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
  83. package/dist/providers/cursor/codec/materialize.js +17 -1
  84. package/package.json +3 -3
@@ -348,13 +348,18 @@ async function runGuidedSetupImpl(context, dependencies, explicitProjectGuidance
348
348
  .map(({ adapter }) => adapter.displayName)
349
349
  : resolution.activeAdapters.map((adapter) => adapter.displayName);
350
350
  context.logger.info('[1/5] Tool packs…');
351
- // Defer the per-pack scope gate to the tools flow: `gate` asks the customize
352
- // prompt after pack selection (and only when a user-eligible pack is
353
- // selected). Non-interactive setup applies additive defaults with no prompt.
351
+ // An explicit --scope project|user reaches the tools flow as an explicit
352
+ // selection: packs install at that scope only. Otherwise defer the per-pack
353
+ // scope gate to the tools flow: `gate` asks the customize prompt after pack
354
+ // selection (and only when a user-eligible pack is selected).
355
+ // Non-interactive setup applies additive defaults with no prompt.
356
+ const explicitScope = context.scope === 'project' || context.scope === 'user';
354
357
  const scopeSelection = context.interactive
355
358
  ? 'gate'
356
359
  : 'defaults';
357
- const guidedContext = { ...context, scopeSelection };
360
+ const guidedContext = explicitScope
361
+ ? context
362
+ : { ...context, scopeSelection };
358
363
  const installedPacks = explicitProjectGuidance === undefined
359
364
  ? await dependencies.runToolPacks(guidedContext)
360
365
  : await dependencies.runToolPacks(guidedContext, explicitProjectGuidance);
@@ -761,7 +766,7 @@ export function createInitCommand(overrides = {}) {
761
766
  return withProjectGuidanceOptions(withScopeOption(new Command('init')))
762
767
  .description('Initialize canonical directories, manifest, and tool packs')
763
768
  .option('--hook', 'Install optional pre-commit hook')
764
- .option('--no-hook', 'Skip optional pre-commit hook install')
769
+ .option('--no-hook', 'Remove an installed optional pre-commit hook and skip installing one')
765
770
  .option('--setup', 'Run guided setup after initialization')
766
771
  .addCommand(createInitToolsCommand())
767
772
  .action(async (_options, command) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/tools/index.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ import { canonicalPathsForPacks, getInstalledCanonicalPaths, setInstalledCanonic
11
11
  import { packScopeFactsFromInventory, projectPackEvidence, } from '../../tools/shared/pack-evidence.js';
12
12
  import { inventoryPack, } from '../../tools/shared/pack-inventory.js';
13
13
  import { reconcilePackLifecycles, } from '../../tools/shared/pack-lifecycle.js';
14
- import { evaluatePackLifecycleOutcome, notRunProviderSyncOutcome, providerSyncOutcomeFromAutoSync, resolveAdditivePackScopeSelection, } from '../../tools/shared/pack-lifecycle-outcome.js';
14
+ import { evaluatePackLifecycleOutcome, notRunProviderSyncOutcome, providerSyncOutcomeFromAutoSync, resolveAdditivePackScopeSelection, resolveExplicitPackScopeSelection, } from '../../tools/shared/pack-lifecycle-outcome.js';
15
15
  import { getPackDefinition } from '../../tools/shared/pack-manifest.js';
16
16
  import { lifecycleProviderEvidence, withLifecycleProviderEvidence, } from '../../tools/shared/pack-provider-evidence.js';
17
17
  import { reconcileProjectToolsConfig } from '../../tools/shared/project-tools-config.js';
@@ -97,6 +97,42 @@ const USER_ELIGIBLE_PACKS = new Set([
97
97
  function isUserEligiblePack(pack) {
98
98
  return USER_ELIGIBLE_PACKS.has(pack);
99
99
  }
100
+ /**
101
+ * The concrete scope an aggregate install was explicitly limited to, or
102
+ * `null` when placement follows per-pack defaults (no flag, `--scope all`, or
103
+ * a guided-setup scope-selection mode).
104
+ */
105
+ function explicitRequestedScope(context) {
106
+ if (context.scopeSelection !== undefined)
107
+ return null;
108
+ return context.scope === 'project' || context.scope === 'user'
109
+ ? context.scope
110
+ : null;
111
+ }
112
+ function scopeOnlyDescription(pack) {
113
+ return `${pack} is ${getPackDefinition(pack).allowedScopes.join(' and ')}-scope only`;
114
+ }
115
+ /**
116
+ * Packs an explicit aggregate `--scope` cannot place, because the pack's
117
+ * manifest does not allow that scope.
118
+ */
119
+ function packsSkippedForScope(scope) {
120
+ if (scope === null)
121
+ return [];
122
+ return ALL_TOOL_PACKS.filter((pack) => !getPackDefinition(pack).allowedScopes.includes(scope)).map((pack) => ({
123
+ pack,
124
+ reason: `${scopeOnlyDescription(pack)}, so --scope ${scope} does not install it. Run \`oat tools install ${pack}\` to install it at ${getPackDefinition(pack).defaultScope} scope.`,
125
+ }));
126
+ }
127
+ class PackScopeNotAllowedError extends Error {
128
+ command;
129
+ constructor(pack, requested) {
130
+ const definition = getPackDefinition(pack);
131
+ const command = `oat tools install ${pack} --scope ${definition.defaultScope}`;
132
+ super(`${scopeOnlyDescription(pack)}; nothing was installed for --scope ${requested.join(', ')}. Run \`${command}\` instead.`);
133
+ this.command = command;
134
+ }
135
+ }
100
136
  async function loadPackEvidence(pack, projectRoot, userRoot, assetsRoot, inventory) {
101
137
  const canonical = await inventory({
102
138
  pack,
@@ -344,15 +380,13 @@ async function resolvePackScopes(context, selections, installedPackStates, depen
344
380
  }
345
381
  return scopes;
346
382
  }
347
- // Explicit --scope is additive for regular tools installs: union the
348
- // requested scope with the pack's current placement so installing at one
349
- // scope never removes another. Guided setup passes `scopeSelection`, which
350
- // intentionally takes precedence over this global init scope.
351
- if (scopeSelection !== 'interactive' &&
352
- (context.scope === 'project' || context.scope === 'user')) {
353
- const requested = context.scope;
383
+ // An explicit --scope project|user limits writes to that scope. A placement
384
+ // in the other scope is neither reconciled nor removed. A guided-setup
385
+ // `scopeSelection` mode takes precedence over this scope.
386
+ const explicitScope = explicitRequestedScope(context);
387
+ if (explicitScope !== null) {
354
388
  for (const pack of eligiblePacks) {
355
- scopes[pack] = unionScopeWithCurrent(installedPackStates[pack].location, requested);
389
+ scopes[pack] = explicitScope;
356
390
  }
357
391
  return scopes;
358
392
  }
@@ -447,14 +481,16 @@ function buildPackEndStateChoices(pack, currentLocation, defaultEndState) {
447
481
  const rest = annotated.filter((choice) => choice.value !== defaultEndState);
448
482
  return defaultChoice ? [defaultChoice, ...rest] : annotated;
449
483
  }
450
- function reportSuccess(context, packs, syncScopes, adoptedPacks, lifecycle, projectGuidance) {
484
+ function reportSuccess(context, packs, syncScopes, adoptedPacks, lifecycle, projectGuidance, skippedPacks) {
451
485
  const providerVisibility = initProviderVisibility(syncScopes);
452
486
  if (context.json) {
487
+ const skipped = skippedPacks.length > 0 ? { skippedPacks } : {};
453
488
  if (projectGuidance.action === 'blocked' ||
454
489
  projectGuidance.action === 'manual-required') {
455
490
  context.logger.json({
456
491
  status: 'partial',
457
492
  installedPacks: packs,
493
+ ...skipped,
458
494
  syncScopes,
459
495
  lifecycle: lifecycle.map(({ selection, status }) => ({
460
496
  pack: selection.pack,
@@ -467,6 +503,7 @@ function reportSuccess(context, packs, syncScopes, adoptedPacks, lifecycle, proj
467
503
  context.logger.json({
468
504
  status: 'ok',
469
505
  installedPacks: packs,
506
+ ...skipped,
470
507
  syncScopes,
471
508
  ...(adoptedPacks.length > 0 ? { adoptedPacks } : {}),
472
509
  lifecycle,
@@ -710,8 +747,10 @@ export async function runInitTools(context, dependencies, explicitProjectGuidanc
710
747
  },
711
748
  });
712
749
  const initialPackStates = await loadInstalledPackStates(projectRoot, userRoot, assetsRoot, dependencies);
713
- const selectedPacks = context.interactive
714
- ? ((await dependencies.selectManyWithAbort('Select tool packs to install', buildPackChoices(initialPackStates), { interactive: context.interactive })) ?? [])
750
+ const skippedPacks = packsSkippedForScope(explicitRequestedScope(context));
751
+ const isSkipped = (pack) => skippedPacks.some((skipped) => skipped.pack === pack);
752
+ const selectedPacks = (context.interactive
753
+ ? ((await dependencies.selectManyWithAbort('Select tool packs to install', buildPackChoices(initialPackStates).filter(({ value }) => !isSkipped(value)), { interactive: context.interactive })) ?? [])
715
754
  : [
716
755
  'core',
717
756
  'ideas',
@@ -720,9 +759,12 @@ export async function runInitTools(context, dependencies, explicitProjectGuidanc
720
759
  'utility',
721
760
  'research',
722
761
  'brainstorm',
723
- ];
724
- if (!context.interactive) {
725
- selectedPacks.push('project-management');
762
+ 'project-management',
763
+ ]).filter((pack) => !isSkipped(pack));
764
+ if (!context.json) {
765
+ for (const { pack, reason } of skippedPacks) {
766
+ context.logger.info(`Skipped ${pack}: ${reason}`);
767
+ }
726
768
  }
727
769
  attemptedPacks = selectedPacks;
728
770
  if (selectedPacks.length === 0) {
@@ -739,12 +781,23 @@ export async function runInitTools(context, dependencies, explicitProjectGuidanc
739
781
  return [];
740
782
  }
741
783
  const packScopes = await resolvePackScopes(context, selectedPacks, initialPackStates, dependencies);
742
- attemptedSelections = selectedPacks.map((pack) => resolveAdditivePackScopeSelection({
743
- pack,
744
- requested: pack === 'core' ? 'user' : packScopes[pack],
745
- knownRealizedScopes: scopesForLocation(initialPackStates[pack].location),
746
- unknownScopes: [],
747
- }));
784
+ const explicitScope = explicitRequestedScope(context);
785
+ attemptedSelections = selectedPacks.map((pack) => {
786
+ const knownRealizedScopes = scopesForLocation(initialPackStates[pack].location);
787
+ return explicitScope !== null
788
+ ? resolveExplicitPackScopeSelection({
789
+ pack,
790
+ requested: explicitScope,
791
+ knownRealizedScopes,
792
+ unknownScopes: [],
793
+ })
794
+ : resolveAdditivePackScopeSelection({
795
+ pack,
796
+ requested: pack === 'core' ? 'user' : packScopes[pack],
797
+ knownRealizedScopes,
798
+ unknownScopes: [],
799
+ });
800
+ });
748
801
  function scopeRoot(scope) {
749
802
  if (scope === 'user')
750
803
  return userRoot;
@@ -1121,7 +1174,7 @@ export async function runInitTools(context, dependencies, explicitProjectGuidanc
1121
1174
  adoptedPacks,
1122
1175
  syncHandled: dependencies.syncAfterInstall !== undefined,
1123
1176
  };
1124
- reportSuccess(context, packScopeInfo, affectedScopesList, adoptedPacks, lifecycleOutcomes, guidancePlan);
1177
+ reportSuccess(context, packScopeInfo, affectedScopesList, adoptedPacks, lifecycleOutcomes, guidancePlan, skippedPacks);
1125
1178
  process.exitCode =
1126
1179
  lifecycleOutcomes.some(({ status }) => status !== 'complete') ||
1127
1180
  guidancePlan.action === 'blocked' ||
@@ -1182,6 +1235,9 @@ export async function runInitToolsWithDefaults(context, explicitProjectGuidance)
1182
1235
  * stays at project scope instead of gaining a second copy at the pack's
1183
1236
  * `defaultScope`. Falls back to the configured default only when placement
1184
1237
  * cannot be observed (no inventory dependency, or an inventory failure).
1238
+ *
1239
+ * An explicit `--scope project|user` targets only that scope; `--scope all`
1240
+ * targets both scopes the pack allows.
1185
1241
  */
1186
1242
  async function resolvePackCommandSelection(pack, context, assetsRoot, dependencies, requested) {
1187
1243
  const definition = getPackDefinition(pack);
@@ -1213,12 +1269,17 @@ async function resolvePackCommandSelection(pack, context, assetsRoot, dependenci
1213
1269
  const defaultRequest = evidence.knownRealizedScopes.length === 2
1214
1270
  ? 'both'
1215
1271
  : (evidence.knownRealizedScopes[0] ?? definition.defaultScope);
1216
- const selection = resolveAdditivePackScopeSelection({
1272
+ const scopeInput = {
1217
1273
  pack,
1218
- requested: requested ?? defaultRequest,
1219
1274
  knownRealizedScopes: evidence.knownRealizedScopes,
1220
1275
  unknownScopes: evidence.unknownScopes,
1221
- });
1276
+ };
1277
+ const selection = requested === 'project' || requested === 'user'
1278
+ ? resolveExplicitPackScopeSelection({ ...scopeInput, requested })
1279
+ : resolveAdditivePackScopeSelection({
1280
+ ...scopeInput,
1281
+ requested: requested ?? defaultRequest,
1282
+ });
1222
1283
  return {
1223
1284
  ...selection,
1224
1285
  targetScopes: selection.targetScopes.filter((scope) => definition.allowedScopes.includes(scope)),
@@ -1260,6 +1321,13 @@ function createReconciledPackCommand(pack, dependencies) {
1260
1321
  : explicitScope && requestedScope
1261
1322
  ? requestedScope
1262
1323
  : undefined);
1324
+ const requestedScopes = selection.requested === 'both'
1325
+ ? ['project', 'user']
1326
+ : [selection.requested];
1327
+ if (!requestedScopes.some((scope) => definition.allowedScopes.includes(scope))) {
1328
+ selection = { ...selection, targetScopes: [] };
1329
+ throw new PackScopeNotAllowedError(pack, requestedScopes);
1330
+ }
1263
1331
  const scopes = [...selection.targetScopes];
1264
1332
  for (const scope of scopes) {
1265
1333
  if (!definition.allowedScopes.includes(scope)) {
@@ -1402,6 +1470,7 @@ function createReconciledPackCommand(pack, dependencies) {
1402
1470
  }
1403
1471
  catch (error) {
1404
1472
  const message = error instanceof Error ? error.message : String(error);
1473
+ const scopeRefused = error instanceof PackScopeNotAllowedError;
1405
1474
  lifecycleOutcome ??= {
1406
1475
  schemaVersion: 1,
1407
1476
  selection: selection ?? {
@@ -1410,15 +1479,24 @@ function createReconciledPackCommand(pack, dependencies) {
1410
1479
  retainedRealizedScopes: [],
1411
1480
  targetScopes: [],
1412
1481
  },
1413
- canonical: { status: 'failed', results: [] },
1482
+ canonical: {
1483
+ status: scopeRefused ? 'unchanged' : 'failed',
1484
+ results: [],
1485
+ },
1414
1486
  sync: notRunProviderSyncOutcome(lifecycleProviderEvidence({
1415
1487
  pack,
1416
1488
  scopedInventories: [],
1417
1489
  providerContexts,
1418
- }), 'Canonical apply failed before auto-sync'),
1490
+ }), scopeRefused
1491
+ ? 'The requested scope is not allowed for this pack'
1492
+ : 'Canonical apply failed before auto-sync'),
1419
1493
  finalEvidence: null,
1420
1494
  status: 'failed',
1421
- recovery: [{ code: 'canonical-apply-failed', message }],
1495
+ recovery: [
1496
+ scopeRefused
1497
+ ? { code: 'scope-not-allowed', command: error.command, message }
1498
+ : { code: 'canonical-apply-failed', message },
1499
+ ],
1422
1500
  };
1423
1501
  if (context.json)
1424
1502
  context.logger.json({
@@ -70,7 +70,7 @@ export function buildToolPacksSectionBody(packs, options = {}) {
70
70
  if (scanTargets.length > 0) {
71
71
  lines.push(`- **Discover available skills:** scan ${scanTargets.join(' and ')}`);
72
72
  }
73
- lines.push('- **Refresh provider views:** `oat sync --scope all`', '- **Update skills to latest versions:** `oat tools update`');
73
+ lines.push('- **Refresh provider views:** `oat sync --scope project`', '- **Update skills to latest versions:** `oat tools update`');
74
74
  lines.push('', '### Installed Packs', '');
75
75
  for (const { pack, scope } of packs) {
76
76
  const suffix = scope === 'user'
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/closeout-check/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAW,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQhF,OAAO,EAEL,KAAK,QAAQ,EACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAKL,KAAK,cAAc,EAGnB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IACtD,QAAQ,EAAE,OAAO,eAAe,CAAC;IACjC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,8DAA8D;IAC9D,EAAE,EAAE,QAAQ,CAAC;IACb,6EAA6E;IAC7E,GAAG,EAAE,SAAS,CAAC;IACf,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACtD;AASD,eAAO,MAAM,mCAAmC,EAAE,yBAYjD,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,yBAAyB,EACvB,oBAAoB,GACpB,wBAAwB,GACxB,UAAU,GACV,WAAW,GACX,YAAY,GACZ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,iBAAiB,GACjB,iBAAiB,CACpB,CAAC;AA4EF;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,yBAAyB,GACtC,OAAO,CAAC,kBAAkB,CAAC,CAuH7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,EAChC,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,yBAAyB,GACtC,OAAO,CAAC,oBAAoB,CAAC,CAoC/B;AAmED,wBAAgB,iCAAiC,CAC/C,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CA2BT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/closeout-check/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAW,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQhF,OAAO,EAEL,KAAK,QAAQ,EACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAKL,KAAK,cAAc,EAGnB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IACtD,QAAQ,EAAE,OAAO,eAAe,CAAC;IACjC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,8DAA8D;IAC9D,EAAE,EAAE,QAAQ,CAAC;IACb,6EAA6E;IAC7E,GAAG,EAAE,SAAS,CAAC;IACf,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACtD;AASD,eAAO,MAAM,mCAAmC,EAAE,yBAYjD,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,yBAAyB,EACvB,oBAAoB,GACpB,wBAAwB,GACxB,UAAU,GACV,WAAW,GACX,YAAY,GACZ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,iBAAiB,GACjB,iBAAiB,CACpB,CAAC;AA4EF;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,yBAAyB,GACtC,OAAO,CAAC,kBAAkB,CAAC,CAqH7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,EAChC,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,yBAAyB,GACtC,OAAO,CAAC,oBAAoB,CAAC,CAoC/B;AAmED,wBAAgB,iCAAiC,CAC/C,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CA2BT"}
@@ -2,7 +2,7 @@ import { readFile as defaultReadFile, readdir } from 'node:fs/promises';
2
2
  import { basename, dirname, isAbsolute, join } from 'node:path';
3
3
  import { buildCommandContext } from '../../../app/command-context.js';
4
4
  import { loadGoalDeliveryProject } from '../../project/delivery/check.js';
5
- import { deliveryEvidenceScope, evaluateDeliveryReview, evaluateGateCarrier, } from '../../project/delivery/evidence.js';
5
+ import { deliveryEvidenceScope, evaluateDeliveryExitCarrier, evaluateDeliveryReview, } from '../../project/delivery/evidence.js';
6
6
  import { observeMember } from '../../project/delivery/refresh.js';
7
7
  import { defaultGhRunner, } from '../../project/links/refresh.js';
8
8
  import { defaultGitRunner } from '../../project/sync/git.js';
@@ -179,22 +179,18 @@ export async function loadGoalCloseoutInputs(repoRoot, targetProjectPath, depend
179
179
  const { delivery, effectiveScope } = terminal;
180
180
  if (delivery.status === 'registering')
181
181
  continue;
182
- const evidenceScope = deliveryEvidenceScope(project, observed, delivery);
182
+ const evidenceScope = deliveryEvidenceScope({ ...project, evidenceCarrier: delivery.exit_gate }, observed, delivery);
183
183
  const fact = {
184
184
  scope: effectiveScope,
185
185
  review: await evaluateDeliveryReview(dependencies.git, evidenceScope, delivery, effectiveScope),
186
186
  // The accepted exit-gate binding persisted with the delivery's evidence,
187
187
  // never the milestone's current working carrier.
188
- exit: await evaluateGateCarrier(delivery.exit_gate, {
188
+ exit: await evaluateDeliveryExitCarrier(delivery.exit_gate, {
189
189
  kind: 'code',
190
190
  scope: effectiveScope,
191
191
  match: 'covers',
192
192
  overrideDisabled: project.exitGateDisabled,
193
- }, {
194
- git: dependencies.git,
195
- scope: evidenceScope,
196
- publishedHeads: delivery.members.map((member) => member.observed_head),
197
- }),
193
+ }, { git: dependencies.git, scope: evidenceScope, delivery }),
198
194
  };
199
195
  inputs.evidence[delivery.delivery_id] = fact;
200
196
  }
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/delivery/check.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAS9E,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAML,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,qEAAqE;IACrE,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,qCAAqC,EAAE,2BAKjD,CAAC;AAEJ;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,2BAA2B,GACxC,OAAO,CAAC,mBAAmB,CAAC,CA+B9B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,SAAS,YAAY,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,MAAM,EAAE,CAgBV;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,IAAI,EAAE,iBAAiB,GAAG;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE,CAAC;IACxD,0EAA0E;IAC1E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEzE;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,SAAS,GACb,OAAO,CAAC,qBAAqB,CAAC,CA4HhC;AAED,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;IAC5E,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,GAAG,EAAE,SAAS,CAAC;CAChB;AAwBD,wBAAgB,iCAAiC,CAC/C,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsDT"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/delivery/check.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAS9E,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EASL,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,qEAAqE;IACrE,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,qCAAqC,EAAE,2BAKjD,CAAC;AAEJ;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,2BAA2B,GACxC,OAAO,CAAC,mBAAmB,CAAC,CA+B9B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,SAAS,YAAY,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,MAAM,EAAE,CAgBV;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,IAAI,EAAE,iBAAiB,GAAG;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE,CAAC;IACxD,0EAA0E;IAC1E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEzE;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,SAAS,GACb,OAAO,CAAC,qBAAqB,CAAC,CAyJhC;AAED,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;IAC5E,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,GAAG,EAAE,SAAS,CAAC;CAChB;AAwBD,wBAAgB,iCAAiC,CAC/C,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsDT"}
@@ -8,7 +8,7 @@ import { CliError } from '../../../errors/cli-error.js';
8
8
  import { resolveProjectRoot } from '../../../fs/paths.js';
9
9
  import { getProjectState, milestonePhaseScope, normalizeMilestoneId, } from '@open-agent-toolkit/control-plane';
10
10
  import { Command } from 'commander';
11
- import { deliveryEvidenceScope, reviewRowsFor, evaluateDeliveryReview, evaluateGateCarrier, evaluateSuccessor, } from './evidence.js';
11
+ import { deliveryEvidenceScope, evaluateDeliveryExitCarrier, evaluateDeliveryReview, evaluateGateCarrier, evaluateSuccessor, gateEvidenceArtifacts, latestDeliveryForMilestone, reviewRowsFor, } from './evidence.js';
12
12
  /** The skill whose gate the milestone exit carrier records. */
13
13
  const EXIT_GATE_SKILL = 'oat-project-implement';
14
14
  export const DEFAULT_DELIVERY_PROJECT_DEPENDENCIES = {
@@ -82,17 +82,18 @@ export async function evaluateSubjectEvidence(project, subject, git) {
82
82
  if (delivery) {
83
83
  const milestoneId = delivery.milestone;
84
84
  const scope = deliveryEffectiveScope(deliveries, delivery);
85
- const evidence = deliveryEvidenceScope(project, deliveries, delivery);
85
+ const workingCarrier = milestoneId === null
86
+ ? null
87
+ : (project.state.milestoneGates?.[milestoneId]?.exit ?? null);
88
+ const evidence = deliveryEvidenceScope({ ...project, evidenceCarrier: workingCarrier }, deliveries, delivery);
86
89
  const publishedHeads = delivery.members.map((member) => member.observed_head);
87
90
  const review = await evaluateDeliveryReview(git, evidence, delivery, scope);
88
- const exitEvaluation = await evaluateGateCarrier(milestoneId === null
89
- ? null
90
- : (project.state.milestoneGates?.[milestoneId]?.exit ?? null), {
91
+ const exitEvaluation = await evaluateDeliveryExitCarrier(workingCarrier, {
91
92
  kind: 'code',
92
93
  scope,
93
94
  match: 'covers',
94
95
  overrideDisabled: project.exitGateDisabled,
95
- }, { git, scope: evidence, publishedHeads });
96
+ }, { git, scope: evidence, delivery });
96
97
  const exit = { ...exitEvaluation, source: 'milestone-carrier' };
97
98
  return {
98
99
  subject,
@@ -129,13 +130,20 @@ export async function evaluateSubjectEvidence(project, subject, git) {
129
130
  const publishedHead = head.code === 0 ? head.stdout.trim() : null;
130
131
  const rows = reviewRowsFor(project.state.reviews, [milestoneId]);
131
132
  const row = rows.at(-1) ?? null;
132
- const evidence = {
133
- repoRoot: project.repoRoot,
134
- projectDir: project.projectDir,
135
- evidenceArtifacts: rows
136
- .map((entry) => entry.artifact)
137
- .filter((artifact) => artifact !== '' && artifact !== '-'),
138
- };
133
+ const milestoneDelivery = latestDeliveryForMilestone(deliveries, milestoneId);
134
+ const workingCarrier = project.state.milestoneGates?.[milestoneId]?.exit ?? null;
135
+ const evidence = milestoneDelivery === undefined
136
+ ? {
137
+ repoRoot: project.repoRoot,
138
+ projectDir: project.projectDir,
139
+ evidenceArtifacts: [
140
+ ...rows
141
+ .map((entry) => entry.artifact)
142
+ .filter((artifact) => artifact !== '' && artifact !== '-'),
143
+ ...gateEvidenceArtifacts(project.state.reviews, workingCarrier),
144
+ ],
145
+ }
146
+ : deliveryEvidenceScope({ ...project, evidenceCarrier: workingCarrier }, deliveries, milestoneDelivery);
139
147
  let review;
140
148
  if (row === null || row.artifact === '' || row.artifact === '-') {
141
149
  review = {
@@ -156,8 +164,18 @@ export async function evaluateSubjectEvidence(project, subject, git) {
156
164
  members: [],
157
165
  };
158
166
  }
167
+ const expectedCarrier = {
168
+ kind: 'code',
169
+ scope,
170
+ overrideDisabled: project.exitGateDisabled,
171
+ };
172
+ const exitEvaluation = await evaluateGateCarrier(workingCarrier, expectedCarrier, {
173
+ git,
174
+ scope: evidence,
175
+ publishedHeads: [publishedHead],
176
+ });
159
177
  const exit = {
160
- ...(await evaluateGateCarrier(project.state.milestoneGates?.[milestoneId]?.exit ?? null, { kind: 'code', scope, overrideDisabled: project.exitGateDisabled }, { git, scope: evidence, publishedHeads: [publishedHead] })),
178
+ ...exitEvaluation,
161
179
  source: 'milestone-carrier',
162
180
  };
163
181
  return {
@@ -75,6 +75,20 @@ export declare function classifyPath(scope: EvidenceScope, repoPath: string): Bo
75
75
  * an existing entry, or a change to the synthesis section is a rewrite.
76
76
  */
77
77
  export declare function isProjectLogAppend(before: string, after: string): boolean;
78
+ export type JournalRewrite = {
79
+ kind: 'recorded-line-rewritten' | 'extraction-marker';
80
+ line: string;
81
+ } | {
82
+ kind: 'frontmatter-unparseable';
83
+ line: '';
84
+ side: 'before' | 'after' | 'both';
85
+ };
86
+ /**
87
+ * List every recorded journal line removed or rewritten by `after`, followed
88
+ * by every newly introduced extraction marker. Mutable progress fields,
89
+ * placeholders, table rendering, and append-only additions are excluded.
90
+ */
91
+ export declare function journalRewrites(before: string, after: string): JournalRewrite[];
78
92
  export interface CarrierExpectation {
79
93
  /** The subject kind the carrier must bind. */
80
94
  kind: 'plan' | 'code';
@@ -115,6 +129,18 @@ export declare function evaluateGateCarrier(carrier: MilestoneGateCarrier | null
115
129
  scope: EvidenceScope;
116
130
  publishedHeads: readonly (string | null)[];
117
131
  }): Promise<CarrierEvaluation>;
132
+ /**
133
+ * Evaluate a delivery's exit carrier without letting callers bypass stack
134
+ * topology. A stack is recorded base to tip: every lower observed head must
135
+ * be the tip or its ancestor, then only the tip is published to the carrier.
136
+ * Missing and unreviewed carriers delegate before topology because they are
137
+ * not head-bound. Other delivery kinds retain every-member evaluation.
138
+ */
139
+ export declare function evaluateDeliveryExitCarrier(carrier: MilestoneGateCarrier | null, expected: CarrierExpectation, successor: {
140
+ git: GitRunner;
141
+ scope: EvidenceScope;
142
+ delivery: GoalDelivery;
143
+ }): Promise<CarrierEvaluation>;
118
144
  export interface ReviewEvaluation {
119
145
  artifact: string | null;
120
146
  /** The recorded disposition or Reviews-row status, as stored. */
@@ -148,6 +174,17 @@ export declare function evaluateDeliveryReview(git: GitRunner, scope: EvidenceSc
148
174
  export declare function deliveryEvidenceArtifacts(delivery: GoalDelivery, reviewRowArtifacts?: readonly string[], sharing?: readonly GoalDelivery[]): string[];
149
175
  /** Code review rows whose Scope cell names a label (the bare id or `<id>: …`). */
150
176
  export declare function reviewRowsFor(reviews: readonly ReviewStatus[], labels: readonly string[]): ReviewStatus[];
177
+ /**
178
+ * Artifacts emitted by the configured gate run that produced `carrier`.
179
+ * These join the shared bookkeeping allowlist only; they never join a
180
+ * delivery's own evidence set or integrated-review selection.
181
+ */
182
+ export declare function gateEvidenceArtifacts(reviews: readonly ReviewStatus[], carrier: MilestoneGateCarrier | null): string[];
183
+ /**
184
+ * The newest active registry entry for a milestone. Registration-in-progress
185
+ * and superseded entries cannot carry the milestone's current evidence.
186
+ */
187
+ export declare function latestDeliveryForMilestone(deliveries: readonly GoalDelivery[], milestone: string): GoalDelivery | undefined;
151
188
  /** The project facts the evidence scope of a delivery is built from. */
152
189
  export interface DeliveryEvidenceProject {
153
190
  repoRoot: string;
@@ -155,6 +192,8 @@ export interface DeliveryEvidenceProject {
155
192
  state: {
156
193
  reviews: readonly ReviewStatus[];
157
194
  };
195
+ /** Carrier whose own gate artifact may join shared bookkeeping evidence. */
196
+ evidenceCarrier?: MilestoneGateCarrier | null;
158
197
  }
159
198
  /**
160
199
  * The one evidence scope for a registered delivery, shared by `delivery
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/delivery/evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/delivery/evidence.ts"],"names":[],"mappings":"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"}