@dailephd/my-frontend-observer 0.9.1 → 0.10.1

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 (150) hide show
  1. package/CHANGELOG.md +490 -471
  2. package/LICENSE +21 -21
  3. package/README.md +375 -357
  4. package/dist/application/projectCheckService.d.ts +6 -0
  5. package/dist/application/projectCheckService.js +8 -1
  6. package/dist/application/projectCheckService.js.map +1 -1
  7. package/dist/application/projectWorkflowService.d.ts +7 -2
  8. package/dist/application/projectWorkflowService.js +10 -3
  9. package/dist/application/projectWorkflowService.js.map +1 -1
  10. package/dist/application/visualChangeAgentHandoffService.d.ts +28 -0
  11. package/dist/application/visualChangeAgentHandoffService.js +111 -0
  12. package/dist/application/visualChangeAgentHandoffService.js.map +1 -0
  13. package/dist/application/visualChangeProjectWorkflowService.d.ts +95 -0
  14. package/dist/application/visualChangeProjectWorkflowService.js +376 -0
  15. package/dist/application/visualChangeProjectWorkflowService.js.map +1 -0
  16. package/dist/application/visualChangeReviewService.d.ts +50 -0
  17. package/dist/application/visualChangeReviewService.js +69 -0
  18. package/dist/application/visualChangeReviewService.js.map +1 -0
  19. package/dist/application/visualChangeWorkflowPersistenceService.d.ts +26 -0
  20. package/dist/application/visualChangeWorkflowPersistenceService.js +15 -0
  21. package/dist/application/visualChangeWorkflowPersistenceService.js.map +1 -0
  22. package/dist/artifacts/visualChangeWorkflowArtifactReader.d.ts +9 -0
  23. package/dist/artifacts/visualChangeWorkflowArtifactReader.js +47 -0
  24. package/dist/artifacts/visualChangeWorkflowArtifactReader.js.map +1 -0
  25. package/dist/artifacts/visualChangeWorkflowArtifactWriter.d.ts +20 -0
  26. package/dist/artifacts/visualChangeWorkflowArtifactWriter.js +41 -0
  27. package/dist/artifacts/visualChangeWorkflowArtifactWriter.js.map +1 -0
  28. package/dist/cli.js +9 -7
  29. package/dist/cli.js.map +1 -1
  30. package/dist/domain/visualChangeAgentHandoff.d.ts +82 -0
  31. package/dist/domain/visualChangeAgentHandoff.js +80 -0
  32. package/dist/domain/visualChangeAgentHandoff.js.map +1 -0
  33. package/dist/domain/visualChangeAgentHandoffSerialization.d.ts +2 -0
  34. package/dist/domain/visualChangeAgentHandoffSerialization.js +11 -0
  35. package/dist/domain/visualChangeAgentHandoffSerialization.js.map +1 -0
  36. package/dist/domain/visualChangeCycle.d.ts +8 -0
  37. package/dist/domain/visualChangeCycle.js +7 -0
  38. package/dist/domain/visualChangeCycle.js.map +1 -0
  39. package/dist/domain/visualChangeWorkflow.d.ts +125 -0
  40. package/dist/domain/visualChangeWorkflow.js +109 -0
  41. package/dist/domain/visualChangeWorkflow.js.map +1 -0
  42. package/dist/domain/visualChangeWorkflowIdentity.d.ts +5 -0
  43. package/dist/domain/visualChangeWorkflowIdentity.js +24 -0
  44. package/dist/domain/visualChangeWorkflowIdentity.js.map +1 -0
  45. package/dist/index.d.ts +21 -1
  46. package/dist/index.js +12 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/projectWorkflow/projectPaths.d.ts +3 -0
  49. package/dist/projectWorkflow/projectPaths.js +7 -0
  50. package/dist/projectWorkflow/projectPaths.js.map +1 -1
  51. package/dist/viewer/assets/index-DglJ6f28.css +1 -0
  52. package/dist/viewer/assets/index-DsODREY5.js +9 -0
  53. package/dist/viewer/index.html +15 -15
  54. package/dist/viewer/sw.js +1 -1
  55. package/dist/viewerServer/evidence/classify.d.ts +3 -1
  56. package/dist/viewerServer/evidence/classify.js +10 -0
  57. package/dist/viewerServer/evidence/classify.js.map +1 -1
  58. package/dist/viewerServer/evidence/handles.js +1 -0
  59. package/dist/viewerServer/evidence/handles.js.map +1 -1
  60. package/dist/viewerServer/evidence/projection.d.ts +5 -0
  61. package/dist/viewerServer/evidence/projection.js +19 -0
  62. package/dist/viewerServer/evidence/projection.js.map +1 -1
  63. package/dist/viewerServer/evidence/visualChangeWorkflowView.d.ts +31 -0
  64. package/dist/viewerServer/evidence/visualChangeWorkflowView.js +36 -0
  65. package/dist/viewerServer/evidence/visualChangeWorkflowView.js.map +1 -0
  66. package/dist/viewerServer/httpServer.js +323 -1
  67. package/dist/viewerServer/httpServer.js.map +1 -1
  68. package/dist/viewerServer/referenceApproval.d.ts +22 -0
  69. package/dist/viewerServer/referenceApproval.js +42 -0
  70. package/dist/viewerServer/referenceApproval.js.map +1 -0
  71. package/dist/viewerServer/referenceVisualChangeAuthoring.d.ts +28 -0
  72. package/dist/viewerServer/referenceVisualChangeAuthoring.js +134 -0
  73. package/dist/viewerServer/referenceVisualChangeAuthoring.js.map +1 -0
  74. package/dist/viewerServer/runtimeVisualChangeAuthoring.d.ts +33 -0
  75. package/dist/viewerServer/runtimeVisualChangeAuthoring.js +81 -0
  76. package/dist/viewerServer/runtimeVisualChangeAuthoring.js.map +1 -0
  77. package/dist/viewerServer/visualChangeAuthoring.d.ts +46 -0
  78. package/dist/viewerServer/visualChangeAuthoring.js +63 -0
  79. package/dist/viewerServer/visualChangeAuthoring.js.map +1 -0
  80. package/dist/viewerServer/visualChangeHandoff.d.ts +23 -0
  81. package/dist/viewerServer/visualChangeHandoff.js +31 -0
  82. package/dist/viewerServer/visualChangeHandoff.js.map +1 -0
  83. package/dist/viewerServer/visualChangeReview.d.ts +30 -0
  84. package/dist/viewerServer/visualChangeReview.js +46 -0
  85. package/dist/viewerServer/visualChangeReview.js.map +1 -0
  86. package/docs/ARCHITECTURE.md +1394 -1373
  87. package/docs/CI_CD.md +349 -327
  88. package/docs/COMMANDS.md +1035 -1012
  89. package/docs/CONTRACTS.md +1971 -1926
  90. package/docs/CURRENT_STATE.md +1277 -1238
  91. package/docs/DEVELOPMENT.md +240 -237
  92. package/docs/DOCUMENTATION_PRESERVATION_POLICY.md +50 -50
  93. package/docs/PROJECT_DESCRIPTION.md +2248 -2224
  94. package/docs/PROJECT_MILESTONES.md +2681 -2558
  95. package/docs/PROJECT_OVERVIEW.md +200 -191
  96. package/docs/QUICKSTART.md +100 -96
  97. package/docs/RELEASE.md +37 -33
  98. package/docs/ROADMAP.md +1105 -1033
  99. package/docs/SECURITY.md +297 -275
  100. package/docs/WORKFLOWS.md +806 -770
  101. package/docs/plans/v0.10-implementation-plan.md +1509 -0
  102. package/docs/plans/v0.8-implementation-plan.md +655 -655
  103. package/docs/plans/v0.8.1-cli-usability-patch-plan.md +505 -505
  104. package/docs/plans/v0.9-implementation-plan.md +1529 -1529
  105. package/docs/plans/v0.9.1-implementation-plan.md +468 -468
  106. package/docs/reports/v0.10-batch1-visual-change-workflow-foundation.md +102 -0
  107. package/docs/reports/v0.10-batch2-project-composition-check-recording.md +103 -0
  108. package/docs/reports/v0.10-batch3-viewer-visual-change-workspace.md +93 -0
  109. package/docs/reports/v0.10-batch4-actual-frontend-entry.md +59 -0
  110. package/docs/reports/v0.10-batch5-reference-driven-entry.md +238 -0
  111. package/docs/reports/v0.10-batch6-coding-agent-handoff.md +85 -0
  112. package/docs/reports/v0.10-batch7-correction-review-acceptance.md +145 -0
  113. package/docs/reports/v0.10-batch8-integrated-acceptance.md +109 -0
  114. package/docs/reports/v0.10-implementation-completeness-documentation-reconciliation.md +344 -0
  115. package/docs/reports/v0.10-pre-release-readiness.md +120 -0
  116. package/docs/reports/v0.10-release-preparation.md +70 -0
  117. package/docs/reports/v0.10.1-project-check-baseline-context-implementation.md +86 -0
  118. package/docs/reports/v0.7-bounded-fidelity-context-prompt7.md +243 -243
  119. package/docs/reports/v0.7-implementation-completeness-documentation-reconciliation.md +497 -497
  120. package/docs/reports/v0.7-pre-release-readiness.md +337 -337
  121. package/docs/reports/v0.7-reference-binding-prompt5.md +223 -223
  122. package/docs/reports/v0.7-reference-compatibility-prompt4.md +234 -234
  123. package/docs/reports/v0.7-reference-correction-workflow-prompt8.md +222 -222
  124. package/docs/reports/v0.7-reference-fidelity-prompt6.md +216 -216
  125. package/docs/reports/v0.7-reference-foundation-prompt1.md +151 -151
  126. package/docs/reports/v0.7-reference-regions-prompt2.md +195 -195
  127. package/docs/reports/v0.7-reference-requirements-prompt3.md +217 -217
  128. package/docs/reports/v0.7-release-prep.md +423 -423
  129. package/docs/reports/v0.8-binding-fidelity-interaction-batch6.md +279 -279
  130. package/docs/reports/v0.8-bounded-context-correlation-batch7.md +233 -233
  131. package/docs/reports/v0.8-comparison-contract-inspection-batch4.md +279 -279
  132. package/docs/reports/v0.8-evidence-index-readers-batch2.md +247 -247
  133. package/docs/reports/v0.8-implementation-completeness-documentation-reconciliation.md +741 -741
  134. package/docs/reports/v0.8-integrated-viewer-acceptance-batch8.md +128 -128
  135. package/docs/reports/v0.8-observation-svg-inspection-batch3.md +223 -223
  136. package/docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md +687 -687
  137. package/docs/reports/v0.8-reference-candidate-inspection-batch5.md +232 -232
  138. package/docs/reports/v0.8-viewer-runtime-pwa-batch1.md +278 -278
  139. package/docs/reports/v0.8.1-implementation-completeness-documentation-reconciliation.md +114 -114
  140. package/docs/reports/v0.8.1-prerelease-readiness-cross-platform-security-code-rot.md +170 -170
  141. package/docs/reports/v0.9-architecture-retrieval.md +14 -37
  142. package/docs/reports/v0.9-final-pre-release-readiness.md +209 -209
  143. package/docs/reports/v0.9-final-readiness-corrections.md +530 -530
  144. package/docs/reports/v0.9-pre-release-readiness.md +169 -169
  145. package/docs/reports/v0.9.1-batch1-pwa-hard-gate-isolation.md +359 -359
  146. package/docs/reports/v0.9.1-batch2-hard-gate-validation-integration.md +262 -262
  147. package/docs/reports/v0.9.1-pre-release-readiness.md +206 -206
  148. package/package.json +59 -59
  149. package/dist/viewer/assets/index-BN41MI7m.css +0 -1
  150. package/dist/viewer/assets/index-CkKXnlrI.js +0 -9
