@dailephd/my-frontend-observer 0.8.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 (316) hide show
  1. package/CHANGELOG.md +397 -0
  2. package/LICENSE +21 -0
  3. package/README.md +255 -0
  4. package/dist/application/browserCaptureService.d.ts +11 -0
  5. package/dist/application/browserCaptureService.js +12 -0
  6. package/dist/application/browserCaptureService.js.map +1 -0
  7. package/dist/application/comparisonService.d.ts +56 -0
  8. package/dist/application/comparisonService.js +77 -0
  9. package/dist/application/comparisonService.js.map +1 -0
  10. package/dist/application/externalReferencePersistenceService.d.ts +75 -0
  11. package/dist/application/externalReferencePersistenceService.js +182 -0
  12. package/dist/application/externalReferencePersistenceService.js.map +1 -0
  13. package/dist/application/frontendContractEvaluationService.d.ts +49 -0
  14. package/dist/application/frontendContractEvaluationService.js +112 -0
  15. package/dist/application/frontendContractEvaluationService.js.map +1 -0
  16. package/dist/application/frontendContractPersistenceService.d.ts +56 -0
  17. package/dist/application/frontendContractPersistenceService.js +91 -0
  18. package/dist/application/frontendContractPersistenceService.js.map +1 -0
  19. package/dist/application/observationPersistence.d.ts +59 -0
  20. package/dist/application/observationPersistence.js +79 -0
  21. package/dist/application/observationPersistence.js.map +1 -0
  22. package/dist/application/projectCheckService.d.ts +3 -0
  23. package/dist/application/projectCheckService.js +169 -0
  24. package/dist/application/projectCheckService.js.map +1 -0
  25. package/dist/application/projectWorkflowService.d.ts +46 -0
  26. package/dist/application/projectWorkflowService.js +92 -0
  27. package/dist/application/projectWorkflowService.js.map +1 -0
  28. package/dist/application/referenceFidelityEvaluationService.d.ts +28 -0
  29. package/dist/application/referenceFidelityEvaluationService.js +45 -0
  30. package/dist/application/referenceFidelityEvaluationService.js.map +1 -0
  31. package/dist/artifacts/artifactReader.d.ts +19 -0
  32. package/dist/artifacts/artifactReader.js +36 -0
  33. package/dist/artifacts/artifactReader.js.map +1 -0
  34. package/dist/artifacts/artifactWriter.d.ts +25 -0
  35. package/dist/artifacts/artifactWriter.js +68 -0
  36. package/dist/artifacts/artifactWriter.js.map +1 -0
  37. package/dist/artifacts/comparisonArtifactReader.d.ts +18 -0
  38. package/dist/artifacts/comparisonArtifactReader.js +35 -0
  39. package/dist/artifacts/comparisonArtifactReader.js.map +1 -0
  40. package/dist/artifacts/comparisonArtifactWriter.d.ts +41 -0
  41. package/dist/artifacts/comparisonArtifactWriter.js +67 -0
  42. package/dist/artifacts/comparisonArtifactWriter.js.map +1 -0
  43. package/dist/artifacts/externalReferenceArtifactReader.d.ts +18 -0
  44. package/dist/artifacts/externalReferenceArtifactReader.js +35 -0
  45. package/dist/artifacts/externalReferenceArtifactReader.js.map +1 -0
  46. package/dist/artifacts/externalReferenceArtifactWriter.d.ts +44 -0
  47. package/dist/artifacts/externalReferenceArtifactWriter.js +77 -0
  48. package/dist/artifacts/externalReferenceArtifactWriter.js.map +1 -0
  49. package/dist/artifacts/frontendContractArtifactReader.d.ts +24 -0
  50. package/dist/artifacts/frontendContractArtifactReader.js +47 -0
  51. package/dist/artifacts/frontendContractArtifactReader.js.map +1 -0
  52. package/dist/artifacts/frontendContractArtifactWriter.d.ts +34 -0
  53. package/dist/artifacts/frontendContractArtifactWriter.js +70 -0
  54. package/dist/artifacts/frontendContractArtifactWriter.js.map +1 -0
  55. package/dist/artifacts/frontendContractEvaluationArtifactReader.d.ts +17 -0
  56. package/dist/artifacts/frontendContractEvaluationArtifactReader.js +34 -0
  57. package/dist/artifacts/frontendContractEvaluationArtifactReader.js.map +1 -0
  58. package/dist/artifacts/frontendContractEvaluationArtifactWriter.d.ts +32 -0
  59. package/dist/artifacts/frontendContractEvaluationArtifactWriter.js +58 -0
  60. package/dist/artifacts/frontendContractEvaluationArtifactWriter.js.map +1 -0
  61. package/dist/artifacts/types.d.ts +17 -0
  62. package/dist/artifacts/types.js +2 -0
  63. package/dist/artifacts/types.js.map +1 -0
  64. package/dist/browser/chromiumAdapter.d.ts +21 -0
  65. package/dist/browser/chromiumAdapter.js +204 -0
  66. package/dist/browser/chromiumAdapter.js.map +1 -0
  67. package/dist/browser/evidenceCapture.d.ts +62 -0
  68. package/dist/browser/evidenceCapture.js +500 -0
  69. package/dist/browser/evidenceCapture.js.map +1 -0
  70. package/dist/browser/scrollCapture.d.ts +32 -0
  71. package/dist/browser/scrollCapture.js +163 -0
  72. package/dist/browser/scrollCapture.js.map +1 -0
  73. package/dist/browser/types.d.ts +24 -0
  74. package/dist/browser/types.js +2 -0
  75. package/dist/browser/types.js.map +1 -0
  76. package/dist/cli.d.ts +8 -0
  77. package/dist/cli.js +2411 -0
  78. package/dist/cli.js.map +1 -0
  79. package/dist/domain/boundedAgentContext.d.ts +226 -0
  80. package/dist/domain/boundedAgentContext.js +355 -0
  81. package/dist/domain/boundedAgentContext.js.map +1 -0
  82. package/dist/domain/boundedAgentContextCorrelation.d.ts +74 -0
  83. package/dist/domain/boundedAgentContextCorrelation.js +441 -0
  84. package/dist/domain/boundedAgentContextCorrelation.js.map +1 -0
  85. package/dist/domain/boundedAgentContextIdentity.d.ts +26 -0
  86. package/dist/domain/boundedAgentContextIdentity.js +69 -0
  87. package/dist/domain/boundedAgentContextIdentity.js.map +1 -0
  88. package/dist/domain/boundedAgentContextProjection.d.ts +71 -0
  89. package/dist/domain/boundedAgentContextProjection.js +477 -0
  90. package/dist/domain/boundedAgentContextProjection.js.map +1 -0
  91. package/dist/domain/comparison.d.ts +220 -0
  92. package/dist/domain/comparison.js +350 -0
  93. package/dist/domain/comparison.js.map +1 -0
  94. package/dist/domain/comparisonEngine.d.ts +76 -0
  95. package/dist/domain/comparisonEngine.js +734 -0
  96. package/dist/domain/comparisonEngine.js.map +1 -0
  97. package/dist/domain/comparisonIdentity.d.ts +13 -0
  98. package/dist/domain/comparisonIdentity.js +46 -0
  99. package/dist/domain/comparisonIdentity.js.map +1 -0
  100. package/dist/domain/completion.d.ts +30 -0
  101. package/dist/domain/completion.js +22 -0
  102. package/dist/domain/completion.js.map +1 -0
  103. package/dist/domain/diagnostics.d.ts +17 -0
  104. package/dist/domain/diagnostics.js +77 -0
  105. package/dist/domain/diagnostics.js.map +1 -0
  106. package/dist/domain/evidence.d.ts +29 -0
  107. package/dist/domain/evidence.js +59 -0
  108. package/dist/domain/evidence.js.map +1 -0
  109. package/dist/domain/explicitState.d.ts +40 -0
  110. package/dist/domain/explicitState.js +54 -0
  111. package/dist/domain/explicitState.js.map +1 -0
  112. package/dist/domain/externalReference.d.ts +158 -0
  113. package/dist/domain/externalReference.js +167 -0
  114. package/dist/domain/externalReference.js.map +1 -0
  115. package/dist/domain/externalReferenceApplicability.d.ts +43 -0
  116. package/dist/domain/externalReferenceApplicability.js +52 -0
  117. package/dist/domain/externalReferenceApplicability.js.map +1 -0
  118. package/dist/domain/externalReferenceCompatibility.d.ts +40 -0
  119. package/dist/domain/externalReferenceCompatibility.js +48 -0
  120. package/dist/domain/externalReferenceCompatibility.js.map +1 -0
  121. package/dist/domain/externalReferenceFidelity.d.ts +171 -0
  122. package/dist/domain/externalReferenceFidelity.js +419 -0
  123. package/dist/domain/externalReferenceFidelity.js.map +1 -0
  124. package/dist/domain/externalReferenceIdentity.d.ts +38 -0
  125. package/dist/domain/externalReferenceIdentity.js +70 -0
  126. package/dist/domain/externalReferenceIdentity.js.map +1 -0
  127. package/dist/domain/externalReferenceImage.d.ts +35 -0
  128. package/dist/domain/externalReferenceImage.js +160 -0
  129. package/dist/domain/externalReferenceImage.js.map +1 -0
  130. package/dist/domain/externalReferenceRegionRelationships.d.ts +63 -0
  131. package/dist/domain/externalReferenceRegionRelationships.js +98 -0
  132. package/dist/domain/externalReferenceRegionRelationships.js.map +1 -0
  133. package/dist/domain/externalReferenceRegions.d.ts +65 -0
  134. package/dist/domain/externalReferenceRegions.js +105 -0
  135. package/dist/domain/externalReferenceRegions.js.map +1 -0
  136. package/dist/domain/externalReferenceRequirementIdentity.d.ts +12 -0
  137. package/dist/domain/externalReferenceRequirementIdentity.js +35 -0
  138. package/dist/domain/externalReferenceRequirementIdentity.js.map +1 -0
  139. package/dist/domain/externalReferenceRequirements.d.ts +215 -0
  140. package/dist/domain/externalReferenceRequirements.js +401 -0
  141. package/dist/domain/externalReferenceRequirements.js.map +1 -0
  142. package/dist/domain/externalReferenceRuntimeBinding.d.ts +146 -0
  143. package/dist/domain/externalReferenceRuntimeBinding.js +183 -0
  144. package/dist/domain/externalReferenceRuntimeBinding.js.map +1 -0
  145. package/dist/domain/frontendContractEvaluation.d.ts +57 -0
  146. package/dist/domain/frontendContractEvaluation.js +454 -0
  147. package/dist/domain/frontendContractEvaluation.js.map +1 -0
  148. package/dist/domain/frontendContractEvaluationArtifact.d.ts +65 -0
  149. package/dist/domain/frontendContractEvaluationArtifact.js +108 -0
  150. package/dist/domain/frontendContractEvaluationArtifact.js.map +1 -0
  151. package/dist/domain/frontendContractIdentity.d.ts +39 -0
  152. package/dist/domain/frontendContractIdentity.js +70 -0
  153. package/dist/domain/frontendContractIdentity.js.map +1 -0
  154. package/dist/domain/frontendContracts.d.ts +188 -0
  155. package/dist/domain/frontendContracts.js +260 -0
  156. package/dist/domain/frontendContracts.js.map +1 -0
  157. package/dist/domain/identity.d.ts +21 -0
  158. package/dist/domain/identity.js +47 -0
  159. package/dist/domain/identity.js.map +1 -0
  160. package/dist/domain/referenceCorrectionIdentity.d.ts +40 -0
  161. package/dist/domain/referenceCorrectionIdentity.js +77 -0
  162. package/dist/domain/referenceCorrectionIdentity.js.map +1 -0
  163. package/dist/domain/referenceCorrectionWorkflow.d.ts +160 -0
  164. package/dist/domain/referenceCorrectionWorkflow.js +165 -0
  165. package/dist/domain/referenceCorrectionWorkflow.js.map +1 -0
  166. package/dist/domain/referenceFidelityProjection.d.ts +65 -0
  167. package/dist/domain/referenceFidelityProjection.js +135 -0
  168. package/dist/domain/referenceFidelityProjection.js.map +1 -0
  169. package/dist/domain/relationships.d.ts +210 -0
  170. package/dist/domain/relationships.js +352 -0
  171. package/dist/domain/relationships.js.map +1 -0
  172. package/dist/domain/schema.d.ts +269 -0
  173. package/dist/domain/schema.js +442 -0
  174. package/dist/domain/schema.js.map +1 -0
  175. package/dist/domain/scrollEvidence.d.ts +51 -0
  176. package/dist/domain/scrollEvidence.js +134 -0
  177. package/dist/domain/scrollEvidence.js.map +1 -0
  178. package/dist/index.d.ts +114 -0
  179. package/dist/index.js +64 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/projectWorkflow/aliasCatalog.d.ts +21 -0
  182. package/dist/projectWorkflow/aliasCatalog.js +67 -0
  183. package/dist/projectWorkflow/aliasCatalog.js.map +1 -0
  184. package/dist/projectWorkflow/checkAcceptance.d.ts +25 -0
  185. package/dist/projectWorkflow/checkAcceptance.js +55 -0
  186. package/dist/projectWorkflow/checkAcceptance.js.map +1 -0
  187. package/dist/projectWorkflow/checkResult.d.ts +85 -0
  188. package/dist/projectWorkflow/checkResult.js +101 -0
  189. package/dist/projectWorkflow/checkResult.js.map +1 -0
  190. package/dist/projectWorkflow/projectConfig.d.ts +43 -0
  191. package/dist/projectWorkflow/projectConfig.js +84 -0
  192. package/dist/projectWorkflow/projectConfig.js.map +1 -0
  193. package/dist/projectWorkflow/projectDiscovery.d.ts +9 -0
  194. package/dist/projectWorkflow/projectDiscovery.js +20 -0
  195. package/dist/projectWorkflow/projectDiscovery.js.map +1 -0
  196. package/dist/projectWorkflow/projectPaths.d.ts +8 -0
  197. package/dist/projectWorkflow/projectPaths.js +23 -0
  198. package/dist/projectWorkflow/projectPaths.js.map +1 -0
  199. package/dist/request/paths.d.ts +14 -0
  200. package/dist/request/paths.js +33 -0
  201. package/dist/request/paths.js.map +1 -0
  202. package/dist/request/request.d.ts +111 -0
  203. package/dist/request/request.js +464 -0
  204. package/dist/request/request.js.map +1 -0
  205. package/dist/safety/policy.d.ts +14 -0
  206. package/dist/safety/policy.js +81 -0
  207. package/dist/safety/policy.js.map +1 -0
  208. package/dist/viewer/assets/index-CN_yb9Uf.css +1 -0
  209. package/dist/viewer/assets/index-D98S1_2d.js +9 -0
  210. package/dist/viewer/icons/icon-192.png +0 -0
  211. package/dist/viewer/icons/icon-512.png +0 -0
  212. package/dist/viewer/index.html +15 -0
  213. package/dist/viewer/manifest.webmanifest +1 -0
  214. package/dist/viewer/registerSW.js +1 -0
  215. package/dist/viewer/sw.js +1 -0
  216. package/dist/viewer/workbox-9c191d2f.js +1 -0
  217. package/dist/viewerServer/context.d.ts +48 -0
  218. package/dist/viewerServer/context.js +60 -0
  219. package/dist/viewerServer/context.js.map +1 -0
  220. package/dist/viewerServer/evidence/classify.d.ts +59 -0
  221. package/dist/viewerServer/evidence/classify.js +124 -0
  222. package/dist/viewerServer/evidence/classify.js.map +1 -0
  223. package/dist/viewerServer/evidence/comparisonView.d.ts +28 -0
  224. package/dist/viewerServer/evidence/comparisonView.js +43 -0
  225. package/dist/viewerServer/evidence/comparisonView.js.map +1 -0
  226. package/dist/viewerServer/evidence/contextSourceView.d.ts +25 -0
  227. package/dist/viewerServer/evidence/contextSourceView.js +20 -0
  228. package/dist/viewerServer/evidence/contextSourceView.js.map +1 -0
  229. package/dist/viewerServer/evidence/discovery.d.ts +31 -0
  230. package/dist/viewerServer/evidence/discovery.js +78 -0
  231. package/dist/viewerServer/evidence/discovery.js.map +1 -0
  232. package/dist/viewerServer/evidence/evaluationView.d.ts +32 -0
  233. package/dist/viewerServer/evidence/evaluationView.js +50 -0
  234. package/dist/viewerServer/evidence/evaluationView.js.map +1 -0
  235. package/dist/viewerServer/evidence/handles.d.ts +21 -0
  236. package/dist/viewerServer/evidence/handles.js +43 -0
  237. package/dist/viewerServer/evidence/handles.js.map +1 -0
  238. package/dist/viewerServer/evidence/index.d.ts +41 -0
  239. package/dist/viewerServer/evidence/index.js +82 -0
  240. package/dist/viewerServer/evidence/index.js.map +1 -0
  241. package/dist/viewerServer/evidence/limits.d.ts +27 -0
  242. package/dist/viewerServer/evidence/limits.js +28 -0
  243. package/dist/viewerServer/evidence/limits.js.map +1 -0
  244. package/dist/viewerServer/evidence/linkedEvidence.d.ts +43 -0
  245. package/dist/viewerServer/evidence/linkedEvidence.js +151 -0
  246. package/dist/viewerServer/evidence/linkedEvidence.js.map +1 -0
  247. package/dist/viewerServer/evidence/mediaResolver.d.ts +16 -0
  248. package/dist/viewerServer/evidence/mediaResolver.js +85 -0
  249. package/dist/viewerServer/evidence/mediaResolver.js.map +1 -0
  250. package/dist/viewerServer/evidence/observationView.d.ts +29 -0
  251. package/dist/viewerServer/evidence/observationView.js +46 -0
  252. package/dist/viewerServer/evidence/observationView.js.map +1 -0
  253. package/dist/viewerServer/evidence/pathSafety.d.ts +11 -0
  254. package/dist/viewerServer/evidence/pathSafety.js +31 -0
  255. package/dist/viewerServer/evidence/pathSafety.js.map +1 -0
  256. package/dist/viewerServer/evidence/projection.d.ts +55 -0
  257. package/dist/viewerServer/evidence/projection.js +152 -0
  258. package/dist/viewerServer/evidence/projection.js.map +1 -0
  259. package/dist/viewerServer/evidence/referenceView.d.ts +133 -0
  260. package/dist/viewerServer/evidence/referenceView.js +169 -0
  261. package/dist/viewerServer/evidence/referenceView.js.map +1 -0
  262. package/dist/viewerServer/httpServer.d.ts +27 -0
  263. package/dist/viewerServer/httpServer.js +381 -0
  264. package/dist/viewerServer/httpServer.js.map +1 -0
  265. package/dist/viewerServer/openBrowser.d.ts +7 -0
  266. package/dist/viewerServer/openBrowser.js +32 -0
  267. package/dist/viewerServer/openBrowser.js.map +1 -0
  268. package/dist/viewerServer/port.d.ts +16 -0
  269. package/dist/viewerServer/port.js +19 -0
  270. package/dist/viewerServer/port.js.map +1 -0
  271. package/dist/viewerServer/viewerService.d.ts +62 -0
  272. package/dist/viewerServer/viewerService.js +88 -0
  273. package/dist/viewerServer/viewerService.js.map +1 -0
  274. package/docs/ARCHITECTURE.md +1286 -0
  275. package/docs/CI_CD.md +250 -0
  276. package/docs/COMMANDS.md +972 -0
  277. package/docs/CONTRACTS.md +1856 -0
  278. package/docs/CURRENT_STATE.md +1049 -0
  279. package/docs/DEVELOPMENT.md +202 -0
  280. package/docs/DOCUMENTATION_PRESERVATION_POLICY.md +50 -0
  281. package/docs/PROJECT_DESCRIPTION.md +2221 -0
  282. package/docs/PROJECT_MILESTONES.md +2526 -0
  283. package/docs/PROJECT_OVERVIEW.md +150 -0
  284. package/docs/QUICKSTART.md +83 -0
  285. package/docs/RELEASE.md +27 -0
  286. package/docs/ROADMAP.md +641 -0
  287. package/docs/SECURITY.md +218 -0
  288. package/docs/WORKFLOWS.md +642 -0
  289. package/docs/plans/v0.8-implementation-plan.md +655 -0
  290. package/docs/plans/v0.8.1-cli-usability-patch-plan.md +505 -0
  291. package/docs/reports/v0.7-bounded-fidelity-context-prompt7.md +243 -0
  292. package/docs/reports/v0.7-implementation-completeness-documentation-reconciliation.md +497 -0
  293. package/docs/reports/v0.7-pre-release-readiness.md +337 -0
  294. package/docs/reports/v0.7-reference-binding-prompt5.md +223 -0
  295. package/docs/reports/v0.7-reference-compatibility-prompt4.md +234 -0
  296. package/docs/reports/v0.7-reference-correction-workflow-prompt8.md +222 -0
  297. package/docs/reports/v0.7-reference-fidelity-prompt6.md +216 -0
  298. package/docs/reports/v0.7-reference-foundation-prompt1.md +151 -0
  299. package/docs/reports/v0.7-reference-regions-prompt2.md +195 -0
  300. package/docs/reports/v0.7-reference-requirements-prompt3.md +217 -0
  301. package/docs/reports/v0.7-release-prep.md +423 -0
  302. package/docs/reports/v0.8-binding-fidelity-interaction-batch6.md +279 -0
  303. package/docs/reports/v0.8-bounded-context-correlation-batch7.md +233 -0
  304. package/docs/reports/v0.8-comparison-contract-inspection-batch4.md +279 -0
  305. package/docs/reports/v0.8-evidence-index-readers-batch2.md +247 -0
  306. package/docs/reports/v0.8-implementation-completeness-documentation-reconciliation.md +741 -0
  307. package/docs/reports/v0.8-integrated-viewer-acceptance-batch8.md +128 -0
  308. package/docs/reports/v0.8-observation-svg-inspection-batch3.md +223 -0
  309. package/docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md +687 -0
  310. package/docs/reports/v0.8-reference-candidate-inspection-batch5.md +232 -0
  311. package/docs/reports/v0.8-viewer-runtime-pwa-batch1.md +278 -0
  312. package/docs/reports/v0.8.1-check-orchestration-prompt2.md +69 -0
  313. package/docs/reports/v0.8.1-implementation-completeness-documentation-reconciliation.md +114 -0
  314. package/docs/reports/v0.8.1-prerelease-readiness-cross-platform-security-code-rot.md +170 -0
  315. package/docs/reports/v0.8.1-project-workflow-foundation-prompt1.md +66 -0
  316. package/package.json +58 -0
