@dailephd/my-frontend-observer 0.9.1 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/CHANGELOG.md +490 -471
  2. package/LICENSE +21 -21
  3. package/README.md +375 -357
  4. package/dist/application/projectCheckService.d.ts +6 -0
  5. package/dist/application/projectCheckService.js +8 -1
  6. package/dist/application/projectCheckService.js.map +1 -1
  7. package/dist/application/projectWorkflowService.d.ts +7 -2
  8. package/dist/application/projectWorkflowService.js +10 -3
  9. package/dist/application/projectWorkflowService.js.map +1 -1
  10. package/dist/application/visualChangeAgentHandoffService.d.ts +28 -0
  11. package/dist/application/visualChangeAgentHandoffService.js +111 -0
  12. package/dist/application/visualChangeAgentHandoffService.js.map +1 -0
  13. package/dist/application/visualChangeProjectWorkflowService.d.ts +95 -0
  14. package/dist/application/visualChangeProjectWorkflowService.js +376 -0
  15. package/dist/application/visualChangeProjectWorkflowService.js.map +1 -0
  16. package/dist/application/visualChangeReviewService.d.ts +50 -0
  17. package/dist/application/visualChangeReviewService.js +69 -0
  18. package/dist/application/visualChangeReviewService.js.map +1 -0
  19. package/dist/application/visualChangeWorkflowPersistenceService.d.ts +26 -0
  20. package/dist/application/visualChangeWorkflowPersistenceService.js +15 -0
  21. package/dist/application/visualChangeWorkflowPersistenceService.js.map +1 -0
  22. package/dist/artifacts/visualChangeWorkflowArtifactReader.d.ts +9 -0
  23. package/dist/artifacts/visualChangeWorkflowArtifactReader.js +47 -0
  24. package/dist/artifacts/visualChangeWorkflowArtifactReader.js.map +1 -0
  25. package/dist/artifacts/visualChangeWorkflowArtifactWriter.d.ts +20 -0
  26. package/dist/artifacts/visualChangeWorkflowArtifactWriter.js +41 -0
  27. package/dist/artifacts/visualChangeWorkflowArtifactWriter.js.map +1 -0
  28. package/dist/cli.js +9 -7
  29. package/dist/cli.js.map +1 -1
  30. package/dist/domain/visualChangeAgentHandoff.d.ts +82 -0
  31. package/dist/domain/visualChangeAgentHandoff.js +80 -0
  32. package/dist/domain/visualChangeAgentHandoff.js.map +1 -0
  33. package/dist/domain/visualChangeAgentHandoffSerialization.d.ts +2 -0
  34. package/dist/domain/visualChangeAgentHandoffSerialization.js +11 -0
  35. package/dist/domain/visualChangeAgentHandoffSerialization.js.map +1 -0
  36. package/dist/domain/visualChangeCycle.d.ts +8 -0
  37. package/dist/domain/visualChangeCycle.js +7 -0
  38. package/dist/domain/visualChangeCycle.js.map +1 -0
  39. package/dist/domain/visualChangeWorkflow.d.ts +125 -0
  40. package/dist/domain/visualChangeWorkflow.js +109 -0
  41. package/dist/domain/visualChangeWorkflow.js.map +1 -0
  42. package/dist/domain/visualChangeWorkflowIdentity.d.ts +5 -0
  43. package/dist/domain/visualChangeWorkflowIdentity.js +24 -0
  44. package/dist/domain/visualChangeWorkflowIdentity.js.map +1 -0
  45. package/dist/index.d.ts +21 -1
  46. package/dist/index.js +12 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/projectWorkflow/projectPaths.d.ts +3 -0
  49. package/dist/projectWorkflow/projectPaths.js +7 -0
  50. package/dist/projectWorkflow/projectPaths.js.map +1 -1
  51. package/dist/viewer/assets/index-DglJ6f28.css +1 -0
  52. package/dist/viewer/assets/index-DsODREY5.js +9 -0
  53. package/dist/viewer/index.html +15 -15
  54. package/dist/viewer/sw.js +1 -1
  55. package/dist/viewerServer/evidence/classify.d.ts +3 -1
  56. package/dist/viewerServer/evidence/classify.js +10 -0
  57. package/dist/viewerServer/evidence/classify.js.map +1 -1
  58. package/dist/viewerServer/evidence/handles.js +1 -0
  59. package/dist/viewerServer/evidence/handles.js.map +1 -1
  60. package/dist/viewerServer/evidence/projection.d.ts +5 -0
  61. package/dist/viewerServer/evidence/projection.js +19 -0
  62. package/dist/viewerServer/evidence/projection.js.map +1 -1
  63. package/dist/viewerServer/evidence/visualChangeWorkflowView.d.ts +31 -0
  64. package/dist/viewerServer/evidence/visualChangeWorkflowView.js +36 -0
  65. package/dist/viewerServer/evidence/visualChangeWorkflowView.js.map +1 -0
  66. package/dist/viewerServer/httpServer.js +323 -1
  67. package/dist/viewerServer/httpServer.js.map +1 -1
  68. package/dist/viewerServer/referenceApproval.d.ts +22 -0
  69. package/dist/viewerServer/referenceApproval.js +42 -0
  70. package/dist/viewerServer/referenceApproval.js.map +1 -0
  71. package/dist/viewerServer/referenceVisualChangeAuthoring.d.ts +28 -0
  72. package/dist/viewerServer/referenceVisualChangeAuthoring.js +134 -0
  73. package/dist/viewerServer/referenceVisualChangeAuthoring.js.map +1 -0
  74. package/dist/viewerServer/runtimeVisualChangeAuthoring.d.ts +33 -0
  75. package/dist/viewerServer/runtimeVisualChangeAuthoring.js +81 -0
  76. package/dist/viewerServer/runtimeVisualChangeAuthoring.js.map +1 -0
  77. package/dist/viewerServer/visualChangeAuthoring.d.ts +46 -0
  78. package/dist/viewerServer/visualChangeAuthoring.js +63 -0
  79. package/dist/viewerServer/visualChangeAuthoring.js.map +1 -0
  80. package/dist/viewerServer/visualChangeHandoff.d.ts +23 -0
  81. package/dist/viewerServer/visualChangeHandoff.js +31 -0
  82. package/dist/viewerServer/visualChangeHandoff.js.map +1 -0
  83. package/dist/viewerServer/visualChangeReview.d.ts +30 -0
  84. package/dist/viewerServer/visualChangeReview.js +46 -0
  85. package/dist/viewerServer/visualChangeReview.js.map +1 -0
  86. package/docs/ARCHITECTURE.md +1394 -1373
  87. package/docs/CI_CD.md +349 -327
  88. package/docs/COMMANDS.md +1035 -1012
  89. package/docs/CONTRACTS.md +1971 -1926
  90. package/docs/CURRENT_STATE.md +1277 -1238
  91. package/docs/DEVELOPMENT.md +240 -237
  92. package/docs/DOCUMENTATION_PRESERVATION_POLICY.md +50 -50
  93. package/docs/PROJECT_DESCRIPTION.md +2248 -2224
  94. package/docs/PROJECT_MILESTONES.md +2681 -2558
  95. package/docs/PROJECT_OVERVIEW.md +200 -191
  96. package/docs/QUICKSTART.md +100 -96
  97. package/docs/RELEASE.md +37 -33
  98. package/docs/ROADMAP.md +1105 -1033
  99. package/docs/SECURITY.md +297 -275
  100. package/docs/WORKFLOWS.md +806 -770
  101. package/docs/plans/v0.10-implementation-plan.md +1509 -0
  102. package/docs/plans/v0.8-implementation-plan.md +655 -655
  103. package/docs/plans/v0.8.1-cli-usability-patch-plan.md +505 -505
  104. package/docs/plans/v0.9-implementation-plan.md +1529 -1529
  105. package/docs/plans/v0.9.1-implementation-plan.md +468 -468
  106. package/docs/reports/v0.10-batch1-visual-change-workflow-foundation.md +102 -0
  107. package/docs/reports/v0.10-batch2-project-composition-check-recording.md +103 -0
  108. package/docs/reports/v0.10-batch3-viewer-visual-change-workspace.md +93 -0
  109. package/docs/reports/v0.10-batch4-actual-frontend-entry.md +59 -0
  110. package/docs/reports/v0.10-batch5-reference-driven-entry.md +238 -0
  111. package/docs/reports/v0.10-batch6-coding-agent-handoff.md +85 -0
  112. package/docs/reports/v0.10-batch7-correction-review-acceptance.md +145 -0
  113. package/docs/reports/v0.10-batch8-integrated-acceptance.md +109 -0
  114. package/docs/reports/v0.10-implementation-completeness-documentation-reconciliation.md +344 -0
  115. package/docs/reports/v0.10-pre-release-readiness.md +120 -0
  116. package/docs/reports/v0.10-release-preparation.md +70 -0
  117. package/docs/reports/v0.10.1-project-check-baseline-context-implementation.md +86 -0
  118. package/docs/reports/v0.7-bounded-fidelity-context-prompt7.md +243 -243
  119. package/docs/reports/v0.7-implementation-completeness-documentation-reconciliation.md +497 -497
  120. package/docs/reports/v0.7-pre-release-readiness.md +337 -337
  121. package/docs/reports/v0.7-reference-binding-prompt5.md +223 -223
  122. package/docs/reports/v0.7-reference-compatibility-prompt4.md +234 -234
  123. package/docs/reports/v0.7-reference-correction-workflow-prompt8.md +222 -222
  124. package/docs/reports/v0.7-reference-fidelity-prompt6.md +216 -216
  125. package/docs/reports/v0.7-reference-foundation-prompt1.md +151 -151
  126. package/docs/reports/v0.7-reference-regions-prompt2.md +195 -195
  127. package/docs/reports/v0.7-reference-requirements-prompt3.md +217 -217
  128. package/docs/reports/v0.7-release-prep.md +423 -423
  129. package/docs/reports/v0.8-binding-fidelity-interaction-batch6.md +279 -279
  130. package/docs/reports/v0.8-bounded-context-correlation-batch7.md +233 -233
  131. package/docs/reports/v0.8-comparison-contract-inspection-batch4.md +279 -279
  132. package/docs/reports/v0.8-evidence-index-readers-batch2.md +247 -247
  133. package/docs/reports/v0.8-implementation-completeness-documentation-reconciliation.md +741 -741
  134. package/docs/reports/v0.8-integrated-viewer-acceptance-batch8.md +128 -128
  135. package/docs/reports/v0.8-observation-svg-inspection-batch3.md +223 -223
  136. package/docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md +687 -687
  137. package/docs/reports/v0.8-reference-candidate-inspection-batch5.md +232 -232
  138. package/docs/reports/v0.8-viewer-runtime-pwa-batch1.md +278 -278
  139. package/docs/reports/v0.8.1-implementation-completeness-documentation-reconciliation.md +114 -114
  140. package/docs/reports/v0.8.1-prerelease-readiness-cross-platform-security-code-rot.md +170 -170
  141. package/docs/reports/v0.9-architecture-retrieval.md +14 -37
  142. package/docs/reports/v0.9-final-pre-release-readiness.md +209 -209
  143. package/docs/reports/v0.9-final-readiness-corrections.md +530 -530
  144. package/docs/reports/v0.9-pre-release-readiness.md +169 -169
  145. package/docs/reports/v0.9.1-batch1-pwa-hard-gate-isolation.md +359 -359
  146. package/docs/reports/v0.9.1-batch2-hard-gate-validation-integration.md +262 -262
  147. package/docs/reports/v0.9.1-pre-release-readiness.md +206 -206
  148. package/package.json +59 -59
  149. package/dist/viewer/assets/index-BN41MI7m.css +0 -1
  150. package/dist/viewer/assets/index-CkKXnlrI.js +0 -9
