my-frontend-observer 0.2.0 → 0.4.0

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 (67) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/README.md +51 -13
  3. package/dist/application/comparisonService.d.ts +56 -0
  4. package/dist/application/comparisonService.js +77 -0
  5. package/dist/application/comparisonService.js.map +1 -0
  6. package/dist/application/observationPersistence.js +1 -0
  7. package/dist/application/observationPersistence.js.map +1 -1
  8. package/dist/artifacts/artifactReader.d.ts +19 -0
  9. package/dist/artifacts/artifactReader.js +36 -0
  10. package/dist/artifacts/artifactReader.js.map +1 -0
  11. package/dist/artifacts/comparisonArtifactWriter.d.ts +41 -0
  12. package/dist/artifacts/comparisonArtifactWriter.js +67 -0
  13. package/dist/artifacts/comparisonArtifactWriter.js.map +1 -0
  14. package/dist/browser/chromiumAdapter.js +58 -4
  15. package/dist/browser/chromiumAdapter.js.map +1 -1
  16. package/dist/browser/evidenceCapture.d.ts +29 -2
  17. package/dist/browser/evidenceCapture.js +43 -19
  18. package/dist/browser/evidenceCapture.js.map +1 -1
  19. package/dist/browser/scrollCapture.d.ts +32 -0
  20. package/dist/browser/scrollCapture.js +163 -0
  21. package/dist/browser/scrollCapture.js.map +1 -0
  22. package/dist/browser/types.d.ts +3 -1
  23. package/dist/cli.js +299 -2
  24. package/dist/cli.js.map +1 -1
  25. package/dist/domain/comparison.d.ts +198 -0
  26. package/dist/domain/comparison.js +324 -0
  27. package/dist/domain/comparison.js.map +1 -0
  28. package/dist/domain/comparisonEngine.d.ts +48 -0
  29. package/dist/domain/comparisonEngine.js +694 -0
  30. package/dist/domain/comparisonEngine.js.map +1 -0
  31. package/dist/domain/comparisonIdentity.d.ts +13 -0
  32. package/dist/domain/comparisonIdentity.js +46 -0
  33. package/dist/domain/comparisonIdentity.js.map +1 -0
  34. package/dist/domain/evidence.d.ts +2 -0
  35. package/dist/domain/evidence.js +4 -0
  36. package/dist/domain/evidence.js.map +1 -1
  37. package/dist/domain/identity.d.ts +8 -3
  38. package/dist/domain/identity.js +9 -3
  39. package/dist/domain/identity.js.map +1 -1
  40. package/dist/domain/relationships.d.ts +168 -0
  41. package/dist/domain/relationships.js +343 -0
  42. package/dist/domain/relationships.js.map +1 -0
  43. package/dist/domain/schema.d.ts +116 -2
  44. package/dist/domain/schema.js +186 -2
  45. package/dist/domain/schema.js.map +1 -1
  46. package/dist/domain/scrollEvidence.d.ts +51 -0
  47. package/dist/domain/scrollEvidence.js +134 -0
  48. package/dist/domain/scrollEvidence.js.map +1 -0
  49. package/dist/index.d.ts +17 -4
  50. package/dist/index.js +9 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/request/request.d.ts +29 -0
  53. package/dist/request/request.js +108 -0
  54. package/dist/request/request.js.map +1 -1
  55. package/docs/ARCHITECTURE.md +110 -4
  56. package/docs/CI_CD.md +62 -6
  57. package/docs/COMMANDS.md +247 -6
  58. package/docs/CONTRACTS.md +172 -7
  59. package/docs/CURRENT_STATE.md +148 -10
  60. package/docs/DEVELOPMENT.md +52 -12
  61. package/docs/PROJECT_OVERVIEW.md +18 -11
  62. package/docs/QUICKSTART.md +7 -1
  63. package/docs/RELEASE.md +14 -7
  64. package/docs/ROADMAP.md +9 -0
  65. package/docs/SECURITY.md +14 -1
  66. package/docs/WORKFLOWS.md +90 -22
  67. package/package.json +1 -1
@@ -21,9 +21,9 @@ npm run check:docs
21
21
  npm pack --dry-run