@@ -0,0 +1,655 @@
1
+ # v0.8 Implementation Plan — Interactive Local Observation Viewer
2
+
3
+ ## 1. Status and authority
4
+
5
+ This document is the frozen concrete implementation plan for
6
+ `my-frontend-observer` v0.8.
7
+
8
+ It was created during v0.8 version-start planning after reviewing the current
9
+ v0.7 repository state and the v0.8 roadmap/milestone requirements. It governs
10
+ implementation scope, architecture decisions, batch order, batch gates, and
11
+ validation expectations unless the user explicitly revises it.
12
+
13
+ This document is planning authority only. It does not prove that any v0.8 batch
14
+ has been implemented. Actual implementation/release state remains owned by
15
+ repository evidence and `docs/CURRENT_STATE.md`.
16
+
17
+ The package remains `0.7.0` until the separate release-preparation workflow
18
+ explicitly bumps it after implementation and pre-release readiness pass.
19
+
20
+ ## 2. Version objective
21
+
22
+ Build an interactive local graphical viewer over the existing v0.1-v0.7
23
+ Observer evidence system so a developer can understand runtime observations,
24
+ before/after comparisons, frontend contracts, external references,
25
+ reference/candidate fidelity, runtime/reference bindings, bounded agent context,
26
+ and runtime/static correlation without manually opening raw artifacts.
27
+
28
+ The viewer is a presentation and inspection layer over existing Observer-owned
29
+ evidence. It must not become a second implementation of any existing evidence
30
+ engine.
31
+
32
+ ## 3. Frozen planning decisions
33
+
34
+ The following version-start decisions are frozen for v0.8.
35
+
36
+ 1. UI technology: React + TypeScript + Vite.
37
+ 2. Application boundary: normal browser + Node-backed local server + installable
38
+ Progressive Web App (PWA), using the same React application in browser and
39
+ installed modes.
40
+ 3. Reader architecture: existing canonical readers -> ephemeral viewer adapter
41
+ -> viewer protocol/UI projection. The projection is not persisted evidence.
42
+ 4. Reference/candidate display: side-by-side by default, with independently
43
+ toggleable structured overlays.
44
+ 5. Geometry rendering: SVG using each source artifact/image's original
45
+ coordinate domain.
46
+ 6. Interaction: explicit-binding cross-selection + independent zoom/pan +
47
+ conditional synchronized/locked viewing only when existing compatibility
48
+ evidence permits it.
49
+ 7. Loading: metadata/index first + on-demand artifact and image loading.
50
+
51
+ No paid, premium-only, proprietary hosted, or cloud dependency is required for
52
+ this plan. The viewer remains local-first.
53
+
54
+ ## 4. Derived architecture decisions
55
+
56
+ The frozen decisions above imply the following implementation boundaries.
57
+
58
+ ### 4.1 Public viewer entry point
59
+
60
+ Add one thin public CLI entry point for launching the viewer:
61
+
62
+ ```text
63
+ my-frontend-observer view --root <evidence-root>
64
+ ```
65
+
66
+ The command starts the local viewer server and exposes the same React viewer to
67
+ a normal browser or an installed PWA. Exact optional operational flags may be
68
+ added only when needed for deterministic testing or local operation, but they
69
+ must not create a second evidence workflow.
70
+
71
+ The CLI remains a parsing/dispatch/presentation boundary. It must not contain
72
+ artifact semantics, comparison logic, contract logic, fidelity logic, binding
73
+ logic, or browser observation logic.
74
+
75
+ ### 4.2 Stable local PWA origin
76
+
77
+ The default viewer server must bind only to loopback and use one stable default
78
+ origin so an installed PWA has a stable identity. The implementation batch must
79
+ select and document one fixed default loopback port after checking current repo
80
+ and test-fixture conflicts.
81
+
82
+ Do not silently fall back to a random port when the default port is occupied.
83
+ Return an actionable error. An explicit alternate port may be supported for
84
+ advanced/testing use, with the consequence that it is a different web origin.
85
+
86
+ ### 4.3 Read-only server boundary
87
+
88
+ The v0.8 viewer server is read-only with respect to target applications and
89
+ persisted Observer evidence.
90
+
91
+ Permitted responsibilities include:
92
+
93
+ ```text
94
+ serve viewer application assets
95
+ index supported evidence under the explicitly allowed evidence root
96
+ read and validate existing artifacts through canonical readers
97
+ produce ephemeral viewer projections
98
+ serve referenced screenshots/reference images safely
99
+ run existing pure/in-memory evaluation functions when the required explicit
100
+ inputs are supplied and the result is intentionally non-persisted in v0.7
101
+ ```
102
+
103
+ The viewer server must not add approval, supersession, source editing, capture,
104
+ contract mutation, annotation authoring, automatic binding, or workflow-control
105
+ endpoints.
106
+
107
+ Opening or inspecting evidence never changes it.
108
+
109
+ ### 4.4 Filesystem boundary
110
+
111
+ `--root` is an explicit local filesystem trust boundary.
112
+
113
+ The server may expose only recognized files and media reachable through
114
+ validated Observer evidence under that allowed root. Path traversal, arbitrary
115
+ absolute-path reads, and unrelated filesystem browsing must fail closed.
116
+
117
+ ### 4.5 Existing readers and ephemeral viewer adapter
118
+
119
+ Existing artifact readers and validators remain the only artifact semantic
120
+ readers. The viewer may add narrow missing reader wrappers only when a current
121
+ artifact family lacks one, and such a reader must call that artifact family's
122
+ existing structural validator rather than introduce a second validator.
123
+
124
+ The viewer adapter converts already-validated domain values into UI-friendly
125
+ in-memory projections. These projections are not new evidence contracts and are
126
+ not persisted.
127
+
128
+ Do not create `viewer.json`, a viewer manifest artifact, a viewer cache artifact,
129
+ or another durable evidence family in v0.8.
130
+
131
+ ### 4.6 PWA caching boundary
132
+
133
+ The PWA/service worker may cache the application shell and immutable built
134
+ assets required for the viewer UI.
135
+
136
+ It must not make screenshots, external reference images, observation manifests,
137
+ comparison artifacts, contract/evaluation evidence, bounded-agent-context data,
138
+ or source-correlation evidence available as stale cached truth after the local
139
+ server/evidence source changes.
140
+
141
+ Evidence remains server-backed and current to the selected local root.
142
+
143
+ If the installed PWA is opened while the local Observer viewer server is not
144
+ running, show an actionable local-server-not-running state rather than a blank
145
+ or misleading stale evidence screen.
146
+
147
+ ### 4.7 SVG coordinate rule
148
+
149
+ Runtime screenshot overlays use the runtime screenshot/artifact coordinate
150
+ space. External-reference overlays use the external reference image coordinate
151
+ space. The viewer uses SVG `viewBox`/display transforms to scale for presentation
152
+ without rewriting the underlying evidence coordinates.
153
+
154
+ Reference-image pixels and runtime/CSS coordinates remain distinct domains.
155
+ Existing v0.7 applicability/fidelity mapping remains the only authority for
156
+ cross-domain measurement interpretation.
157
+
158
+ ### 4.8 Interaction rule
159
+
160
+ Cross-highlighting between a reference region and runtime target is driven only
161
+ by existing explicit binding results/declarations. Name similarity, spatial
162
+ proximity, rectangle overlap, or UI heuristics must never create a binding.
163
+
164
+ Independent zoom/pan is always available. Locked/synchronized viewing is enabled
165
+ only when existing applicability/compatibility evidence makes coordinated
166
+ viewing meaningful. If it is not safe, the UI must show why lock is unavailable.
167
+
168
+ ### 4.9 Loading rule
169
+
170
+ Initial viewer navigation loads bounded metadata only. Full artifact payloads,
171
+ screenshots, and reference images are fetched on demand for the selected view.
172
+
173
+ Do not add virtualization, workers, databases, or complex caching unless
174
+ measured v0.8 performance evidence demonstrates a need. The architecture should
175
+ leave room for later optimization without making it part of this version by
176
+ default.
177
+
178
+ ## 5. Planned viewer structure
179
+
180
+ The expected responsibility flow is:
181
+
182
+ ```text
183
+ my-frontend-observer view --root <evidence-root>
184
+ |
185
+ v
186
+ Node local viewer server
187
+ loopback only
188
+ |
189
+ +----------+----------+
190
+ | |
191
+ v v
192
+ canonical readers safe media serving
193
+ |
194
+ v
195
+ ephemeral viewer adapters
196
+ |
197
+ v
198
+ viewer protocol/API
199
+ |
200
+ v
201
+ React + TypeScript + Vite PWA
202
+ |
203
+ +------+------+----------------+----------------+
204
+ | | | |
205
+ v v v v
206
+ Observation Comparison Reference Context/
207
+ inspection + contracts /candidate provenance
208
+ inspection
209
+ |
210
+ v
211
+ SVG overlays + explicit-binding interaction
212
+ ```
213
+
214
+ The PWA contains presentation logic. It does not contain replacement Observer
215
+ engines.
216
+
217
+ ## 6. Implementation batches
218
+
219
+ v0.8 is implemented in eight ordered batches. Each batch is part of the same
220
+ version. Later batches assume earlier batches are implemented and merged. A
221
+ coding-agent prompt must not redesign the version or pull later-version features
222
+ forward.
223
+
224
+ ### Batch 1 — Viewer runtime and PWA foundation
225
+
226
+ #### Goal
227
+
228
+ Establish the build/runtime shell for a local browser viewer and installable PWA
229
+ without yet implementing evidence interpretation.
230
+
231
+ #### In scope
232
+
233
+ - Add React + TypeScript + Vite viewer build configuration.
234
+ - Add PWA manifest/service-worker infrastructure and installability support.
235
+ - Add a Node local viewer server bound to loopback only.
236
+ - Select and freeze one stable default loopback port after checking current
237
+ repo/test fixture conflicts.
238
+ - Add the thin `view --root <evidence-root>` CLI dispatch path.
239
+ - Serve built viewer assets from the npm package.
240
+ - Establish viewer protocol/version identity if needed for safe client/server
241
+ compatibility.
242
+ - Establish a basic three-area viewer shell suitable for evidence navigation,
243
+ visual inspection, and details/diagnostics.
244
+ - Integrate viewer build output into package build/packing without splitting the
245
+ project into another npm package.
246
+
247
+ #### Out of scope
248
+
249
+ - artifact interpretation beyond minimal server health/root identity;
250
+ - screenshot geometry overlays;
251
+ - comparison/contract/reference/fidelity inspection;
252
+ - source editing;
253
+ - approval/supersession;
254
+ - annotation;
255
+ - automatic binding;
256
+ - cloud hosting.
257
+
258
+ #### Gate
259
+
260
+ A built/packed candidate can start `my-frontend-observer view --root <fixture>`
261
+ and serve the same working React shell to a normal browser and PWA-capable
262
+ browser from the fixed loopback origin. Existing CLI/library behavior remains
263
+ unchanged.
264
+
265
+ ### Batch 2 — Evidence indexing, canonical readers, and lazy data boundary
266
+
267
+ #### Goal
268
+
269
+ Create the safe read-only data boundary from local Observer evidence into the
270
+ viewer while preserving existing validators and artifact semantics.
271
+
272
+ #### In scope
273
+
274
+ - Bounded recognition/indexing of supported Observer evidence under the allowed
275
+ root.
276
+ - Reuse existing canonical readers for observation, comparison, external
277
+ reference, frontend contract, and frontend contract evaluation artifacts.
278
+ - Add only narrow missing reader wrappers required for currently persisted
279
+ artifact/context families, delegating to existing validators.
280
+ - Add ephemeral viewer adapter/projection types for UI consumption.
281
+ - Add metadata-first index responses.
282
+ - Add on-demand full-artifact and media retrieval.
283
+ - Represent supported, unsupported-version, malformed, missing, partial, and
284
+ unavailable states explicitly.
285
+ - Enforce safe evidence-root/media-path resolution.
286
+
287
+ #### Out of scope
288
+
289
+ - new persistent viewer artifacts;
290
+ - schema migration/upgrading;
291
+ - silently accepting unsupported future schema versions;
292
+ - full-directory arbitrary file browsing;
293
+ - presentation-specific reimplementation of validators.
294
+
295
+ #### Gate
296
+
297
+ The viewer can enumerate recognized fixture evidence from metadata, load one
298
+ selected artifact on demand through its existing validation boundary, load its
299
+ owned/referenced media safely, and visibly distinguish malformed/unsupported/
300
+ missing evidence rather than silently dropping it.
301
+
302
+ ### Batch 3 — Runtime observation inspection and SVG overlays
303
+
304
+ #### Goal
305
+
306
+ Make one current `ObservationArtifact` understandable graphically.
307
+
308
+ #### In scope
309
+
310
+ - Display the observation screenshot on demand.
311
+ - Render stable target geometry through SVG in the original source coordinate
312
+ domain.
313
+ - Add selectable runtime-target overlays and labels.
314
+ - Add independently toggleable runtime overlays for evidence already present,
315
+ such as relationships, visibility, overflow, and scroll behavior where
316
+ meaningful.
317
+ - Show stable target identity, resolution status, semantics, geometry,
318
+ visibility, overflow, scrolling, containment, relationships, diagnostics,
319
+ evidence source/provenance, and completion state in the inspector.
320
+ - Preserve unavailable/not-found/ambiguous/partial states without fabricated
321
+ zero rectangles.
322
+
323
+ #### Out of scope
324
+
325
+ - before/after comparison UI;
326
+ - contracts;
327
+ - external references;
328
+ - reference/runtime binding;
329
+ - new browser queries or target resolution from the viewer.
330
+
331
+ #### Gate
332
+
333
+ A real existing observation fixture renders screenshot and target overlays whose
334
+ positions are traceable to the artifact's existing geometry. Unresolved targets
335
+ produce honest non-geometric states, not invented boxes.
336
+
337
+ ### Batch 4 — Before/after comparison and contract/change-scope inspection
338
+
339
+ #### Goal
340
+
341
+ Expose the existing v0.4 comparison and v0.5 contract/evaluation results through
342
+ the viewer without recomputing alternate semantics.
343
+
344
+ #### In scope
345
+
346
+ - Before/after visual mode using the source observations referenced by an
347
+ existing comparison.
348
+ - Display existing appeared/disappeared/moved/resized, visibility, clipping,
349
+ overflow, relationship, page-size, scroll-owner, and comparability evidence
350
+ as available.
351
+ - Display baseline and per-change contract/evaluation results.
352
+ - Display requested, expected-dependent, protected, preserved, and unexpected
353
+ classifications.
354
+ - Cross-highlight relevant runtime targets only where existing target identity
355
+ supports it.
356
+ - Make overall failures visually clear when a requested/local change passes but
357
+ a protected/preserved condition fails.
358
+
359
+ #### Out of scope
360
+
361
+ - a second before/after comparison engine;
362
+ - a second contract evaluator;
363
+ - reference/candidate fidelity;
364
+ - editing contracts or approving baselines.
365
+
366
+ #### Gate
367
+
368
+ Controlled fixtures prove the viewer can explain both an all-pass change and the
369
+ required safety case where a requested change passes but an active protected or
370
+ preserved requirement fails overall.
371
+
372
+ ### Batch 5 — External reference and reference/candidate inspection
373
+
374
+ #### Goal
375
+
376
+ Expose the existing v0.7 external-reference model beside a browser-rendered
377
+ candidate using the frozen side-by-side and toggleable-overlay design.
378
+
379
+ #### In scope
380
+
381
+ - Load imported/approved external-reference artifacts through canonical readers.
382
+ - Resolve approved-reference image ownership/source references safely.
383
+ - Side-by-side reference and candidate panels as the default layout.
384
+ - Reference-side SVG region overlays in original reference-image coordinates.
385
+ - Candidate-side runtime-target overlays in original runtime coordinates.
386
+ - Independent overlay toggles for regions/labels/relationships/requirement
387
+ status on the reference side and targets/labels/relationships/contract status
388
+ on the candidate side.
389
+ - Display reference lifecycle, provenance, image metadata, regions,
390
+ relationships, selected requirements, tolerances, adequacy, applicability,
391
+ supersession, diagnostics, and approval information.
392
+ - Display existing reference/candidate compatibility and fidelity state/results
393
+ when supplied/computable through the existing v0.7 engines.
394
+
395
+ #### Out of scope
396
+
397
+ - pixel-difference scoring as a success mechanism;
398
+ - automatic computer-vision region discovery;
399
+ - automatic binding;
400
+ - changing/importing/approving/superseding references through the viewer;
401
+ - graphical region authoring.
402
+
403
+ #### Gate
404
+
405
+ A reference/candidate fixture can be inspected side by side with source-domain
406
+ SVG overlays and existing structured reference/fidelity evidence. Imported and
407
+ approved lifecycle states and image ownership remain distinguishable.
408
+
409
+ ### Batch 6 — Explicit-binding interaction, zoom/pan, and conditional lock
410
+
411
+ #### Goal
412
+
413
+ Add the synchronized inspection behavior required for useful reference/candidate
414
+ analysis while preserving explicit identity and compatibility rules.
415
+
416
+ #### In scope
417
+
418
+ - Explicit-binding-driven cross-selection in both directions.
419
+ - Visible `bound`, `ambiguous`, and `unavailable` binding states.
420
+ - Independent zoom, pan, reset, and fit controls for both visual panes.
421
+ - Conditional view lock/synchronization only when existing applicability and
422
+ compatibility evidence permits it.
423
+ - Clear explanation when synchronization is unavailable.
424
+ - On-demand use of the existing v0.7 in-memory reference-fidelity evaluator
425
+ where its required reference/candidate/binding inputs are available.
426
+ - No persistence of a new fidelity artifact when the existing v0.7 contract is
427
+ intentionally in-memory.
428
+
429
+ #### Out of scope
430
+
431
+ - name-based or geometry-based inferred binding;
432
+ - unconditional zoom synchronization;
433
+ - a viewer-only fidelity evaluator;
434
+ - automatic correction or source mutation.
435
+
436
+ #### Gate
437
+
438
+ Selecting a bound reference region highlights exactly its declared runtime
439
+ target and vice versa. Ambiguous/unavailable bindings never auto-select a target.
440
+ Independent zoom/pan always works, and locked viewing is enabled only for a
441
+ compatible case and visibly blocked for an incompatible case.
442
+
443
+ ### Batch 7 — Bounded agent context, correlation, provenance, and raw evidence navigation
444
+
445
+ #### Goal
446
+
447
+ Complete the nonvisual evidence inspection needed to understand why the coding
448
+ agent received a particular bounded context and how runtime targets relate to
449
+ static/source candidates.
450
+
451
+ #### In scope
452
+
453
+ - Display bounded-agent-context identity/profile and supported version.
454
+ - Display adequacy, omissions, truncations, required-evidence loss, and
455
+ reference-fidelity projection where present.
456
+ - Display runtime/static correlation status, competing candidates, evidence
457
+ references, and uncertainty without asserting false ownership.
458
+ - Display provenance/source references relevant to the selected evidence.
459
+ - Provide safe navigation to relevant raw structured evidence within the allowed
460
+ evidence root.
461
+ - Preserve correlated/ambiguous/unavailable and adequate/partial/inadequate
462
+ distinctions exactly as existing domain evidence represents them.
463
+
464
+ #### Out of scope
465
+
466
+ - running `my-dev-kit` from the viewer;
467
+ - inventing static/source ownership;
468
+ - rebuilding bounded-agent-context;
469
+ - arbitrary filesystem browsing;
470
+ - editing raw evidence.
471
+
472
+ #### Gate
473
+
474
+ A developer can trace a selected runtime/reference problem through the bounded
475
+ context and existing source-correlation evidence, including ambiguity,
476
+ omissions, and truncation, and can inspect the associated raw evidence without
477
+ leaving the allowed evidence root.
478
+
479
+ ### Batch 8 — Integrated viewer acceptance, PWA hardening, and packaged proof
480
+
481
+ #### Goal
482
+
483
+ Prove the complete v0.8 viewer works as one packaged, local-first product while
484
+ preserving all earlier CLI/programmatic workflows and architectural boundaries.
485
+
486
+ #### Required integrated proof set
487
+
488
+ Use deterministic evidence covering, as applicable:
489
+
490
+ ```text
491
+ baseline observation
492
+ candidate observation
493
+ comparison
494
+ persistent baseline contract
495
+ per-change contract
496
+ contract evaluation
497
+ imported external reference
498
+ approved external reference/reference image ownership
499
+ reference regions and requirements
500
+ reference applicability
501
+ explicit reference/runtime bindings
502
+ reference/candidate fidelity
503
+ bounded agent context
504
+ runtime/static correlation, including ambiguity
505
+ ```
506
+
507
+ #### Required acceptance scenarios
508
+
509
+ 1. Normal observation: screenshot -> target -> geometry/semantics/behavior/
510
+ relationships.
511
+ 2. Successful requested change: before -> after -> comparison -> contract pass.
512
+ 3. Protected/preserved regression: requested change passes locally while an
513
+ active protected/preserved condition fails overall.
514
+ 4. Reference mismatch: approved reference -> explicit binding -> structured
515
+ fidelity failure.
516
+ 5. Reference fidelity passes while an active contract fails, producing overall
517
+ failure rather than apparent success.
518
+ 6. Reference/candidate incompatibility produces an explicit blocked/
519
+ incomparable state rather than fabricated visual failures.
520
+ 7. Ambiguous/unavailable binding remains visible and produces no automatic
521
+ candidate selection.
522
+ 8. Missing/malformed/unsupported evidence remains visible and actionable.
523
+ 9. Normal browser mode works against the packaged candidate.
524
+ 10. PWA manifest/service worker/installability behavior works in a supported
525
+ PWA-capable browser.
526
+ 11. Installed/standalone viewer mode connects to the same local server and same
527
+ canonical evidence boundary.
528
+ 12. PWA shell caching never makes stale evidence appear available when the local
529
+ server/evidence source is unavailable.
530
+ 13. Existing observation, comparison, contract, external-reference, and
531
+ programmatic workflows still pass their current validation.
532
+
533
+ #### Gate
534
+
535
+ The packaged candidate satisfies the v0.8 roadmap/milestone acceptance criteria
536
+ through a real local viewer, while all pre-v0.8 CLI/programmatic paths remain
537
+ independently functional and no second evidence engine has been introduced.
538
+
539
+ ## 7. Cross-batch invariants
540
+
541
+ Every implementation prompt must preserve these invariants.
542
+
543
+ - Assume all earlier prompts in this milestone are already implemented and
544
+ merged in the current repo state. Do not re-create their architecture.
545
+ - Inspect current implementation before editing.
546
+ - Reuse current Observer artifact/domain/application ownership boundaries.
547
+ - Do not move v0.9 annotation authoring into v0.8.
548
+ - Do not add source editing or automatic design generation.
549
+ - Do not add a second browser observer, relationship engine, comparison engine,
550
+ contract engine, reference model, reference evaluator, binding engine,
551
+ correlation implementation, or bounded-context builder.
552
+ - Runtime target identity, reference-region identity, static/source identity,
553
+ and filesystem identity remain distinct.
554
+ - Viewer state is presentation state, not evidence state.
555
+ - Unsupported, partial, unavailable, derived, ambiguous, and incomparable states
556
+ remain honest and visible.
557
+ - Reference-fidelity success cannot override an active contract failure.
558
+ - Existing approved references/baselines are never implicitly approved,
559
+ superseded, or mutated by viewing.
560
+ - Heavy images are referenced/served on demand rather than embedded into every
561
+ data response.
562
+ - The local viewer remains optional. CLI/programmatic workflows must continue to
563
+ work without it.
564
+
565
+ ## 8. Version-wide validation expectations
566
+
567
+ Implementation batches should add focused tests as they introduce each layer.
568
+ The completed implementation must ultimately pass the repository's applicable
569
+ validation, including:
570
+
571
+ ```text
572
+ npm run typecheck
573
+ npm run lint
574
+ npm test
575
+ npm run test:browser
576
+ npm run build
577
+ npm run check:docs
578
+ ```
579
+
580
+ v0.8 must additionally include viewer-specific tests for:
581
+
582
+ - loopback-only server behavior and filesystem-root safety;
583
+ - viewer protocol/readers/adapters;
584
+ - unsupported/malformed/missing evidence states;
585
+ - metadata-first/on-demand loading;
586
+ - SVG coordinate/display transforms;
587
+ - target/region selection;
588
+ - explicit-binding cross-selection;
589
+ - independent zoom/pan and conditional lock;
590
+ - PWA manifest/service-worker/installability behavior;
591
+ - packaged viewer asset presence and launch;
592
+ - complete deterministic integrated viewer flows.
593
+
594
+ Cross-platform pre-release validation must exercise the packed candidate on
595
+ Windows, Linux, and macOS where the existing release workflow requires it.
596
+ Browser/PWA behavior that cannot be proven identically on all three runners must
597
+ be reported precisely rather than overstated.
598
+
599
+ ## 9. Explicit v0.8 exclusions
600
+
601
+ The following are not part of v0.8:
602
+
603
+ ```text
604
+ visual annotation authoring
605
+ drawing, moving, or resizing reference regions
606
+ interactive requirement authoring
607
+ source editing
608
+ automatic frontend correction
609
+ automatic region/target binding
610
+ computer-vision target discovery
611
+ image-to-code or raster-to-HTML/CSS/SVG generation
612
+ pixel-diff-only acceptance
613
+ a second workflow engine
614
+ cloud hosting
615
+ accounts/authentication for the viewer
616
+ collaboration/comments
617
+ a database
618
+ mandatory viewer use for observation or coding-agent review
619
+ ```
620
+
621
+ These exclusions must not be pulled into a batch merely because the new UI makes
622
+ them technically convenient.
623
+
624
+ ## 10. Post-implementation workflow
625
+
626
+ After all eight implementation batches pass, follow the existing fixed version
627
+ workflow rather than treating Batch 8 as release authorization:
628
+
629
+ ```text
630
+ 8 implementation batches
631
+ ->
632
+ hardened documentation update + implementation-completeness audit
633
+ ->
634
+ pre-release readiness + cross-platform/security validation
635
+ ->
636
+ release preparation/version bump/package hygiene
637
+ ->
638
+ user-approved publication
639
+ ```
640
+
641
+ The implementation batches must not bump package version to `0.8.0`, publish to
642
+ npm, create the release tag, or create the GitHub release. Those actions belong
643
+ to the later release workflow.
644
+
645
+ ## 11. Plan change control
646
+
647
+ If implementation evidence proves that this plan cannot be executed safely or
648
+ that one of its frozen assumptions is wrong, stop the affected batch and report
649
+ the concrete evidence. Do not silently reorder batches, replace the selected
650
+ viewer architecture, pull in future-version scope, or redefine an existing
651
+ Observer engine.
652
+
653
+ A material change becomes authoritative only after the user explicitly accepts
654
+ it and this file is revised to record the new plan before subsequent batches are
655
+ executed against that revision.