codex-workflow-v2 2.0.0-beta.13.12 → 2.0.0-beta.13.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/reviewer-runtime-build.json +5 -5
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/workflow.d.ts +3 -0
- package/dist/src/workflow.js +58 -3
- package/dist/src/workflow.js.map +1 -1
- package/docs/pdf/codex-workflow-v2-architecture-ru.pdf +0 -0
- package/docs/pdf/codex-workflow-v2-chat-only-guide-ru.pdf +0 -0
- package/docs/pdf/codex-workflow-v2-technical-reference-ru.pdf +0 -0
- package/docs/pdf/sources/codex-workflow-v2-architecture-ru.md +25 -1
- package/docs/pdf/sources/codex-workflow-v2-chat-only-guide-ru.md +26 -2
- package/docs/pdf/sources/codex-workflow-v2-technical-reference-ru.md +28 -2
- package/docs/release.md +37 -0
- package/docs/stable-release-defect-register.md +42 -1
- package/docs/updating-existing-project.md +24 -1
- package/package.json +1 -1
- package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +22 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"protocol": "codex-workflow-runtime-build-manifest-v1",
|
|
3
3
|
"packageName": "codex-workflow-v2",
|
|
4
|
-
"packageVersion": "2.0.0-beta.13.
|
|
5
|
-
"packageManifestSha256": "
|
|
4
|
+
"packageVersion": "2.0.0-beta.13.14",
|
|
5
|
+
"packageManifestSha256": "bd8443dc87a9d88b3cb7cc945383fb348747da3c888107f0f84918912f598365",
|
|
6
6
|
"requiredEntrypoints": [
|
|
7
7
|
"dist/src/cli.js",
|
|
8
8
|
"dist/src/gateway-handshake.js",
|
|
@@ -336,11 +336,11 @@
|
|
|
336
336
|
},
|
|
337
337
|
{
|
|
338
338
|
"path": "dist/src/version.js",
|
|
339
|
-
"sha256": "
|
|
339
|
+
"sha256": "9f099071a7202ab9b8ca13d65e822ba93d3d81992a9feb28434c891ae1f11dba"
|
|
340
340
|
},
|
|
341
341
|
{
|
|
342
342
|
"path": "dist/src/workflow.js",
|
|
343
|
-
"sha256": "
|
|
343
|
+
"sha256": "98fe880a68b4b4d32bba2c470cc99f0a80edb8bccff53d9e2c1150a4b1ba269f"
|
|
344
344
|
}
|
|
345
345
|
],
|
|
346
346
|
"runtimeDependencies": [
|
|
@@ -1124,5 +1124,5 @@
|
|
|
1124
1124
|
]
|
|
1125
1125
|
}
|
|
1126
1126
|
],
|
|
1127
|
-
"fingerprint": "
|
|
1127
|
+
"fingerprint": "17ea7a36af433b3f922cabf4678774c5388d6151087d5deea9403a44e325de3f"
|
|
1128
1128
|
}
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const PACKAGE_NAME = "codex-workflow-v2";
|
|
2
|
-
export declare const PACKAGE_VERSION = "2.0.0-beta.13.
|
|
2
|
+
export declare const PACKAGE_VERSION = "2.0.0-beta.13.14";
|
package/dist/src/version.js
CHANGED
package/dist/src/workflow.d.ts
CHANGED
|
@@ -324,6 +324,9 @@ export declare class WorkflowService {
|
|
|
324
324
|
recoverHistoricalStepProvenance(repository: string, taskId: string, expectedRevision: number, commitSha: string, actor: string, reason: string): TaskState;
|
|
325
325
|
activeDownstreamProofDependencyRecoveryPreflight(repository: string, taskId: string): DependencyProvenanceRecoveryPreflight;
|
|
326
326
|
downstreamProofReplanUpdatePreflight(repository: string, taskId: string): Record<string, unknown>;
|
|
327
|
+
/** Read-only readiness for a later, explicitly delegated context refresh.
|
|
328
|
+
* Provenance registration never approves these product content changes. */
|
|
329
|
+
private deferredPlanIntegrityKnowledge;
|
|
327
330
|
planIntegrityUpdatePreflight(repository: string, taskId: string): Record<string, unknown>;
|
|
328
331
|
planIntegrityDependencyRecoveryPreflight(repository: string, taskId: string): DependencyProvenanceRecoveryPreflight;
|
|
329
332
|
downstreamProofReplanDependencyRecoveryPreflight(repository: string, taskId: string): DependencyProvenanceRecoveryPreflight;
|
package/dist/src/workflow.js
CHANGED
|
@@ -51,7 +51,7 @@ import { PACKAGE_NAME, PACKAGE_VERSION } from './version.js';
|
|
|
51
51
|
import { correctiveReplanBlockedNavigation, correctiveReplanNavigation, evaluateTaskCorrectiveReplanAvailability, evaluateTaskCorrectiveReplanCandidate, identifyCorrectiveReplanPosture, prepareCorrectiveReplanCandidate, TASK_CORRECTIVE_REPLAN_TRANSITION_ID, } from './lifecycle/corrective-replan.js';
|
|
52
52
|
const MAX_STRICT_REVIEW_INFRASTRUCTURE_FAILURES = 2;
|
|
53
53
|
// Release-reviewed exact compatibility target; never infer support from PACKAGE_VERSION.
|
|
54
|
-
const CONSUMED_CARRYOVER_TARGET_VERSION = '2.0.0-beta.13.
|
|
54
|
+
const CONSUMED_CARRYOVER_TARGET_VERSION = '2.0.0-beta.13.14';
|
|
55
55
|
export class WorkflowService {
|
|
56
56
|
store;
|
|
57
57
|
now;
|
|
@@ -4797,6 +4797,43 @@ export class WorkflowService {
|
|
|
4797
4797
|
blockers,
|
|
4798
4798
|
};
|
|
4799
4799
|
}
|
|
4800
|
+
/** Read-only readiness for a later, explicitly delegated context refresh.
|
|
4801
|
+
* Provenance registration never approves these product content changes. */
|
|
4802
|
+
deferredPlanIntegrityKnowledge(repository, task, stepId, dirtyFiles) {
|
|
4803
|
+
const approved = this.store.readKnowledgeMap(task.projectId);
|
|
4804
|
+
const inspected = inspectKnowledgeMap(approved, scanProjectKnowledge(repository, task.projectId, this.now()));
|
|
4805
|
+
const before = new Map(approved.entries.map(entry => [entry.path, entry]));
|
|
4806
|
+
const productPaths = inspected.entries.filter(entry => entry.path !== 'package.json'
|
|
4807
|
+
&& before.get(entry.path)?.contentHash !== entry.contentHash).map(entry => entry.path).sort();
|
|
4808
|
+
if (inspected.status === 'active' && inspected.approval)
|
|
4809
|
+
return { deferred: false, productPaths, blockers: [], options: [] };
|
|
4810
|
+
const blockers = [];
|
|
4811
|
+
if (!isContentOnlyKnowledgeRefresh(approved, inspected))
|
|
4812
|
+
blockers.push('Knowledge classification, sources, gaps or conflicts changed.');
|
|
4813
|
+
if (productPaths.length === 0)
|
|
4814
|
+
return { deferred: false, productPaths, blockers, options: [] };
|
|
4815
|
+
const step = task.steps.find(candidate => candidate.id === stepId);
|
|
4816
|
+
if (approved.status !== 'active' || !approved.approval || !task.planHash
|
|
4817
|
+
|| this.store.hashArtifact(this.store.taskRoot(task.projectId, task.id), 'plan.md') !== task.planHash
|
|
4818
|
+
|| !task.authorizations.some(auth => auth.kind === 'execution' && auth.decision === 'approved'
|
|
4819
|
+
&& auth.planHash === task.planHash && auth.briefHash === task.briefHash)) {
|
|
4820
|
+
blockers.push('Deferred Knowledge refresh requires the unchanged execution-approved Plan and active approved Map.');
|
|
4821
|
+
}
|
|
4822
|
+
if (!step || step.status !== 'failed' || task.status !== 'needs_fix'
|
|
4823
|
+
|| productPaths.some(file => !dirtyFiles.includes(file) || !pathAllowed(file, step.allowedWrites)
|
|
4824
|
+
|| pathAllowed(file, step.forbiddenScope))) {
|
|
4825
|
+
blockers.push('Product Knowledge drift must belong to the exact failed-Step dirty scope.');
|
|
4826
|
+
}
|
|
4827
|
+
if (!step?.failurePause || hashDirtyWorktree(repository, dirtyFiles) !== step.failurePause.dirtyWorktreeHash
|
|
4828
|
+
|| canonicalJsonStringify([...dirtyFiles].sort()) !== canonicalJsonStringify([...step.failurePause.dirtyFiles].sort())) {
|
|
4829
|
+
blockers.push('Product dirty bytes differ from the recorded failed-Step checkpoint.');
|
|
4830
|
+
}
|
|
4831
|
+
const options = blockers.length === 0
|
|
4832
|
+
? this.delegatedContextRefreshOptions(task.projectId, task, inspected, 'delegated-content-only') : [];
|
|
4833
|
+
if (options.length === 0)
|
|
4834
|
+
blockers.push('No eligible existing delegated content-only context refresh is available.');
|
|
4835
|
+
return { deferred: true, productPaths, blockers, options };
|
|
4836
|
+
}
|
|
4800
4837
|
planIntegrityUpdatePreflight(repository, taskId) {
|
|
4801
4838
|
const snapshot = this.observationSnapshot(repository);
|
|
4802
4839
|
if (snapshot.observation.kind !== 'assessment') {
|
|
@@ -4826,6 +4863,7 @@ export class WorkflowService {
|
|
|
4826
4863
|
mode: 'post-rebind-dirty-carryover',
|
|
4827
4864
|
}
|
|
4828
4865
|
: null;
|
|
4866
|
+
const deferredKnowledge = this.deferredPlanIntegrityKnowledge(snapshot.identity.repositoryRoot, task, assessment?.stepId ?? adoptedCompatibility?.stepId ?? dirtyCarryoverCompatibility?.stepId ?? null, assessment?.evidence?.changedFiles ?? adoptedCompatibility?.dirtyFiles ?? dirtyCarryoverCompatibility?.dirtyFiles ?? []);
|
|
4829
4867
|
const versions = inspectWorkflowVersions(snapshot.identity.repositoryRoot, [task.baseBranch]);
|
|
4830
4868
|
const versionSurfaces = {
|
|
4831
4869
|
declared: versions.declared,
|
|
@@ -4847,6 +4885,7 @@ export class WorkflowService {
|
|
|
4847
4885
|
&& sourceBetaVersion.patch !== null
|
|
4848
4886
|
&& targetBetaVersion.patch > sourceBetaVersion.patch));
|
|
4849
4887
|
const blockers = [
|
|
4888
|
+
...deferredKnowledge.blockers,
|
|
4850
4889
|
...(assessments.length > 1 ? ['Exactly one failed Step may expose a Plan-integrity conflict.'] : []),
|
|
4851
4890
|
...(assessment?.blockers ?? (adoptedCompatibility || dirtyCarryoverCompatibility
|
|
4852
4891
|
? []
|
|
@@ -4890,6 +4929,11 @@ export class WorkflowService {
|
|
|
4890
4929
|
compatibilityMode: adoptedCompatibility?.mode
|
|
4891
4930
|
?? dirtyCarryoverCompatibility?.mode
|
|
4892
4931
|
?? 'failed-step-conflict',
|
|
4932
|
+
deferredKnowledgeRefresh: deferredKnowledge.deferred ? {
|
|
4933
|
+
action: 'task context-refresh', mode: 'delegated-content-only',
|
|
4934
|
+
productPaths: deferredKnowledge.productPaths, delegatedApprovalOptions: deferredKnowledge.options,
|
|
4935
|
+
application: 'after-provenance-and-scope-recovery', approvalDeferred: true,
|
|
4936
|
+
} : null,
|
|
4893
4937
|
requiredTransport: [
|
|
4894
4938
|
'Commit only package.json and package-lock.json on the active Milestone base.',
|
|
4895
4939
|
'Fast-forward or apply only that dependency commit to the Task branch while preserving all product bytes.',
|
|
@@ -4964,7 +5008,13 @@ export class WorkflowService {
|
|
|
4964
5008
|
? [assessment.evidence.remediationEventId]
|
|
4965
5009
|
: assessment.evidence.remediationEvents.map((event) => event.eventId),
|
|
4966
5010
|
};
|
|
4967
|
-
|
|
5011
|
+
const provenance = this.inspectDependencyProvenanceCandidate(snapshot, task, null, null, null, compatibility);
|
|
5012
|
+
const deferredKnowledge = this.deferredPlanIntegrityKnowledge(snapshot.identity.repositoryRoot, task, compatibility.stepId, compatibility.dirtyFiles);
|
|
5013
|
+
return { ...provenance,
|
|
5014
|
+
eligible: provenance.eligible && deferredKnowledge.blockers.length === 0,
|
|
5015
|
+
action: deferredKnowledge.blockers.length === 0 ? provenance.action : null,
|
|
5016
|
+
blockers: [...provenance.blockers, ...deferredKnowledge.blockers],
|
|
5017
|
+
};
|
|
4968
5018
|
}
|
|
4969
5019
|
downstreamProofReplanDependencyRecoveryPreflight(repository, taskId) {
|
|
4970
5020
|
const snapshot = this.observationSnapshot(repository);
|
|
@@ -5129,7 +5179,10 @@ export class WorkflowService {
|
|
|
5129
5179
|
const scannedKnowledgeMap = scanProjectKnowledge(context.identity.repositoryRoot, task.projectId, now);
|
|
5130
5180
|
const inspectedKnowledgeMap = inspectKnowledgeMap(currentKnowledgeMap, scannedKnowledgeMap);
|
|
5131
5181
|
let refreshedKnowledgeMap = null;
|
|
5132
|
-
|
|
5182
|
+
const deferredKnowledge = this.deferredPlanIntegrityKnowledge(context.identity.repositoryRoot, task, preflight.planIntegrity.stepId, preflight.planIntegrity.dirtyFiles);
|
|
5183
|
+
if (deferredKnowledge.blockers.length > 0)
|
|
5184
|
+
throw new WorkflowError('TRANSITION_BLOCKED', 'Plan-integrity transport cannot defer unrelated or unauthorized Knowledge drift.', { blockers: deferredKnowledge.blockers });
|
|
5185
|
+
if (!deferredKnowledge.deferred && (inspectedKnowledgeMap.status !== 'active' || !inspectedKnowledgeMap.approval)) {
|
|
5133
5186
|
const knowledgeRefresh = inspectDependencyKnowledgeRefresh(context.identity.repositoryRoot, task.baseBranch, currentKnowledgeMap, inspectedKnowledgeMap, preflight.planIntegrity.dirtyFiles);
|
|
5134
5187
|
if (!knowledgeRefresh.eligible) {
|
|
5135
5188
|
throw new WorkflowError('TRANSITION_BLOCKED', 'Plan-integrity dependency recovery cannot bypass unrelated Project Knowledge drift.', {
|
|
@@ -6517,6 +6570,8 @@ export class WorkflowService {
|
|
|
6517
6570
|
: null;
|
|
6518
6571
|
let rootCauseReplanDirtyCarryover = ['task run', 'task handoff-prepare', 'task claim'].includes(String(next.action))
|
|
6519
6572
|
&& rootCauseStepId
|
|
6573
|
+
// Match runStep: historical carryover admits a replacement start, never a failed retry.
|
|
6574
|
+
&& task.steps.find(step => step.id === rootCauseStepId)?.status === 'planned'
|
|
6520
6575
|
&& changedFiles(repositoryRoot).length > 0
|
|
6521
6576
|
? this.assessCurrentRootCauseReplanDirtyCarryover(repositoryRoot, task, rootCauseStepId)
|
|
6522
6577
|
: null;
|