22
22
  ```
23
23
 
24
- `npm test` runs the fast unit suite only (`tests/unit/`, currently 106
24
+ `npm test` runs the fast unit suite only (`tests/unit/`, currently 176
25
25
  passing tests). `npm run test:browser` runs the real-Chromium integration
26
- suite (`tests/browser/`, currently 69 passing tests) against deterministic
26
+ suite (`tests/browser/`, currently 88 passing tests) against deterministic
27
27
  local fixtures under `tests/fixtures/` and requires the Chromium binary
28
28
  above to be installed first; it is kept out of `npm test` because it
29
29
  launches a real browser and is slower.
@@ -62,25 +62,65 @@ It is what `.github/workflows/pre-release-readiness.yml` runs identically on
62
62
  Windows, Linux, and macOS against one shared candidate tarball (see
63
63
  `docs/CI_CD.md`); it can also be run locally the same way the workflow runs
64
64
  it. It is readiness/CI infrastructure only, not part of the published
65
- package and never imported by production code. It exercises both the
66
- legacy CSS-shorthand `--target` packed-observation shape and the
67
- structured semantic `--targets-file` shape in the same run - see
68
- `docs/CI_CD.md` for the current v0.2 readiness coverage.
65
+ package and never imported by production code. In the same run it
66
+ exercises the legacy CSS-shorthand `--target` packed-observation shape,
67
+ the structured semantic `--targets-file` shape, a `window-scroll-by`
68
+ scroll scenario, and a `target-scroll-by` scroll scenario - see
69
+ `docs/CI_CD.md` for the current readiness coverage.
69
70
 
70
71
  `scripts/dev/builtCliTargetsFileSmoke.mjs` is a separate, narrower v0.2
71
72
  development smoke, added alongside the `--targets-file` implementation: it
72
73
  runs the built `dist/cli.js` directly (`node dist/cli.js observe
73
74
  --targets-file ...`) against an inline disposable local HTTP fixture and a
74
75
  temporary JSON target file, proving a real semantic observation persists a
75
- valid schema-`1.1.0` artifact with no packed-tarball step involved. Run it
76
+ valid schema-`1.2.0` artifact with no packed-tarball step involved. Run it
76
77
  locally after `npm run build`:
77
78
 
78
79
  ```powershell
79
80
  node scripts/dev/builtCliTargetsFileSmoke.mjs