@@ -0,0 +1,376 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { readFile, rename, rm, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { readObservationArtifact } from '../artifacts/artifactReader.js';
5
+ import { readExternalReferenceArtifact } from '../artifacts/externalReferenceArtifactReader.js';
6
+ import { readPerChangeContract, readPersistentBaselineContract } from '../artifacts/frontendContractArtifactReader.js';
7
+ import { readVisualAnnotationArtifact } from '../artifacts/visualAnnotationArtifactReader.js';
8
+ import { readVisualChangeWorkflowArtifact } from '../artifacts/visualChangeWorkflowArtifactReader.js';
9
+ import { MAX_VISUAL_CHANGE_ATTEMPTS } from '../domain/visualChangeWorkflow.js';
10
+ import { deriveVisualChangeCycleState } from '../domain/visualChangeCycle.js';
11
+ import { buildReferenceCorrectionAttemptIdentity, buildReferenceCorrectionReviewIdentity } from '../domain/referenceCorrectionIdentity.js';
12
+ import { buildVisualChangeAttemptIdentity } from '../domain/visualChangeWorkflowIdentity.js';
13
+ import { readAliasCatalog } from '../projectWorkflow/aliasCatalog.js';
14
+ import { resolveContainedAcceptancePath } from '../projectWorkflow/checkAcceptance.js';
15
+ import { validateProjectConfig } from '../projectWorkflow/projectConfig.js';
16
+ import { aliasCatalogPath, projectConfigPath, visualChangeOutputLocation } from '../projectWorkflow/projectPaths.js';
17
+ import { checkProject } from './projectCheckService.js';
18
+ import { persistVisualChangeWorkflow } from './visualChangeWorkflowPersistenceService.js';
19
+ const nativeAtomicWrite = async (file, text) => {
20
+ const temporary = `${file}.tmp-${process.pid}-${randomBytes(6).toString('hex')}`;
21
+ try {
22
+ await writeFile(temporary, text, 'utf8');
23
+ await rename(temporary, file);
24
+ }
25
+ catch (error) {
26
+ await rm(temporary, { force: true }).catch(() => undefined);
27
+ throw error;
28
+ }
29
+ };
30
+ const defaults = { persist: persistVisualChangeWorkflow, check: checkProject, atomicWrite: nativeAtomicWrite, now: () => new Date().toISOString() };
31
+ const dependencies = (overrides) => ({ ...defaults, ...overrides });
32
+ function selection(config) {
33
+ return {
34
+ ...(config.acceptance?.contract?.changeArtifact === undefined ? {} : { changeContractArtifact: config.acceptance.contract.changeArtifact }),
35
+ ...(config.acceptance?.reference?.approvedArtifact === undefined ? {} : { approvedReferenceArtifact: config.acceptance.reference.approvedArtifact }),
36
+ ...(config.acceptance?.reference?.bindingsFile === undefined ? {} : { bindingsFile: config.acceptance.reference.bindingsFile }),
37
+ };
38
+ }
39
+ function sameSelection(left, right) {
40
+ return left.changeContractArtifact === right.changeContractArtifact && left.approvedReferenceArtifact === right.approvedReferenceArtifact && left.bindingsFile === right.bindingsFile;
41
+ }
42
+ function failure(code, reason, check) {
43
+ return { ok: false, code, reason, ...(check === undefined ? {} : { check }) };
44
+ }
45
+ function projectRelative(projectRoot, absolute) {
46
+ const relative = path.relative(projectRoot, absolute).split(path.sep).join('/');
47
+ return relative.length > 0 && !relative.startsWith('../') && !path.posix.isAbsolute(relative) ? relative : undefined;
48
+ }
49
+ function resolveProjectPath(projectRoot, portable) {
50
+ const resolved = resolveContainedAcceptancePath(projectRoot, portable);
51
+ return resolved.ok ? resolved.path : undefined;
52
+ }
53
+ async function readConfigState(projectRoot) {
54
+ try {
55
+ const rawText = await readFile(projectConfigPath(projectRoot), 'utf8');
56
+ const raw = JSON.parse(rawText);
57
+ const validated = validateProjectConfig(raw);
58
+ if (!validated.ok || typeof raw !== 'object' || raw === null || Array.isArray(raw))
59
+ return failure('project-config-invalid', validated.ok ? 'project configuration root is invalid' : validated.reason);
60
+ return { ok: true, rawText, raw: raw, config: validated.config };
61
+ }
62
+ catch (error) {
63
+ return failure('project-config-invalid', `project configuration could not be read: ${error instanceof Error ? error.message : String(error)}`);
64
+ }
65
+ }
66
+ function manifestAt(projectRoot, artifactPath) {
67
+ const root = resolveProjectPath(projectRoot, artifactPath);
68
+ return root === undefined ? undefined : path.join(root, 'manifest.json');
69
+ }
70
+ async function verifyScope(projectRoot, scope) {
71
+ const baselineManifest = manifestAt(projectRoot, scope.baselineObservation.artifactPath);
72
+ if (baselineManifest === undefined)
73
+ return failure('workflow-reference-invalid', 'baseline observation path is unsafe or outside the project');
74
+ const baseline = await readObservationArtifact(baselineManifest);
75
+ if (!baseline.ok || baseline.artifact.observationId !== scope.baselineObservation.observationId || baseline.artifact.requestId !== scope.baselineObservation.requestId || scope.baselineObservation.artifactId !== scope.baselineObservation.observationId)
76
+ return failure('workflow-reference-invalid', 'frozen baseline observation identity/path does not match canonical evidence');
77
+ const annotationManifest = manifestAt(projectRoot, scope.annotationArtifactPath);
78
+ if (annotationManifest === undefined)
79
+ return failure('workflow-reference-invalid', 'annotation path is unsafe or outside the project');
80
+ const annotation = await readVisualAnnotationArtifact(annotationManifest);
81
+ if (!annotation.ok || annotation.artifact.annotationId !== scope.annotationId)
82
+ return failure('workflow-reference-invalid', 'annotation identity/path does not match canonical evidence');
83
+ if (scope.baselineContract !== undefined) {
84
+ const manifest = manifestAt(projectRoot, scope.baselineContract.artifactPath);
85
+ const contract = manifest === undefined ? undefined : await readPersistentBaselineContract(manifest);
86
+ if (contract === undefined || !contract.ok || contract.contract.baselineId !== scope.baselineContract.baselineId)
87
+ return failure('workflow-reference-invalid', 'baseline contract identity/path does not match canonical evidence');
88
+ }
89
+ if (scope.entryMode === 'actual-frontend') {
90
+ const manifest = manifestAt(projectRoot, scope.changeContract.artifactPath);
91
+ const contract = manifest === undefined ? undefined : await readPerChangeContract(manifest);
92
+ if (contract === undefined || !contract.ok || contract.contract.contractId !== scope.changeContract.contractId || contract.contract.contractRequestId !== scope.changeContract.contractRequestId)
93
+ return failure('workflow-reference-invalid', 'change contract identity/path does not match canonical evidence');
94
+ }
95
+ else {
96
+ const manifest = manifestAt(projectRoot, scope.approvedReference.artifactPath);
97
+ const reference = manifest === undefined ? undefined : await readExternalReferenceArtifact(manifest);
98
+ if (reference === undefined || !reference.ok || reference.artifact.referenceId !== scope.approvedReference.referenceId || reference.artifact.referenceRequestId !== scope.approvedReference.referenceRequestId)
99
+ return failure('workflow-reference-invalid', 'external reference identity/path does not match canonical evidence');
100
+ }
101
+ return undefined;
102
+ }
103
+ export async function createProjectVisualChangeWorkflow(input) {
104
+ const projectRoot = path.resolve(input.projectRoot);
105
+ const config = await readConfigState(projectRoot);
106
+ if (!config.ok)
107
+ return config;
108
+ const invalid = verifyScope(projectRoot, input.scope);
109
+ const scopeFailure = await invalid;
110
+ if (scopeFailure !== undefined)
111
+ return scopeFailure;
112
+ const persisted = await dependencies(input.dependencies).persist({ scope: input.scope, outputLocation: visualChangeOutputLocation(), cwd: projectRoot, ...(input.createdAt === undefined ? {} : { createdAt: input.createdAt }) });
113
+ return persisted.ok ? persisted : failure('workflow-persistence-failure', 'visual-change workflow could not be persisted');
114
+ }
115
+ async function loadWorkflow(projectRoot, workflowManifestPath) {
116
+ const resolved = resolveProjectPath(projectRoot, workflowManifestPath);
117
+ if (resolved === undefined)
118
+ return failure('workflow-invalid', 'workflow manifest path is unsafe or outside the project');
119
+ const read = await readVisualChangeWorkflowArtifact(resolved);
120
+ return read.ok ? { ok: true, artifact: read.artifact, manifestPath: resolved } : failure('workflow-invalid', read.reason);
121
+ }
122
+ function updatedConfig(raw, scope, workflowManifestPath, restore) {
123
+ const acceptance = { ...raw.acceptance };
124
+ if (scope.entryMode === 'actual-frontend') {
125
+ const contract = { ...acceptance.contract };
126
+ contract.changeArtifact = restore === undefined ? scope.changeContract.artifactPath : restore.changeContractArtifact;
127
+ acceptance.contract = contract;
128
+ }
129
+ else {
130
+ const reference = { ...acceptance.reference };
131
+ if (restore === undefined) {
132
+ reference.approvedArtifact = scope.approvedReference.artifactPath;
133
+ reference.bindingsFile = `${path.posix.dirname(workflowManifestPath)}/bindings.json`;
134
+ }
135
+ else {
136
+ reference.approvedArtifact = restore.approvedReferenceArtifact;
137
+ if (restore.bindingsFile === undefined)
138
+ delete reference.bindingsFile;
139
+ else
140
+ reference.bindingsFile = restore.bindingsFile;
141
+ }
142
+ acceptance.reference = reference;
143
+ }
144
+ return { ...raw, acceptance };
145
+ }
146
+ async function verifiedContractIds(projectRoot, config) {
147
+ if (config.acceptance?.contract === undefined)
148
+ return { ok: true };
149
+ const baselineManifest = manifestAt(projectRoot, config.acceptance.contract.baselineArtifact);
150
+ const changeManifest = manifestAt(projectRoot, config.acceptance.contract.changeArtifact);
151
+ const baseline = baselineManifest === undefined ? undefined : await readPersistentBaselineContract(baselineManifest);
152
+ const change = changeManifest === undefined ? undefined : await readPerChangeContract(changeManifest);
153
+ if (baseline === undefined || change === undefined || !baseline.ok || !change.ok)
154
+ return failure('acceptance-drift', 'active contract acceptance is invalid');
155
+ return { ok: true, baselineId: baseline.contract.baselineId, changeId: change.contract.contractId };
156
+ }
157
+ async function persistRevision(projectRoot, source, options, deps) {
158
+ return deps.persist({ scope: source.scope, attempts: source.attempts, ...(source.activation === undefined ? {} : { activation: source.activation }), ...(source.governanceResults === undefined ? {} : { governanceResults: source.governanceResults }), ...options, supersedesVisualChangeWorkflowId: source.visualChangeWorkflowId, outputLocation: visualChangeOutputLocation(), cwd: projectRoot });
159
+ }
160
+ export async function persistProjectVisualChangeWorkflowRevision(projectRoot, source, options) {
161
+ return persistRevision(path.resolve(projectRoot), source, options, defaults);
162
+ }
163
+ export async function activateProjectVisualChangeWorkflow(input) {
164
+ const projectRoot = path.resolve(input.projectRoot);
165
+ const deps = dependencies(input.dependencies);
166
+ const state = await readConfigState(projectRoot);
167
+ if (!state.ok)
168
+ return state;
169
+ const loaded = await loadWorkflow(projectRoot, input.workflowManifestPath);
170
+ if (!loaded.ok)
171
+ return loaded;
172
+ const source = loaded.artifact;
173
+ if (source.activation !== undefined)
174
+ return failure('acceptance-drift', 'workflow already has an activation record');
175
+ const scopeFailure = await verifyScope(projectRoot, source.scope);
176
+ if (scopeFailure !== undefined)
177
+ return scopeFailure;
178
+ const acceptance = state.config.acceptance;
179
+ if (source.scope.entryMode === 'actual-frontend') {
180
+ if (acceptance?.contract === undefined)
181
+ return failure('activation-not-configured', 'project contract acceptance is not configured');
182
+ if (source.scope.baselineContract === undefined || acceptance.contract.baselineArtifact !== source.scope.baselineContract.artifactPath)
183
+ return failure('acceptance-drift', 'configured baseline contract does not match frozen workflow scope');
184
+ }
185
+ else {
186
+ if (acceptance?.reference === undefined)
187
+ return failure('activation-not-configured', 'project reference acceptance is not configured');
188
+ const referenceManifest = manifestAt(projectRoot, source.scope.approvedReference.artifactPath);
189
+ const reference = referenceManifest === undefined ? undefined : await readExternalReferenceArtifact(referenceManifest);
190
+ if (reference === undefined || !reference.ok || reference.artifact.lifecycle.state !== 'approved')
191
+ return failure('workflow-reference-invalid', 'workflow reference is not approved');
192
+ if (acceptance.contract === undefined ? source.scope.baselineContract !== undefined : source.scope.baselineContract === undefined || acceptance.contract.baselineArtifact !== source.scope.baselineContract.artifactPath)
193
+ return failure('acceptance-drift', 'project contract acceptance does not match frozen reference workflow scope');
194
+ }
195
+ const before = selection(state.config);
196
+ const workflowRelative = projectRelative(projectRoot, loaded.manifestPath);
197
+ if (workflowRelative === undefined)
198
+ return failure('workflow-invalid', 'workflow path is outside the project');
199
+ const nextRaw = updatedConfig(state.raw, source.scope, workflowRelative);
200
+ const validated = validateProjectConfig(nextRaw);
201
+ if (!validated.ok)
202
+ return failure('project-config-invalid', validated.reason);
203
+ const nextText = `${JSON.stringify(nextRaw, null, 2)}\n`;
204
+ const after = selection(validated.config);
205
+ try {
206
+ await deps.atomicWrite(projectConfigPath(projectRoot), nextText);
207
+ }
208
+ catch (error) {
209
+ return failure('project-config-write-failure', `project configuration could not be written: ${error instanceof Error ? error.message : String(error)}`);
210
+ }
211
+ const persisted = await persistRevision(projectRoot, source, { activation: { before, after, activatedAt: deps.now() } }, deps);
212
+ if (persisted.ok)
213
+ return persisted;
214
+ try {
215
+ await deps.atomicWrite(projectConfigPath(projectRoot), state.rawText);
216
+ }
217
+ catch (error) {
218
+ return failure('partial-state-failure', `workflow persistence failed and project acceptance may require manual repair because rollback failed: ${error instanceof Error ? error.message : String(error)}`);
219
+ }
220
+ return failure('workflow-persistence-failure', 'workflow activation revision could not be persisted; original project configuration was restored');
221
+ }
222
+ export async function restoreProjectVisualChangeWorkflowAcceptance(input) {
223
+ const projectRoot = path.resolve(input.projectRoot);
224
+ const deps = dependencies(input.dependencies);
225
+ const state = await readConfigState(projectRoot);
226
+ if (!state.ok)
227
+ return state;
228
+ const loaded = await loadWorkflow(projectRoot, input.workflowManifestPath);
229
+ if (!loaded.ok)
230
+ return loaded;
231
+ const source = loaded.artifact;
232
+ if (source.activation === undefined)
233
+ return failure('activation-not-configured', 'workflow has no activation record');
234
+ if (source.activation.restoredAt !== undefined)
235
+ return failure('activation-already-restored', 'workflow activation has already been restored');
236
+ if (!sameSelection(selection(state.config), source.activation.after))
237
+ return failure('acceptance-drift', 'current project acceptance differs from the activated selection');
238
+ const nextRaw = updatedConfig(state.raw, source.scope, input.workflowManifestPath, source.activation.before);
239
+ const validated = validateProjectConfig(nextRaw);
240
+ if (!validated.ok)
241
+ return failure('project-config-invalid', validated.reason);
242
+ const nextText = `${JSON.stringify(nextRaw, null, 2)}\n`;
243
+ try {
244
+ await deps.atomicWrite(projectConfigPath(projectRoot), nextText);
245
+ }
246
+ catch (error) {
247
+ return failure('project-config-write-failure', `project configuration could not be restored: ${error instanceof Error ? error.message : String(error)}`);
248
+ }
249
+ const persisted = await persistRevision(projectRoot, source, { activation: { ...source.activation, restoredAt: deps.now() } }, deps);
250
+ if (persisted.ok)
251
+ return persisted;
252
+ try {
253
+ await deps.atomicWrite(projectConfigPath(projectRoot), state.rawText);
254
+ }
255
+ catch (error) {
256
+ return failure('partial-state-failure', `restore revision persistence failed and project acceptance may require manual repair because compensation failed: ${error instanceof Error ? error.message : String(error)}`);
257
+ }
258
+ return failure('workflow-persistence-failure', 'restore revision could not be persisted; activated project configuration was reinstated');
259
+ }
260
+ async function exactBaselineAlias(projectRoot, config, workflow) {
261
+ const catalog = await readAliasCatalog(aliasCatalogPath(projectRoot));
262
+ if (!catalog.ok)
263
+ return undefined;
264
+ const frozen = workflow.scope.baselineObservation;
265
+ const exact = ([, value]) => value.observationId === frozen.observationId && value.requestId === frozen.requestId && `.frontend-observer/evidence/${value.relativeArtifactDir}` === frozen.artifactPath;
266
+ const preferred = catalog.catalog.observations[config.defaultBaseline];
267
+ if (preferred !== undefined && exact([config.defaultBaseline, preferred]))
268
+ return config.defaultBaseline;
269
+ return Object.entries(catalog.catalog.observations).filter(exact).map(([alias]) => alias).sort()[0];
270
+ }
271
+ export function projectVisualChangeCheckSnapshot(result, verified) {
272
+ const blockerTruncated = result.blockers.length > 50;
273
+ return {
274
+ status: result.status, baselineObservationId: result.baseline.observationId, candidateObservationId: result.candidate.observationId,
275
+ ...(result.comparison.comparisonId === undefined || result.comparison.artifactPath === undefined ? {} : { comparison: { artifactId: result.comparison.comparisonId, artifactPath: result.comparison.artifactPath } }),
276
+ ...(result.contract.evaluationId === undefined || result.contract.artifactPath === undefined ? {} : { contractEvaluation: { artifactId: result.contract.evaluationId, artifactPath: result.contract.artifactPath } }),
277
+ ...(verified.activeBaselineContractId === undefined ? {} : { activeBaselineContractId: verified.activeBaselineContractId }), ...(verified.activeChangeContractId === undefined ? {} : { activeChangeContractId: verified.activeChangeContractId }),
278
+ ...(result.reference.referenceId === undefined ? {} : { externalReferenceId: result.reference.referenceId }), ...(result.reference.fidelityState === undefined ? {} : { referenceFidelityState: result.reference.fidelityState }),
279
+ failedClauseIds: result.contract.failedClauses.map((item) => item.clauseId), unavailableClauseIds: result.contract.unavailableClauses.map((item) => item.clauseId),
280
+ failedReferenceRequirementIds: result.reference.failedRequirements.map((item) => item.requirementId), unavailableReferenceRequirementIds: result.reference.unavailableRequirements.map((item) => item.requirementId),
281
+ unexpectedChangeCount: result.contract.unexpectedChanges.length, blockerCodes: result.blockers.slice(0, 50).map((item) => item.code), blockerReasons: result.blockers.slice(0, 50).map((item) => item.message),
282
+ truncated: result.limits.truncated || result.contract.truncated || result.reference.truncated || blockerTruncated,
283
+ };
284
+ }
285
+ export async function readProjectVisualChangeCycle(projectRootInput, workflowManifestPath) { const loaded = await loadWorkflow(path.resolve(projectRootInput), workflowManifestPath); return loaded.ok ? { ok: true, workflow: loaded.artifact, cycle: deriveVisualChangeCycleState(loaded.artifact) } : loaded; }
286
+ /** One readiness owner for canonical check recording and on-demand handoff preparation. */
287
+ export async function prepareActiveVisualChangeWorkflow(projectRootInput, workflowManifestPath) {
288
+ const projectRoot = path.resolve(projectRootInput);
289
+ const state = await readConfigState(projectRoot);
290
+ if (!state.ok)
291
+ return state;
292
+ const loaded = await loadWorkflow(projectRoot, workflowManifestPath);
293
+ if (!loaded.ok)
294
+ return loaded;
295
+ const workflow = loaded.artifact;
296
+ if (workflow.activation === undefined)
297
+ return failure('activation-not-configured', 'workflow has not been activated');
298
+ if (workflow.activation.restoredAt !== undefined)
299
+ return failure('activation-already-restored', 'workflow activation has been restored');
300
+ if (!sameSelection(selection(state.config), workflow.activation.after))
301
+ return failure('acceptance-drift', 'current project acceptance differs from the activated workflow');
302
+ const scopeFailure = await verifyScope(projectRoot, workflow.scope);
303
+ if (scopeFailure !== undefined)
304
+ return failure('acceptance-drift', scopeFailure.reason);
305
+ const alias = await exactBaselineAlias(projectRoot, state.config, workflow);
306
+ if (alias === undefined)
307
+ return failure('baseline-drift', 'no catalog alias resolves to the exact frozen baseline observation');
308
+ const ids = await verifiedContractIds(projectRoot, state.config);
309
+ if (!ids.ok)
310
+ return ids;
311
+ if (workflow.scope.baselineContract !== undefined && ids.baselineId !== workflow.scope.baselineContract.baselineId)
312
+ return failure('acceptance-drift', 'active baseline contract identity differs from frozen workflow scope');
313
+ if (workflow.scope.entryMode === 'actual-frontend' && ids.changeId !== workflow.scope.changeContract.contractId)
314
+ return failure('acceptance-drift', 'active change contract identity differs from frozen workflow scope');
315
+ if (workflow.scope.entryMode === 'reference') {
316
+ const active = state.config.acceptance?.reference;
317
+ const expectedBindings = workflow.activation.after.bindingsFile;
318
+ if (active?.approvedArtifact !== workflow.scope.approvedReference.artifactPath || active.bindingsFile !== expectedBindings)
319
+ return failure('acceptance-drift', 'active reference or bindings path differs from frozen workflow scope');
320
+ const reread = await readVisualChangeWorkflowArtifact(loaded.manifestPath);
321
+ if (!reread.ok)
322
+ return failure('acceptance-drift', 'workflow-owned bindings no longer match frozen declarations');
323
+ }
324
+ return { ok: true, context: { projectRoot, workflow: { ...workflow, activation: workflow.activation }, workflowManifestPath: loaded.manifestPath, config: state.config, baselineAlias: alias, verifiedContractIds: ids } };
325
+ }
326
+ export async function runProjectVisualChangeCheck(input) {
327
+ const deps = dependencies(input.dependencies);
328
+ const preflight = await readProjectVisualChangeCycle(input.projectRoot, input.workflowManifestPath);
329
+ if (!preflight.ok)
330
+ return preflight;
331
+ if (preflight.cycle === 'review-required')
332
+ return failure('review-required', 'the latest attempt requires explicit human review before another check');
333
+ if (preflight.cycle === 'accepted')
334
+ return failure('workflow-accepted', 'accepted workflow is terminal');
335
+ if (preflight.cycle === 'abandoned')
336
+ return failure('workflow-abandoned', 'abandoned workflow is terminal');
337
+ const readiness = await prepareActiveVisualChangeWorkflow(input.projectRoot, input.workflowManifestPath);
338
+ if (!readiness.ok)
339
+ return readiness;
340
+ const { projectRoot, workflow, baselineAlias: alias, verifiedContractIds: ids } = readiness.context;
341
+ const result = await deps.check(projectRoot, alias);
342
+ if (result.baseline === undefined || result.candidate === undefined)
343
+ return failure('candidate-not-produced', 'canonical check did not produce both baseline and candidate observations; no attempt was recorded', result);
344
+ if (result.baseline.observationId !== workflow.scope.baselineObservation.observationId || result.baseline.requestId !== workflow.scope.baselineObservation.requestId)
345
+ return failure('check-scope-mismatch', 'canonical check baseline identity differs from frozen workflow scope', result);
346
+ if (workflow.scope.entryMode === 'reference' && result.reference.referenceId !== undefined && result.reference.referenceId !== workflow.scope.approvedReference.referenceId)
347
+ return failure('check-scope-mismatch', 'canonical reference result identity differs from frozen workflow scope', result);
348
+ const candidatePath = resolveProjectPath(projectRoot, result.candidate.artifactPath);
349
+ if (candidatePath === undefined)
350
+ return failure('check-scope-mismatch', 'canonical candidate path is unsafe or outside the project', result);
351
+ const attemptId = buildVisualChangeAttemptIdentity(workflow.visualChangeRequestId, result.candidate.observationId);
352
+ if (workflow.attempts.some((attempt) => attempt.visualChangeAttemptId === attemptId))
353
+ return failure('duplicate-attempt', 'this candidate observation is already recorded in workflow history', result);
354
+ if (workflow.attempts.length >= MAX_VISUAL_CHANGE_ATTEMPTS)
355
+ return failure('attempt-limit-reached', `workflow already contains ${MAX_VISUAL_CHANGE_ATTEMPTS} attempts`, result);
356
+ let referenceCorrectionAttemptId;
357
+ if (workflow.scope.entryMode === 'reference' && workflow.scope.baselineContract !== undefined && readiness.context.config.acceptance?.contract !== undefined) {
358
+ const baselineManifest = manifestAt(projectRoot, workflow.scope.baselineContract.artifactPath);
359
+ const changeManifest = manifestAt(projectRoot, readiness.context.config.acceptance.contract.changeArtifact);
360
+ const baseline = baselineManifest === undefined ? undefined : await readPersistentBaselineContract(baselineManifest);
361
+ const change = changeManifest === undefined ? undefined : await readPerChangeContract(changeManifest);
362
+ if (baseline?.ok && change?.ok && baseline.contract.sourceObservation.observationId === workflow.scope.baselineObservation.observationId) {
363
+ const reviewId = buildReferenceCorrectionReviewIdentity(workflow.scope.approvedReference.referenceRequestId, workflow.scope.baselineObservation.observationId, baseline.contract.baselineId, baseline.contract.clauses, change.contract.contractId, change.contract.clauses, workflow.scope.bindings);
364
+ referenceCorrectionAttemptId = buildReferenceCorrectionAttemptIdentity(reviewId, result.candidate.observationId);
365
+ }
366
+ }
367
+ const attempt = {
368
+ visualChangeAttemptId: attemptId, ...(workflow.attempts.length === 0 ? {} : { priorVisualChangeAttemptId: workflow.attempts[workflow.attempts.length - 1].visualChangeAttemptId }),
369
+ candidateObservation: { artifactId: result.candidate.observationId, observationId: result.candidate.observationId, requestId: result.candidate.requestId, artifactPath: result.candidate.artifactPath },
370
+ check: projectVisualChangeCheckSnapshot(result, { ...(ids.baselineId === undefined ? {} : { activeBaselineContractId: ids.baselineId }), ...(ids.changeId === undefined ? {} : { activeChangeContractId: ids.changeId }) }),
371
+ ...(input.coordination === undefined ? {} : { coordination: input.coordination }), ...(referenceCorrectionAttemptId === undefined ? {} : { referenceCorrectionAttemptId }), review: { state: 'pending' }, recordedAt: deps.now(),
372
+ };
373
+ const persisted = await deps.persist({ scope: workflow.scope, attempts: [...workflow.attempts, attempt], activation: workflow.activation, ...(workflow.governanceResults === undefined ? {} : { governanceResults: workflow.governanceResults }), supersedesVisualChangeWorkflowId: workflow.visualChangeWorkflowId, outputLocation: visualChangeOutputLocation(), cwd: projectRoot });
374
+ return persisted.ok ? { ...persisted, check: result, attempt } : failure('workflow-persistence-failure', 'canonical check evidence exists, but visual-change attempt history was not updated', result);
375
+ }
376
+ //# sourceMappingURL=visualChangeProjectWorkflowService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualChangeProjectWorkflowService.js","sourceRoot":"","sources":["../../src/application/visualChangeProjectWorkflowService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { ExternalReferenceArtifact } from '../domain/externalReference.js';
2
+ import type { PersistentBaselineContract } from '../domain/frontendContracts.js';
3
+ import type { VisualChangeReviewState } from '../domain/visualChangeWorkflow.js';
4
+ export type VisualChangeReviewDecision = Exclude<VisualChangeReviewState, 'pending'>;
5
+ export type VisualChangeReviewFailureCode = 'workflow-invalid' | 'no-attempts' | 'invalid-transition' | 'acceptance-requires-pass' | 'workflow-inactive' | 'workflow-restored' | 'acceptance-drift' | 'baseline-drift' | 'governance-requires-accepted' | 'governance-mismatch' | 'governance-already-recorded' | 'persistence-failure';
6
+ export type VisualChangeReviewResult = {
7
+ ok: true;
8
+ visualChangeRequestId: string;
9
+ visualChangeWorkflowId: string;
10
+ visualChangeAttemptId: string;
11
+ review: {
12
+ state: VisualChangeReviewDecision;
13
+ decidedAt: string;
14
+ };
15
+ } | {
16
+ ok: false;
17
+ code: VisualChangeReviewFailureCode;
18
+ reason: string;
19
+ };
20
+ export type VisualChangeGovernanceInput = {
21
+ kind: 'baseline-approval';
22
+ artifact: PersistentBaselineContract;
23
+ artifactPath: string;
24
+ } | {
25
+ kind: 'external-reference-approval';
26
+ artifact: ExternalReferenceArtifact;
27
+ artifactPath: string;
28
+ };
29
+ export type VisualChangeGovernanceResult = {
30
+ ok: true;
31
+ visualChangeRequestId: string;
32
+ visualChangeWorkflowId: string;
33
+ kind: VisualChangeGovernanceInput['kind'];
34
+ artifactId: string;
35
+ } | {
36
+ ok: false;
37
+ code: VisualChangeReviewFailureCode;
38
+ reason: string;
39
+ };
40
+ export declare function reviewVisualChangeWorkflow(input: {
41
+ projectRoot: string;
42
+ workflowManifestPath: string;
43
+ decision: VisualChangeReviewDecision;
44
+ now?: () => string;
45
+ }): Promise<VisualChangeReviewResult>;
46
+ export declare function recordVisualChangeGovernance(input: {
47
+ projectRoot: string;
48
+ workflowManifestPath: string;
49
+ governance: VisualChangeGovernanceInput;
50
+ }): Promise<VisualChangeGovernanceResult>;
@@ -0,0 +1,69 @@
1
+ import path from 'node:path';
2
+ import { readVisualChangeWorkflowArtifact } from '../artifacts/visualChangeWorkflowArtifactReader.js';
3
+ import { prepareActiveVisualChangeWorkflow, persistProjectVisualChangeWorkflowRevision } from './visualChangeProjectWorkflowService.js';
4
+ const fail = (code, reason) => ({ ok: false, code, reason });
5
+ async function load(projectRoot, manifestPath) {
6
+ const root = path.resolve(projectRoot);
7
+ const absolute = path.resolve(root, manifestPath);
8
+ const relative = path.relative(root, absolute);
9
+ if (relative.startsWith('..') || path.isAbsolute(relative))
10
+ return fail('workflow-invalid', 'workflow path is outside the project');
11
+ const read = await readVisualChangeWorkflowArtifact(absolute);
12
+ return read.ok ? { ok: true, workflow: read.artifact } : fail('workflow-invalid', read.reason);
13
+ }
14
+ function readinessCode(code) { return code === 'activation-not-configured' ? 'workflow-inactive' : code === 'activation-already-restored' ? 'workflow-restored' : code === 'baseline-drift' ? 'baseline-drift' : 'acceptance-drift'; }
15
+ export async function reviewVisualChangeWorkflow(input) {
16
+ const loaded = await load(input.projectRoot, input.workflowManifestPath);
17
+ if (!loaded.ok)
18
+ return loaded;
19
+ const source = loaded.workflow;
20
+ const latest = source.attempts.at(-1);
21
+ if (latest === undefined)
22
+ return fail('no-attempts', 'workflow has no attempt to review');
23
+ const current = latest.review.state;
24
+ const allowed = current === 'pending' ? ['correction-requested', 'accepted', 'abandoned'].includes(input.decision) : current === 'correction-requested' && input.decision === 'abandoned';
25
+ if (!allowed)
26
+ return fail('invalid-transition', `review transition ${current} -> ${input.decision} is not allowed`);
27
+ if (input.decision === 'accepted' && latest.check.status !== 'PASS')
28
+ return fail('acceptance-requires-pass', 'only the latest canonical PASS attempt may be accepted');
29
+ if (input.decision !== 'abandoned') {
30
+ const ready = await prepareActiveVisualChangeWorkflow(input.projectRoot, input.workflowManifestPath);
31
+ if (!ready.ok)
32
+ return fail(readinessCode(ready.code), ready.reason);
33
+ }
34
+ const decidedAt = (input.now ?? (() => new Date().toISOString()))();
35
+ const review = { state: input.decision, decidedAt };
36
+ const attempts = source.attempts.map((attempt, index) => index === source.attempts.length - 1 ? { ...attempt, review } : attempt);
37
+ const persisted = await persistProjectVisualChangeWorkflowRevision(input.projectRoot, source, { attempts });
38
+ return persisted.ok ? { ok: true, visualChangeRequestId: persisted.visualChangeRequestId, visualChangeWorkflowId: persisted.visualChangeWorkflowId, visualChangeAttemptId: latest.visualChangeAttemptId, review } : fail('persistence-failure', 'review revision could not be persisted');
39
+ }
40
+ export async function recordVisualChangeGovernance(input) {
41
+ const loaded = await load(input.projectRoot, input.workflowManifestPath);
42
+ if (!loaded.ok)
43
+ return loaded;
44
+ const source = loaded.workflow;
45
+ const latest = source.attempts.at(-1);
46
+ if (latest?.review.state !== 'accepted')
47
+ return fail('governance-requires-accepted', 'governance results may be recorded only after human acceptance');
48
+ const existing = source.governanceResults ?? {};
49
+ if (input.governance.kind === 'baseline-approval') {
50
+ if (existing.baselineApproval !== undefined)
51
+ return fail('governance-already-recorded', 'baseline approval is already recorded');
52
+ const origin = input.governance.artifact.sourceObservation;
53
+ if (origin.observationId !== latest.candidateObservation.observationId || origin.requestId !== latest.candidateObservation.requestId)
54
+ return fail('governance-mismatch', 'baseline approval does not belong to the accepted candidate');
55
+ const artifactId = input.governance.artifact.baselineId;
56
+ const persisted = await persistProjectVisualChangeWorkflowRevision(input.projectRoot, source, { governanceResults: { ...existing, baselineApproval: { artifactId, artifactPath: input.governance.artifactPath } } });
57
+ return persisted.ok ? { ok: true, visualChangeRequestId: persisted.visualChangeRequestId, visualChangeWorkflowId: persisted.visualChangeWorkflowId, kind: input.governance.kind, artifactId } : fail('persistence-failure', 'governance revision could not be persisted');
58
+ }
59
+ if (source.scope.entryMode !== 'reference')
60
+ return fail('governance-mismatch', 'external-reference governance requires a reference workflow');
61
+ if (existing.externalReferenceApproval !== undefined)
62
+ return fail('governance-already-recorded', 'external-reference approval is already recorded');
63
+ if (input.governance.artifact.lifecycle.state !== 'approved' || input.governance.artifact.supersedesReferenceId !== source.scope.approvedReference.referenceId)
64
+ return fail('governance-mismatch', 'approved reference does not explicitly supersede the frozen reference');
65
+ const artifactId = input.governance.artifact.referenceId;
66
+ const persisted = await persistProjectVisualChangeWorkflowRevision(input.projectRoot, source, { governanceResults: { ...existing, externalReferenceApproval: { artifactId, artifactPath: input.governance.artifactPath } } });
67
+ return persisted.ok ? { ok: true, visualChangeRequestId: persisted.visualChangeRequestId, visualChangeWorkflowId: persisted.visualChangeWorkflowId, kind: input.governance.kind, artifactId } : fail('persistence-failure', 'governance revision could not be persisted');
68
+ }
69
+ //# sourceMappingURL=visualChangeReviewService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualChangeReviewService.js","sourceRoot":"","sources":["../../src/application/visualChangeReviewService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Diagnostic } from '../domain/diagnostics.js';
2
+ import type { VisualChangeActivationRecord, VisualChangeAttemptRecord, VisualChangeGovernanceResults, VisualChangeScope } from '../domain/visualChangeWorkflow.js';
3
+ import { type WriteVisualChangeWorkflowArtifactOptions } from '../artifacts/visualChangeWorkflowArtifactWriter.js';
4
+ export interface PersistVisualChangeWorkflowOptions {
5
+ scope: VisualChangeScope;
6
+ attempts?: VisualChangeAttemptRecord[];
7
+ supersedesVisualChangeWorkflowId?: string;
8
+ activation?: VisualChangeActivationRecord;
9
+ governanceResults?: VisualChangeGovernanceResults;
10
+ outputLocation: string;
11
+ cwd?: string;
12
+ writerOptions?: Pick<WriteVisualChangeWorkflowArtifactOptions, 'beforeRename'>;
13
+ createdAt?: string;
14
+ }
15
+ export type ApplicationPersistVisualChangeWorkflowResult = {
16
+ ok: true;
17
+ visualChangeRequestId: string;
18
+ visualChangeWorkflowId: string;
19
+ artifactRoot: string;
20
+ manifestPath: string;
21
+ bindingsPath?: string;
22
+ } | {
23
+ ok: false;
24
+ diagnostics: Diagnostic[];
25
+ };
26
+ export declare function persistVisualChangeWorkflow(options: PersistVisualChangeWorkflowOptions): Promise<ApplicationPersistVisualChangeWorkflowResult>;
@@ -0,0 +1,15 @@
1
+ import { getProducerInfo } from '../domain/schema.js';
2
+ import { VISUAL_CHANGE_WORKFLOW_ARTIFACT_KIND, VISUAL_CHANGE_WORKFLOW_SCHEMA_VERSION } from '../domain/visualChangeWorkflow.js';
3
+ import { buildVisualChangeRequestIdentity, buildVisualChangeWorkflowInstanceIdentity } from '../domain/visualChangeWorkflowIdentity.js';
4
+ import { computeVisualChangeBindingsSha256, serializeVisualChangeBindings, writeVisualChangeWorkflowArtifact } from '../artifacts/visualChangeWorkflowArtifactWriter.js';
5
+ export async function persistVisualChangeWorkflow(options) {
6
+ const visualChangeRequestId = buildVisualChangeRequestIdentity(options.scope);
7
+ const visualChangeWorkflowId = buildVisualChangeWorkflowInstanceIdentity(visualChangeRequestId);
8
+ const bindingContent = options.scope.entryMode === 'reference' ? serializeVisualChangeBindings(options.scope.bindings) : undefined;
9
+ const artifact = { artifactKind: VISUAL_CHANGE_WORKFLOW_ARTIFACT_KIND, schemaVersion: VISUAL_CHANGE_WORKFLOW_SCHEMA_VERSION, visualChangeRequestId, visualChangeWorkflowId, ...(options.supersedesVisualChangeWorkflowId === undefined ? {} : { supersedesVisualChangeWorkflowId: options.supersedesVisualChangeWorkflowId }), producer: getProducerInfo(), scope: options.scope, attempts: options.attempts ?? [], ...(bindingContent === undefined ? {} : { bindings: { path: 'bindings.json', sha256: computeVisualChangeBindingsSha256(bindingContent), declarationCount: options.scope.entryMode === 'reference' ? options.scope.bindings.length : 0 } }), ...(options.activation === undefined ? {} : { activation: options.activation }), ...(options.governanceResults === undefined ? {} : { governanceResults: options.governanceResults }), provenance: { createdAt: options.createdAt ?? new Date().toISOString() } };
10
+ const persisted = await writeVisualChangeWorkflowArtifact(artifact, options.outputLocation, { ...(options.cwd === undefined ? {} : { cwd: options.cwd }), ...options.writerOptions });
11
+ if (!persisted.ok)
12
+ return persisted;
13
+ return { ok: true, visualChangeRequestId, visualChangeWorkflowId, artifactRoot: persisted.artifactRoot, manifestPath: persisted.manifestPath, ...(persisted.bindingsPath === undefined ? {} : { bindingsPath: persisted.bindingsPath }) };
14
+ }
15
+ //# sourceMappingURL=visualChangeWorkflowPersistenceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualChangeWorkflowPersistenceService.js","sourceRoot":"","sources":["../../src/application/visualChangeWorkflowPersistenceService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,oCAAoC,EAAE,qCAAqC,EAAE,MAAM,mCAAmC,CAAC;AAChI,OAAO,EAAE,gCAAgC,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACxI,OAAO,EAAE,iCAAiC,EAAE,6BAA6B,EAAE,iCAAiC,EAAiD,MAAM,oDAAoD,CAAC;AAGxN,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAA2C;IAC3F,MAAM,qBAAqB,GAAG,gCAAgC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAAC,MAAM,sBAAsB,GAAG,yCAAyC,CAAC,qBAAqB,CAAC,CAAC;IAC/K,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnI,MAAM,QAAQ,GAAiC,EAAE,YAAY,EAAE,oCAAoC,EAAE,aAAa,EAAE,qCAAqC,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,gCAAgC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gCAAgC,EAAE,OAAO,CAAC,gCAAgC,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,iCAAiC,CAAC,cAAc,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC;IACh6B,MAAM,SAAS,GAAG,MAAM,iCAAiC,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACtL,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;AAC5O,CAAC"}