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