80
81
  ```
81
82
 
82
- Unlike `scripts/ci/runPackedObservationSmoke.mjs`, it is not wired into any
83
- CI workflow and is not a release gate - it is source-checkout development
84
- evidence only, proving the built CLI's `--targets-file` behavior without
85
- installing a packed tarball or requiring cross-platform infrastructure. It
86
- is not part of the published package.
83
+ `scripts/dev/builtCliScrollScenarioSmoke.mjs` is the v0.3 equivalent, added
84
+ alongside the `--scroll-scenario-file` implementation: it runs the built
85
+ `dist/cli.js` directly against an inline disposable local HTTP fixture,
86
+ once with a temporary `window-scroll-by` scenario file and once with a
87
+ temporary structured `--targets-file` plus a `target-scroll-by` scenario
88
+ file, proving both real runtime scroll actions persist a valid
89
+ schema-`1.2.0` artifact with populated `scrollScenarioEvidence`,
90
+ scenario-file path privacy, and target-application immutability. Run it
91
+ locally after `npm run build`:
92
+
93
+ ```powershell
94
+ node scripts/dev/builtCliScrollScenarioSmoke.mjs
95
+ ```
96
+
97
+ `scripts/dev/builtCliCompareSmoke.mjs` is the v0.4 equivalent, added
98
+ alongside the `compare` command implementation (shipped as part of the
99
+ published `0.4.0` package - see `docs/CURRENT_STATE.md`): it runs the built
100
+ `dist/cli.js` twice as
101
+ `observe` against an inline disposable local HTTP fixture whose served
102
+ content changes deterministically between the two runs (a real moved/
103
+ resized target, and a page-width transition from fitting to exceeding the
104
+ viewport), then runs the built `dist/cli.js compare` against the two
105
+ resulting persisted observation artifacts. It validates artifact kind/
106
+ schema `1.0.0`, `comparability: "comparable"`, source observation
107
+ references, at least one real `moved` difference and one real page-width
108
+ relationship change, that the comparison directory contains `manifest.json`
109
+ only, that no operational filesystem path leaked into the persisted
110
+ manifest, and that both source observation manifests are byte-identical
111
+ before and after the comparison ran. Run it locally after `npm run build`:
112
+
113
+ ```powershell
114
+ node scripts/dev/builtCliCompareSmoke.mjs
115
+ ```
116
+
117
+ Unlike `scripts/ci/runPackedObservationSmoke.mjs`, none of these three dev
118
+ smokes is wired into any CI workflow or is a release gate - they are
119
+ source-checkout development evidence only, proving the built CLI's
120
+ `--targets-file`/`--scroll-scenario-file`/`compare` behavior without
121
+ installing a packed tarball or requiring cross-platform infrastructure.
122
+ None is part of the published package. Cross-platform packed validation of
123
+ both the v0.1-v0.3 observation behavior and the v0.4 `compare` command is
124
+ `scripts/ci/runPackedObservationSmoke.mjs`'s responsibility (see
125
+ `docs/CI_CD.md`) - the same script, against the same single candidate
126
+ tarball per platform.
@@ -15,15 +15,22 @@ The responsibility split is stable:
15
15
 
16
16
  ## Current repository state
17
17
 
18
- v0.1, Runtime Observation Foundation, and v0.2, Stable Semantic Targets and
19
- Region Identity, are released, published to npm (current version `0.2.0`,
20
- observation schema `1.1.0`) and validated as a packed npm tarball in a
21
- clean consumer environment across Windows, Linux, and macOS: a real
22
- `observe` CLI command launches Chromium, enforces loopback-only safety,
23
- captures bounded page/target evidence via either legacy CSS-shorthand
24
- targets or structured semantic `--targets-file` targets, and persists one
25
- portable local artifact - see `docs/CURRENT_STATE.md` for the
26
- implementation summary. v0.3–v0.10 remain future and unimplemented.
18
+ v0.1, Runtime Observation Foundation; v0.2, Stable Semantic Targets and
19
+ Region Identity; v0.3, Runtime Scrolling, Overflow, and Visibility Behavior;
20
+ and v0.4, Layout Relationships, Dependency Evidence, and Before/After
21
+ Comparison, are released, published to npm (current version `0.4.0`,
22
+ observation schema `1.2.0`, comparison schema `1.0.0`) and validated as a
23
+ packed npm tarball in a clean consumer environment across Windows, Linux,
24
+ and macOS: a real `observe` CLI command launches Chromium, enforces
25
+ loopback-only safety, captures bounded page/target evidence via legacy
26
+ CSS-shorthand targets, structured semantic `--targets-file` targets, or a
27
+ bounded `--scroll-scenario-file` runtime scroll scenario
28
+ (`window-scroll-by` or `target-scroll-by`), and persists one portable local
29
+ artifact; a real `compare` CLI command reads two already-persisted
30
+ observation artifacts and derives before/after layout-relationship and
31
+ difference evidence without launching a browser - see
32
+ `docs/CURRENT_STATE.md` for the implementation summary. v0.5–v0.10 remain
33
+ future and unimplemented.
27
34
 
28
35
  The revised dependency path reaches practical coding-agent use before graphical
29
36
  interaction:
@@ -49,8 +56,8 @@ Repository-local authorities and navigation:
49
56
  capability plan and cross-milestone rules.
50
57
  - [ROADMAP.md](ROADMAP.md) owns version-level direction without prewritten
51
58
  implementation batches.
52
- - [CURRENT_STATE.md](CURRENT_STATE.md) records only current scaffold and release
53
- state.
59
+ - [CURRENT_STATE.md](CURRENT_STATE.md) records current implementation and
60
+ release state.
54
61
 
55
62
  Historical greenfield artifacts and reports are retained as evidence that an
56
63
  earlier run overreached into v0.1; they are not current-state authority.
@@ -22,7 +22,13 @@ node dist/cli.js observe `
22
22
  This launches Chromium, captures a screenshot plus bounded page/target
23
23
  evidence, and writes one portable artifact under `observations/<observation-id>/`.
24
24
  See [COMMANDS.md](COMMANDS.md) for the full flag reference, including the
