@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
package/CHANGELOG.md ADDED
@@ -0,0 +1,397 @@
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+
5
+ ## 0.8.1 - 2026-09-15
6
+
7
+ Project workflow release for `my-frontend-observer`.
8
+
9
+ - Added the managed `init`, `capture`, `check`, and project-aware `view`
10
+ workflow with human-readable aliases and immutable canonical evidence.
11
+ - Added `PASS`, `FAIL`, `REVIEW_REQUIRED`, and `BLOCKED` check outcomes plus a
12
+ bounded `check --json` interface for coding agents.
13
+ - Added current-candidate history and reuse of canonical frontend-contract and
14
+ approved-reference fidelity evaluation.
15
+ - Added alias-first viewer navigation with canonical IDs retained in details
16
+ and provenance.
17
+ - Completed cross-platform, security, and installed-package validation.
18
+ - Published the npm package as `@dailephd/my-frontend-observer` and added the
19
+ MIT license.
20
+
21
+ ## 0.8.0 - 2026-09-10
22
+
23
+ Interactive Local Observation Viewer.
24
+
25
+ - New `view` command: starts a loopback-only (`127.0.0.1`) Node server
26
+ serving a React + TypeScript + Vite viewer application, usable in a normal
27
+ browser or as an installed Progressive Web App, over an existing evidence
28
+ root (`--root`). Metadata-first evidence discovery and on-demand
29
+ artifact/media loading; never mutates target source or any Observer
30
+ evidence artifact.
31
+ - Observation inspection: screenshot plus SVG target overlays, geometry,
32
+ semantics, visibility/overflow/scroll evidence, and on-demand layout
33
+ relationships.
34
+ - Comparison/contract inspection: before/after side-by-side views and
35
+ contract/change-scope evaluation results, including the required
36
+ protected/preserved-failure safety case (a locally successful requested
37
+ change alongside a genuine protected/preserved regression, shown as
38
+ overall `FAIL`).
39
+ - External reference/candidate inspection: reference image and region
40
+ overlays, explicit (never auto-selected) candidate selection,
41
+ reference/candidate compatibility and applicability.
42
+ - Explicit reference-region/runtime-target binding cross-selection
43
+ (`--bindings-file`), independent bounded zoom/pan, conditional view lock,
44
+ and on-demand reference-fidelity evaluation shown independently alongside
45
+ any selected contract evaluation.
46
+ - Bounded agent context inspection (`--context-file`): session-only display
47
+ of context identity, adequacy, omissions/truncations, and runtime/static
48
+ correlation, plus safe raw-evidence navigation. The viewer never rebuilds
49
+ a bounded context or its correlation and never runs `@dailephd/my-dev-kit`.
50
+ - PWA hardening: real service-worker registration, an application-shell
51
+ precache that excludes `/api/` routes, and a proven server-down behavior
52
+ that never presents stale evidence as current.
53
+ - No second evidence engine: every canonical result the viewer displays is
54
+ produced by the same single engine the CLI uses, called from at most one
55
+ designated server-side call site.
56
+ - Security hardening found during pre-release readiness: the viewer's media
57
+ route now rejects any evidence filename that is itself a symlink/junction
58
+ pointing outside the evidence root, instead of following it.
59
+ - Cross-platform packed-candidate validation: the pre-version-bump
60
+ implementation candidate tarball `my-frontend-observer-0.7.0.tgz`
61
+ (SHA-256 `b80729bc64b3b01378effd2b8aa3b7743ccedc46b3148ba0b1ff1ae5a4b68c55`)
62
+ was hash-verified and proven on Windows, Linux, and macOS, including an
63
+ installed-package smoke of the new `view` command (loopback binding,
64
+ read-only API, path containment, SVG overlay/media, service-worker
65
+ registration, the PWA no-authoritative-cache boundary, and the
66
+ server-down stale-evidence hard gate) alongside every pre-existing
67
+ v0.1-v0.7 packed behavior, before this release's version bump - see
68
+ `docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md`.
69
+
70
+ ## 0.7.0 - 2026-09-06
71
+
72
+ End-to-End Coding-Agent Frontend Change Review.
73
+
74
+ - External-reference artifact and lifecycle: `import-reference`/
75
+ `approve-reference` persist an externally supplied PNG/JPEG/WebP
76
+ design-reference image (header-only format/dimension detection - no
77
+ decode, no OCR, no computer vision) through an explicit two-state
78
+ (`imported`/`approved`) lifecycle. Supersession is represented only as a
79
+ forward pointer to a newer artifact - an existing persisted artifact's own
80
+ manifest is never rewritten.
81
+ - Explicit reference regions and geometry relationships: user/configuration-
82
+ authored rectangles over the reference image, related to each other
83
+ through the same six geometry-only relationship families (horizontal
84
+ order, vertical order, area overlap, relative width, geometric fit,
85
+ vertical sequencing) already used for runtime targets - derived on demand,
86
+ never persisted.
87
+ - Selected design requirements and tolerance semantics: explicit,
88
+ never-inferred requirements over region properties, region-to-region
89
+ relationships, and derived two-region measurements, reusing v0.5's
90
+ requested/expected-dependent/protected/preserved categories directly.
91
+ Three reference-owned tolerance kinds (`exact`/`absolute-reference-px`/
92
+ `percent`) stay distinct from runtime CSS-pixel comparison tolerances.
93
+ - Reference-evidence adequacy: `adequate`/`partial`/`inadequate` reporting on
94
+ whether a reference's own definition actually supports its selected
95
+ requirements, independent of any runtime target or candidate.
96
+ - Explicit applicability and candidate-state compatibility: a shared, closed
97
+ state model (`theme`/`applicationState`/`authenticatedState`, plus an
98
+ applicable CSS-pixel `viewport`) declares which runtime frontend state a
99
+ reference represents. `evaluateReferenceCandidateCompatibility` and
100
+ `observe`'s new `--state-file` reuse v0.4's comparability vocabulary to
101
+ determine whether a reference and a candidate describe the same state -
102
+ an undeclared dimension is never fabricated as a match or a mismatch.
103
+ - Explicit reference-region-to-runtime-target binding: fidelity evaluation
104
+ requires an explicit `{referenceRegion, runtimeTarget}` declaration for
105
+ every region a requirement depends on - never inferred from geometry,
106
+ matching names, or source code.
107
+ - Structured reference-vs-candidate fidelity evaluation: `evaluate-
108
+ reference-fidelity --reference --candidate [--bindings-file] [--enforce]`
109
+ evaluates every selected requirement against live candidate evidence
110
+ through one explicit reference-image-pixel-to-CSS-pixel coordinate scale,
111
+ producing an honest `not-evaluated`/`pass`/`fail` result that never
112
+ fabricates a verdict past a blocked reference-adequacy or
113
+ reference/candidate-compatibility gate.
114
+ - Bounded fidelity integration with v0.6 agent context: `projectBoundedAgentContext`
115
+ gained an optional `fidelity` input so fidelity mismatches compete for the
116
+ same bounded required/permitted-target allocation and adequacy machinery
117
+ v0.5 contract clauses already use - a `not-evaluated` fidelity always
118
+ degrades adequacy rather than being silently reported as "no problems".
119
+ - End-to-end external-reference correction workflow: the programmatic,
120
+ library-only `prepareReferenceCorrection`/`reviewReferenceCorrectionAttempt`
121
+ compose reference fidelity, v0.4 comparison, and v0.5 contract evaluation
122
+ into one overall result - matching the reference is necessary but never
123
+ sufficient, so a candidate that visually satisfies the reference while
124
+ regressing an active protected/preserved contract clause still resolves to
125
+ overall `FAIL`. Neither function edits target source, launches a browser,
126
+ or calls a remote AI provider; an external implementation actor (a human
127
+ or a coding agent) makes the actual change between review attempts.
128
+ - Real-browser regression protection: a dedicated Chromium-driven test
129
+ proves a full success correction, a protected-regression case, a
130
+ two-attempt correction iteration against the same baseline, and an
131
+ incompatible-viewport blocking case, all against a disposable,
132
+ repository-local fixture copy the observer itself never edits.
133
+ - Three new public CLI commands (`import-reference`, `approve-reference`,
134
+ `evaluate-reference-fidelity`) and a complete new programmatic export
135
+ surface (`src/index.ts`) for the reference/region/requirement/
136
+ applicability/compatibility/binding/fidelity/correction-workflow types and
137
+ functions. External-reference schema is `1.0.0`, independent of the
138
+ observation, comparison, frontend-contract, evaluation, and
139
+ bounded-agent-context schema versions, none of which changed.
140
+ - Cross-platform packed-candidate validation: the pre-version-bump
141
+ implementation candidate tarball `my-frontend-observer-0.6.0.tgz`
142
+ (SHA-256 `0347b1f3cfd5d311e13b405c0c2fbc2f507e250cb63223d58b4d2d31df029414`)
143
+ was hash-verified and proven on Windows, Linux, and macOS, including an
144
+ installed-package smoke of every new v0.7 CLI command and programmatic
145
+ export alongside every pre-existing v0.1-v0.6 packed behavior, before this
146
+ release's version bump - see
147
+ `docs/reports/v0.7-pre-release-readiness.md`.
148
+
149
+ ## 0.6.0 - 2026-08-19
150
+
151
+ Bounded Agent Context and Native my-dev-kit Ecosystem Integration.
152
+
153
+ - Bounded runtime projection (`src/domain/boundedAgentContext.ts`,
154
+ `boundedAgentContextProjection.ts#projectBoundedAgentContext`): a
155
+ task-relevant, bounded view of page/viewport identity, stable targets,
156
+ geometry, runtime behavior, relationships, before/after differences,
157
+ contract results, requested/expected-dependent/protected/preserved scope
158
+ (reusing the existing v0.5 `frontendContracts.ts` types directly), and
159
+ screenshot/artifact references - never a raw evidence dump.
160
+ - Explicit adequacy reporting (`adequate`/`partial`/`inadequate` with
161
+ structured reason codes) and omission/truncation records, distinguishing
162
+ required from optional loss.
163
+ - Explicit runtime/static correlation
164
+ (`boundedAgentContextCorrelation.ts#deriveRuntimeStaticCorrelations`/
165
+ `attachRuntimeStaticCorrelations`): `correlated`/`ambiguous`/`unavailable`
166
+ outcomes only - a stable runtime target identity never silently becomes a
167
+ source-ownership claim, and competing candidates remain visible.
168
+ - Deterministic logical identity (`boundedAgentContextIdentity.ts`) distinct
169
+ from fresh per-execution instance identity.
170
+ - Public export/correlation boundary only: `src/index.ts` exports the full
171
+ bounded-agent-context and correlation type/function surface as a
172
+ programmatic library contract (bounded-agent-context schema `1.0.0`) - no
173
+ new CLI command, no disk artifact writer/reader, no `my-dev-kit` runtime
174
+ dependency, no orchestrator/lab code in this repository.
175
+ - Observation schema remains `1.2.0`, comparison schema `1.0.0`, frontend
176
+ contract schema `1.0.0`, evaluation artifact schema `1.0.0` - no existing
177
+ schema was bumped.
178
+ - Cross-platform packed-candidate validation: one hash-verified npm
179
+ candidate tarball (`acd067247c447294a611f37f52eab301b6038ab1c6d493ae65e81c2f1279bfd7`)
180
+ proven on Windows, Linux, and macOS, including an installed-package smoke
181
+ of the new bounded-agent-context projection and runtime/static
182
+ correlation exports alongside every pre-existing v0.1-v0.5 packed
183
+ behavior.
184
+
185
+ ## 0.5.0 - 2026-08-13
186
+
187
+ Executable Frontend Contracts and Explicit Change Scope.
188
+
189
+ - Two related contract classes: a `PersistentBaselineContract` (previously
190
+ approved frontend behavior that stays active across future changes unless
191
+ explicitly superseded, with append-based supersession history) and a
192
+ `PerChangeContract` (the allowed scope of one requested change).
193
+ - Four authored change-scope categories - `requested`, `expected-dependent`
194
+ (`required` or `permitted`), `protected`, `preserved` - plus a fifth,
195
+ strictly derived-only classification, `unexpected`, for a meaningful
196
+ rendered difference no active clause accounts for. `unexpected` can never
197
+ be authored as a permission.
198
+ - A closed, bounded vocabulary of 15 contract primitives (visibility,
199
+ clipping, width bounds, non-overlap, relative width, vertical sequence,
200
+ geometric fit, document-width-vs-viewport, scroll ownership, initial-
201
+ viewport position, relationship-unchanged, and property-unchanged/
202
+ increases/decreases) and three contract tolerances (`exact`,
203
+ `absolute-px`, `percent`) - independent of `compare`'s geometry tolerance,
204
+ which only suppresses insignificant noise and is never contract
205
+ authorization.
206
+ - Explicit, never-inferred baseline and per-change clause supersession; two
207
+ clauses that structurally contradict each other without explicit
208
+ supersession produce a `conflict` result rather than a silent preference.
209
+ - One canonical evaluation engine (`evaluateFrontendContract`) that owns
210
+ requested/expected-dependent/protected/preserved evaluation, unexpected-
211
+ change derivation, and the overall `PASS`/`FAIL` verdict - reusing existing
212
+ v0.4 observation/comparison evidence directly, never re-launching a
213
+ browser, re-resolving a target, or reimplementing relationship/clipping
214
+ derivation.
215
+ - Actionable per-clause results (`pass`/`fail`/`unavailable` with a required
216
+ reason/`conflict` with at least two conflicting clause identities) - never
217
+ an opaque score.
218
+ - Atomic, independently-versioned persistence for baseline contracts,
219
+ per-change contracts, and evaluation results, with no destructive artifact
220
+ overwrite, no copied screenshots, and full source observation/comparison/
221
+ contract immutability.
222
+ - Three new public commands: `approve-baseline` (the only baseline-approval
223
+ act - explicit only, never inferred from `compare` or a `PASS`
224
+ evaluation), `save-change-contract` (persistence only), and
225
+ `evaluate-contract` (runs the canonical evaluator against already-
226
+ persisted evidence and persists exactly one evaluation artifact).
227
+ `evaluate-contract --enforce` makes an already-persisted `FAIL` verdict
228
+ produce a nonzero process exit status without changing the verdict, its
229
+ identity, or its persisted content - a `FAIL` without `--enforce` still
230
+ exits `0`.
231
+ - Proven against real Chromium observations, not hand-constructed
232
+ artifacts: a fully successful contract change, and the "milestone
233
+ signature" case - a locally successful requested change coexisting with a
234
+ genuine protected-property regression and a genuine preserved-invariant
235
+ regression - producing overall `FAIL`.
236
+ - Frontend contract schema `1.0.0` and evaluation artifact schema `1.0.0`,
237
+ each its own independent schema family; observation schema remains
238
+ `1.2.0` and comparison schema remains `1.0.0`.
239
+ - Cross-platform packed-candidate validation: one hash-verified npm
240
+ candidate tarball proven on Windows, Linux, and macOS, covering the
241
+ installed candidate's `approve-baseline`, `save-change-contract`, and
242
+ `evaluate-contract` commands alongside every pre-existing v0.1-v0.4
243
+ packed observation/comparison behavior.
244
+
245
+ ## 0.4.0 - 2026-08-12
246
+
247
+ Layout Relationships, Dependency Evidence, and Before/After Comparison.
248
+
249
+ - New comparison artifact kind `my-frontend-observer/comparison`, schema
250
+ `1.0.0` - independent of and never reused for the observation schema.
251
+ - Canonical layout-relationship derivation from a single observation:
252
+ horizontal order (`left-of`/`right-of`/`horizontally-overlapping`),
253
+ vertical order (`above`/`below`/`vertically-overlapping`), area overlap,
254
+ relative width, geometric fit (kept explicitly distinct from DOM
255
+ containment), vertical sequencing (`follows-vertically`), and document-
256
+ width fit/exceeds-viewport - bounded to configured targets, with explicit
257
+ evidence-path provenance and honest unresolved-target handling.
258
+ - Comparability analysis, evaluated before any rendered difference:
259
+ `comparable` / `comparable-with-warnings` / `incomparable`, with
260
+ structured reasons (hard mismatches on page URL, viewport, browser
261
+ engine, or scroll-scenario configuration; warnings for producer/browser
262
+ version and target-configuration differences; theme/authenticated-state/
263
+ application-state recorded as unassessed, never silently equal).
264
+ - Before/after target and page differences: appeared/disappeared (never
265
+ confused with a target added/removed from configuration), moved, resized,
266
+ visibility changes, clipping changes (reusing one canonical clipping
267
+ derivation), actual horizontal/vertical dimensional-overflow changes, DOM
268
+ containment changes, page-size changes, and scroll-owner changes - each a
269
+ structured record with before/after values, deltas where meaningful, and
270
+ supporting evidence references.
271
+ - Relationship-change detection between two observations, matched by
272
+ relationship family and subject/related target (never array position),
273
+ including a `relative-position-changed` distinction from plain absolute
274
+ target movement.
275
+ - Explicit, non-causal expected-dependency evidence: a caller may declare an
276
+ expected relationship between two targets' `x`/`y`/`width`/`height`
277
+ properties and `increase`/`decrease`/`change`/`unchanged` directions; each
278
+ declaration evaluates independently to `consistent` / `not-observed` /
279
+ `contradictory-to-declaration` / `unavailable`. The observer never infers
280
+ a dependency from observed co-change and never produces a causal claim.
281
+ - Deterministic, direction-sensitive comparison identity
282
+ (`comparisonRequestId`) plus a fresh `comparisonId` per execution;
283
+ operational filesystem paths never affect identity and are never written
284
+ into the persisted manifest.
285
+ - Atomic comparison-artifact persistence: `<outputLocation>/<comparisonId>/
286
+ manifest.json` only - no screenshot bytes are copied; the manifest
287
+ retains logical references to the source observations' own
288
+ `screenshot.path`. Source observations are never modified.
289
+ - New public `compare` command: `my-frontend-observer compare --before
290
+ <observation-artifact-root> --after <observation-artifact-root> --output
291
+ <directory> [--config-file <json-file>]`. Reads two already-persisted
292
+ observation artifacts and never launches a browser. `comparable`,
293
+ `comparable-with-warnings`, and `incomparable` all persist successfully
294
+ and exit `0`; only invalid syntax, an unreadable/invalid source artifact,
295
+ invalid configuration, or a failed write exits nonzero.
296
+
297
+ ## 0.3.0 - 2026-08-12
298
+
299
+ Runtime Scrolling, Overflow, and Visibility Behavior.
300
+
301
+ - Bounded runtime scroll scenarios: an observation may configure zero or
302
+ one scroll action, `window-scroll-by` or `target-scroll-by` (signed
303
+ integer `deltaX`/`deltaY`, bounded to `[-20000, 20000]`, at least one
304
+ non-zero). Not a generic interaction recorder or browser automation
305
+ framework - exactly one bounded action per observation.
306
+ - Real `window-scroll-by` execution: vertical and horizontal document
307
+ scrolling, with browser-authoritative (not calculated) final position,
308
+ including natural boundary clamping and valid no-movement scenarios.
309
+ - Real `target-scroll-by` execution against the existing stable configured
310
+ target identity and the same canonical target-resolution path every
311
+ locator kind already uses: real nested vertical/horizontal element
312
+ scrolling, boundary clamping, and non-scrollable/no-movement targets. An
313
+ action target that cannot be uniquely resolved at runtime is never
314
+ scrolled and never fabricated as moved - the existing target-missing/
315
+ target-ambiguous/target-hidden diagnostics explain it honestly.
316
+ - Initial/final bounded runtime snapshots (window scroll position, the
317
+ browser's own scrolling-root/`documentElement`/`body` metrics, and
318
+ per-configured-target scroll metrics) around an immediate, non-smooth
319
+ scroll action and an exact two-`requestAnimationFrame` stabilization
320
+ wait.
321
+ - Actual dimensional overflow (`scrollWidth`/`scrollHeight` vs.
322
+ `clientWidth`/`clientHeight`) kept explicitly distinct from the computed
323
+ `overflow-x`/`overflow-y` CSS declaration.
324
+ - Real viewport-relation evidence (`above`/`intersecting`/`below`,
325
+ `intersectsViewport`, `fullyWithinViewport`) and `enteredViewport`/
326
+ `leftViewport` scenario transitions; a hidden/non-rendered target's
327
+ viewport relation is honestly `not-applicable`, never fabricated
328
+ geometry - hidden and offscreen remain distinct.
329
+ - Bounded before/after scenario transition evidence for window and
330
+ per-target scroll position, geometry, and viewport relation - not a
331
+ generic comparison/diff engine.
332
+ - Derived scroll-owner interpretation (`document` /
333
+ `target:<stable-target-name>` / `none` / `indeterminate`), always
334
+ traceable (`derivedFrom`) to the underlying observed scroll-position
335
+ measurements only - never from CSS overflow, bounding-rectangle movement
336
+ alone, target name, or DOM hierarchy.
337
+ - New `--scroll-scenario-file <json-file>` CLI input, usable together with
338
+ either `--target` or `--targets-file`; the file path is operational input
339
+ only, never persisted and never part of request identity, exactly like
340
+ `--targets-file`'s path.
341
+ - Observation schema `1.2.0` (additive over `1.1.0`).
342
+ - Cross-platform packed-candidate validation: one hash-verified npm
343
+ candidate tarball proven on Windows, Linux, and macOS, covering the
344
+ legacy `--target` CSS shorthand, the structured `--targets-file`
345
+ semantic-target path, and both `--scroll-scenario-file` action kinds.
346
+
347
+ ## 0.2.0 - 2026-08-11
348
+
349
+ Stable Semantic Targets and Region Identity.
350
+
351
+ - Canonical `{name, locators}` target model with a stable observer-owned
352
+ target identity, distinct from both the browser locator that resolves a
353
+ target and any source-code symbol. The existing `--target id=selector`
354
+ CSS shorthand remains fully supported and normalizes into this model
355
+ unchanged.
356
+ - Six frozen, real-Chromium-resolved locator kinds per target, evaluated in
357
+ configured order with fallback on no match, immediate stop (no fallback)
358
+ on ambiguous or unevaluable results: `role` (+ optional exact accessible
359
+ name), `id`, `data-attribute`, `semantic-element`, `css`, and `text`
360
+ (exact match only).
361
+ - Explicit missing/ambiguous/unavailable resolution reporting, and hidden
362
+ (present-but-not-visible) target evidence, for every locator kind.
363
+ - Bounded semantic-region evidence per resolved target: accessibility
364
+ state (`disabled`/`expanded`/`checked`/`selected`/`pressed`/`current`,
365
+ with an explicit `false` always distinguishable from "not applicable"),
366
+ derived landmark identity, and configured-target-only DOM containment.
367
+ - Proven stable request identity: the same target configuration produces
368
+ the same request identity across repeated observations; changing a
369
+ target's locator strategy changes the request identity without changing
370
+ its stable name; a target's actual runtime disappearance is
371
+ distinguishable from a configuration change.
372
+ - New `--targets-file <json-file>` CLI input for structured semantic target
373
+ configuration, mutually exclusive with `--target`.
374
+ - Observation schema `1.1.0`.
375
+ - Cross-platform packed-candidate validation: one hash-verified npm
376
+ candidate tarball proven on Windows, Linux, and macOS, covering both the
377
+ legacy `--target` CSS shorthand and the structured `--targets-file`
378
+ semantic-target path.
379
+
380
+ ## 0.1.0 - 2026-08-11
381
+
382
+ Runtime Observation Foundation. First public release.
383
+
384
+ - Local-first browser runtime evidence producer: a real `observe` CLI command
385
+ that launches Chromium under a loopback-only network safety policy.
386
+ - Explicit CSS-selector observation targets (`--target id=selector`,
387
+ repeatable).
388
+ - Viewport screenshot capture (`screenshot.png`).
389
+ - Bounded page evidence and bounded target evidence, with honest
390
+ unavailable/not-applicable/partial states when evidence cannot be
391
+ determined rather than guessing.
392
+ - Loopback/network safety enforcement (`http`/`https`, `localhost`/`127.x.x.x`/
393
+ `::1` only).
394
+ - Versioned, portable observation artifact: `manifest.json` + `screenshot.png`
395
+ written atomically per observation, artifact schema `1.0.0`.
396
+ - Validated as a packed npm tarball with a clean-consumer install-and-observe
397
+ smoke on Windows, Linux, and macOS.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Dai Le
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,255 @@
1
+ # my-frontend-observer
2
+
3
+ ## Common project workflow (v0.8.1)
4
+
5
+ ```powershell
6
+ my-frontend-observer init --url http://127.0.0.1:3000 --target app=#app
7
+ my-frontend-observer capture baseline
8
+
9
+ # make a frontend change
10
+ my-frontend-observer check baseline
11
+
12
+ # inspect canonical evidence and provenance
13
+ my-frontend-observer view
14
+ ```
15
+
16
+ `check baseline --json` returns bounded coding-agent evidence and exits `0`,
17
+ `1`, `2`, or `3` for `PASS`, `FAIL`, `REVIEW_REQUIRED`, or `BLOCKED`.
18
+ Canonical hashes remain available in viewer details and persisted provenance,
19
+ but are not normal workflow command inputs. The existing low-level commands
20
+ remain supported. v0.8.1 is the current published release.
21
+
22
+ `my-frontend-observer` is the local-first rendered browser/runtime evidence
23
+ producer in the my-dev-kit ecosystem. Its durable product purpose is defined
24
+ in [docs/PROJECT_DESCRIPTION.md](docs/PROJECT_DESCRIPTION.md).
25
+
26
+ ## Current status
27
+
28
+ `v0.8.1`, Project Workflow CLI and Human-Readable Evidence Aliases, is the
29
+ current published release. It builds on `v0.8.0`, Interactive Local Observation
30
+ Viewer, and `v0.7.0`, End-to-End Coding-Agent Frontend Change
31
+ Review, `v0.6.0`, Bounded Agent Context and Native my-dev-kit Ecosystem
32
+ Integration, and `v0.5.0`, Executable Frontend Contracts and Explicit Change
33
+ Scope: `my-frontend-observer observe` launches a real,
34
+ sandboxed Chromium browser, enforces a loopback-only safety policy, captures
35
+ a viewport screenshot plus bounded page/target evidence, and persists it as
36
+ one portable `manifest.json` + `screenshot.png` artifact (observation schema
37
+ `1.2.0`). `my-frontend-observer compare` reads two already-persisted
38
+ observation artifacts and derives before/after evidence purely from their
39
+ existing content, persisting a comparison artifact (comparison schema
40
+ `1.0.0`). `my-frontend-observer approve-baseline`, `save-change-contract`,
41
+ and `evaluate-contract` turn that evidence into an executable frontend
42
+ contract: an explicitly approved baseline plus a per-change contract
43
+ (requested/expected-dependent/protected/preserved scope) are evaluated
44
+ together into one `PASS`/`FAIL` verdict, so a locally successful requested
45
+ change can never silently hide a protected-region regression (frontend
46
+ contract schema `1.0.0`; evaluation artifact schema `1.0.0`).
47
+
48
+ Install:
49
+
50
+ ```powershell
51
+ npm install --save-dev @dailephd/my-frontend-observer
52
+ npx playwright install chromium
53
+ ```
54
+
55
+ Setup for working from a source checkout instead:
56
+
57
+ ```powershell
58
+ npm install
59
+ npx playwright install chromium
60
+ npm run build
61
+ ```
62
+
63
+ Example use, against your own locally running frontend:
64
+
65
+ ```powershell
66
+ my-frontend-observer observe `
67
+ --url http://localhost:3000/ `
68
+ --viewport 1280x720 `
69
+ --target header=header `
70
+ --target main-content=main `
71
+ --output observations
72
+ ```
73
+
74
+ (From a source checkout, use `node dist/cli.js observe ...` instead.)
75
+
76
+ This prints a concise result (`Observation:`/`State:`/`Artifact:`/`Targets:`/
77
+ `Diagnostics:`) and exits `0` on a successfully persisted observation. See
78
+ [docs/COMMANDS.md](docs/COMMANDS.md) for the full flag reference.
79
+
80
+ `--target <id=css-selector>` remains the simple CSS shorthand. A structured
81
+ `--targets-file <json-file>` input mode - supporting a role and accessible
82
+ name, a stable `id`, a `data-*` attribute, a semantic landmark element,
83
+ exact text, or an ordered fallback between several of those - ships
84
+ alongside it. See "Structured semantic targets" in
85
+ [docs/COMMANDS.md](docs/COMMANDS.md#structured-semantic-targets-targets-file)
86
+ for the exact JSON format.
87
+
88
+ ### Runtime scroll scenarios
89
+
90
+ `--scroll-scenario-file <json-file>` ships in this release: a real, bounded
91
+ `window-scroll-by` or `target-scroll-by` action performs one immediate,
92
+ non-smooth scroll and captures initial/final runtime evidence - window and
93
+ configured-target scroll position, actual overflow, viewport relation,
94
+ entered/left-viewport transitions, and a derived scroll-owner
95
+ interpretation (`document`, `target:<stable-target-name>`, `none`, or
96
+ `indeterminate`), all persisted in the same `manifest.json`. It may be
97
+ combined with either `--target` or `--targets-file`. See "Scroll scenario"
98
+ in
99
+ [docs/COMMANDS.md](docs/COMMANDS.md#scroll-scenario---scroll-scenario-file)
100
+ for the exact JSON format and flag reference.
101
+
102
+ ### Comparison
103
+
104
+ `my-frontend-observer compare` reads two already-persisted observation
105
+ artifacts and derives before/after evidence purely from their existing
106
+ content - it never launches a browser:
107
+
108
+ ```powershell
109
+ my-frontend-observer compare `
110
+ --before observations/<before-observation-id> `
111
+ --after observations/<after-observation-id> `
112
+ --output comparisons
113
+ ```
114
+
115
+ (From a source checkout, use `node dist/cli.js compare ...` instead.)
116
+
117
+ This prints a concise result (`Comparison:`/`State:`/`Artifact:`/
118
+ `Differences:`/`Relationship changes:`/`Diagnostics:`) and exits `0` -
119
+ including when the two observations turn out to be `incomparable`, which is
120
+ itself a successful comparison outcome. See
121
+ [docs/COMMANDS.md](docs/COMMANDS.md) for the full flag reference.
122
+
123
+ ### Frontend contracts
124
+
125
+ `v0.5.0` ships a text/config-driven frontend contract and evaluation
126
+ workflow: approve a baseline against an observation, save a per-change
127
+ contract, then evaluate a candidate change against them plus existing
128
+ before/after/comparison evidence, deriving one `PASS`/`FAIL` verdict:
129
+
130
+ ```powershell
131
+ my-frontend-observer approve-baseline --observation observations/<id> --contract-file baseline.json --output baselines
132
+ my-frontend-observer save-change-contract --contract-file change.json --output contracts
133
+ my-frontend-observer evaluate-contract --before observations/<before-id> --after observations/<after-id> --comparison comparisons/<id> --baseline baselines/<baseline-id> --change contracts/<contract-id> --output evaluations [--enforce]
134
+ ```
135
+
136
+ (From a source checkout, use `node dist/cli.js approve-baseline ...` etc.
137
+ instead.)
138
+
139
+ `evaluate-contract` never launches a browser or recomputes comparison
140
+ evidence. `--enforce` only changes the process exit status for a `FAIL`
141
+ verdict; the verdict itself, and its persisted evidence, are unaffected. See
142
+ [docs/COMMANDS.md](docs/COMMANDS.md) for the full flag reference and
143
+ [docs/WORKFLOWS.md](docs/WORKFLOWS.md) for the end-to-end flow.
144
+
145
+ ### Bounded agent context (v0.6.0)
146
+
147
+ `src/domain/boundedAgentContext.ts`, `boundedAgentContextProjection.ts`,
148
+ `boundedAgentContextCorrelation.ts`, and `boundedAgentContextIdentity.ts`
149
+ ship a programmatic (library-only, no CLI command) bounded runtime
150
+ projection and an explicit runtime/static correlation boundary
151
+ (`correlated`/`ambiguous`/`unavailable`, never inferred source ownership),
152
+ exported from `src/index.ts` (bounded-agent-context schema `1.0.0`). See
153
+ [docs/CONTRACTS.md](docs/CONTRACTS.md) for the exact contract and
154
+ [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for how it fits the existing
155
+ pipeline.
156
+
157
+ ### External-reference correction workflow (v0.7.0)
158
+
159
+ `import-reference` and
160
+ `approve-reference` persist an externally supplied design-reference image
161
+ (with optional regions, selected requirements/tolerances, and applicability
162
+ state); `evaluate-reference-fidelity --reference --candidate
163
+ [--bindings-file] [--enforce]` compares an already-persisted candidate
164
+ observation against it, gated by reference adequacy, reference/candidate
165
+ compatibility, and explicit region-to-target bindings:
166
+
167
+ ```powershell
168
+ my-frontend-observer import-reference design.png --output references --regions-file regions.json --requirements-file requirements.json --applicability-file applicability.json
169
+ my-frontend-observer approve-reference --reference references/<id> --output references
170
+ my-frontend-observer evaluate-reference-fidelity --reference references/<approved-id> --candidate observations/<id> --bindings-file bindings.json
171
+ ```
172
+
173
+ (From a source checkout, use `node dist/cli.js import-reference ...` etc.
174
+ instead.)
175
+
176
+ `import-reference`/`approve-reference`/`evaluate-reference-fidelity` never
177
+ launch a browser or edit any file outside their own declared output
178
+ location; `evaluate-reference-fidelity` persists nothing. A programmatic,
179
+ library-only correction-workflow coordinator
180
+ (`prepareReferenceCorrection`/`reviewReferenceCorrectionAttempt`, exported
181
+ from `src/index.ts`, no CLI command) composes the full cycle - reference
182
+ fidelity (reused unchanged) plus canonical v0.4 comparison and v0.5 contract
183
+ evaluation - into one overall result: matching the reference is necessary
184
+ but never sufficient, so a candidate that visually satisfies the reference
185
+ while regressing an active protected/preserved contract clause still
186
+ resolves to overall `FAIL`. my-frontend-observer never edits target source
187
+ itself; an external implementation actor (a human or a coding agent, never
188
+ this package) makes the actual source change between review attempts. See
189
+ [docs/CONTRACTS.md](docs/CONTRACTS.md) and
190
+ [docs/WORKFLOWS.md](docs/WORKFLOWS.md) for the exact contract and workflow,
191
+ and [docs/CURRENT_STATE.md](docs/CURRENT_STATE.md) for the full
192
+ implementation record.
193
+
194
+ ### Interactive local viewer (v0.8.0)
195
+
196
+ `my-frontend-observer view [--root <evidence-root>] [--bindings-file <json-file>] [--context-file <json-file>] [--port <n>] [--no-open]`
197
+ starts a loopback-only (`127.0.0.1`) Node server that serves a React +
198
+ TypeScript + Vite viewer application - usable in a normal browser or as an
199
+ installed Progressive Web App - over the same evidence root used by every
200
+ other command above. It never edits target source, never mutates any
201
+ evidence artifact, and never runs `@dailephd/my-dev-kit`:
202
+
203
+ ```powershell
204
+ # In an initialized project, use managed evidence and aliases.
205
+ my-frontend-observer view --port 4319 --no-open
206
+
207
+ # `--root` remains the standalone/advanced form.
208
+ my-frontend-observer view --root observations --port 4319 --no-open
209
+ ```
210
+
211
+ (From a source checkout, use `node dist/cli.js view ...` instead.)
212
+
213
+ ## License
214
+
215
+ MIT. See [LICENSE](LICENSE).
216
+
217
+ The viewer shows observation screenshots and SVG target overlays,
218
+ before/after comparisons and contract/change-scope results, approved
219
+ external references beside candidate observations with explicit binding
220
+ cross-selection and on-demand fidelity evaluation, and - when
221
+ `--context-file` supplies one - a read-only inspection of a bounded agent
222
+ context's adequacy, omissions/truncations, and runtime/static correlation.
223
+ Both `--bindings-file` and `--context-file` are explicit, session-only
224
+ input: read once at startup, held only in server memory, never persisted,
225
+ and never exposed as a filesystem path to the browser. See
226
+ [docs/COMMANDS.md](docs/COMMANDS.md#view) for the full flag reference and
227
+ [docs/WORKFLOWS.md](docs/WORKFLOWS.md) for the viewer workflow.
228
+
229
+ See [docs/CURRENT_STATE.md](docs/CURRENT_STATE.md) for the exact current
230
+ implementation and release state.
231
+
232
+ Validation:
233
+
234
+ ```powershell
235
+ npm run typecheck
236
+ npm run lint
237
+ npm test
238
+ npm run test:browser
239
+ npm run test:security
240
+ npm run build
241
+ npm run check:docs
242
+ ```
243
+
244
+ Planning authorities:
245
+
246
+ - [Project Description](docs/PROJECT_DESCRIPTION.md): complete durable product
247
+ intent and responsibility boundaries.
248
+ - [Project Milestones](docs/PROJECT_MILESTONES.md): complete ordered capability
249
+ design and cross-milestone rules.
250
+ - [ROADMAP](docs/ROADMAP.md): version-level requirements; v0.1-v0.8 are
251
+ released; v0.9+ remain future.
252
+ - [Current State](docs/CURRENT_STATE.md): retained scaffold and release state.
253
+
254
+ No sibling ecosystem repository is a runtime dependency of the retained
255
+ foundation.