@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.
- package/README.md +2 -2
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/getting-started/bootstrap.md +15 -16
- package/assets/docs/getting-started/tool-packs.md +15 -14
- package/assets/docs/provider-sync/commands.md +6 -5
- package/assets/docs/provider-sync/manifest-and-drift.md +26 -19
- package/assets/docs/provider-sync/pilot-with-a-team.md +17 -17
- package/assets/docs/provider-sync/providers.md +4 -4
- package/assets/docs/provider-sync/scope-and-surface.md +5 -5
- package/assets/docs/reference/cli-reference.md +8 -5
- package/assets/docs/reference/oat-directory-structure.md +1 -1
- package/assets/docs/reference/project-artifacts.md +12 -3
- package/assets/docs/reference/troubleshooting.md +4 -5
- package/assets/docs/reference/what-oat-writes.md +54 -59
- package/assets/docs/skills/repo-improve.md +23 -19
- package/assets/docs/workflows/advanced/workflow-gates.md +7 -1
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +9 -6
- package/assets/docs/workflows/projects/execution/execution-skills.md +1 -2
- package/assets/docs/workflows/projects/execution/implementation-execution.md +3 -2
- package/assets/docs/workflows/projects/lifecycle.md +3 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-brief/SKILL.md +1 -1
- package/assets/skills/oat-project-brief/references/brief-contract.md +32 -9
- package/assets/skills/oat-project-complete/SKILL.md +17 -7
- package/assets/skills/oat-project-implement/SKILL.md +2 -2
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +14 -4
- package/assets/skills/oat-project-pr-final/SKILL.md +2 -2
- package/assets/skills/oat-project-pr-progress/SKILL.md +23 -12
- package/assets/skills/oat-repo-knowledge-index/SKILL.md +226 -131
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +5 -2
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +10 -5
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +106 -28
- package/dist/commands/init/tools/project-guidance.js +1 -1
- package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
- package/dist/commands/project/closeout-check/index.js +4 -8
- package/dist/commands/project/delivery/check.d.ts.map +1 -1
- package/dist/commands/project/delivery/check.js +32 -14
- package/dist/commands/project/delivery/evidence.d.ts +39 -0
- package/dist/commands/project/delivery/evidence.d.ts.map +1 -1
- package/dist/commands/project/delivery/evidence.js +163 -17
- package/dist/commands/project/delivery/refresh.d.ts.map +1 -1
- package/dist/commands/project/delivery/refresh.js +13 -16
- package/dist/commands/project/journal-check/index.d.ts +2 -0
- package/dist/commands/project/journal-check/index.d.ts.map +1 -1
- package/dist/commands/project/journal-check/index.js +78 -1
- package/dist/commands/project/journal-check/types.d.ts +1 -1
- package/dist/commands/project/journal-check/types.d.ts.map +1 -1
- package/dist/commands/project/new/index.d.ts.map +1 -1
- package/dist/commands/project/new/index.js +1 -0
- package/dist/commands/project/new/scaffold.d.ts +1 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +1 -1
- package/dist/commands/providers/codex/materialize.d.ts +5 -1
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +6 -1
- package/dist/commands/shared/exact-path-commit.d.ts.map +1 -1
- package/dist/commands/shared/exact-path-commit.js +11 -1
- package/dist/commands/shared/scope-option.d.ts +3 -1
- package/dist/commands/shared/scope-option.d.ts.map +1 -1
- package/dist/commands/shared/scope-option.js +4 -2
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +4 -1
- package/dist/commands/tools/install/index.d.ts.map +1 -1
- package/dist/commands/tools/install/index.js +1 -1
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +11 -0
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-lifecycle-outcome.js +16 -0
- package/dist/config/oat-config.d.ts +6 -1
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +14 -22
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/providers/codex/codec/config-merge.d.ts +19 -0
- package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
- package/dist/providers/codex/codec/config-merge.js +75 -8
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +84 -38
- package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
- package/dist/providers/cursor/codec/materialize.js +17 -1
- 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
|
-
//
|
|
352
|
-
//
|
|
353
|
-
//
|
|
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 =
|
|
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', '
|
|
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":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EAIzB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EAGlB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAWvE,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,uCAAuC,CAAC;
|
|
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
|
-
//
|
|
348
|
-
//
|
|
349
|
-
//
|
|
350
|
-
|
|
351
|
-
if (
|
|
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] =
|
|
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
|
|
714
|
-
|
|
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
|
-
|
|
725
|
-
|
|
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
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
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
|
|
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: {
|
|
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
|
-
}),
|
|
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: [
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
.
|
|
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
|
-
...
|
|
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":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EAClB,MAAM,mCAAmC,CAAC;AAG3C;;;;;;;;;;;;GAYG;AAEH,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;;;;;;OAUG;IACH,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CAC/D;AAED,MAAM,MAAM,oBAAoB,GAC5B,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,GACpB,cAAc,CAAC;AAEnB,MAAM,MAAM,eAAe,GACvB;IACE,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,WAAW,GAAG,uBAAuB,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GACD;IACE,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAwCN;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,OAAO,CAAC,eAAe,CAAC,CAqG1B;AAoFD,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,MAAM,GACN,gBAAgB,GAChB,aAAa,GACb,SAAS,GACT,iBAAiB,CAAC;AAmBtB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,GACf,mBAAmB,GAAG,IAAI,CAsB5B;AA6CD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAmBzE;
|
|
1
|
+
{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/delivery/evidence.ts"],"names":[],"mappings":"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"}
|