25
- `--targets-file` structured semantic-target input.
25
+ `--targets-file` structured semantic-target input and the
26
+ `--scroll-scenario-file` bounded runtime scroll scenario input.
27
+
28
+ Once you have two such artifacts, `node dist/cli.js compare --before
29
+ <root> --after <root> --output comparisons` derives before/after evidence
30
+ between them without launching a browser again - see
31
+ [COMMANDS.md](COMMANDS.md#compare) for details.
26
32
 
27
33
  To validate the repository itself instead:
28
34
 
package/docs/RELEASE.md CHANGED
@@ -1,11 +1,18 @@
1
1
  # Release
2
2
 
3
- `v0.2.0` is published to npm as `my-frontend-observer`, validated on
3
+ `v0.4.0` is published to npm as `my-frontend-observer`, validated on
4
4
  Windows, Linux, and macOS as an installed packed-tarball consumer prior to
5
- publication (covering both the legacy CSS-shorthand `--target` path and the
6
- structured semantic `--targets-file` path). No project license has been
7
- declared yet; that decision remains open for a later explicit task.
5
+ publication (covering the legacy CSS-shorthand `--target` path, the
6
+ structured semantic `--targets-file` path, the bounded
7
+ `--scroll-scenario-file` `window-scroll-by`/`target-scroll-by` runtime
8
+ scroll scenario path, and the installed `compare` command's comparable and
9
+ incomparable cases). No project license has been declared yet; that
10
+ decision remains open for a later explicit task.
8
11
 
9
- Observation schema version and package version remain separate: package
10
- version is `0.2.0`; observation schema is `1.1.0` and does not change
11
- automatically with the package version.
12
+ Observation, comparison, and package version remain separate: package
13
+ version is `0.4.0`; observation schema is `1.2.0` and comparison schema is
14
+ `1.0.0`, neither of which changes automatically with the package version.
15
+
16
+ Prior releases: `v0.3.0` (Runtime Scrolling, Overflow, and Visibility
17
+ Behavior), `v0.2.0` (Stable Semantic Targets and Region Identity), `v0.1.0`
18
+ (Runtime Observation Foundation) - see `CHANGELOG.md`.
package/docs/ROADMAP.md CHANGED
@@ -60,6 +60,11 @@ identity persistence rules from current evidence.
60
60
 
61
61
  ## v0.3 — Runtime Scrolling, Overflow, and Visibility Behavior
62
62
 
63
+ Current status: released as `0.3.0`, published to npm and validated as a
64
+ packed npm tarball in a clean consumer environment on Windows, Linux, and
65
+ macOS (observation schema `1.2.0`). See `docs/CURRENT_STATE.md` for the
66
+ implementation summary.
67
+
63
68
  Objective/problem: show which container actually scrolls and what becomes
64
69
  visible, clipped, or overflowing after controlled actions. Required capabilities
65
70
  are bounded action scenarios, before/after window and target scroll positions,
@@ -72,6 +77,10 @@ syntax, stabilization, and visibility thresholds.
72
77
 
73
78
  ## v0.4 — Layout Relationships, Dependency Evidence, and Before/After Comparison
74
79
 
80
+ Current status: released as `0.4.0`, published to npm and validated as a
81
+ packed npm tarball in a clean consumer environment on Windows, Linux, and
82
+ macOS. See `docs/CURRENT_STATE.md` for the implementation summary.
83
+
75
84
  Objective/problem: explain whole-layout consequences rather than isolated
76
85
  numbers. Required capabilities are containment/order/overlap/fit relationships,
77
86
  comparable observation identity, before/after differences, appearance and
package/docs/SECURITY.md CHANGED
@@ -24,12 +24,25 @@ tests:
24
24
  unexpected internal error);
25
25
  - the observed target's own content/source is never modified by observation.
26
26
 
27
+ ## Comparison (`compare`, shipped as part of the published `0.4.0` package)
28
+
29
+ `my-frontend-observer compare` introduces no new network or browser
30
+ surface: it never
31
+ launches Chromium, never navigates, and never re-observes a target - it only
32
+ reads two local, already-persisted observation-artifact `manifest.json`
33
+ files (`src/artifacts/artifactReader.ts`) through the same structural
34
+ validator the observation writer uses, computes a pure in-memory
35
+ comparison, and writes one local comparison `manifest.json`
36
+ (`src/artifacts/comparisonArtifactWriter.ts`). Manifest content is parsed
37
+ as JSON only and is never executed (no `eval`, no dynamic code loading from
38
+ a manifest).
39
+
27
40
  ## Not yet addressed
28
41
 
29
42
  Certificate-failure-specific handling, permission-prompt-specific handling
30
43
  (Chromium's default deny-all applies; no permission is ever explicitly
31
44
  granted), and any non-loopback/remote browsing mode remain unimplemented and
32
- out of scope. `my-frontend-observer@0.2.0` is published to npm, and a
45
+ out of scope. `my-frontend-observer@0.4.0` is published to npm, and a
33
46
  pre-release readiness CI workflow (Windows/Linux/macOS packed-candidate
34
47
  validation) already exists (see `docs/CI_CD.md`); these are no longer future