package/CHANGELOG.md CHANGED
@@ -1,471 +1,490 @@
1
- # Changelog
2
-
3
- ## [Unreleased]
4
-
5
- Future development.
6
-
7
- ## 0.9.1 - 2026-09-21
8
-
9
- Hardened PWA security-acceptance reproducibility as a maintenance release.
10
-
11
- - Hardened the PWA server-down HARD GATE from fresh test-owned state, removing
12
- hidden dependence on prior test order and persistent Chromium profile state.
13
- - Corrected the false-ready service-worker predicate and separately proved
14
- active registration and current-client control.
15
- - Proved shell-cache readiness, `/api/` exclusion from Cache Storage,
16
- origin-server unavailability, offline shell reload, and stale-evidence
17
- absence.
18
- - Added permanent `npm run test:pwa-hard-gate` and integrated it into
19
- `npm run test:security`.
20
- - No production PWA behavior, schema, or dependency changed.
21
-
22
- ## 0.9.0 - 2026-09-21
23
-
24
- v0.9, Human Visual Annotation and Design-Intent Capture. Structured visual
25
- annotation through the existing viewer. Drawing is evidence, not meaning:
26
- association, confirmation, promotion, materialization, activation and approval
27
- each remain separate, explicit steps.
28
-
29
- - Added the `VisualAnnotationArtifact` evidence family (schema `1.0.0`) with
30
- deterministic identity, an atomic writer, a canonical reader, a persistence
31
- service, and a derived annotation overlay SVG. Every save is an immutable
32
- revision with stale-parent conflict detection.
33
- - Added runtime observation annotation in runtime CSS pixels and external
34
- reference annotation in reference-image pixels, with five mark kinds (point,
35
- rectangle, line, arrow and note), Select and Pan modes, zoom, and keyboard
36
- selection.
37
- - Added explicit associations in each source domain: a runtime target, a
38
- runtime relationship, or a reference region. Where a mark is drawn never
39
- decides what it is about.
40
- - Added candidate and confirmed interpretation. Changing a confirmed meaning
41
- withdraws its confirmation.
42
- - Added runtime operations `inspect`, `move`, `resize`, `remove` and
43
- `preserve`, and authored categories `requested`, `expected-dependent`,
44
- `protected` and `preserved`. `unexpected` is concluded by comparison, never
45
- authored.
46
- - Added promotion of selected confirmed runtime `move`, `resize` and
47
- `preserve` intent into a canonical per-change frontend contract. Promotion
48
- does not activate the contract; project activation is a separate, optional,
49
- explicit choice. Confirmed `remove` intent stays non-promotable because the
50
- contract vocabulary has no target-absent primitive, and `inspect` is never a
51
- clause.
52
- - Added reference-region create and refine intent, and property, relationship
53
- and measurement reference requirements.
54
- - Added materialization of selected confirmed reference intent into a new
55
- imported external-reference revision that supersedes its source. The source
56
- reference is never modified, and the new revision is not approved
57
- automatically.
58
- - Added a project-aware local authoring boundary: a 32-byte in-memory session
59
- capability, strict Host and Origin checks, JSON-only bounded request bodies,
60
- and one serialized write queue. `view --root` stays read-only.
61
- - Added three authoring routes: `POST /api/annotations`,
62
- `POST /api/annotations/:handle/promote-contract`, and
63
- `POST /api/annotations/:handle/materialize-reference`. The viewer protocol
64
- is now `1.3.0`.
65
- - Added viewer discovery of visual annotations, a source-resolving annotation
66
- view route, and a verified, script-blocking overlay media role.
67
- - Evidence discovery now skips writer temporary `.tmp-*` directories.
68
- - Fixed viewer shutdown stalling while a browser or service worker held a
69
- connection open. Closing the viewer now also ends active connections.
70
- - Added an integrated real-Chromium acceptance suite and a packed installed
71
- v0.9 annotation smoke to the cross-platform pre-release readiness workflow.
72
- - The repository gained a deterministic demo and four tutorials under
73
- `examples/v09-demo/`, proved end to end with the external tool
74
- `@dailephd/my-dev-kit-lab@0.4.9`. The demo is repository material only: it is
75
- not in the npm package, and my-dev-kit-lab is not an Observer dependency.
76
- - Final pre-release readiness passed on Windows, Linux and macOS against one
77
- exact candidate package, including all four tutorials.
78
-
79
- ## 0.8.1 - 2026-09-15
80
-
81
- Project workflow release for `my-frontend-observer`.
82
-
83
- - Added the managed `init`, `capture`, `check`, and project-aware `view`
84
- workflow with human-readable aliases and immutable canonical evidence.
85
- - Added `PASS`, `FAIL`, `REVIEW_REQUIRED`, and `BLOCKED` check outcomes plus a
86
- bounded `check --json` interface for coding agents.
87
- - Added current-candidate history and reuse of canonical frontend-contract and
88
- approved-reference fidelity evaluation.
89
- - Added alias-first viewer navigation with canonical IDs retained in details
90
- and provenance.
91
- - Completed cross-platform, security, and installed-package validation.
92
- - Published the npm package as `@dailephd/my-frontend-observer` and added the
93
- MIT license.
94
-
95
- ## 0.8.0 - 2026-09-10
96
-
97
- Interactive Local Observation Viewer.
98
-
99
- - New `view` command: starts a loopback-only (`127.0.0.1`) Node server
100
- serving a React + TypeScript + Vite viewer application, usable in a normal
101
- browser or as an installed Progressive Web App, over an existing evidence
102
- root (`--root`). Metadata-first evidence discovery and on-demand
103
- artifact/media loading; never mutates target source or any Observer
104
- evidence artifact.
105
- - Observation inspection: screenshot plus SVG target overlays, geometry,
106
- semantics, visibility/overflow/scroll evidence, and on-demand layout
107
- relationships.
108
- - Comparison/contract inspection: before/after side-by-side views and
109
- contract/change-scope evaluation results, including the required
110
- protected/preserved-failure safety case (a locally successful requested
111
- change alongside a genuine protected/preserved regression, shown as
112
- overall `FAIL`).
113
- - External reference/candidate inspection: reference image and region
114
- overlays, explicit (never auto-selected) candidate selection,
115
- reference/candidate compatibility and applicability.
116
- - Explicit reference-region/runtime-target binding cross-selection
117
- (`--bindings-file`), independent bounded zoom/pan, conditional view lock,
118
- and on-demand reference-fidelity evaluation shown independently alongside
119
- any selected contract evaluation.
120
- - Bounded agent context inspection (`--context-file`): session-only display
121
- of context identity, adequacy, omissions/truncations, and runtime/static
122
- correlation, plus safe raw-evidence navigation. The viewer never rebuilds
123
- a bounded context or its correlation and never runs `@dailephd/my-dev-kit`.
124
- - PWA hardening: real service-worker registration, an application-shell
125
- precache that excludes `/api/` routes, and a proven server-down behavior
126
- that never presents stale evidence as current.
127
- - No second evidence engine: every canonical result the viewer displays is
128
- produced by the same single engine the CLI uses, called from at most one
129
- designated server-side call site.
130
- - Security hardening found during pre-release readiness: the viewer's media
131
- route now rejects any evidence filename that is itself a symlink/junction
132
- pointing outside the evidence root, instead of following it.
133
- - Cross-platform packed-candidate validation: the pre-version-bump
134
- implementation candidate tarball `my-frontend-observer-0.7.0.tgz`
135
- (SHA-256 `b80729bc64b3b01378effd2b8aa3b7743ccedc46b3148ba0b1ff1ae5a4b68c55`)
136
- was hash-verified and proven on Windows, Linux, and macOS, including an
137
- installed-package smoke of the new `view` command (loopback binding,
138
- read-only API, path containment, SVG overlay/media, service-worker
139
- registration, the PWA no-authoritative-cache boundary, and the
140
- server-down stale-evidence hard gate) alongside every pre-existing
141
- v0.1-v0.7 packed behavior, before this release's version bump - see
142
- `docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md`.
143
-
144
- ## 0.7.0 - 2026-09-06
145
-
146
- End-to-End Coding-Agent Frontend Change Review.
147
-
148
- - External-reference artifact and lifecycle: `import-reference`/
149
- `approve-reference` persist an externally supplied PNG/JPEG/WebP
150
- design-reference image (header-only format/dimension detection - no
151
- decode, no OCR, no computer vision) through an explicit two-state
152
- (`imported`/`approved`) lifecycle. Supersession is represented only as a
153
- forward pointer to a newer artifact - an existing persisted artifact's own
154
- manifest is never rewritten.
155
- - Explicit reference regions and geometry relationships: user/configuration-
156
- authored rectangles over the reference image, related to each other
157
- through the same six geometry-only relationship families (horizontal
158
- order, vertical order, area overlap, relative width, geometric fit,
159
- vertical sequencing) already used for runtime targets - derived on demand,
160
- never persisted.
161
- - Selected design requirements and tolerance semantics: explicit,
162
- never-inferred requirements over region properties, region-to-region
163
- relationships, and derived two-region measurements, reusing v0.5's
164
- requested/expected-dependent/protected/preserved categories directly.
165
- Three reference-owned tolerance kinds (`exact`/`absolute-reference-px`/
166
- `percent`) stay distinct from runtime CSS-pixel comparison tolerances.
167
- - Reference-evidence adequacy: `adequate`/`partial`/`inadequate` reporting on
168
- whether a reference's own definition actually supports its selected
169
- requirements, independent of any runtime target or candidate.
170
- - Explicit applicability and candidate-state compatibility: a shared, closed
171
- state model (`theme`/`applicationState`/`authenticatedState`, plus an
172
- applicable CSS-pixel `viewport`) declares which runtime frontend state a
173
- reference represents. `evaluateReferenceCandidateCompatibility` and
174
- `observe`'s new `--state-file` reuse v0.4's comparability vocabulary to
175
- determine whether a reference and a candidate describe the same state -
176
- an undeclared dimension is never fabricated as a match or a mismatch.
177
- - Explicit reference-region-to-runtime-target binding: fidelity evaluation
178
- requires an explicit `{referenceRegion, runtimeTarget}` declaration for
179
- every region a requirement depends on - never inferred from geometry,
180
- matching names, or source code.
181
- - Structured reference-vs-candidate fidelity evaluation: `evaluate-
182
- reference-fidelity --reference --candidate [--bindings-file] [--enforce]`
183
- evaluates every selected requirement against live candidate evidence
184
- through one explicit reference-image-pixel-to-CSS-pixel coordinate scale,
185
- producing an honest `not-evaluated`/`pass`/`fail` result that never
186
- fabricates a verdict past a blocked reference-adequacy or
187
- reference/candidate-compatibility gate.
188
- - Bounded fidelity integration with v0.6 agent context: `projectBoundedAgentContext`
189
- gained an optional `fidelity` input so fidelity mismatches compete for the
190
- same bounded required/permitted-target allocation and adequacy machinery
191
- v0.5 contract clauses already use - a `not-evaluated` fidelity always
192
- degrades adequacy rather than being silently reported as "no problems".
193
- - End-to-end external-reference correction workflow: the programmatic,
194
- library-only `prepareReferenceCorrection`/`reviewReferenceCorrectionAttempt`
195
- compose reference fidelity, v0.4 comparison, and v0.5 contract evaluation
196
- into one overall result - matching the reference is necessary but never
197
- sufficient, so a candidate that visually satisfies the reference while
198
- regressing an active protected/preserved contract clause still resolves to
199
- overall `FAIL`. Neither function edits target source, launches a browser,
200
- or calls a remote AI provider; an external implementation actor (a human
201
- or a coding agent) makes the actual change between review attempts.
202
- - Real-browser regression protection: a dedicated Chromium-driven test
203
- proves a full success correction, a protected-regression case, a
204
- two-attempt correction iteration against the same baseline, and an
205
- incompatible-viewport blocking case, all against a disposable,
206
- repository-local fixture copy the observer itself never edits.
207
- - Three new public CLI commands (`import-reference`, `approve-reference`,
208
- `evaluate-reference-fidelity`) and a complete new programmatic export
209
- surface (`src/index.ts`) for the reference/region/requirement/
210
- applicability/compatibility/binding/fidelity/correction-workflow types and
211
- functions. External-reference schema is `1.0.0`, independent of the
212
- observation, comparison, frontend-contract, evaluation, and
213
- bounded-agent-context schema versions, none of which changed.
214
- - Cross-platform packed-candidate validation: the pre-version-bump
215
- implementation candidate tarball `my-frontend-observer-0.6.0.tgz`
216
- (SHA-256 `0347b1f3cfd5d311e13b405c0c2fbc2f507e250cb63223d58b4d2d31df029414`)
217
- was hash-verified and proven on Windows, Linux, and macOS, including an
218
- installed-package smoke of every new v0.7 CLI command and programmatic
219
- export alongside every pre-existing v0.1-v0.6 packed behavior, before this
220
- release's version bump - see
221
- `docs/reports/v0.7-pre-release-readiness.md`.
222
-
223
- ## 0.6.0 - 2026-08-19
224
-
225
- Bounded Agent Context and Native my-dev-kit Ecosystem Integration.
226
-
227
- - Bounded runtime projection (`src/domain/boundedAgentContext.ts`,
228
- `boundedAgentContextProjection.ts#projectBoundedAgentContext`): a
229
- task-relevant, bounded view of page/viewport identity, stable targets,
230
- geometry, runtime behavior, relationships, before/after differences,
231
- contract results, requested/expected-dependent/protected/preserved scope
232
- (reusing the existing v0.5 `frontendContracts.ts` types directly), and
233
- screenshot/artifact references - never a raw evidence dump.
234
- - Explicit adequacy reporting (`adequate`/`partial`/`inadequate` with
235
- structured reason codes) and omission/truncation records, distinguishing
236
- required from optional loss.
237
- - Explicit runtime/static correlation
238
- (`boundedAgentContextCorrelation.ts#deriveRuntimeStaticCorrelations`/
239
- `attachRuntimeStaticCorrelations`): `correlated`/`ambiguous`/`unavailable`
240
- outcomes only - a stable runtime target identity never silently becomes a
241
- source-ownership claim, and competing candidates remain visible.
242
- - Deterministic logical identity (`boundedAgentContextIdentity.ts`) distinct
243
- from fresh per-execution instance identity.
244
- - Public export/correlation boundary only: `src/index.ts` exports the full
245
- bounded-agent-context and correlation type/function surface as a
246
- programmatic library contract (bounded-agent-context schema `1.0.0`) - no
247
- new CLI command, no disk artifact writer/reader, no `my-dev-kit` runtime
248
- dependency, no orchestrator/lab code in this repository.
249
- - Observation schema remains `1.2.0`, comparison schema `1.0.0`, frontend
250
- contract schema `1.0.0`, evaluation artifact schema `1.0.0` - no existing
251
- schema was bumped.
252
- - Cross-platform packed-candidate validation: one hash-verified npm
253
- candidate tarball (`acd067247c447294a611f37f52eab301b6038ab1c6d493ae65e81c2f1279bfd7`)
254
- proven on Windows, Linux, and macOS, including an installed-package smoke
255
- of the new bounded-agent-context projection and runtime/static
256
- correlation exports alongside every pre-existing v0.1-v0.5 packed
257
- behavior.
258
-
259
- ## 0.5.0 - 2026-08-13
260
-
261
- Executable Frontend Contracts and Explicit Change Scope.
262
-
263
- - Two related contract classes: a `PersistentBaselineContract` (previously
264
- approved frontend behavior that stays active across future changes unless
265
- explicitly superseded, with append-based supersession history) and a
266
- `PerChangeContract` (the allowed scope of one requested change).
267
- - Four authored change-scope categories - `requested`, `expected-dependent`
268
- (`required` or `permitted`), `protected`, `preserved` - plus a fifth,
269
- strictly derived-only classification, `unexpected`, for a meaningful
270
- rendered difference no active clause accounts for. `unexpected` can never
271
- be authored as a permission.
272
- - A closed, bounded vocabulary of 15 contract primitives (visibility,
273
- clipping, width bounds, non-overlap, relative width, vertical sequence,
274
- geometric fit, document-width-vs-viewport, scroll ownership, initial-
275
- viewport position, relationship-unchanged, and property-unchanged/
276
- increases/decreases) and three contract tolerances (`exact`,
277
- `absolute-px`, `percent`) - independent of `compare`'s geometry tolerance,
278
- which only suppresses insignificant noise and is never contract
279
- authorization.
280
- - Explicit, never-inferred baseline and per-change clause supersession; two
281
- clauses that structurally contradict each other without explicit
282
- supersession produce a `conflict` result rather than a silent preference.
283
- - One canonical evaluation engine (`evaluateFrontendContract`) that owns
284
- requested/expected-dependent/protected/preserved evaluation, unexpected-
285
- change derivation, and the overall `PASS`/`FAIL` verdict - reusing existing
286
- v0.4 observation/comparison evidence directly, never re-launching a
287
- browser, re-resolving a target, or reimplementing relationship/clipping
288
- derivation.
289
- - Actionable per-clause results (`pass`/`fail`/`unavailable` with a required
290
- reason/`conflict` with at least two conflicting clause identities) - never
291
- an opaque score.
292
- - Atomic, independently-versioned persistence for baseline contracts,
293
- per-change contracts, and evaluation results, with no destructive artifact
294
- overwrite, no copied screenshots, and full source observation/comparison/
295
- contract immutability.
296
- - Three new public commands: `approve-baseline` (the only baseline-approval
297
- act - explicit only, never inferred from `compare` or a `PASS`
298
- evaluation), `save-change-contract` (persistence only), and
299
- `evaluate-contract` (runs the canonical evaluator against already-
300
- persisted evidence and persists exactly one evaluation artifact).
301
- `evaluate-contract --enforce` makes an already-persisted `FAIL` verdict
302
- produce a nonzero process exit status without changing the verdict, its
303
- identity, or its persisted content - a `FAIL` without `--enforce` still
304
- exits `0`.
305
- - Proven against real Chromium observations, not hand-constructed
306
- artifacts: a fully successful contract change, and the "milestone
307
- signature" case - a locally successful requested change coexisting with a
308
- genuine protected-property regression and a genuine preserved-invariant
309
- regression - producing overall `FAIL`.
310
- - Frontend contract schema `1.0.0` and evaluation artifact schema `1.0.0`,
311
- each its own independent schema family; observation schema remains
312
- `1.2.0` and comparison schema remains `1.0.0`.
313
- - Cross-platform packed-candidate validation: one hash-verified npm
314
- candidate tarball proven on Windows, Linux, and macOS, covering the
315
- installed candidate's `approve-baseline`, `save-change-contract`, and
316
- `evaluate-contract` commands alongside every pre-existing v0.1-v0.4
317
- packed observation/comparison behavior.
318
-
319
- ## 0.4.0 - 2026-08-12
320
-
321
- Layout Relationships, Dependency Evidence, and Before/After Comparison.
322
-
323
- - New comparison artifact kind `my-frontend-observer/comparison`, schema
324
- `1.0.0` - independent of and never reused for the observation schema.
325
- - Canonical layout-relationship derivation from a single observation:
326
- horizontal order (`left-of`/`right-of`/`horizontally-overlapping`),
327
- vertical order (`above`/`below`/`vertically-overlapping`), area overlap,
328
- relative width, geometric fit (kept explicitly distinct from DOM
329
- containment), vertical sequencing (`follows-vertically`), and document-
330
- width fit/exceeds-viewport - bounded to configured targets, with explicit
331
- evidence-path provenance and honest unresolved-target handling.
332
- - Comparability analysis, evaluated before any rendered difference:
333
- `comparable` / `comparable-with-warnings` / `incomparable`, with
334
- structured reasons (hard mismatches on page URL, viewport, browser
335
- engine, or scroll-scenario configuration; warnings for producer/browser
336
- version and target-configuration differences; theme/authenticated-state/
337
- application-state recorded as unassessed, never silently equal).
338
- - Before/after target and page differences: appeared/disappeared (never
339
- confused with a target added/removed from configuration), moved, resized,
340
- visibility changes, clipping changes (reusing one canonical clipping
341
- derivation), actual horizontal/vertical dimensional-overflow changes, DOM
342
- containment changes, page-size changes, and scroll-owner changes - each a
343
- structured record with before/after values, deltas where meaningful, and
344
- supporting evidence references.
345
- - Relationship-change detection between two observations, matched by
346
- relationship family and subject/related target (never array position),
347
- including a `relative-position-changed` distinction from plain absolute
348
- target movement.
349
- - Explicit, non-causal expected-dependency evidence: a caller may declare an
350
- expected relationship between two targets' `x`/`y`/`width`/`height`
351
- properties and `increase`/`decrease`/`change`/`unchanged` directions; each
352
- declaration evaluates independently to `consistent` / `not-observed` /
353
- `contradictory-to-declaration` / `unavailable`. The observer never infers
354
- a dependency from observed co-change and never produces a causal claim.
355
- - Deterministic, direction-sensitive comparison identity
356
- (`comparisonRequestId`) plus a fresh `comparisonId` per execution;
357
- operational filesystem paths never affect identity and are never written
358
- into the persisted manifest.
359
- - Atomic comparison-artifact persistence: `<outputLocation>/<comparisonId>/
360
- manifest.json` only - no screenshot bytes are copied; the manifest
361
- retains logical references to the source observations' own
362
- `screenshot.path`. Source observations are never modified.
363
- - New public `compare` command: `my-frontend-observer compare --before
364
- <observation-artifact-root> --after <observation-artifact-root> --output
365
- <directory> [--config-file <json-file>]`. Reads two already-persisted
366
- observation artifacts and never launches a browser. `comparable`,
367
- `comparable-with-warnings`, and `incomparable` all persist successfully
368
- and exit `0`; only invalid syntax, an unreadable/invalid source artifact,
369
- invalid configuration, or a failed write exits nonzero.
370
-
371
- ## 0.3.0 - 2026-08-12
372
-
373
- Runtime Scrolling, Overflow, and Visibility Behavior.
374
-
375
- - Bounded runtime scroll scenarios: an observation may configure zero or
376
- one scroll action, `window-scroll-by` or `target-scroll-by` (signed
377
- integer `deltaX`/`deltaY`, bounded to `[-20000, 20000]`, at least one
378
- non-zero). Not a generic interaction recorder or browser automation
379
- framework - exactly one bounded action per observation.
380
- - Real `window-scroll-by` execution: vertical and horizontal document
381
- scrolling, with browser-authoritative (not calculated) final position,
382
- including natural boundary clamping and valid no-movement scenarios.
383
- - Real `target-scroll-by` execution against the existing stable configured
384
- target identity and the same canonical target-resolution path every
385
- locator kind already uses: real nested vertical/horizontal element
386
- scrolling, boundary clamping, and non-scrollable/no-movement targets. An
387
- action target that cannot be uniquely resolved at runtime is never
388
- scrolled and never fabricated as moved - the existing target-missing/
389
- target-ambiguous/target-hidden diagnostics explain it honestly.
390
- - Initial/final bounded runtime snapshots (window scroll position, the
391
- browser's own scrolling-root/`documentElement`/`body` metrics, and
392
- per-configured-target scroll metrics) around an immediate, non-smooth
393
- scroll action and an exact two-`requestAnimationFrame` stabilization
394
- wait.
395
- - Actual dimensional overflow (`scrollWidth`/`scrollHeight` vs.
396
- `clientWidth`/`clientHeight`) kept explicitly distinct from the computed
397
- `overflow-x`/`overflow-y` CSS declaration.
398
- - Real viewport-relation evidence (`above`/`intersecting`/`below`,
399
- `intersectsViewport`, `fullyWithinViewport`) and `enteredViewport`/
400
- `leftViewport` scenario transitions; a hidden/non-rendered target's
401
- viewport relation is honestly `not-applicable`, never fabricated
402
- geometry - hidden and offscreen remain distinct.
403
- - Bounded before/after scenario transition evidence for window and
404
- per-target scroll position, geometry, and viewport relation - not a
405
- generic comparison/diff engine.
406
- - Derived scroll-owner interpretation (`document` /
407
- `target:<stable-target-name>` / `none` / `indeterminate`), always
408
- traceable (`derivedFrom`) to the underlying observed scroll-position
409
- measurements only - never from CSS overflow, bounding-rectangle movement
410
- alone, target name, or DOM hierarchy.
411
- - New `--scroll-scenario-file <json-file>` CLI input, usable together with
412
- either `--target` or `--targets-file`; the file path is operational input
413
- only, never persisted and never part of request identity, exactly like
414
- `--targets-file`'s path.
415
- - Observation schema `1.2.0` (additive over `1.1.0`).
416
- - Cross-platform packed-candidate validation: one hash-verified npm
417
- candidate tarball proven on Windows, Linux, and macOS, covering the
418
- legacy `--target` CSS shorthand, the structured `--targets-file`
419
- semantic-target path, and both `--scroll-scenario-file` action kinds.
420
-
421
- ## 0.2.0 - 2026-08-11
422
-
423
- Stable Semantic Targets and Region Identity.
424
-
425
- - Canonical `{name, locators}` target model with a stable observer-owned
426
- target identity, distinct from both the browser locator that resolves a
427
- target and any source-code symbol. The existing `--target id=selector`
428
- CSS shorthand remains fully supported and normalizes into this model
429
- unchanged.
430
- - Six frozen, real-Chromium-resolved locator kinds per target, evaluated in
431
- configured order with fallback on no match, immediate stop (no fallback)
432
- on ambiguous or unevaluable results: `role` (+ optional exact accessible
433
- name), `id`, `data-attribute`, `semantic-element`, `css`, and `text`
434
- (exact match only).
435
- - Explicit missing/ambiguous/unavailable resolution reporting, and hidden
436
- (present-but-not-visible) target evidence, for every locator kind.
437
- - Bounded semantic-region evidence per resolved target: accessibility
438
- state (`disabled`/`expanded`/`checked`/`selected`/`pressed`/`current`,
439
- with an explicit `false` always distinguishable from "not applicable"),
440
- derived landmark identity, and configured-target-only DOM containment.
441
- - Proven stable request identity: the same target configuration produces
442
- the same request identity across repeated observations; changing a
443
- target's locator strategy changes the request identity without changing
444
- its stable name; a target's actual runtime disappearance is
445
- distinguishable from a configuration change.
446
- - New `--targets-file <json-file>` CLI input for structured semantic target
447
- configuration, mutually exclusive with `--target`.
448
- - Observation schema `1.1.0`.
449
- - Cross-platform packed-candidate validation: one hash-verified npm
450
- candidate tarball proven on Windows, Linux, and macOS, covering both the
451
- legacy `--target` CSS shorthand and the structured `--targets-file`
452
- semantic-target path.
453
-
454
- ## 0.1.0 - 2026-08-11
455
-
456
- Runtime Observation Foundation. First public release.
457
-
458
- - Local-first browser runtime evidence producer: a real `observe` CLI command
459
- that launches Chromium under a loopback-only network safety policy.
460
- - Explicit CSS-selector observation targets (`--target id=selector`,
461
- repeatable).
462
- - Viewport screenshot capture (`screenshot.png`).
463
- - Bounded page evidence and bounded target evidence, with honest
464
- unavailable/not-applicable/partial states when evidence cannot be
465
- determined rather than guessing.
466
- - Loopback/network safety enforcement (`http`/`https`, `localhost`/`127.x.x.x`/
467
- `::1` only).
468
- - Versioned, portable observation artifact: `manifest.json` + `screenshot.png`
469
- written atomically per observation, artifact schema `1.0.0`.
470
- - Validated as a packed npm tarball with a clean-consumer install-and-observe
471
- smoke on Windows, Linux, and macOS.
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+
5
+
6
+ ## 0.10.1 - 2026-10-05
7
+
8
+ - Project-aware `check` now replays a validated baseline's optional
9
+ `scrollScenario` and caller-declared `explicitState` into candidate capture;
10
+ explicit state remains declarative metadata. Project-config schema, CLI,
11
+ observation/comparison/check-result schemas, and dependencies are unchanged.
12
+ - Real-Chromium and cross-platform installed-package tests cover baseline
13
+ replay and configured acceptance. A test-local timeout accommodates the
14
+ integration-heavy route rejection test under full-suite contention.
15
+
16
+ ## 0.10.0 - 2026-09-23
17
+
18
+ Shipped the full Visual Change workflow in the project-aware Viewer. People
19
+ can start from an actual frontend or approved reference, confirm and explicitly
20
+ activate scope, and prepare a bounded coding-agent handoff. Immutable check
21
+ attempts support correction; human acceptance requires the latest canonical
22
+ check to PASS, while governance remains separate. Installed-package and Viewer
23
+ support are included. Security and PWA boundaries remain intact: Observer does
24
+ not edit source or grant automatic approval.
25
+
26
+ ## 0.9.1 - 2026-09-21
27
+
28
+ Hardened PWA security-acceptance reproducibility as a maintenance release.
29
+
30
+ - Hardened the PWA server-down HARD GATE from fresh test-owned state, removing
31
+ hidden dependence on prior test order and persistent Chromium profile state.
32
+ - Corrected the false-ready service-worker predicate and separately proved
33
+ active registration and current-client control.
34
+ - Proved shell-cache readiness, `/api/` exclusion from Cache Storage,
35
+ origin-server unavailability, offline shell reload, and stale-evidence
36
+ absence.
37
+ - Added permanent `npm run test:pwa-hard-gate` and integrated it into
38
+ `npm run test:security`.
39
+ - No production PWA behavior, schema, or dependency changed.
40
+
41
+ ## 0.9.0 - 2026-09-21
42
+
43
+ v0.9, Human Visual Annotation and Design-Intent Capture. Structured visual
44
+ annotation through the existing viewer. Drawing is evidence, not meaning:
45
+ association, confirmation, promotion, materialization, activation and approval
46
+ each remain separate, explicit steps.
47
+
48
+ - Added the `VisualAnnotationArtifact` evidence family (schema `1.0.0`) with
49
+ deterministic identity, an atomic writer, a canonical reader, a persistence
50
+ service, and a derived annotation overlay SVG. Every save is an immutable
51
+ revision with stale-parent conflict detection.
52
+ - Added runtime observation annotation in runtime CSS pixels and external
53
+ reference annotation in reference-image pixels, with five mark kinds (point,
54
+ rectangle, line, arrow and note), Select and Pan modes, zoom, and keyboard
55
+ selection.
56
+ - Added explicit associations in each source domain: a runtime target, a
57
+ runtime relationship, or a reference region. Where a mark is drawn never
58
+ decides what it is about.
59
+ - Added candidate and confirmed interpretation. Changing a confirmed meaning
60
+ withdraws its confirmation.
61
+ - Added runtime operations `inspect`, `move`, `resize`, `remove` and
62
+ `preserve`, and authored categories `requested`, `expected-dependent`,
63
+ `protected` and `preserved`. `unexpected` is concluded by comparison, never
64
+ authored.
65
+ - Added promotion of selected confirmed runtime `move`, `resize` and
66
+ `preserve` intent into a canonical per-change frontend contract. Promotion
67
+ does not activate the contract; project activation is a separate, optional,
68
+ explicit choice. Confirmed `remove` intent stays non-promotable because the
69
+ contract vocabulary has no target-absent primitive, and `inspect` is never a
70
+ clause.
71
+ - Added reference-region create and refine intent, and property, relationship
72
+ and measurement reference requirements.
73
+ - Added materialization of selected confirmed reference intent into a new
74
+ imported external-reference revision that supersedes its source. The source
75
+ reference is never modified, and the new revision is not approved
76
+ automatically.
77
+ - Added a project-aware local authoring boundary: a 32-byte in-memory session
78
+ capability, strict Host and Origin checks, JSON-only bounded request bodies,
79
+ and one serialized write queue. `view --root` stays read-only.
80
+ - Added three authoring routes: `POST /api/annotations`,
81
+ `POST /api/annotations/:handle/promote-contract`, and
82
+ `POST /api/annotations/:handle/materialize-reference`. The viewer protocol
83
+ is now `1.3.0`.
84
+ - Added viewer discovery of visual annotations, a source-resolving annotation
85
+ view route, and a verified, script-blocking overlay media role.
86
+ - Evidence discovery now skips writer temporary `.tmp-*` directories.
87
+ - Fixed viewer shutdown stalling while a browser or service worker held a
88
+ connection open. Closing the viewer now also ends active connections.
89
+ - Added an integrated real-Chromium acceptance suite and a packed installed
90
+ v0.9 annotation smoke to the cross-platform pre-release readiness workflow.
91
+ - The repository gained a deterministic demo and four tutorials under
92
+ `examples/v09-demo/`, proved end to end with the external tool
93
+ `@dailephd/my-dev-kit-lab@0.4.9`. The demo is repository material only: it is
94
+ not in the npm package, and my-dev-kit-lab is not an Observer dependency.
95
+ - Final pre-release readiness passed on Windows, Linux and macOS against one
96
+ exact candidate package, including all four tutorials.
97
+
98
+ ## 0.8.1 - 2026-09-15
99
+
100
+ Project workflow release for `my-frontend-observer`.
101
+
102
+ - Added the managed `init`, `capture`, `check`, and project-aware `view`
103
+ workflow with human-readable aliases and immutable canonical evidence.
104
+ - Added `PASS`, `FAIL`, `REVIEW_REQUIRED`, and `BLOCKED` check outcomes plus a
105
+ bounded `check --json` interface for coding agents.
106
+ - Added current-candidate history and reuse of canonical frontend-contract and
107
+ approved-reference fidelity evaluation.
108
+ - Added alias-first viewer navigation with canonical IDs retained in details
109
+ and provenance.
110
+ - Completed cross-platform, security, and installed-package validation.
111
+ - Published the npm package as `@dailephd/my-frontend-observer` and added the
112
+ MIT license.
113
+
114
+ ## 0.8.0 - 2026-09-10
115
+
116
+ Interactive Local Observation Viewer.
117
+
118
+ - New `view` command: starts a loopback-only (`127.0.0.1`) Node server
119
+ serving a React + TypeScript + Vite viewer application, usable in a normal
120
+ browser or as an installed Progressive Web App, over an existing evidence
121
+ root (`--root`). Metadata-first evidence discovery and on-demand
122
+ artifact/media loading; never mutates target source or any Observer
123
+ evidence artifact.
124
+ - Observation inspection: screenshot plus SVG target overlays, geometry,
125
+ semantics, visibility/overflow/scroll evidence, and on-demand layout
126
+ relationships.
127
+ - Comparison/contract inspection: before/after side-by-side views and
128
+ contract/change-scope evaluation results, including the required
129
+ protected/preserved-failure safety case (a locally successful requested
130
+ change alongside a genuine protected/preserved regression, shown as
131
+ overall `FAIL`).
132
+ - External reference/candidate inspection: reference image and region
133
+ overlays, explicit (never auto-selected) candidate selection,
134
+ reference/candidate compatibility and applicability.
135
+ - Explicit reference-region/runtime-target binding cross-selection
136
+ (`--bindings-file`), independent bounded zoom/pan, conditional view lock,
137
+ and on-demand reference-fidelity evaluation shown independently alongside
138
+ any selected contract evaluation.
139
+ - Bounded agent context inspection (`--context-file`): session-only display
140
+ of context identity, adequacy, omissions/truncations, and runtime/static
141
+ correlation, plus safe raw-evidence navigation. The viewer never rebuilds
142
+ a bounded context or its correlation and never runs `@dailephd/my-dev-kit`.
143
+ - PWA hardening: real service-worker registration, an application-shell
144
+ precache that excludes `/api/` routes, and a proven server-down behavior
145
+ that never presents stale evidence as current.
146
+ - No second evidence engine: every canonical result the viewer displays is
147
+ produced by the same single engine the CLI uses, called from at most one
148
+ designated server-side call site.
149
+ - Security hardening found during pre-release readiness: the viewer's media
150
+ route now rejects any evidence filename that is itself a symlink/junction
151
+ pointing outside the evidence root, instead of following it.
152
+ - Cross-platform packed-candidate validation: the pre-version-bump
153
+ implementation candidate tarball `my-frontend-observer-0.7.0.tgz`
154
+ (SHA-256 `b80729bc64b3b01378effd2b8aa3b7743ccedc46b3148ba0b1ff1ae5a4b68c55`)
155
+ was hash-verified and proven on Windows, Linux, and macOS, including an
156
+ installed-package smoke of the new `view` command (loopback binding,
157
+ read-only API, path containment, SVG overlay/media, service-worker
158
+ registration, the PWA no-authoritative-cache boundary, and the
159
+ server-down stale-evidence hard gate) alongside every pre-existing
160
+ v0.1-v0.7 packed behavior, before this release's version bump - see
161
+ `docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md`.
162
+
163
+ ## 0.7.0 - 2026-09-06
164
+
165
+ End-to-End Coding-Agent Frontend Change Review.
166
+
167
+ - External-reference artifact and lifecycle: `import-reference`/
168
+ `approve-reference` persist an externally supplied PNG/JPEG/WebP
169
+ design-reference image (header-only format/dimension detection - no
170
+ decode, no OCR, no computer vision) through an explicit two-state
171
+ (`imported`/`approved`) lifecycle. Supersession is represented only as a
172
+ forward pointer to a newer artifact - an existing persisted artifact's own
173
+ manifest is never rewritten.
174
+ - Explicit reference regions and geometry relationships: user/configuration-
175
+ authored rectangles over the reference image, related to each other
176
+ through the same six geometry-only relationship families (horizontal
177
+ order, vertical order, area overlap, relative width, geometric fit,
178
+ vertical sequencing) already used for runtime targets - derived on demand,
179
+ never persisted.
180
+ - Selected design requirements and tolerance semantics: explicit,
181
+ never-inferred requirements over region properties, region-to-region
182
+ relationships, and derived two-region measurements, reusing v0.5's
183
+ requested/expected-dependent/protected/preserved categories directly.
184
+ Three reference-owned tolerance kinds (`exact`/`absolute-reference-px`/
185
+ `percent`) stay distinct from runtime CSS-pixel comparison tolerances.
186
+ - Reference-evidence adequacy: `adequate`/`partial`/`inadequate` reporting on
187
+ whether a reference's own definition actually supports its selected
188
+ requirements, independent of any runtime target or candidate.
189
+ - Explicit applicability and candidate-state compatibility: a shared, closed
190
+ state model (`theme`/`applicationState`/`authenticatedState`, plus an
191
+ applicable CSS-pixel `viewport`) declares which runtime frontend state a
192
+ reference represents. `evaluateReferenceCandidateCompatibility` and
193
+ `observe`'s new `--state-file` reuse v0.4's comparability vocabulary to
194
+ determine whether a reference and a candidate describe the same state -
195
+ an undeclared dimension is never fabricated as a match or a mismatch.
196
+ - Explicit reference-region-to-runtime-target binding: fidelity evaluation
197
+ requires an explicit `{referenceRegion, runtimeTarget}` declaration for
198
+ every region a requirement depends on - never inferred from geometry,
199
+ matching names, or source code.
200
+ - Structured reference-vs-candidate fidelity evaluation: `evaluate-
201
+ reference-fidelity --reference --candidate [--bindings-file] [--enforce]`
202
+ evaluates every selected requirement against live candidate evidence
203
+ through one explicit reference-image-pixel-to-CSS-pixel coordinate scale,
204
+ producing an honest `not-evaluated`/`pass`/`fail` result that never
205
+ fabricates a verdict past a blocked reference-adequacy or
206
+ reference/candidate-compatibility gate.
207
+ - Bounded fidelity integration with v0.6 agent context: `projectBoundedAgentContext`
208
+ gained an optional `fidelity` input so fidelity mismatches compete for the
209
+ same bounded required/permitted-target allocation and adequacy machinery
210
+ v0.5 contract clauses already use - a `not-evaluated` fidelity always
211
+ degrades adequacy rather than being silently reported as "no problems".
212
+ - End-to-end external-reference correction workflow: the programmatic,
213
+ library-only `prepareReferenceCorrection`/`reviewReferenceCorrectionAttempt`
214
+ compose reference fidelity, v0.4 comparison, and v0.5 contract evaluation
215
+ into one overall result - matching the reference is necessary but never
216
+ sufficient, so a candidate that visually satisfies the reference while
217
+ regressing an active protected/preserved contract clause still resolves to
218
+ overall `FAIL`. Neither function edits target source, launches a browser,
219
+ or calls a remote AI provider; an external implementation actor (a human
220
+ or a coding agent) makes the actual change between review attempts.
221
+ - Real-browser regression protection: a dedicated Chromium-driven test
222
+ proves a full success correction, a protected-regression case, a
223
+ two-attempt correction iteration against the same baseline, and an
224
+ incompatible-viewport blocking case, all against a disposable,
225
+ repository-local fixture copy the observer itself never edits.
226
+ - Three new public CLI commands (`import-reference`, `approve-reference`,
227
+ `evaluate-reference-fidelity`) and a complete new programmatic export
228
+ surface (`src/index.ts`) for the reference/region/requirement/
229
+ applicability/compatibility/binding/fidelity/correction-workflow types and
230
+ functions. External-reference schema is `1.0.0`, independent of the
231
+ observation, comparison, frontend-contract, evaluation, and
232
+ bounded-agent-context schema versions, none of which changed.
233
+ - Cross-platform packed-candidate validation: the pre-version-bump
234
+ implementation candidate tarball `my-frontend-observer-0.6.0.tgz`
235
+ (SHA-256 `0347b1f3cfd5d311e13b405c0c2fbc2f507e250cb63223d58b4d2d31df029414`)
236
+ was hash-verified and proven on Windows, Linux, and macOS, including an
237
+ installed-package smoke of every new v0.7 CLI command and programmatic
238
+ export alongside every pre-existing v0.1-v0.6 packed behavior, before this
239
+ release's version bump - see
240
+ `docs/reports/v0.7-pre-release-readiness.md`.
241
+
242
+ ## 0.6.0 - 2026-08-19
243
+
244
+ Bounded Agent Context and Native my-dev-kit Ecosystem Integration.
245
+
246
+ - Bounded runtime projection (`src/domain/boundedAgentContext.ts`,
247
+ `boundedAgentContextProjection.ts#projectBoundedAgentContext`): a
248
+ task-relevant, bounded view of page/viewport identity, stable targets,
249
+ geometry, runtime behavior, relationships, before/after differences,
250
+ contract results, requested/expected-dependent/protected/preserved scope
251
+ (reusing the existing v0.5 `frontendContracts.ts` types directly), and
252
+ screenshot/artifact references - never a raw evidence dump.
253
+ - Explicit adequacy reporting (`adequate`/`partial`/`inadequate` with
254
+ structured reason codes) and omission/truncation records, distinguishing
255
+ required from optional loss.
256
+ - Explicit runtime/static correlation
257
+ (`boundedAgentContextCorrelation.ts#deriveRuntimeStaticCorrelations`/
258
+ `attachRuntimeStaticCorrelations`): `correlated`/`ambiguous`/`unavailable`
259
+ outcomes only - a stable runtime target identity never silently becomes a
260
+ source-ownership claim, and competing candidates remain visible.
261
+ - Deterministic logical identity (`boundedAgentContextIdentity.ts`) distinct
262
+ from fresh per-execution instance identity.
263
+ - Public export/correlation boundary only: `src/index.ts` exports the full
264
+ bounded-agent-context and correlation type/function surface as a
265
+ programmatic library contract (bounded-agent-context schema `1.0.0`) - no
266
+ new CLI command, no disk artifact writer/reader, no `my-dev-kit` runtime
267
+ dependency, no orchestrator/lab code in this repository.
268
+ - Observation schema remains `1.2.0`, comparison schema `1.0.0`, frontend
269
+ contract schema `1.0.0`, evaluation artifact schema `1.0.0` - no existing
270
+ schema was bumped.
271
+ - Cross-platform packed-candidate validation: one hash-verified npm
272
+ candidate tarball (`acd067247c447294a611f37f52eab301b6038ab1c6d493ae65e81c2f1279bfd7`)
273
+ proven on Windows, Linux, and macOS, including an installed-package smoke
274
+ of the new bounded-agent-context projection and runtime/static
275
+ correlation exports alongside every pre-existing v0.1-v0.5 packed
276
+ behavior.
277
+
278
+ ## 0.5.0 - 2026-08-13
279
+
280
+ Executable Frontend Contracts and Explicit Change Scope.
281
+
282
+ - Two related contract classes: a `PersistentBaselineContract` (previously
283
+ approved frontend behavior that stays active across future changes unless
284
+ explicitly superseded, with append-based supersession history) and a
285
+ `PerChangeContract` (the allowed scope of one requested change).
286
+ - Four authored change-scope categories - `requested`, `expected-dependent`
287
+ (`required` or `permitted`), `protected`, `preserved` - plus a fifth,
288
+ strictly derived-only classification, `unexpected`, for a meaningful
289
+ rendered difference no active clause accounts for. `unexpected` can never
290
+ be authored as a permission.
291
+ - A closed, bounded vocabulary of 15 contract primitives (visibility,
292
+ clipping, width bounds, non-overlap, relative width, vertical sequence,
293
+ geometric fit, document-width-vs-viewport, scroll ownership, initial-
294
+ viewport position, relationship-unchanged, and property-unchanged/
295
+ increases/decreases) and three contract tolerances (`exact`,
296
+ `absolute-px`, `percent`) - independent of `compare`'s geometry tolerance,
297
+ which only suppresses insignificant noise and is never contract
298
+ authorization.
299
+ - Explicit, never-inferred baseline and per-change clause supersession; two
300
+ clauses that structurally contradict each other without explicit
301
+ supersession produce a `conflict` result rather than a silent preference.
302
+ - One canonical evaluation engine (`evaluateFrontendContract`) that owns
303
+ requested/expected-dependent/protected/preserved evaluation, unexpected-
304
+ change derivation, and the overall `PASS`/`FAIL` verdict - reusing existing
305
+ v0.4 observation/comparison evidence directly, never re-launching a
306
+ browser, re-resolving a target, or reimplementing relationship/clipping
307
+ derivation.
308
+ - Actionable per-clause results (`pass`/`fail`/`unavailable` with a required
309
+ reason/`conflict` with at least two conflicting clause identities) - never
310
+ an opaque score.
311
+ - Atomic, independently-versioned persistence for baseline contracts,
312
+ per-change contracts, and evaluation results, with no destructive artifact
313
+ overwrite, no copied screenshots, and full source observation/comparison/
314
+ contract immutability.
315
+ - Three new public commands: `approve-baseline` (the only baseline-approval
316
+ act - explicit only, never inferred from `compare` or a `PASS`
317
+ evaluation), `save-change-contract` (persistence only), and
318
+ `evaluate-contract` (runs the canonical evaluator against already-
319
+ persisted evidence and persists exactly one evaluation artifact).
320
+ `evaluate-contract --enforce` makes an already-persisted `FAIL` verdict
321
+ produce a nonzero process exit status without changing the verdict, its
322
+ identity, or its persisted content - a `FAIL` without `--enforce` still
323
+ exits `0`.
324
+ - Proven against real Chromium observations, not hand-constructed
325
+ artifacts: a fully successful contract change, and the "milestone
326
+ signature" case - a locally successful requested change coexisting with a
327
+ genuine protected-property regression and a genuine preserved-invariant
328
+ regression - producing overall `FAIL`.
329
+ - Frontend contract schema `1.0.0` and evaluation artifact schema `1.0.0`,
330
+ each its own independent schema family; observation schema remains
331
+ `1.2.0` and comparison schema remains `1.0.0`.
332
+ - Cross-platform packed-candidate validation: one hash-verified npm
333
+ candidate tarball proven on Windows, Linux, and macOS, covering the
334
+ installed candidate's `approve-baseline`, `save-change-contract`, and
335
+ `evaluate-contract` commands alongside every pre-existing v0.1-v0.4
336
+ packed observation/comparison behavior.
337
+
338
+ ## 0.4.0 - 2026-08-12
339
+
340
+ Layout Relationships, Dependency Evidence, and Before/After Comparison.
341
+
342
+ - New comparison artifact kind `my-frontend-observer/comparison`, schema
343
+ `1.0.0` - independent of and never reused for the observation schema.
344
+ - Canonical layout-relationship derivation from a single observation:
345
+ horizontal order (`left-of`/`right-of`/`horizontally-overlapping`),
346
+ vertical order (`above`/`below`/`vertically-overlapping`), area overlap,
347
+ relative width, geometric fit (kept explicitly distinct from DOM
348
+ containment), vertical sequencing (`follows-vertically`), and document-
349
+ width fit/exceeds-viewport - bounded to configured targets, with explicit
350
+ evidence-path provenance and honest unresolved-target handling.
351
+ - Comparability analysis, evaluated before any rendered difference:
352
+ `comparable` / `comparable-with-warnings` / `incomparable`, with
353
+ structured reasons (hard mismatches on page URL, viewport, browser
354
+ engine, or scroll-scenario configuration; warnings for producer/browser
355
+ version and target-configuration differences; theme/authenticated-state/
356
+ application-state recorded as unassessed, never silently equal).
357
+ - Before/after target and page differences: appeared/disappeared (never
358
+ confused with a target added/removed from configuration), moved, resized,
359
+ visibility changes, clipping changes (reusing one canonical clipping
360
+ derivation), actual horizontal/vertical dimensional-overflow changes, DOM
361
+ containment changes, page-size changes, and scroll-owner changes - each a
362
+ structured record with before/after values, deltas where meaningful, and
363
+ supporting evidence references.
364
+ - Relationship-change detection between two observations, matched by
365
+ relationship family and subject/related target (never array position),
366
+ including a `relative-position-changed` distinction from plain absolute
367
+ target movement.
368
+ - Explicit, non-causal expected-dependency evidence: a caller may declare an
369
+ expected relationship between two targets' `x`/`y`/`width`/`height`
370
+ properties and `increase`/`decrease`/`change`/`unchanged` directions; each
371
+ declaration evaluates independently to `consistent` / `not-observed` /
372
+ `contradictory-to-declaration` / `unavailable`. The observer never infers
373
+ a dependency from observed co-change and never produces a causal claim.
374
+ - Deterministic, direction-sensitive comparison identity
375
+ (`comparisonRequestId`) plus a fresh `comparisonId` per execution;
376
+ operational filesystem paths never affect identity and are never written
377
+ into the persisted manifest.
378
+ - Atomic comparison-artifact persistence: `<outputLocation>/<comparisonId>/
379
+ manifest.json` only - no screenshot bytes are copied; the manifest
380
+ retains logical references to the source observations' own
381
+ `screenshot.path`. Source observations are never modified.
382
+ - New public `compare` command: `my-frontend-observer compare --before
383
+ <observation-artifact-root> --after <observation-artifact-root> --output
384
+ <directory> [--config-file <json-file>]`. Reads two already-persisted
385
+ observation artifacts and never launches a browser. `comparable`,
386
+ `comparable-with-warnings`, and `incomparable` all persist successfully
387
+ and exit `0`; only invalid syntax, an unreadable/invalid source artifact,
388
+ invalid configuration, or a failed write exits nonzero.
389
+
390
+ ## 0.3.0 - 2026-08-12
391
+
392
+ Runtime Scrolling, Overflow, and Visibility Behavior.
393
+
394
+ - Bounded runtime scroll scenarios: an observation may configure zero or
395
+ one scroll action, `window-scroll-by` or `target-scroll-by` (signed
396
+ integer `deltaX`/`deltaY`, bounded to `[-20000, 20000]`, at least one
397
+ non-zero). Not a generic interaction recorder or browser automation
398
+ framework - exactly one bounded action per observation.
399
+ - Real `window-scroll-by` execution: vertical and horizontal document
400
+ scrolling, with browser-authoritative (not calculated) final position,
401
+ including natural boundary clamping and valid no-movement scenarios.
402
+ - Real `target-scroll-by` execution against the existing stable configured
403
+ target identity and the same canonical target-resolution path every
404
+ locator kind already uses: real nested vertical/horizontal element
405
+ scrolling, boundary clamping, and non-scrollable/no-movement targets. An
406
+ action target that cannot be uniquely resolved at runtime is never
407
+ scrolled and never fabricated as moved - the existing target-missing/
408
+ target-ambiguous/target-hidden diagnostics explain it honestly.
409
+ - Initial/final bounded runtime snapshots (window scroll position, the
410
+ browser's own scrolling-root/`documentElement`/`body` metrics, and
411
+ per-configured-target scroll metrics) around an immediate, non-smooth
412
+ scroll action and an exact two-`requestAnimationFrame` stabilization
413
+ wait.
414
+ - Actual dimensional overflow (`scrollWidth`/`scrollHeight` vs.
415
+ `clientWidth`/`clientHeight`) kept explicitly distinct from the computed
416
+ `overflow-x`/`overflow-y` CSS declaration.
417
+ - Real viewport-relation evidence (`above`/`intersecting`/`below`,
418
+ `intersectsViewport`, `fullyWithinViewport`) and `enteredViewport`/
419
+ `leftViewport` scenario transitions; a hidden/non-rendered target's
420
+ viewport relation is honestly `not-applicable`, never fabricated
421
+ geometry - hidden and offscreen remain distinct.
422
+ - Bounded before/after scenario transition evidence for window and
423
+ per-target scroll position, geometry, and viewport relation - not a
424
+ generic comparison/diff engine.
425
+ - Derived scroll-owner interpretation (`document` /
426
+ `target:<stable-target-name>` / `none` / `indeterminate`), always
427
+ traceable (`derivedFrom`) to the underlying observed scroll-position
428
+ measurements only - never from CSS overflow, bounding-rectangle movement
429
+ alone, target name, or DOM hierarchy.
430
+ - New `--scroll-scenario-file <json-file>` CLI input, usable together with
431
+ either `--target` or `--targets-file`; the file path is operational input
432
+ only, never persisted and never part of request identity, exactly like
433
+ `--targets-file`'s path.
434
+ - Observation schema `1.2.0` (additive over `1.1.0`).
435
+ - Cross-platform packed-candidate validation: one hash-verified npm
436
+ candidate tarball proven on Windows, Linux, and macOS, covering the
437
+ legacy `--target` CSS shorthand, the structured `--targets-file`
438
+ semantic-target path, and both `--scroll-scenario-file` action kinds.
439
+
440
+ ## 0.2.0 - 2026-08-11
441
+
442
+ Stable Semantic Targets and Region Identity.
443
+
444
+ - Canonical `{name, locators}` target model with a stable observer-owned
445
+ target identity, distinct from both the browser locator that resolves a
446
+ target and any source-code symbol. The existing `--target id=selector`
447
+ CSS shorthand remains fully supported and normalizes into this model
448
+ unchanged.
449
+ - Six frozen, real-Chromium-resolved locator kinds per target, evaluated in
450
+ configured order with fallback on no match, immediate stop (no fallback)
451
+ on ambiguous or unevaluable results: `role` (+ optional exact accessible
452
+ name), `id`, `data-attribute`, `semantic-element`, `css`, and `text`
453
+ (exact match only).
454
+ - Explicit missing/ambiguous/unavailable resolution reporting, and hidden
455
+ (present-but-not-visible) target evidence, for every locator kind.
456
+ - Bounded semantic-region evidence per resolved target: accessibility
457
+ state (`disabled`/`expanded`/`checked`/`selected`/`pressed`/`current`,
458
+ with an explicit `false` always distinguishable from "not applicable"),
459
+ derived landmark identity, and configured-target-only DOM containment.
460
+ - Proven stable request identity: the same target configuration produces
461
+ the same request identity across repeated observations; changing a
462
+ target's locator strategy changes the request identity without changing
463
+ its stable name; a target's actual runtime disappearance is
464
+ distinguishable from a configuration change.
465
+ - New `--targets-file <json-file>` CLI input for structured semantic target
466
+ configuration, mutually exclusive with `--target`.
467
+ - Observation schema `1.1.0`.
468
+ - Cross-platform packed-candidate validation: one hash-verified npm
469
+ candidate tarball proven on Windows, Linux, and macOS, covering both the
470
+ legacy `--target` CSS shorthand and the structured `--targets-file`
471
+ semantic-target path.
472
+
473
+ ## 0.1.0 - 2026-08-11
474
+
475
+ Runtime Observation Foundation. First public release.
476
+
477
+ - Local-first browser runtime evidence producer: a real `observe` CLI command
478
+ that launches Chromium under a loopback-only network safety policy.
479
+ - Explicit CSS-selector observation targets (`--target id=selector`,
480
+ repeatable).
481
+ - Viewport screenshot capture (`screenshot.png`).
482
+ - Bounded page evidence and bounded target evidence, with honest
483
+ unavailable/not-applicable/partial states when evidence cannot be
484
+ determined rather than guessing.
485
+ - Loopback/network safety enforcement (`http`/`https`, `localhost`/`127.x.x.x`/
486
+ `::1` only).
487
+ - Versioned, portable observation artifact: `manifest.json` + `screenshot.png`
488
+ written atomically per observation, artifact schema `1.0.0`.
489
+ - Validated as a packed npm tarball with a clean-consumer install-and-observe
490
+ smoke on Windows, Linux, and macOS.