@tiic-tech/openworkflow 0.1.1 → 0.1.2
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/adapters/codex/src/cleanCodexAdapter.js +4 -1
- package/dist/adapters/codex/src/cleanCodexAdapter.js.map +1 -1
- package/dist/adapters/codex/src/constants.d.ts +1 -0
- package/dist/adapters/codex/src/constants.js +2 -0
- package/dist/adapters/codex/src/constants.js.map +1 -0
- package/dist/adapters/codex/src/generateCommands.js +14 -9
- package/dist/adapters/codex/src/generateCommands.js.map +1 -1
- package/dist/adapters/codex/src/generateSkills.js +13 -0
- package/dist/adapters/codex/src/generateSkills.js.map +1 -1
- package/dist/adapters/codex/src/generatedFiles.js +1 -1
- package/dist/adapters/codex/src/manifest.js +11 -2
- package/dist/adapters/codex/src/manifest.js.map +1 -1
- package/dist/adapters/codex/src/templates.d.ts +0 -1
- package/dist/adapters/codex/src/templates.js +0 -1
- package/dist/adapters/codex/src/templates.js.map +1 -1
- package/dist/adapters/src/registry.d.ts +20 -0
- package/dist/adapters/src/registry.js +81 -0
- package/dist/adapters/src/registry.js.map +1 -0
- package/dist/cli/src/commands/brief.d.ts +46 -0
- package/dist/cli/src/commands/brief.js +294 -0
- package/dist/cli/src/commands/brief.js.map +1 -0
- package/dist/cli/src/commands/check.d.ts +42 -0
- package/dist/cli/src/commands/check.js +326 -0
- package/dist/cli/src/commands/check.js.map +1 -0
- package/dist/cli/src/commands/clean.js +46 -1
- package/dist/cli/src/commands/clean.js.map +1 -1
- package/dist/cli/src/commands/context.d.ts +1 -0
- package/dist/cli/src/commands/context.js +471 -0
- package/dist/cli/src/commands/context.js.map +1 -0
- package/dist/cli/src/commands/doctor.js +122 -12
- package/dist/cli/src/commands/doctor.js.map +1 -1
- package/dist/cli/src/commands/draft.d.ts +1 -0
- package/dist/cli/src/commands/draft.js +175 -0
- package/dist/cli/src/commands/draft.js.map +1 -0
- package/dist/cli/src/commands/gitAutomation.d.ts +1 -0
- package/dist/cli/src/commands/gitAutomation.js +378 -0
- package/dist/cli/src/commands/gitAutomation.js.map +1 -0
- package/dist/cli/src/commands/handoff.d.ts +22 -0
- package/dist/cli/src/commands/handoff.js +122 -0
- package/dist/cli/src/commands/handoff.js.map +1 -0
- package/dist/cli/src/commands/init.js +52 -1
- package/dist/cli/src/commands/init.js.map +1 -1
- package/dist/cli/src/commands/inspect.d.ts +23 -0
- package/dist/cli/src/commands/inspect.js +157 -0
- package/dist/cli/src/commands/inspect.js.map +1 -0
- package/dist/cli/src/commands/register.d.ts +1 -0
- package/dist/cli/src/commands/register.js +251 -0
- package/dist/cli/src/commands/register.js.map +1 -0
- package/dist/cli/src/commands/resume.d.ts +59 -0
- package/dist/cli/src/commands/resume.js +280 -0
- package/dist/cli/src/commands/resume.js.map +1 -0
- package/dist/cli/src/commands/shared.js +6 -2
- package/dist/cli/src/commands/shared.js.map +1 -1
- package/dist/cli/src/commands/summaries.d.ts +1 -0
- package/dist/cli/src/commands/summaries.js +77 -0
- package/dist/cli/src/commands/summaries.js.map +1 -0
- package/dist/cli/src/commands/summarize.d.ts +1 -0
- package/dist/cli/src/commands/summarize.js +316 -0
- package/dist/cli/src/commands/summarize.js.map +1 -0
- package/dist/cli/src/commands/sync.js +135 -12
- package/dist/cli/src/commands/sync.js.map +1 -1
- package/dist/cli/src/commands/validate.js +25 -1
- package/dist/cli/src/commands/validate.js.map +1 -1
- package/dist/cli/src/dev/verifyAgentE2E.d.ts +2 -0
- package/dist/cli/src/dev/verifyAgentE2E.js +391 -0
- package/dist/cli/src/dev/verifyAgentE2E.js.map +1 -0
- package/dist/cli/src/dev/verifyCleanCommand.js +213 -2
- package/dist/cli/src/dev/verifyCleanCommand.js.map +1 -1
- package/dist/cli/src/dev/verifyRuntimeSurface.js +4940 -54
- package/dist/cli/src/dev/verifyRuntimeSurface.js.map +1 -1
- package/dist/cli/src/dev/verifyWorkflowE2E.js +477 -45
- package/dist/cli/src/dev/verifyWorkflowE2E.js.map +1 -1
- package/dist/cli/src/index.js +184 -6
- package/dist/cli/src/index.js.map +1 -1
- package/dist/cli/src/report.d.ts +26 -0
- package/dist/cli/src/report.js +17 -0
- package/dist/cli/src/report.js.map +1 -0
- package/dist/core/src/artifacts/readiness.d.ts +7 -0
- package/dist/core/src/artifacts/readiness.js +240 -0
- package/dist/core/src/artifacts/readiness.js.map +1 -0
- package/dist/core/src/artifacts/registry.d.ts +9 -2
- package/dist/core/src/artifacts/registry.js +687 -60
- package/dist/core/src/artifacts/registry.js.map +1 -1
- package/dist/core/src/commands/registry.js +1425 -146
- package/dist/core/src/commands/registry.js.map +1 -1
- package/dist/core/src/contracts/index.d.ts +1 -1
- package/dist/core/src/fs/index.d.ts +24 -0
- package/dist/core/src/fs/index.js +48 -1
- package/dist/core/src/fs/index.js.map +1 -1
- package/dist/core/src/git/autonomousSimulator.d.ts +46 -0
- package/dist/core/src/git/autonomousSimulator.js +163 -0
- package/dist/core/src/git/autonomousSimulator.js.map +1 -0
- package/dist/core/src/git/branchIdentity.d.ts +19 -0
- package/dist/core/src/git/branchIdentity.js +75 -0
- package/dist/core/src/git/branchIdentity.js.map +1 -0
- package/dist/core/src/git/draftPrPilot.d.ts +47 -0
- package/dist/core/src/git/draftPrPilot.js +196 -0
- package/dist/core/src/git/draftPrPilot.js.map +1 -0
- package/dist/core/src/git/localEvidenceReader.d.ts +21 -0
- package/dist/core/src/git/localEvidenceReader.js +142 -0
- package/dist/core/src/git/localEvidenceReader.js.map +1 -0
- package/dist/core/src/git/localGitAutomation.d.ts +68 -0
- package/dist/core/src/git/localGitAutomation.js +470 -0
- package/dist/core/src/git/localGitAutomation.js.map +1 -0
- package/dist/core/src/git/mergeReadinessCheckpoint.d.ts +31 -0
- package/dist/core/src/git/mergeReadinessCheckpoint.js +110 -0
- package/dist/core/src/git/mergeReadinessCheckpoint.js.map +1 -0
- package/dist/core/src/git/prReadySummary.d.ts +16 -0
- package/dist/core/src/git/prReadySummary.js +144 -0
- package/dist/core/src/git/prReadySummary.js.map +1 -0
- package/dist/core/src/git/remoteReadonlyPlanner.d.ts +60 -0
- package/dist/core/src/git/remoteReadonlyPlanner.js +223 -0
- package/dist/core/src/git/remoteReadonlyPlanner.js.map +1 -0
- package/dist/core/src/onboarding/agentsGuide.d.ts +32 -0
- package/dist/core/src/onboarding/agentsGuide.js +164 -0
- package/dist/core/src/onboarding/agentsGuide.js.map +1 -0
- package/dist/core/src/validators/validateOpenWorkflow.js +1331 -15
- package/dist/core/src/validators/validateOpenWorkflow.js.map +1 -1
- package/dist/core/src/validators/validateRepositoryContracts.js +2321 -306
- package/dist/core/src/validators/validateRepositoryContracts.js.map +1 -1
- package/dist/core/src/workflow/cleanOpenWorkflow.d.ts +2 -0
- package/dist/core/src/workflow/cleanOpenWorkflow.js +97 -8
- package/dist/core/src/workflow/cleanOpenWorkflow.js.map +1 -1
- package/dist/core/src/workflow/doctorOpenWorkflow.d.ts +7 -0
- package/dist/core/src/workflow/doctorOpenWorkflow.js +26 -0
- package/dist/core/src/workflow/doctorOpenWorkflow.js.map +1 -0
- package/dist/core/src/workflow/initOpenWorkflow.d.ts +7 -0
- package/dist/core/src/workflow/initOpenWorkflow.js +96 -8
- package/dist/core/src/workflow/initOpenWorkflow.js.map +1 -1
- package/dist/core/src/workflow/planningQueueResume.d.ts +105 -0
- package/dist/core/src/workflow/planningQueueResume.js +596 -0
- package/dist/core/src/workflow/planningQueueResume.js.map +1 -0
- package/dist/core/src/workflow/readWorkflowConfig.d.ts +6 -0
- package/dist/core/src/workflow/readWorkflowConfig.js +28 -0
- package/dist/core/src/workflow/readWorkflowConfig.js.map +1 -0
- package/dist/core/src/workflow/summaryHealth.d.ts +60 -0
- package/dist/core/src/workflow/summaryHealth.js +713 -0
- package/dist/core/src/workflow/summaryHealth.js.map +1 -0
- package/dist/core/src/workflow/syncOpenWorkflow.d.ts +22 -0
- package/dist/core/src/workflow/syncOpenWorkflow.js +235 -0
- package/dist/core/src/workflow/syncOpenWorkflow.js.map +1 -0
- package/package.json +2 -1
- package/references/artifact-authoring-templates.md +14 -12
- package/references/artifact-instruction-envelope.md +133 -0
- package/references/coder-continuous-growth-loop.md +68 -0
- package/references/gh-operation-governance.md +114 -0
- package/references/git-automation-governance.md +324 -0
- package/references/git-version-control-governance.md +227 -0
- package/references/internal-coder-protocol.md +202 -0
- package/references/issue-governance.md +115 -0
- package/references/planning-artifact-contracts.md +595 -0
- package/references/planning-skill-runtime-exposure.md +159 -0
- package/references/proto-redesign-artifact-contracts.md +217 -0
- package/references/proto2html-artifact-contracts.md +113 -0
- package/references/skill-system-lifecycle.md +198 -0
- package/references/validation-trust-domains.md +286 -0
- package/references/workflow-blueprint-runtime-alignment.md +287 -0
- package/schemas/atom-tasks.schema.json +101 -0
- package/schemas/candidate-changes.schema.json +323 -0
- package/schemas/current-state.schema.json +113 -0
- package/schemas/html-prototype.schema.json +288 -0
- package/schemas/openworkflow-contract.schema.json +9 -1
- package/schemas/proto-prompt-pack.schema.json +1333 -0
- package/schemas/prototype-evidence.schema.json +684 -142
- package/schemas/selected-change.schema.json +104 -0
- package/schemas/validation-target.schema.json +187 -1
- package/schemas/validation.schema.json +187 -1
- package/schemas/vision-session.schema.json +151 -0
- package/skills/analyze-changes/SKILL.md +92 -0
- package/skills/analyze-changes/agents/openai.yaml +4 -0
- package/skills/analyze-changes/references/analysis-protocol.md +116 -0
- package/skills/build-proto-prompt/SKILL.md +125 -0
- package/skills/build-proto-prompt/references/output-boundary.md +54 -0
- package/skills/build-proto-prompt/references/prompt-pack-compiler-protocol.md +80 -0
- package/skills/build-prototype/SKILL.md +162 -38
- package/skills/build-prototype/agents/openai.yaml +2 -2
- package/skills/build-prototype/references/philosophy-engine.md +61 -0
- package/skills/build-prototype/references/strategic-prompt-pack-protocol.md +365 -0
- package/skills/build-prototype/references/vision2prompt/01_input_contract.md +84 -0
- package/skills/build-prototype/references/vision2prompt/02_vision_decomposition.md +108 -0
- package/skills/build-prototype/references/vision2prompt/03_strategy_hypothesis_generation.md +89 -0
- package/skills/build-prototype/references/vision2prompt/04_product_system_extraction.md +78 -0
- package/skills/build-prototype/references/vision2prompt/05_prototype_prompt_schema.md +189 -0
- package/skills/build-prototype/references/vision2prompt/06_output_templates.md +125 -0
- package/skills/build-prototype/references/vision2prompt/07_quality_rubric.md +171 -0
- package/skills/build-validation/SKILL.md +136 -54
- package/skills/build-validation/references/prototype-validation-target-rubric.md +35 -0
- package/skills/build-validation/references/return-to-vision-gate.md +32 -0
- package/skills/build-vision/SKILL.md +192 -0
- package/skills/build-vision/references/proto-readiness-rubric.md +48 -0
- package/skills/build-vision/references/vision-interview-protocol.md +48 -0
- package/skills/coder/SKILL.md +204 -0
- package/skills/decompose-to-changes/SKILL.md +176 -0
- package/skills/decompose-to-changes/agents/openai.yaml +4 -0
- package/skills/decompose-to-changes/references/decomposition-protocol.md +278 -0
- package/skills/prompt2proto/SKILL.md +157 -0
- package/skills/prompt2proto/agents/openai.yaml +4 -0
- package/skills/prompt2proto/references/00_role_philosophy_engine.md +96 -0
- package/skills/prompt2proto/references/01_input_contract.md +53 -0
- package/skills/prompt2proto/references/02_prompt_pack_readiness.md +50 -0
- package/skills/prompt2proto/references/03_visual_translation_workflow.md +64 -0
- package/skills/prompt2proto/references/04_output_contract.md +67 -0
- package/skills/prompt2proto/references/05_quality_rubric.md +46 -0
- package/skills/proto2html/SKILL.md +136 -0
- package/skills/proto2html/agents/openai.yaml +4 -0
- package/skills/proto2html/references/proto2html-protocol.md +115 -0
- package/skills/run-team/SKILL.md +4 -0
- package/skills/select-change/SKILL.md +200 -0
- package/skills/select-change/agents/openai.yaml +4 -0
- package/skills/select-change/references/selection-protocol.md +281 -0
- package/skills/tune-prototype/SKILL.md +121 -0
- package/skills/tune-prototype/agents/openai.yaml +4 -0
- package/skills/tune-prototype/references/refined-prompt-pack-protocol.md +161 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { mkdir, mkdtemp, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import { dirname, join, resolve } from "node:path";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
const CURRENT_FILE = fileURLToPath(import.meta.url);
|
|
9
|
+
const REPO_ROOT = resolve(dirname(CURRENT_FILE), "../../../..");
|
|
10
|
+
const CLI = join(REPO_ROOT, "dist", "cli", "src", "index.js");
|
|
11
|
+
const VALIDATION_PATH = ".openworkflow/validation/val-1/VALIDATION.yaml";
|
|
12
|
+
const PROTOTYPE_PATH = ".openworkflow/prototypes/proto-1/EVIDENCE.yaml";
|
|
13
|
+
const PROTOTYPE_SUMMARY_PATH = ".openworkflow/prototypes/proto-1/SUMMARY.yaml";
|
|
14
|
+
async function main() {
|
|
15
|
+
await assertFile(CLI);
|
|
16
|
+
const tempRoot = await mkdtemp(join(tmpdir(), "openworkflow-agent-e2e-"));
|
|
17
|
+
try {
|
|
18
|
+
const target = join(tempRoot, "consumer");
|
|
19
|
+
const codexHome = join(tempRoot, "codex-home");
|
|
20
|
+
const env = { ...process.env, CODEX_HOME: codexHome };
|
|
21
|
+
await mkdir(target, { recursive: true });
|
|
22
|
+
await writeFile(join(target, "AGENTS.md"), "# Consumer Agents\n\nUser insight stays.\n", "utf8");
|
|
23
|
+
await run(["node", CLI, "init", target, "--tools", "codex", "--force"], env);
|
|
24
|
+
await verifyMinimalInit(target);
|
|
25
|
+
await verifyFreshEntry(target, env);
|
|
26
|
+
await createValidationArtifact(target, env);
|
|
27
|
+
await createThinPrototypeArtifact(target, env);
|
|
28
|
+
await verifyThinSummaryTrustGates(target, env);
|
|
29
|
+
await verifyPlanningArtifactRegistrationContract();
|
|
30
|
+
const sourceSnapshots = await readSnapshots(target, [
|
|
31
|
+
VALIDATION_PATH,
|
|
32
|
+
".openworkflow/validation/VALIDATION_INDEX.yaml",
|
|
33
|
+
PROTOTYPE_PATH,
|
|
34
|
+
PROTOTYPE_SUMMARY_PATH,
|
|
35
|
+
".openworkflow/prototypes/PROTOTYPE_INDEX.yaml",
|
|
36
|
+
]);
|
|
37
|
+
await verifyCleanAndSyncRecovery(target, env, sourceSnapshots);
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await rm(tempRoot, { recursive: true, force: true });
|
|
41
|
+
}
|
|
42
|
+
console.log("OpenWorkflow Agent-first E2E verification passed.");
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
async function verifyMinimalInit(target) {
|
|
46
|
+
for (const path of [
|
|
47
|
+
".openworkflow/config.yaml",
|
|
48
|
+
".openworkflow/CURRENT_STATE.yaml",
|
|
49
|
+
".openworkflow/workflow/WORKFLOW_INDEX.yaml",
|
|
50
|
+
".openworkflow/audit/COMMAND_AUDIT_INDEX.yaml",
|
|
51
|
+
".openworkflow/audit/CONTEXT_PACKETS.yaml",
|
|
52
|
+
".openworkflow/audit/ARTIFACT_CONTRACTS.yaml",
|
|
53
|
+
".openworkflow/audit/DISCLOSURE_LEVELS.yaml",
|
|
54
|
+
".agents/openworkflow-adapter.yaml",
|
|
55
|
+
".agents/skills/ow-vision/SKILL.md",
|
|
56
|
+
"AGENTS.md",
|
|
57
|
+
]) {
|
|
58
|
+
await assertFile(join(target, path));
|
|
59
|
+
}
|
|
60
|
+
const agents = await read(join(target, "AGENTS.md"));
|
|
61
|
+
assert(agents.includes("User insight stays."), "init did not preserve user AGENTS.md content");
|
|
62
|
+
assert(agents.includes("BEGIN OPENWORKFLOW AGENT GUIDE"), "init did not append OpenWorkflow managed block");
|
|
63
|
+
await assertNoLazyStageArtifacts(target);
|
|
64
|
+
}
|
|
65
|
+
async function verifyFreshEntry(target, env) {
|
|
66
|
+
const handoff = parseJsonReport(await runCapture(["node", CLI, "handoff", "--root", target, "--json"], env), "handoff");
|
|
67
|
+
const handoffData = record(handoff.data, "fresh handoff data");
|
|
68
|
+
assert(handoff.ok === true, "fresh handoff should pass");
|
|
69
|
+
assert(handoffData.handoff_ok === true, "fresh handoff should expose handoff_ok=true");
|
|
70
|
+
assert(handoffData.next_command === "/ow:vision", "fresh handoff should point to /ow:vision");
|
|
71
|
+
const context = parseJsonReport(await runCapture(["node", CLI, "context", "--root", target, "--handoff", "--json"], env), "context");
|
|
72
|
+
const contextData = record(context.data, "fresh handoff context data");
|
|
73
|
+
assert(context.ok === true, "fresh context --handoff should pass");
|
|
74
|
+
assert(contextData.handoff_mode === true, "fresh context --handoff should expose handoff_mode=true");
|
|
75
|
+
assert(contextData.normalized_command === "/ow:vision", "fresh context should default to CURRENT_STATE.next_command");
|
|
76
|
+
const check = parseJsonReport(await runCapture(["node", CLI, "check", "/ow:vision", "--root", target, "--json"], env), "check");
|
|
77
|
+
assert(check.ok === true, "fresh /ow:vision check should pass");
|
|
78
|
+
await assertNoLazyStageArtifacts(target);
|
|
79
|
+
}
|
|
80
|
+
async function createValidationArtifact(target, env) {
|
|
81
|
+
const dryDraft = parseJsonReport(await runCapture(["node", CLI, "draft", "--root", target, "--artifact", "validation_target", "--id", "val-1", "--json"], env), "draft");
|
|
82
|
+
const dryEffects = record(dryDraft.effects, "validation dry draft effects");
|
|
83
|
+
assert(Array.isArray(dryEffects.planned) && dryEffects.planned.includes(VALIDATION_PATH), "validation dry draft did not plan artifact path");
|
|
84
|
+
assert(!(await exists(join(target, ".openworkflow", "validation"))), "validation dry draft created a lazy stage directory");
|
|
85
|
+
parseJsonReport(await runCapture(["node", CLI, "draft", "--root", target, "--artifact", "validation_target", "--id", "val-1", "--write", "--json"], env), "draft");
|
|
86
|
+
await writeFile(join(target, VALIDATION_PATH), [
|
|
87
|
+
"schema_version: 0.1.0",
|
|
88
|
+
"contract_id: validation:val-1",
|
|
89
|
+
"contract_type: validation",
|
|
90
|
+
"artifact_type: validation_target",
|
|
91
|
+
"title: Agent E2E validation target",
|
|
92
|
+
"status: active",
|
|
93
|
+
"core_question: Can an Agent continue from low-context OpenWorkflow handoff?",
|
|
94
|
+
"central_uncertainty: Whether a low-context Agent can trust managed OpenWorkflow read models before loading raw evidence.",
|
|
95
|
+
"hypothesis: A strict handoff and summary-quality gate lets the Agent continue safely from compact context.",
|
|
96
|
+
"target_behavior: The Agent starts from handoff, checks readiness, and refuses thin evidence before downstream work.",
|
|
97
|
+
"feature_classification:",
|
|
98
|
+
" existential:",
|
|
99
|
+
" - first consumer trust",
|
|
100
|
+
" supporting: []",
|
|
101
|
+
" later: []",
|
|
102
|
+
" out_of_scope: []",
|
|
103
|
+
"critical_assumptions:",
|
|
104
|
+
" - Agents need one strict trust gate before context loading.",
|
|
105
|
+
"prototype_scope:",
|
|
106
|
+
" include:",
|
|
107
|
+
" - Build a thin prototype artifact to test strict handoff quality.",
|
|
108
|
+
" exclude: []",
|
|
109
|
+
"prototype_experiment:",
|
|
110
|
+
" scenario: Agent resumes a repository after validation and then encounters thin prototype evidence.",
|
|
111
|
+
" must_show:",
|
|
112
|
+
" - Handoff succeeds after validation registration.",
|
|
113
|
+
" - Strict summary quality blocks thin prototype evidence.",
|
|
114
|
+
" must_not_show: []",
|
|
115
|
+
"observable_signals:",
|
|
116
|
+
" pass:",
|
|
117
|
+
" - /ow:proto readiness check passes after current validation is registered.",
|
|
118
|
+
" fail:",
|
|
119
|
+
" - /ow:proto readiness check reports thin_validation for the completed validation fixture.",
|
|
120
|
+
" ambiguous: []",
|
|
121
|
+
"acceptance:",
|
|
122
|
+
" - Strict handoff blocks current-but-thin evidence.",
|
|
123
|
+
"decision_rules:",
|
|
124
|
+
" continue:",
|
|
125
|
+
" - /ow:proto readiness passes and thin prototype summary is blocked by strict handoff.",
|
|
126
|
+
" revise:",
|
|
127
|
+
" - /ow:proto readiness fails because validation fixture lacks required prototype-readiness fields.",
|
|
128
|
+
" pivot: []",
|
|
129
|
+
" stop: []",
|
|
130
|
+
" needs_more_evidence: []",
|
|
131
|
+
"decision_options:",
|
|
132
|
+
" - continue",
|
|
133
|
+
" - revise",
|
|
134
|
+
" - pivot",
|
|
135
|
+
" - stop",
|
|
136
|
+
" - needs_more_evidence",
|
|
137
|
+
"vision_gaps: []",
|
|
138
|
+
"agent_readiness_gate:",
|
|
139
|
+
" status: ready_for_proto",
|
|
140
|
+
" blockers: []",
|
|
141
|
+
" warnings: []",
|
|
142
|
+
" write_authority: /ow:validation",
|
|
143
|
+
"",
|
|
144
|
+
].join("\n"), "utf8");
|
|
145
|
+
const register = parseJsonReport(await runCapture(["node", CLI, "register", "--root", target, "--artifact", VALIDATION_PATH, "--current", "--next-command", "/ow:proto", "--write", "--json"], env), "register");
|
|
146
|
+
const registerEffects = record(register.effects, "validation register effects");
|
|
147
|
+
assert(Array.isArray(registerEffects.updated) && registerEffects.updated.includes(".openworkflow/CURRENT_STATE.yaml"), "validation register did not update CURRENT_STATE");
|
|
148
|
+
const protoCheck = parseJsonReport(await runCapture(["node", CLI, "check", "/ow:proto", "--root", target, "--json"], env), "check");
|
|
149
|
+
assert(protoCheck.ok === true, "/ow:proto check should pass after active validation registration");
|
|
150
|
+
}
|
|
151
|
+
async function createThinPrototypeArtifact(target, env) {
|
|
152
|
+
parseJsonReport(await runCapture(["node", CLI, "draft", "--root", target, "--artifact", "prototype_evidence", "--id", "proto-1", "--write", "--json"], env), "draft");
|
|
153
|
+
await writeFile(join(target, PROTOTYPE_PATH), [
|
|
154
|
+
"schema_version: 0.1.0",
|
|
155
|
+
"contract_id: prototype:proto-1",
|
|
156
|
+
"contract_type: prototype",
|
|
157
|
+
"artifact_type: prototype_evidence",
|
|
158
|
+
"title: Agent E2E thin prototype",
|
|
159
|
+
"status: reviewed",
|
|
160
|
+
"validation_target: validation:val-1",
|
|
161
|
+
"core_question: Can strict handoff detect thin evidence?",
|
|
162
|
+
"result: promising",
|
|
163
|
+
"handoff:",
|
|
164
|
+
" next_command: /ow:tune",
|
|
165
|
+
"",
|
|
166
|
+
].join("\n"), "utf8");
|
|
167
|
+
parseJsonReport(await runCapture(["node", CLI, "register", "--root", target, "--artifact", PROTOTYPE_PATH, "--current", "--next-command", "/ow:tune", "--write", "--json"], env), "register");
|
|
168
|
+
const tuneCheck = parseJsonReport(await runCapture(["node", CLI, "check", "/ow:tune", "--root", target, "--json"], env), "check");
|
|
169
|
+
assert(tuneCheck.ok === true, "/ow:tune check should pass after prototype registration");
|
|
170
|
+
parseJsonReport(await runCapture(["node", CLI, "summarize", "--root", target, "--artifact", PROTOTYPE_PATH, "--write", "--json"], env), "summarize");
|
|
171
|
+
await assertFile(join(target, PROTOTYPE_SUMMARY_PATH));
|
|
172
|
+
}
|
|
173
|
+
async function verifyThinSummaryTrustGates(target, env) {
|
|
174
|
+
const summaries = parseJsonReport(await runCapture(["node", CLI, "summaries", "--root", target, "--json"], env), "summaries");
|
|
175
|
+
assert(summaries.ok === true, "non-strict summaries should pass for current-but-thin summaries");
|
|
176
|
+
const summariesData = record(summaries.data, "summaries data");
|
|
177
|
+
assert(summaryStatus(summariesData, "prototype_evidence") === "current", "prototype summary should be current");
|
|
178
|
+
const strictSummaries = await runCaptureStatus(["node", CLI, "summaries", "--root", target, "--strict", "--json"], env);
|
|
179
|
+
assert(strictSummaries.code !== 0, "summaries --strict should fail for current-but-thin prototype evidence");
|
|
180
|
+
const strictSummaryReport = parseJsonReport(strictSummaries.output, "summaries");
|
|
181
|
+
assert(hasHealthError(strictSummaryReport, "summary quality prototype_evidence"), "strict summaries did not expose prototype quality health error");
|
|
182
|
+
const handoff = await runCaptureStatus(["node", CLI, "handoff", "--root", target, "--json"], env);
|
|
183
|
+
assert(handoff.code !== 0, "handoff should fail for current-but-thin prototype evidence");
|
|
184
|
+
const handoffReport = parseJsonReport(handoff.output, "handoff");
|
|
185
|
+
const handoffData = record(handoffReport.data, "thin handoff data");
|
|
186
|
+
assert(handoffData.handoff_ok === false, "thin handoff should expose handoff_ok=false");
|
|
187
|
+
assert(handoffData.summary_freshness_ok === true, "thin handoff should keep summary_freshness_ok=true");
|
|
188
|
+
assert(handoffData.summary_quality_ok === false, "thin handoff should expose summary_quality_ok=false");
|
|
189
|
+
assert(hasHealthError(handoffReport, "summary quality prototype_evidence"), "handoff did not expose strict prototype quality health error");
|
|
190
|
+
const defaultContext = parseJsonReport(await runCapture(["node", CLI, "context", "--root", target, "--json"], env), "context");
|
|
191
|
+
const defaultContextData = record(defaultContext.data, "default context data");
|
|
192
|
+
assert(defaultContext.ok === true, "default context should remain non-strict for current-but-thin summaries");
|
|
193
|
+
assert(defaultContextData.handoff_mode === false, "default context should expose handoff_mode=false");
|
|
194
|
+
assert(defaultContextData.handoff_quality_ok === false, "default context should expose handoff_quality_ok=false");
|
|
195
|
+
const handoffContext = await runCaptureStatus(["node", CLI, "context", "--root", target, "--handoff", "--json"], env);
|
|
196
|
+
assert(handoffContext.code !== 0, "context --handoff should fail for current-but-thin summaries");
|
|
197
|
+
const handoffContextReport = parseJsonReport(handoffContext.output, "context");
|
|
198
|
+
const handoffContextData = record(handoffContextReport.data, "handoff context data");
|
|
199
|
+
assert(handoffContextData.handoff_mode === true, "context --handoff should expose handoff_mode=true");
|
|
200
|
+
assert(hasHealthError(handoffContextReport, "summary quality prototype_evidence"), "context --handoff did not expose strict prototype quality health error");
|
|
201
|
+
const doctor = parseJsonReport(await runCapture(["node", CLI, "doctor", "--root", target, "--tools", "codex", "--json"], env), "doctor");
|
|
202
|
+
const doctorData = record(doctor.data, "doctor data");
|
|
203
|
+
assert(doctor.ok === true, "doctor should keep maintenance ok for thin handoff quality");
|
|
204
|
+
assert(doctorData.handoff_quality_ok === false, "doctor should expose handoff_quality_ok=false for thin summaries");
|
|
205
|
+
}
|
|
206
|
+
async function verifyPlanningArtifactRegistrationContract() {
|
|
207
|
+
const contracts = await read(join(REPO_ROOT, "references", "planning-artifact-contracts.md"));
|
|
208
|
+
for (const required of [
|
|
209
|
+
"Planning Artifact Registration",
|
|
210
|
+
"must not load full planning history",
|
|
211
|
+
"`SUMMARY.yaml`: default queue handoff and read-model artifact",
|
|
212
|
+
"`CANDIDATE_CHANGES.yaml` only when source truth is needed",
|
|
213
|
+
]) {
|
|
214
|
+
assert(contracts.includes(required), `planning registration contract missing for Agent E2E: ${required}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async function verifyCleanAndSyncRecovery(target, env, sourceSnapshots) {
|
|
218
|
+
const clean = parseJsonReport(await runCapture(["node", CLI, "clean", "--root", target, "--tools", "codex", "--yes", "--json"], env), "clean");
|
|
219
|
+
const cleanEffects = record(clean.effects, "clean effects");
|
|
220
|
+
assert(arrayIncludesPath(cleanEffects.preserved, PROTOTYPE_PATH), "clean did not report preserved prototype source artifact");
|
|
221
|
+
assert(!(await exists(join(target, ".openworkflow", "config.yaml"))), "clean did not remove managed config");
|
|
222
|
+
await assertFile(join(target, VALIDATION_PATH));
|
|
223
|
+
await assertFile(join(target, PROTOTYPE_PATH));
|
|
224
|
+
await assertFile(join(target, PROTOTYPE_SUMMARY_PATH));
|
|
225
|
+
const agentsAfterClean = await read(join(target, "AGENTS.md"));
|
|
226
|
+
assert(agentsAfterClean.includes("User insight stays."), "clean removed user AGENTS.md content");
|
|
227
|
+
assert(!agentsAfterClean.includes("BEGIN OPENWORKFLOW AGENT GUIDE"), "clean did not remove OpenWorkflow managed AGENTS.md block");
|
|
228
|
+
assert(!(await exists(join(target, ".agents", "openworkflow-adapter.yaml"))), "clean did not remove Codex adapter manifest");
|
|
229
|
+
await assertSnapshots(target, sourceSnapshots);
|
|
230
|
+
const sync = parseJsonReport(await runCapture(["node", CLI, "sync", "--root", target, "--json"], env), "sync");
|
|
231
|
+
const syncData = record(sync.data, "sync data");
|
|
232
|
+
const syncDetection = record(syncData.detection, "sync detection");
|
|
233
|
+
assert(Array.isArray(syncData.tools) && syncData.tools.includes("codex"), "default sync recovery did not select codex");
|
|
234
|
+
assert(Array.isArray(syncDetection.evidence) && syncDetection.evidence.some((item) => String(item).includes("default auto sync fallback tool: codex")), "default sync recovery did not expose codex fallback evidence");
|
|
235
|
+
await assertFile(join(target, ".agents", "openworkflow-adapter.yaml"));
|
|
236
|
+
const reconciliation = record(syncData.state_reconciliation, "sync state_reconciliation");
|
|
237
|
+
assert(reconciliation.reconciled === true, "sync did not reconcile CURRENT_STATE after clean");
|
|
238
|
+
assert(reconciliation.active_stage === "prototype", "sync did not recover prototype active_stage");
|
|
239
|
+
assert(reconciliation.next_command === "/ow:tune", "sync did not recover /ow:tune next_command");
|
|
240
|
+
const restoredPointers = record(reconciliation.restored_pointers, "sync restored_pointers");
|
|
241
|
+
assert(restoredPointers.current_validation === VALIDATION_PATH, "sync did not recover current_validation");
|
|
242
|
+
assert(restoredPointers.current_prototype === PROTOTYPE_PATH, "sync did not recover current_prototype");
|
|
243
|
+
await assertFile(join(target, ".openworkflow", "CURRENT_STATE.yaml"));
|
|
244
|
+
const recoveredState = await read(join(target, ".openworkflow", "CURRENT_STATE.yaml"));
|
|
245
|
+
assert(recoveredState.includes("active_stage: prototype"), "recovered CURRENT_STATE missing prototype stage");
|
|
246
|
+
assert(recoveredState.includes(`current_validation: ${VALIDATION_PATH}`), "recovered CURRENT_STATE missing validation pointer");
|
|
247
|
+
assert(recoveredState.includes(`current_prototype: ${PROTOTYPE_PATH}`), "recovered CURRENT_STATE missing prototype pointer");
|
|
248
|
+
assert(recoveredState.includes("next_command: /ow:tune"), "recovered CURRENT_STATE missing /ow:tune");
|
|
249
|
+
const agentsAfterSync = await read(join(target, "AGENTS.md"));
|
|
250
|
+
assert(agentsAfterSync.includes("User insight stays."), "sync removed user AGENTS.md content");
|
|
251
|
+
assert(agentsAfterSync.includes("BEGIN OPENWORKFLOW AGENT GUIDE"), "sync did not restore OpenWorkflow AGENTS.md managed block");
|
|
252
|
+
await assertSnapshots(target, sourceSnapshots);
|
|
253
|
+
const recoveredDoctor = parseJsonReport(await runCapture(["node", CLI, "doctor", "--root", target, "--json"], env), "doctor");
|
|
254
|
+
const recoveredDoctorData = record(recoveredDoctor.data, "recovered doctor data");
|
|
255
|
+
assert(recoveredDoctor.ok === true, "doctor should pass after default sync recovery");
|
|
256
|
+
assert(Array.isArray(recoveredDoctorData.tools) && recoveredDoctorData.tools.includes("codex"), "doctor did not detect codex after default sync recovery");
|
|
257
|
+
assert(recoveredDoctorData.adapter_ok === true, "doctor did not report adapter_ok=true after default sync recovery");
|
|
258
|
+
const recoveredContext = parseJsonReport(await runCapture(["node", CLI, "context", "--root", target, "--json"], env), "context");
|
|
259
|
+
const recoveredContextData = record(recoveredContext.data, "recovered context data");
|
|
260
|
+
assert(recoveredContext.ok === true, "default context should pass after sync recovery");
|
|
261
|
+
assert(recoveredContextData.normalized_command === "/ow:tune", "recovered context should default to /ow:tune");
|
|
262
|
+
const recoveredHandoff = await runCaptureStatus(["node", CLI, "handoff", "--root", target, "--json"], env);
|
|
263
|
+
assert(recoveredHandoff.code !== 0, "handoff should still fail on preserved thin prototype after sync recovery");
|
|
264
|
+
const recoveredTuneCheck = parseJsonReport(await runCapture(["node", CLI, "check", "/ow:tune", "--root", target, "--json"], env), "check");
|
|
265
|
+
assert(recoveredTuneCheck.ok === true, "/ow:tune check should pass after sync recovery");
|
|
266
|
+
}
|
|
267
|
+
async function run(command, env) {
|
|
268
|
+
const result = await runCaptureStatus(command, env);
|
|
269
|
+
if (result.code !== 0) {
|
|
270
|
+
throw new Error(`command failed (${result.code ?? "signal"}): ${command.join(" ")}\n${result.output}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
function runCapture(command, env) {
|
|
274
|
+
return runCaptureStatus(command, env).then((result) => {
|
|
275
|
+
if (result.code !== 0) {
|
|
276
|
+
throw new Error(`command failed (${result.code ?? "signal"}): ${command.join(" ")}\n${result.output}`);
|
|
277
|
+
}
|
|
278
|
+
return result.output;
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
function runCaptureStatus(command, env) {
|
|
282
|
+
return new Promise((resolvePromise, reject) => {
|
|
283
|
+
const executable = command[0];
|
|
284
|
+
if (!executable) {
|
|
285
|
+
reject(new Error("empty command"));
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
let output = "";
|
|
289
|
+
const child = spawn(executable, command.slice(1), {
|
|
290
|
+
cwd: REPO_ROOT,
|
|
291
|
+
env,
|
|
292
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
293
|
+
});
|
|
294
|
+
child.stdout.on("data", (chunk) => {
|
|
295
|
+
output += chunk.toString("utf8");
|
|
296
|
+
});
|
|
297
|
+
child.stderr.on("data", (chunk) => {
|
|
298
|
+
output += chunk.toString("utf8");
|
|
299
|
+
});
|
|
300
|
+
child.on("error", reject);
|
|
301
|
+
child.on("close", (code) => {
|
|
302
|
+
resolvePromise({ code, output });
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
function parseJsonReport(output, command) {
|
|
307
|
+
const parsed = JSON.parse(output);
|
|
308
|
+
assert(isRecord(parsed), `${command} did not emit a JSON object`);
|
|
309
|
+
assert(parsed.command === command, `${command} JSON command mismatch`);
|
|
310
|
+
assert("ok" in parsed, `${command} JSON missing ok`);
|
|
311
|
+
assert(isRecord(parsed.effects), `${command} JSON missing effects`);
|
|
312
|
+
assert(Array.isArray(parsed.health_errors), `${command} JSON missing health_errors`);
|
|
313
|
+
return parsed;
|
|
314
|
+
}
|
|
315
|
+
function summaryStatus(summaryData, artifactType) {
|
|
316
|
+
const entries = summaryData.entries;
|
|
317
|
+
if (!Array.isArray(entries)) {
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
const found = entries.find((entry) => isRecord(entry) && entry.artifact_type === artifactType);
|
|
321
|
+
return isRecord(found) && typeof found.status === "string" ? found.status : null;
|
|
322
|
+
}
|
|
323
|
+
function hasHealthError(report, pattern) {
|
|
324
|
+
return Array.isArray(report.health_errors) && report.health_errors.some((item) => String(item).includes(pattern));
|
|
325
|
+
}
|
|
326
|
+
function arrayIncludesPath(value, suffix) {
|
|
327
|
+
return Array.isArray(value) && value.some((item) => typeof item === "string" && item.endsWith(suffix));
|
|
328
|
+
}
|
|
329
|
+
async function readSnapshots(root, paths) {
|
|
330
|
+
const snapshots = {};
|
|
331
|
+
for (const path of paths) {
|
|
332
|
+
snapshots[path] = hash(await read(join(root, path)));
|
|
333
|
+
}
|
|
334
|
+
return snapshots;
|
|
335
|
+
}
|
|
336
|
+
async function assertSnapshots(root, snapshots) {
|
|
337
|
+
for (const [path, expected] of Object.entries(snapshots)) {
|
|
338
|
+
assert(hash(await read(join(root, path))) === expected, `file changed unexpectedly: ${path}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
function hash(content) {
|
|
342
|
+
return createHash("sha256").update(content).digest("hex");
|
|
343
|
+
}
|
|
344
|
+
async function assertNoLazyStageArtifacts(root) {
|
|
345
|
+
for (const path of [
|
|
346
|
+
".openworkflow/vision",
|
|
347
|
+
".openworkflow/validation",
|
|
348
|
+
".openworkflow/prototypes",
|
|
349
|
+
".openworkflow/design",
|
|
350
|
+
".openworkflow/specs",
|
|
351
|
+
".openworkflow/changes",
|
|
352
|
+
".openworkflow/runtime",
|
|
353
|
+
]) {
|
|
354
|
+
assert(!(await exists(join(root, path))), `minimal init created lazy stage path: ${path}`);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
async function assertFile(path) {
|
|
358
|
+
const info = await stat(path);
|
|
359
|
+
assert(info.isFile(), `expected file: ${path}`);
|
|
360
|
+
}
|
|
361
|
+
async function exists(path) {
|
|
362
|
+
try {
|
|
363
|
+
await stat(path);
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
async function read(path) {
|
|
371
|
+
return readFile(path, "utf8");
|
|
372
|
+
}
|
|
373
|
+
function record(value, label) {
|
|
374
|
+
assert(isRecord(value), `${label} must be an object`);
|
|
375
|
+
return value;
|
|
376
|
+
}
|
|
377
|
+
function isRecord(value) {
|
|
378
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
379
|
+
}
|
|
380
|
+
function assert(condition, message) {
|
|
381
|
+
if (!condition) {
|
|
382
|
+
throw new Error(message);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
main().then((code) => {
|
|
386
|
+
process.exitCode = code;
|
|
387
|
+
}).catch((error) => {
|
|
388
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
389
|
+
process.exitCode = 1;
|
|
390
|
+
});
|
|
391
|
+
//# sourceMappingURL=verifyAgentE2E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyAgentE2E.js","sourceRoot":"","sources":["../../../../packages/cli/src/dev/verifyAgentE2E.ts"],"names":[],"mappings":"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"}
|