35
48
  decisions. Those facts do not expand the security scope above: remote
package/docs/WORKFLOWS.md CHANGED
@@ -11,44 +11,111 @@ install dependencies (npm install; npx playwright install chromium)
11
11
  → validate documentation (npm run check:docs)
12
12
  ```
13
13
 
14
- ## Current observation workflow (published as 0.2.0)
14
+ ## Current observation workflow (published as 0.4.0)
15
15
 
16
- The real `observe` workflow, part of the published `my-frontend-observer@0.2.0`
17
- package, accepts target configuration through either of two input paths:
16
+ The real `observe` workflow, part of the published `my-frontend-observer@0.4.0`
17
+ package, accepts target configuration through either of two input paths,
18
+ plus one optional runtime scroll scenario:
18
19
 
19
20
  ```text
20
- CLI arguments (--url, --viewport, --output, --timeout, and exactly one of:
21
+ CLI arguments (--url, --viewport, --output, --timeout, exactly one of:
21
22
  one-or-more --target <id=css-selector>
22
- or --targets-file <json-file>)
23
+ or --targets-file <json-file>,
24
+ plus optionally --scroll-scenario-file <json-file>)
23
25
  → (--targets-file only: read + validate the local JSON root wrapper)
26
+ → (--scroll-scenario-file only: read + validate the local JSON root shape -
27
+ a non-array object; the file supplies RawObservationRequest.scrollScenario
28
+ directly, with no wrapper field)
24
29
  → request construction (same RawObservationRequest either way)
25
- → normalizeRequest() - producing canonical {name, locators} targets
30
+ → normalizeRequest() - producing canonical {name, locators} targets and
31
+ validating the optional scrollScenario (supported action kind, delta
32
+ bounds/both-zero rule, stable target-name reference)
26
33
  → application observation use case (src/application/observationPersistence.ts#observe)
27
- → Chromium capture (launch, safe navigation, readiness, screenshot,
28
- page/target evidence), resolving all six locator kinds through the single
29
- canonical resolver, plus semantic state/landmark/containment evidence,
30
- from the same live page - exactly once
34
+ → Chromium capture: launch, safe navigation, readiness, then - only if a
35
+ scenario was configured - resolve configured targets once, capture an
36
+ initial ScrollRuntimeSnapshot, perform the one immediate scroll
37
+ (window.scrollBy/element.scrollBy, behavior: "instant"), wait exactly two
38
+ requestAnimationFrame cycles, capture a final ScrollRuntimeSnapshot and
39
+ derive transition/scroll-owner evidence; then screenshot and page/target
40
+ evidence (resolving all six locator kinds through the single canonical
41
+ resolver, plus semantic state/landmark/containment evidence), from the
42
+ same live page - exactly once, always describing the final state
31
43
  → atomic artifact persistence (manifest.json + screenshot.png), schema
32
- 1.1.0 - exactly once, only on a successful capture
44
+ 1.2.0 - exactly once, only on a successful capture; scrollScenarioEvidence
45
+ is simply one more optional manifest field, never a separate file
33
46
  → concise CLI result (Observation/State/Artifact/Targets/Diagnostics)
34
47
  → process exit status (0 for a persisted observation, including one whose
35
48
  state honestly reports "partial"; nonzero otherwise)
36
49
  ```
37
50
 
51
+ A request with no scroll scenario is unaffected: no extra snapshots, no
52
+ scroll, no extra animation-frame wait, unchanged request identity.
53
+
38
54
  This is exercised by `runCli()`-level tests, real-Chromium end-to-end tests
39
- (`tests/browser/cliObserve.test.ts`), a built
40
- `node dist/cli.js observe ...` run against the deterministic local fixture
41
- (including `scripts/dev/builtCliTargetsFileSmoke.mjs` for the semantic
42
- `--targets-file` path), and the real `npm pack` tarball installed and run
43
- from a clean temporary consumer directory outside the repository, on
44
- Windows, Linux, and macOS - the same workflow, independent of the source
45
- checkout.
55
+ (`tests/browser/cliObserve.test.ts`, `tests/browser/windowScrollScenario.test.ts`,
56
+ `tests/browser/targetScrollScenario.test.ts`), built `node dist/cli.js
57
+ observe ...` runs against the deterministic local fixture
58
+ (`scripts/dev/builtCliTargetsFileSmoke.mjs` for the semantic `--targets-file`
59
+ path, `scripts/dev/builtCliScrollScenarioSmoke.mjs` for the scroll-scenario
60
+ path), and the real `npm pack` tarball installed and run from a clean
61
+ temporary consumer directory outside the repository, on Windows, Linux, and
62
+ macOS (`scripts/ci/runPackedObservationSmoke.mjs`) - the same workflow,
63
+ independent of the source checkout.
64
+
65
+ ## Current comparison workflow (published as 0.4.0)
66
+
67
+ **Current status: shipped as part of the published `my-frontend-observer@0.4.0`
68
+ package.** This is a separate workflow from the observation workflow above -
69
+ it consumes two already-persisted observation artifacts rather than
70
+ producing one, and it never launches a browser:
71
+
72
+ ```text
73
+ two prior real "observe" invocations, each producing its own persisted
74
+ ObservationArtifact (before, after) - unrelated to this workflow itself
75
+ → CLI arguments (--before <root>, --after <root>, --output <directory>,
76
+ optionally --config-file <json-file>)
77
+ → (--config-file only: read + validate the local JSON root shape - a
78
+ non-array object; the file supplies ComparisonConfig directly, with no
79
+ wrapper field)
80
+ → read + validate both observation artifacts (src/artifacts/artifactReader.ts,
81
+ the same isValidObservationArtifact structural gate the writer uses)
82
+ → application comparison use case
83
+ (src/application/comparisonService.ts#compareAndPersistFromArtifactRoots
84
+ → compareAndPersist)
85
+ → pure comparison derivation (src/domain/comparisonEngine.ts#compareObservations):
86
+ comparability first, then - only if comparable/comparable-with-warnings -
87
+ deriveLayoutRelationships for each side plus target/page differences,
88
+ relationship changes, and explicit non-causal dependency evidence
89
+ → atomic comparison-artifact persistence (manifest.json only, no copied
90
+ screenshots), schema 1.0.0 - exactly once, for every comparability
91
+ outcome including "incomparable"
92
+ → concise CLI result (Comparison/State/Artifact/Differences/Relationship
93
+ changes/Diagnostics)
94
+ → process exit status (0 for any successfully computed and persisted
95
+ comparison, including "incomparable"; nonzero only for invalid
96
+ syntax/unreadable or invalid source artifacts/invalid configuration/a
97
+ failed write)
98
+ ```
99
+
100
+ Source observations are never modified by this workflow. Operational paths
101
+ (`--before`/`--after`/`--config-file`/`--output`) never affect
102
+ `comparisonRequestId` and are never written into the persisted manifest.
103
+
104
+ This is exercised by `runCli()`-level tests
105
+ (`tests/unit/cli.test.ts`, `tests/unit/cliCompareOrchestration.test.ts`,
106
+ `tests/unit/cliCompareEndToEnd.test.ts`), a real-Chromium end-to-end test
107
+ (`tests/browser/cliCompare.test.ts`), built `node dist/cli.js compare ...`
108
+ runs against real persisted observations from the deterministic local
109
+ fixture (`scripts/dev/builtCliCompareSmoke.mjs`), and packed-tarball
110
+ validation of the installed `compare` command
111
+ (`scripts/ci/runPackedObservationSmoke.mjs` - see `docs/CI_CD.md`).
46
112
 
47
- The future dependency order after observation is:
113
+ ## Future workflows
48
114
 
49
115
  ```text
50
116
  stable targets and bounded runtime behavior
51
- → relationships, comparison, and safe-change contracts
117
+ → relationships and before/after comparison (released - see above)
118
+ → safe-change contracts
52
119
  → bounded agent context plus runtime/static ecosystem integration
53
120
  → text/config-driven coding-agent change review
54
121
  → interactive viewer
@@ -56,5 +123,6 @@ stable targets and bounded runtime behavior
56
123
  → full visual human–LLM workflow
57
124
  ```
58
125
 
59
- None of these later workflows is implemented. The v0.7 coding-agent workflow
60
- must work without the v0.8 viewer or v0.9 annotation system.
126
+ Safe-change contracts (v0.5+) and everything after remain unimplemented. The
127
+ v0.7 coding-agent workflow must work without the v0.8 viewer or v0.9
128
+ annotation system.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "my-frontend-observer",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Local-first browser runtime evidence producer",
5
5
  "type": "module",
6
6
  "repository": {