@dailephd/my-frontend-observer 0.9.1 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/CHANGELOG.md +490 -471
  2. package/LICENSE +21 -21
  3. package/README.md +375 -357
  4. package/dist/application/projectCheckService.d.ts +6 -0
  5. package/dist/application/projectCheckService.js +8 -1
  6. package/dist/application/projectCheckService.js.map +1 -1
  7. package/dist/application/projectWorkflowService.d.ts +7 -2
  8. package/dist/application/projectWorkflowService.js +10 -3
  9. package/dist/application/projectWorkflowService.js.map +1 -1
  10. package/dist/application/visualChangeAgentHandoffService.d.ts +28 -0
  11. package/dist/application/visualChangeAgentHandoffService.js +111 -0
  12. package/dist/application/visualChangeAgentHandoffService.js.map +1 -0
  13. package/dist/application/visualChangeProjectWorkflowService.d.ts +95 -0
  14. package/dist/application/visualChangeProjectWorkflowService.js +376 -0
  15. package/dist/application/visualChangeProjectWorkflowService.js.map +1 -0
  16. package/dist/application/visualChangeReviewService.d.ts +50 -0
  17. package/dist/application/visualChangeReviewService.js +69 -0
  18. package/dist/application/visualChangeReviewService.js.map +1 -0
  19. package/dist/application/visualChangeWorkflowPersistenceService.d.ts +26 -0
  20. package/dist/application/visualChangeWorkflowPersistenceService.js +15 -0
  21. package/dist/application/visualChangeWorkflowPersistenceService.js.map +1 -0
  22. package/dist/artifacts/visualChangeWorkflowArtifactReader.d.ts +9 -0
  23. package/dist/artifacts/visualChangeWorkflowArtifactReader.js +47 -0
  24. package/dist/artifacts/visualChangeWorkflowArtifactReader.js.map +1 -0
  25. package/dist/artifacts/visualChangeWorkflowArtifactWriter.d.ts +20 -0
  26. package/dist/artifacts/visualChangeWorkflowArtifactWriter.js +41 -0
  27. package/dist/artifacts/visualChangeWorkflowArtifactWriter.js.map +1 -0
  28. package/dist/cli.js +9 -7
  29. package/dist/cli.js.map +1 -1
  30. package/dist/domain/visualChangeAgentHandoff.d.ts +82 -0
  31. package/dist/domain/visualChangeAgentHandoff.js +80 -0
  32. package/dist/domain/visualChangeAgentHandoff.js.map +1 -0
  33. package/dist/domain/visualChangeAgentHandoffSerialization.d.ts +2 -0
  34. package/dist/domain/visualChangeAgentHandoffSerialization.js +11 -0
  35. package/dist/domain/visualChangeAgentHandoffSerialization.js.map +1 -0
  36. package/dist/domain/visualChangeCycle.d.ts +8 -0
  37. package/dist/domain/visualChangeCycle.js +7 -0
  38. package/dist/domain/visualChangeCycle.js.map +1 -0
  39. package/dist/domain/visualChangeWorkflow.d.ts +125 -0
  40. package/dist/domain/visualChangeWorkflow.js +109 -0
  41. package/dist/domain/visualChangeWorkflow.js.map +1 -0
  42. package/dist/domain/visualChangeWorkflowIdentity.d.ts +5 -0
  43. package/dist/domain/visualChangeWorkflowIdentity.js +24 -0
  44. package/dist/domain/visualChangeWorkflowIdentity.js.map +1 -0
  45. package/dist/index.d.ts +21 -1
  46. package/dist/index.js +12 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/projectWorkflow/projectPaths.d.ts +3 -0
  49. package/dist/projectWorkflow/projectPaths.js +7 -0
  50. package/dist/projectWorkflow/projectPaths.js.map +1 -1
  51. package/dist/viewer/assets/index-DglJ6f28.css +1 -0
  52. package/dist/viewer/assets/index-DsODREY5.js +9 -0
  53. package/dist/viewer/index.html +15 -15
  54. package/dist/viewer/sw.js +1 -1
  55. package/dist/viewerServer/evidence/classify.d.ts +3 -1
  56. package/dist/viewerServer/evidence/classify.js +10 -0
  57. package/dist/viewerServer/evidence/classify.js.map +1 -1
  58. package/dist/viewerServer/evidence/handles.js +1 -0
  59. package/dist/viewerServer/evidence/handles.js.map +1 -1
  60. package/dist/viewerServer/evidence/projection.d.ts +5 -0
  61. package/dist/viewerServer/evidence/projection.js +19 -0
  62. package/dist/viewerServer/evidence/projection.js.map +1 -1
  63. package/dist/viewerServer/evidence/visualChangeWorkflowView.d.ts +31 -0
  64. package/dist/viewerServer/evidence/visualChangeWorkflowView.js +36 -0
  65. package/dist/viewerServer/evidence/visualChangeWorkflowView.js.map +1 -0
  66. package/dist/viewerServer/httpServer.js +323 -1
  67. package/dist/viewerServer/httpServer.js.map +1 -1
  68. package/dist/viewerServer/referenceApproval.d.ts +22 -0
  69. package/dist/viewerServer/referenceApproval.js +42 -0
  70. package/dist/viewerServer/referenceApproval.js.map +1 -0
  71. package/dist/viewerServer/referenceVisualChangeAuthoring.d.ts +28 -0
  72. package/dist/viewerServer/referenceVisualChangeAuthoring.js +134 -0
  73. package/dist/viewerServer/referenceVisualChangeAuthoring.js.map +1 -0
  74. package/dist/viewerServer/runtimeVisualChangeAuthoring.d.ts +33 -0
  75. package/dist/viewerServer/runtimeVisualChangeAuthoring.js +81 -0
  76. package/dist/viewerServer/runtimeVisualChangeAuthoring.js.map +1 -0
  77. package/dist/viewerServer/visualChangeAuthoring.d.ts +46 -0
  78. package/dist/viewerServer/visualChangeAuthoring.js +63 -0
  79. package/dist/viewerServer/visualChangeAuthoring.js.map +1 -0
  80. package/dist/viewerServer/visualChangeHandoff.d.ts +23 -0
  81. package/dist/viewerServer/visualChangeHandoff.js +31 -0
  82. package/dist/viewerServer/visualChangeHandoff.js.map +1 -0
  83. package/dist/viewerServer/visualChangeReview.d.ts +30 -0
  84. package/dist/viewerServer/visualChangeReview.js +46 -0
  85. package/dist/viewerServer/visualChangeReview.js.map +1 -0
  86. package/docs/ARCHITECTURE.md +1394 -1373
  87. package/docs/CI_CD.md +349 -327
  88. package/docs/COMMANDS.md +1035 -1012
  89. package/docs/CONTRACTS.md +1971 -1926
  90. package/docs/CURRENT_STATE.md +1277 -1238
  91. package/docs/DEVELOPMENT.md +240 -237
  92. package/docs/DOCUMENTATION_PRESERVATION_POLICY.md +50 -50
  93. package/docs/PROJECT_DESCRIPTION.md +2248 -2224
  94. package/docs/PROJECT_MILESTONES.md +2681 -2558
  95. package/docs/PROJECT_OVERVIEW.md +200 -191
  96. package/docs/QUICKSTART.md +100 -96
  97. package/docs/RELEASE.md +37 -33
  98. package/docs/ROADMAP.md +1105 -1033
  99. package/docs/SECURITY.md +297 -275
  100. package/docs/WORKFLOWS.md +806 -770
  101. package/docs/plans/v0.10-implementation-plan.md +1509 -0
  102. package/docs/plans/v0.8-implementation-plan.md +655 -655
  103. package/docs/plans/v0.8.1-cli-usability-patch-plan.md +505 -505
  104. package/docs/plans/v0.9-implementation-plan.md +1529 -1529
  105. package/docs/plans/v0.9.1-implementation-plan.md +468 -468
  106. package/docs/reports/v0.10-batch1-visual-change-workflow-foundation.md +102 -0
  107. package/docs/reports/v0.10-batch2-project-composition-check-recording.md +103 -0
  108. package/docs/reports/v0.10-batch3-viewer-visual-change-workspace.md +93 -0
  109. package/docs/reports/v0.10-batch4-actual-frontend-entry.md +59 -0
  110. package/docs/reports/v0.10-batch5-reference-driven-entry.md +238 -0
  111. package/docs/reports/v0.10-batch6-coding-agent-handoff.md +85 -0
  112. package/docs/reports/v0.10-batch7-correction-review-acceptance.md +145 -0
  113. package/docs/reports/v0.10-batch8-integrated-acceptance.md +109 -0
  114. package/docs/reports/v0.10-implementation-completeness-documentation-reconciliation.md +344 -0
  115. package/docs/reports/v0.10-pre-release-readiness.md +120 -0
  116. package/docs/reports/v0.10-release-preparation.md +70 -0
  117. package/docs/reports/v0.10.1-project-check-baseline-context-implementation.md +86 -0
  118. package/docs/reports/v0.7-bounded-fidelity-context-prompt7.md +243 -243
  119. package/docs/reports/v0.7-implementation-completeness-documentation-reconciliation.md +497 -497
  120. package/docs/reports/v0.7-pre-release-readiness.md +337 -337
  121. package/docs/reports/v0.7-reference-binding-prompt5.md +223 -223
  122. package/docs/reports/v0.7-reference-compatibility-prompt4.md +234 -234
  123. package/docs/reports/v0.7-reference-correction-workflow-prompt8.md +222 -222
  124. package/docs/reports/v0.7-reference-fidelity-prompt6.md +216 -216
  125. package/docs/reports/v0.7-reference-foundation-prompt1.md +151 -151
  126. package/docs/reports/v0.7-reference-regions-prompt2.md +195 -195
  127. package/docs/reports/v0.7-reference-requirements-prompt3.md +217 -217
  128. package/docs/reports/v0.7-release-prep.md +423 -423
  129. package/docs/reports/v0.8-binding-fidelity-interaction-batch6.md +279 -279
  130. package/docs/reports/v0.8-bounded-context-correlation-batch7.md +233 -233
  131. package/docs/reports/v0.8-comparison-contract-inspection-batch4.md +279 -279
  132. package/docs/reports/v0.8-evidence-index-readers-batch2.md +247 -247
  133. package/docs/reports/v0.8-implementation-completeness-documentation-reconciliation.md +741 -741
  134. package/docs/reports/v0.8-integrated-viewer-acceptance-batch8.md +128 -128
  135. package/docs/reports/v0.8-observation-svg-inspection-batch3.md +223 -223
  136. package/docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md +687 -687
  137. package/docs/reports/v0.8-reference-candidate-inspection-batch5.md +232 -232
  138. package/docs/reports/v0.8-viewer-runtime-pwa-batch1.md +278 -278
  139. package/docs/reports/v0.8.1-implementation-completeness-documentation-reconciliation.md +114 -114
  140. package/docs/reports/v0.8.1-prerelease-readiness-cross-platform-security-code-rot.md +170 -170
  141. package/docs/reports/v0.9-architecture-retrieval.md +14 -37
  142. package/docs/reports/v0.9-final-pre-release-readiness.md +209 -209
  143. package/docs/reports/v0.9-final-readiness-corrections.md +530 -530
  144. package/docs/reports/v0.9-pre-release-readiness.md +169 -169
  145. package/docs/reports/v0.9.1-batch1-pwa-hard-gate-isolation.md +359 -359
  146. package/docs/reports/v0.9.1-batch2-hard-gate-validation-integration.md +262 -262
  147. package/docs/reports/v0.9.1-pre-release-readiness.md +206 -206
  148. package/package.json +59 -59
  149. package/dist/viewer/assets/index-BN41MI7m.css +0 -1
  150. package/dist/viewer/assets/index-CkKXnlrI.js +0 -9
@@ -1,337 +1,337 @@
1
- # v0.7 Pre-Release Readiness Report
2
-
3
- **Verdict: `PASS_READY_FOR_RELEASE_PREP`**
4
-
5
- This report documents a pre-release readiness validation pass over the completed,
6
- audited v0.7 implementation. It proves the implementation is ready to enter a
7
- separate release-preparation stage. It does **not** authorize publication, does
8
- **not** bump the package version, and does **not** merge to `master`.
9
-
10
- ## Commit identity
11
-
12
- | Label | Commit |
13
- |---|---|
14
- | Audited v0.7 baseline (starting point) | `4b2a51c62f47fd1244ceab42cb37bb111cb90259` — "Add v0.7 implementation-completeness audit report" |
15
- | Documentation reconciliation commit | `8b6c669` |
16
- | **VALIDATED_CANDIDATE_HEAD** (cross-platform CI run 34054085344 validated this exact commit) | `b2286bdc9550d70fa1047a1f732968a8eca46a1e` — "Close v0.7 pre-release readiness coverage gap in packed-candidate smoke" |
17
- | **REPORT_COMMIT** | this commit (added after the successful CI run; contains only this report — no product/readiness behavior changes) |
18
-
19
- Branch: `validation/v0.7-pre-release`, created from the exact audited v0.7 HEAD
20
- (`4b2a51c`), fast-forwarded by exactly one readiness-infrastructure commit
21
- (`b2286bd`), then this report commit. No product source under `src/` changed at
22
- any point in this readiness stage.
23
-
24
- Preflight confirmed the full Prompt 1–8 commit lineage is present and ancestors
25
- of HEAD, the working tree was clean, and Prompt 1's preserved speculative-write
26
- stash (`stash@{0}`, "stray-fork-writes-preserved-for-reference") remains
27
- untouched — never applied, dropped, committed, or used as test evidence.
28
-
29
- ## Readiness infrastructure change (the only tracked change in this stage)
30
-
31
- Commit `b2286bd` on `validation/v0.7-pre-release`:
32
-
33
- 1. **Closed a real v0.7 packed-candidate coverage gap.** Inspecting the
34
- existing CI smoke (`scripts/ci/runPackedObservationSmoke.mjs`) before
35
- running it showed thorough v0.1–v0.6 installed-candidate coverage but
36
- **zero** v0.7 coverage — no `import-reference`/`approve-reference`/
37
- `evaluate-reference-fidelity` CLI exercise, and none of the v0.7
38
- programmatic exports (`evaluateReferenceCandidateFidelityFromArtifactRoots`,
39
- `prepareReferenceCorrection`, `reviewReferenceCorrectionAttempt`). Per the
40
- task's readiness-coverage-gap rule, this was treated as a readiness gap,
41
- not a product defect, and closed narrowly inside the existing smoke script
42
- rather than building a second parallel framework:
43
- - Real CLI help-flag assertions for all three new v0.7 commands.
44
- - A real external-reference image imported and approved through the
45
- installed CLI, with explicit regions (`nav-region`/`workspace-region`/
46
- `rail-region`), three requirement kinds (`region-property`,
47
- `region-relationship`, and tolerance kinds `exact`/`absolute-reference-px`),
48
- and declared `applicability.viewport`.
49
- - Explicit region↔runtime-target bindings, reusing the same runtime
50
- targets (`navigation`/`workspace`/`rail`) already used by the existing
51
- v0.5 contract-fixture geometry — no second fixture was built.
52
- - A genuine fidelity **PASS** (against the already-captured "success"
53
- candidate) and a genuine fidelity **FAIL** (against the already-captured
54
- "protected-regression" candidate), each checked both with and without
55
- `--enforce`, mirroring the existing `evaluate-contract` PASS/FAIL/
56
- `--enforce` proof pattern already in the script.
57
- - An `observe --state-file` call proving `requestConfig.explicitState`
58
- round-trips through the installed candidate.
59
- - Programmatic exercise of `evaluateReferenceCandidateFidelityFromArtifactRoots`,
60
- `readExternalReferenceArtifact`, `prepareReferenceCorrection` (asserting
61
- `status: 'handoff-ready'` and a bounded-agent-context artifact with the
62
- correct `artifactKind`, exercising v0.7 Prompt 7's bounded fidelity
63
- projection and the v0.6 bounded-agent-context integration together), and
64
- `reviewReferenceCorrectionAttempt` against both the success candidate
65
- (`overallState: 'pass'`, `approvalEligible: true`) and the regression
66
- candidate (`overallState: 'fail'`, `approvalEligible: false`) — all
67
- resolved from the installed package's own `node_modules`, never the
68
- source checkout.
69
- - A re-hash of the pre-existing source observation manifest to confirm the
70
- new v0.7 calls did not mutate it (observer source immutability).
71
- 2. **Fixed an unrelated lint gap.** `eslint.config.js`'s `ignores` list
72
- predates this task's mandated `.my-dev-kit-workflow/` project-local
73
- workflow convention (npm cache, temp consumer installs, candidate
74
- tarballs, Playwright browser downloads) and only covered
75
- `.my-dev-kit/`/`.my-dev-kit-orchestrator/`. Running `npm run lint` with
76
- Chromium downloaded to `.my-dev-kit-workflow/pw-browsers/` surfaced 20
77
- `no-undef` errors from ESLint parsing Chromium's own bundled JS resources.
78
- Added `.my-dev-kit-workflow/**` and `.my-dev-kit-context/**` to the ignore
79
- list. This is a dev-tooling config fix, not a production behavior change.
80
-
81
- No production source (`src/**`) changed. No test was weakened, skipped, or
82
- deleted. No package metadata changed.
83
-
84
- ## Local full validation (on `b2286bd`)
85
-
86
- Environment: Windows 11, Node `v24.11.0`, npm `11.14.0` (satisfies the
87
- repository's `"node": ">=24"` engines constraint). All caches/temp
88
- state/candidate artifacts kept under `.my-dev-kit-workflow/` (gitignored,
89
- project-local — npm cache, Playwright browser downloads, and the readiness
90
- output directory), never under `C:\`.
91
-
92
- | Step | Result |
93
- |---|---|
94
- | `npm ci` | clean install, 132 packages, 0 vulnerabilities |
95
- | Chromium install (`playwright install chromium`, `PLAYWRIGHT_BROWSERS_PATH` project-local) | succeeded |
96
- | `npm run typecheck` | clean |
97
- | `npm run lint` | clean (after the ignore-list fix above) |
98
- | `npm test` | **1000/1000 unit tests passed** (50 files) — matches the expected ~1000 baseline exactly |
99
- | `npm run test:browser` | **124/124 browser tests passed** (10 files, real Chromium) — matches the expected ~124 baseline exactly |
100
- | `npm run test:security` | **68/68 passed** (5 in `tests/unit/policy.test.ts` + 63 in `tests/browser/chromiumAdapter.test.ts`) |
101
- | `npm run build` | clean |
102
- | `npm run check:docs` | "Documentation check passed (17 required files)." |
103
- | `git diff --check` | clean (no whitespace errors) |
104
- | `npm pack --dry-run` | 207 entries, only `dist/**`, `README.md`, `CHANGELOG.md`, `docs/**`, `package.json` — no `.my-dev-kit-*`, no `node_modules`, no test/script files |
105
-
106
- No unexplained test-count reduction — every count matches the previous audited
107
- baseline exactly. No flake was encountered locally or in CI (see "Known flake
108
- investigation" below).
109
-
110
- ## Version-specific v0.7 validation
111
-
112
- All of the following remain covered by passing unit and/or browser tests
113
- (confirmed present in `tests/unit/` and `tests/browser/` and passing in the
114
- 1000+124 counts above): external-reference artifact/lifecycle
115
- (`externalReference.test.ts`, `externalReferenceArtifactWriter.test.ts`,
116
- `externalReferencePersistenceService.test.ts`, `cliExternalReference.test.ts`),
117
- regions/geometry (`externalReferenceRegions.test.ts`,
118
- `externalReferenceRegionRelationships.test.ts`), selected requirements
119
- (`externalReferenceRequirements.test.ts`,
120
- `externalReferenceRequirementIdentity.test.ts`), reference adequacy (covered
121
- within the requirements suite), explicit state/applicability
122
- (`explicitState.test.ts`, `externalReferenceApplicability.test.ts`),
123
- reference/candidate compatibility (`externalReferenceCompatibility.test.ts`),
124
- region↔runtime-target binding (`externalReferenceRuntimeBinding.test.ts`),
125
- fidelity evaluation (`externalReferenceFidelity.test.ts`,
126
- `cliEvaluateReferenceFidelity.test.ts`), bounded fidelity projection /
127
- bounded-agent-context integration (`boundedAgentContextProjection.test.ts`,
128
- `boundedAgentContext.test.ts`), and the end-to-end correction workflow
129
- (`referenceCorrectionWorkflow.test.ts`, a **browser** test using real
130
- Chromium). This readiness stage additionally proved every one of these
131
- capabilities through the **installed npm package**, not just the source
132
- checkout (see candidate coverage below) — something the pre-existing unit/
133
- browser suites alone do not prove.
134
-
135
- ## Command smoke (built CLI, source checkout)
136
-
137
- `node dist/cli.js --help` and per-command `--help` were exercised for every
138
- v0.7 and inherited command. All present and exiting 0:
139
- `import-reference`, `approve-reference`, `evaluate-reference-fidelity`,
140
- `observe`, `compare`, `approve-baseline`, `save-change-contract`,
141
- `evaluate-contract`.
142
-
143
- ## Package content inspection
144
-
145
- `npm pack --dry-run --json` on `b2286bd`: 207 files, package size 475.4 kB,
146
- unpacked 2.0 MB. Contents are exactly `dist/**` (built JS/`.d.ts`/source maps),
147
- `README.md`, `CHANGELOG.md`, `docs/**` (including the nine v0.7 prompt
148
- implementation reports and the documentation-reconciliation report), and
149
- `package.json`. No `.my-dev-kit-*` directory, no `node_modules`, no local
150
- cache, no temporary consumer files, no candidate logs, no secret/private
151
- file, and no Prompt 1 stash content appears anywhere in the inventory. No
152
- package inclusion rule was changed — the existing `"files"` policy already
153
- produces a correct inventory.
154
-
155
- ## Candidate identity
156
-
157
- One exact candidate tarball was built from the validated `b2286bd` source
158
- state and used unmodified across the entire cross-platform matrix.
159
-
160
- | Field | Value |
161
- |---|---|
162
- | Candidate filename | `my-frontend-observer-0.6.0.tgz` |
163
- | Source commit | `b2286bdc9550d70fa1047a1f732968a8eca46a1e` |
164
- | Package version | `0.6.0` (unchanged) |
165
- | **CI-built candidate SHA-256 (the one validated cross-platform)** | `0347b1f3cfd5d311e13b405c0c2fbc2f507e250cb63223d58b4d2d31df029414` |
166
- | Package contents | identical 207-entry inventory described above |
167
-
168
- Note: a separate local `npm pack` invocation on the same commit (used for a
169
- local pre-push packed-smoke dry run under `.my-dev-kit-workflow/readiness/`,
170
- never pushed or distributed) produced a different SHA
171
- (`ab8c2b6432285c113026e2d4399f238cb13aea2617bc80ec5bbbe4318cb3189b`) — this is
172
- expected and immaterial: `npm pack` tarballs are not byte-reproducible across
173
- separate invocations (gzip/tar timestamp metadata differs) even for identical
174
- file content. The only SHA-256 that matters for the cross-platform readiness
175
- claim is the one the CI **candidate** job produced once and that all three
176
- matrix lanes independently verified — see below.
177
-
178
- ## Local clean-consumer install / packed smoke
179
-
180
- The repository's existing packed-observation smoke
181
- (`scripts/ci/runPackedObservationSmoke.mjs`, extended as described above) was
182
- run locally against the exact locally-built candidate tarball before pushing.
183
- It installs the tarball into a fresh, disposable consumer directory (a
184
- temp directory, per this pre-existing script's own established design —
185
- matching what CI's `windows-latest`/`ubuntu-latest`/`macos-latest` runners
186
- also do, since GitHub-hosted runners have no meaningfully more "project-local"
187
- location for an ephemeral job container), installs Chromium through that
188
- consumer's own installed Playwright dependency (never the source checkout's),
189
- and exercises the installed bin/exports directly. Result: `SMOKE PASS`, with
190
- every `summary.*Ok` flag `true`, including the new `v07PackedSmokeOk`.
191
-
192
- ## Security validation
193
-
194
- `npm run test:security` (68/68 passed) plus source/test inspection of v0.7
195
- security-sensitive surfaces:
196
-
197
- - **External image file input**: format/dimension detection reads only
198
- bounded header bytes (`externalReferenceImage.ts`), never decodes pixel
199
- data; malformed/truncated/oversized inputs are rejected with structured
200
- diagnostics (`externalReferenceImage.test.ts`).
201
- - **Region/requirements/applicability config input**: all three CLI file
202
- loaders (`loadRegionsFile`/`loadRequirementsFile`/`loadApplicabilityFile`)
203
- own only root-shape/JSON-parse syntax; every content rule (bounds, id
204
- patterns, category/tolerance/subject validity) is owned by the domain
205
- validators they call into, covered by
206
- `externalReferenceRegions.test.ts`/`externalReferenceRequirements.test.ts`/
207
- `externalReferenceApplicability.test.ts`.
208
- - **State-file input**: `loadStateFile` is root-shape-only; label pattern and
209
- `authenticatedState` enum are enforced by `isValidExplicitStateDimensions`
210
- (`explicitState.test.ts`). The state vocabulary is explicitly documented as
211
- never a place for credentials/tokens/cookies/session ids.
212
- - **Bindings file**: `loadBindingsFile` is root-shape-only; every bound-region
213
- existence/uniqueness/pattern rule is owned by
214
- `isValidReferenceRuntimeBindingDeclarations`
215
- (`externalReferenceRuntimeBinding.test.ts`).
216
- - **Path traversal / operational-path privacy**: the extended smoke itself
217
- re-verifies (as the pre-existing v0.4/v0.5/v0.6 sections already did) that
218
- no operational absolute filesystem path (consumer dir, artifact roots,
219
- config file paths) leaks into any persisted manifest, across the new v0.7
220
- calls too.
221
- - **No credential-bearing explicit-state data**: confirmed by the
222
- `ExplicitStateDimensions`/`ExternalReferenceApplicability` closed field
223
- vocabularies (`theme`/`applicationState`/`authenticatedState`/`viewport`
224
- only) — no field exists for tokens/cookies/headers.
225
- - **Reference/observation artifact immutability**: the extended smoke
226
- re-hashes the pre-existing baseline observation manifest after running all
227
- new v0.7 CLI/programmatic calls and confirms it is byte-identical.
228
- - **No external AI/network upload**: `referenceCorrectionWorkflow.ts`'s own
229
- module doc explicitly states it "never calls a remote AI provider"; grep of
230
- `src/` confirms no `fetch`/network client exists outside the browser
231
- automation and observer's own disposable local HTTP fixture use in tests.
232
- - **No observer source editing**: `prepareReferenceCorrection`/
233
- `reviewReferenceCorrectionAttempt` are pure, synchronous, in-memory
234
- functions with no filesystem write capability — they return structured
235
- results only; source-editing is explicitly the external actor's own
236
- separate responsibility per the module's documented contract.
237
-
238
- No security failure, resolved or unresolved, was found.
239
-
240
- ## Cross-platform CI result
241
-
242
- - **Run**: [34054085344](https://github.com/dailephd/my-frontend-observer/actions/runs/34054085344) ("Pre-release readiness"), triggered by the push of `validation/v0.7-pre-release` at commit `b2286bd`.
243
- - **Candidate job** ("Package exact candidate (Linux, Node 24)"): **success**, 1m34s. Node `v24.20.0`, npm `11.19.0`. Reproduced the exact same test counts as local: 1000 unit / 124 browser / 5+63 security. Produced exactly one tarball and one SHA-256.
244
- - **Windows matrix** (`windows-latest exact-candidate smoke`): **success**, 1m22s. Node `v24.19.0`.
245
- - **Linux matrix** (`ubuntu-latest exact-candidate smoke`): **success**, 54s. Node `v24.20.0`.
246
- - **macOS matrix** (`macos-latest exact-candidate smoke`): **success**, 36s. Node `v24.20.0`.
247
-
248
- ### Same-candidate hash verification
249
-
250
- The candidate job produced exactly one tarball and computed its SHA-256 once
251
- (`0347b1f3cfd5d311e13b405c0c2fbc2f507e250cb63223d58b4d2d31df029414`). Each
252
- matrix lane downloaded that same uploaded `candidate-package` artifact and
253
- independently recomputed its SHA-256 before running any smoke step:
254
-
255
- ```
256
- windows-latest: expected=0347b1f3... actual=0347b1f3... (match)
257
- ubuntu-latest: expected=0347b1f3... actual=0347b1f3... (match)
258
- macos-latest: expected=0347b1f3... actual=0347b1f3... (match)
259
- ```
260
-
261
- No matrix lane ran `npm pack` itself — the workflow's `matrix-smoke` job has
262
- no packaging step at all, only a download-and-verify step followed by the
263
- smoke script. Same-candidate architecture confirmed intact.
264
-
265
- ### v0.7 cross-platform proof
266
-
267
- All three matrix lanes' `smoke-summary-<os>.json` artifacts carry
268
- `"v07PackedSmokeOk": true` plus every individual v0.7 flag true
269
- (`packedImportReferenceOk`, `packedApproveReferenceOk`,
270
- `packedExplicitStateOk`, `packedReferenceFidelityPassOk`,
271
- `packedReferenceFidelityFailOk`, `packedProgrammaticFidelityOk`,
272
- `packedPrepareReferenceCorrectionOk`,
273
- `packedReviewReferenceCorrectionAttemptOk`), confirmed directly from each
274
- job's raw log output (not merely inferred from the job's green checkmark).
275
-
276
- ### v0.1–v0.6 regression proof (same candidate, same run)
277
-
278
- The same three logs also carry the pre-existing v0.1–v0.6 flags unchanged and
279
- still true: `legacyCssObservationPassed`, `windowScrollScenarioPassed`,
280
- `targetScrollScenarioPassed` (v0.1/v0.3), semantic-locator target coverage
281
- (v0.2), `comparableCompareOk`/`incomparableCompareOk` (v0.4),
282
- `packedApproveBaselineOk`/`packedSaveChangeContractOk`/`packedEvaluatePassOk`
283
- (v0.5), `v06PackedSmokeOk` (v0.6). No old assertion was removed or weakened to
284
- make room for the new v0.7 section — it was appended.
285
-
286
- ## Known flake investigation
287
-
288
- Prompt 6 previously observed one unrelated browser-test flake that passed on
289
- rerun; Prompts 7/8 reported clean runs. No test failure of any kind occurred
290
- during this readiness stage, locally or in CI — nothing required
291
- investigation or rerun.
292
-
293
- ## Ecosystem documentation
294
-
295
- `docs/ecosystem/TOOL_ECOSYSTEM_REFERENCE.txt` and
296
- `docs/ecosystem/WORKFLOW_PROMPT_ASSEMBLY_RULES.txt` do not exist in this
297
- repository. Ecosystem docs inspected; no update needed.
298
-
299
- ## Report/commit discipline
300
-
301
- - `VALIDATED_CANDIDATE_HEAD` = `b2286bdc9550d70fa1047a1f732968a8eca46a1e` — this is the exact commit the successful cross-platform CI run (34054085344) validated.
302
- - `REPORT_COMMIT` = the commit that adds this file, made after the CI run completed successfully, containing only this report — no product or readiness-infrastructure behavior changes. Per the task's own instruction, the readiness workflow is not re-run a second time merely to fold the report commit's own SHA into itself.
303
-
304
- ## Remaining risks
305
-
306
- - The packed-smoke script's temporary consumer install directory uses
307
- `node:os`'s `tmpdir()` rather than a project-local path (a pre-existing
308
- characteristic of `scripts/ci/runPackedObservationSmoke.mjs`, unchanged by
309
- this readiness stage — modifying it was out of scope per the instruction
310
- not to build a second, parallel package-smoke architecture, and CI's own
311
- hosted runners have no more "project-local" location for an ephemeral job
312
- container in any case). This does not affect the truth of any readiness
313
- claim in this report.
314
- - `package.json`'s `engines.node` requires `>=24` with no upper bound;
315
- runtime drift on future Node majors is a normal, unremarkable release-prep
316
- concern, not a v0.7-specific risk.
317
- - No new product defect was discovered during this readiness stage.
318
-
319
- ## Final verdict
320
-
321
- **`PASS_READY_FOR_RELEASE_PREP`**
322
-
323
- All conditions in the task's PASS-verdict checklist are satisfied: audited
324
- baseline present, clean install, typecheck, lint, full unit tests (1000),
325
- full browser tests (124), security tests (68), build, docs check, diff
326
- check, and pack dry-run all pass; one exact candidate tarball was built and
327
- its SHA-256 recorded; a clean consumer installed it and the installed-
328
- candidate smoke passed, meaningfully exercising the full v0.7 public surface
329
- (CLI + programmatic) in addition to preserving v0.1–v0.6 regression coverage;
330
- GitHub Actions' candidate job and all three (Windows/Linux/macOS) matrix
331
- lanes passed, each independently verifying the identical candidate SHA-256
332
- with no lane building a replacement tarball; no unresolved security,
333
- product, or coverage-gap issue exists; the package version remains `0.6.0`;
334
- no tag, release, or publish action occurred; and the repository's tracked
335
- state is clean at completion. This means the v0.7 implementation is **ready
336
- for release preparation** — not that release preparation has already
337
- happened.
1
+ # v0.7 Pre-Release Readiness Report
2
+
3
+ **Verdict: `PASS_READY_FOR_RELEASE_PREP`**
4
+
5
+ This report documents a pre-release readiness validation pass over the completed,
6
+ audited v0.7 implementation. It proves the implementation is ready to enter a
7
+ separate release-preparation stage. It does **not** authorize publication, does
8
+ **not** bump the package version, and does **not** merge to `master`.
9
+
10
+ ## Commit identity
11
+
12
+ | Label | Commit |
13
+ |---|---|
14
+ | Audited v0.7 baseline (starting point) | `4b2a51c62f47fd1244ceab42cb37bb111cb90259` — "Add v0.7 implementation-completeness audit report" |
15
+ | Documentation reconciliation commit | `8b6c669` |
16
+ | **VALIDATED_CANDIDATE_HEAD** (cross-platform CI run 34054085344 validated this exact commit) | `b2286bdc9550d70fa1047a1f732968a8eca46a1e` — "Close v0.7 pre-release readiness coverage gap in packed-candidate smoke" |
17
+ | **REPORT_COMMIT** | this commit (added after the successful CI run; contains only this report — no product/readiness behavior changes) |
18
+
19
+ Branch: `validation/v0.7-pre-release`, created from the exact audited v0.7 HEAD
20
+ (`4b2a51c`), fast-forwarded by exactly one readiness-infrastructure commit
21
+ (`b2286bd`), then this report commit. No product source under `src/` changed at
22
+ any point in this readiness stage.
23
+
24
+ Preflight confirmed the full Prompt 1–8 commit lineage is present and ancestors
25
+ of HEAD, the working tree was clean, and Prompt 1's preserved speculative-write
26
+ stash (`stash@{0}`, "stray-fork-writes-preserved-for-reference") remains
27
+ untouched — never applied, dropped, committed, or used as test evidence.
28
+
29
+ ## Readiness infrastructure change (the only tracked change in this stage)
30
+
31
+ Commit `b2286bd` on `validation/v0.7-pre-release`:
32
+
33
+ 1. **Closed a real v0.7 packed-candidate coverage gap.** Inspecting the
34
+ existing CI smoke (`scripts/ci/runPackedObservationSmoke.mjs`) before
35
+ running it showed thorough v0.1–v0.6 installed-candidate coverage but
36
+ **zero** v0.7 coverage — no `import-reference`/`approve-reference`/
37
+ `evaluate-reference-fidelity` CLI exercise, and none of the v0.7
38
+ programmatic exports (`evaluateReferenceCandidateFidelityFromArtifactRoots`,
39
+ `prepareReferenceCorrection`, `reviewReferenceCorrectionAttempt`). Per the
40
+ task's readiness-coverage-gap rule, this was treated as a readiness gap,
41
+ not a product defect, and closed narrowly inside the existing smoke script
42
+ rather than building a second parallel framework:
43
+ - Real CLI help-flag assertions for all three new v0.7 commands.
44
+ - A real external-reference image imported and approved through the
45
+ installed CLI, with explicit regions (`nav-region`/`workspace-region`/
46
+ `rail-region`), three requirement kinds (`region-property`,
47
+ `region-relationship`, and tolerance kinds `exact`/`absolute-reference-px`),
48
+ and declared `applicability.viewport`.
49
+ - Explicit region↔runtime-target bindings, reusing the same runtime
50
+ targets (`navigation`/`workspace`/`rail`) already used by the existing
51
+ v0.5 contract-fixture geometry — no second fixture was built.
52
+ - A genuine fidelity **PASS** (against the already-captured "success"
53
+ candidate) and a genuine fidelity **FAIL** (against the already-captured
54
+ "protected-regression" candidate), each checked both with and without
55
+ `--enforce`, mirroring the existing `evaluate-contract` PASS/FAIL/
56
+ `--enforce` proof pattern already in the script.
57
+ - An `observe --state-file` call proving `requestConfig.explicitState`
58
+ round-trips through the installed candidate.
59
+ - Programmatic exercise of `evaluateReferenceCandidateFidelityFromArtifactRoots`,
60
+ `readExternalReferenceArtifact`, `prepareReferenceCorrection` (asserting
61
+ `status: 'handoff-ready'` and a bounded-agent-context artifact with the
62
+ correct `artifactKind`, exercising v0.7 Prompt 7's bounded fidelity
63
+ projection and the v0.6 bounded-agent-context integration together), and
64
+ `reviewReferenceCorrectionAttempt` against both the success candidate
65
+ (`overallState: 'pass'`, `approvalEligible: true`) and the regression
66
+ candidate (`overallState: 'fail'`, `approvalEligible: false`) — all
67
+ resolved from the installed package's own `node_modules`, never the
68
+ source checkout.
69
+ - A re-hash of the pre-existing source observation manifest to confirm the
70
+ new v0.7 calls did not mutate it (observer source immutability).
71
+ 2. **Fixed an unrelated lint gap.** `eslint.config.js`'s `ignores` list
72
+ predates this task's mandated `.my-dev-kit-workflow/` project-local
73
+ workflow convention (npm cache, temp consumer installs, candidate
74
+ tarballs, Playwright browser downloads) and only covered
75
+ `.my-dev-kit/`/`.my-dev-kit-orchestrator/`. Running `npm run lint` with
76
+ Chromium downloaded to `.my-dev-kit-workflow/pw-browsers/` surfaced 20
77
+ `no-undef` errors from ESLint parsing Chromium's own bundled JS resources.
78
+ Added `.my-dev-kit-workflow/**` and `.my-dev-kit-context/**` to the ignore
79
+ list. This is a dev-tooling config fix, not a production behavior change.
80
+
81
+ No production source (`src/**`) changed. No test was weakened, skipped, or
82
+ deleted. No package metadata changed.
83
+
84
+ ## Local full validation (on `b2286bd`)
85
+
86
+ Environment: Windows 11, Node `v24.11.0`, npm `11.14.0` (satisfies the
87
+ repository's `"node": ">=24"` engines constraint). All caches/temp
88
+ state/candidate artifacts kept under `.my-dev-kit-workflow/` (gitignored,
89
+ project-local — npm cache, Playwright browser downloads, and the readiness
90
+ output directory), never under `C:\`.
91
+
92
+ | Step | Result |
93
+ |---|---|
94
+ | `npm ci` | clean install, 132 packages, 0 vulnerabilities |
95
+ | Chromium install (`playwright install chromium`, `PLAYWRIGHT_BROWSERS_PATH` project-local) | succeeded |
96
+ | `npm run typecheck` | clean |
97
+ | `npm run lint` | clean (after the ignore-list fix above) |
98
+ | `npm test` | **1000/1000 unit tests passed** (50 files) — matches the expected ~1000 baseline exactly |
99
+ | `npm run test:browser` | **124/124 browser tests passed** (10 files, real Chromium) — matches the expected ~124 baseline exactly |
100
+ | `npm run test:security` | **68/68 passed** (5 in `tests/unit/policy.test.ts` + 63 in `tests/browser/chromiumAdapter.test.ts`) |
101
+ | `npm run build` | clean |
102
+ | `npm run check:docs` | "Documentation check passed (17 required files)." |
103
+ | `git diff --check` | clean (no whitespace errors) |
104
+ | `npm pack --dry-run` | 207 entries, only `dist/**`, `README.md`, `CHANGELOG.md`, `docs/**`, `package.json` — no `.my-dev-kit-*`, no `node_modules`, no test/script files |
105
+
106
+ No unexplained test-count reduction — every count matches the previous audited
107
+ baseline exactly. No flake was encountered locally or in CI (see "Known flake
108
+ investigation" below).
109
+
110
+ ## Version-specific v0.7 validation
111
+
112
+ All of the following remain covered by passing unit and/or browser tests
113
+ (confirmed present in `tests/unit/` and `tests/browser/` and passing in the
114
+ 1000+124 counts above): external-reference artifact/lifecycle
115
+ (`externalReference.test.ts`, `externalReferenceArtifactWriter.test.ts`,
116
+ `externalReferencePersistenceService.test.ts`, `cliExternalReference.test.ts`),
117
+ regions/geometry (`externalReferenceRegions.test.ts`,
118
+ `externalReferenceRegionRelationships.test.ts`), selected requirements
119
+ (`externalReferenceRequirements.test.ts`,
120
+ `externalReferenceRequirementIdentity.test.ts`), reference adequacy (covered
121
+ within the requirements suite), explicit state/applicability
122
+ (`explicitState.test.ts`, `externalReferenceApplicability.test.ts`),
123
+ reference/candidate compatibility (`externalReferenceCompatibility.test.ts`),
124
+ region↔runtime-target binding (`externalReferenceRuntimeBinding.test.ts`),
125
+ fidelity evaluation (`externalReferenceFidelity.test.ts`,
126
+ `cliEvaluateReferenceFidelity.test.ts`), bounded fidelity projection /
127
+ bounded-agent-context integration (`boundedAgentContextProjection.test.ts`,
128
+ `boundedAgentContext.test.ts`), and the end-to-end correction workflow
129
+ (`referenceCorrectionWorkflow.test.ts`, a **browser** test using real
130
+ Chromium). This readiness stage additionally proved every one of these
131
+ capabilities through the **installed npm package**, not just the source
132
+ checkout (see candidate coverage below) — something the pre-existing unit/
133
+ browser suites alone do not prove.
134
+
135
+ ## Command smoke (built CLI, source checkout)
136
+
137
+ `node dist/cli.js --help` and per-command `--help` were exercised for every
138
+ v0.7 and inherited command. All present and exiting 0:
139
+ `import-reference`, `approve-reference`, `evaluate-reference-fidelity`,
140
+ `observe`, `compare`, `approve-baseline`, `save-change-contract`,
141
+ `evaluate-contract`.
142
+
143
+ ## Package content inspection
144
+
145
+ `npm pack --dry-run --json` on `b2286bd`: 207 files, package size 475.4 kB,
146
+ unpacked 2.0 MB. Contents are exactly `dist/**` (built JS/`.d.ts`/source maps),
147
+ `README.md`, `CHANGELOG.md`, `docs/**` (including the nine v0.7 prompt
148
+ implementation reports and the documentation-reconciliation report), and
149
+ `package.json`. No `.my-dev-kit-*` directory, no `node_modules`, no local
150
+ cache, no temporary consumer files, no candidate logs, no secret/private
151
+ file, and no Prompt 1 stash content appears anywhere in the inventory. No
152
+ package inclusion rule was changed — the existing `"files"` policy already
153
+ produces a correct inventory.
154
+
155
+ ## Candidate identity
156
+
157
+ One exact candidate tarball was built from the validated `b2286bd` source
158
+ state and used unmodified across the entire cross-platform matrix.
159
+
160
+ | Field | Value |
161
+ |---|---|
162
+ | Candidate filename | `my-frontend-observer-0.6.0.tgz` |
163
+ | Source commit | `b2286bdc9550d70fa1047a1f732968a8eca46a1e` |
164
+ | Package version | `0.6.0` (unchanged) |
165
+ | **CI-built candidate SHA-256 (the one validated cross-platform)** | `0347b1f3cfd5d311e13b405c0c2fbc2f507e250cb63223d58b4d2d31df029414` |
166
+ | Package contents | identical 207-entry inventory described above |
167
+
168
+ Note: a separate local `npm pack` invocation on the same commit (used for a
169
+ local pre-push packed-smoke dry run under `.my-dev-kit-workflow/readiness/`,
170
+ never pushed or distributed) produced a different SHA
171
+ (`ab8c2b6432285c113026e2d4399f238cb13aea2617bc80ec5bbbe4318cb3189b`) — this is
172
+ expected and immaterial: `npm pack` tarballs are not byte-reproducible across
173
+ separate invocations (gzip/tar timestamp metadata differs) even for identical
174
+ file content. The only SHA-256 that matters for the cross-platform readiness
175
+ claim is the one the CI **candidate** job produced once and that all three
176
+ matrix lanes independently verified — see below.
177
+
178
+ ## Local clean-consumer install / packed smoke
179
+
180
+ The repository's existing packed-observation smoke
181
+ (`scripts/ci/runPackedObservationSmoke.mjs`, extended as described above) was
182
+ run locally against the exact locally-built candidate tarball before pushing.
183
+ It installs the tarball into a fresh, disposable consumer directory (a
184
+ temp directory, per this pre-existing script's own established design —
185
+ matching what CI's `windows-latest`/`ubuntu-latest`/`macos-latest` runners
186
+ also do, since GitHub-hosted runners have no meaningfully more "project-local"
187
+ location for an ephemeral job container), installs Chromium through that
188
+ consumer's own installed Playwright dependency (never the source checkout's),
189
+ and exercises the installed bin/exports directly. Result: `SMOKE PASS`, with
190
+ every `summary.*Ok` flag `true`, including the new `v07PackedSmokeOk`.
191
+
192
+ ## Security validation
193
+
194
+ `npm run test:security` (68/68 passed) plus source/test inspection of v0.7
195
+ security-sensitive surfaces:
196
+
197
+ - **External image file input**: format/dimension detection reads only
198
+ bounded header bytes (`externalReferenceImage.ts`), never decodes pixel
199
+ data; malformed/truncated/oversized inputs are rejected with structured
200
+ diagnostics (`externalReferenceImage.test.ts`).
201
+ - **Region/requirements/applicability config input**: all three CLI file
202
+ loaders (`loadRegionsFile`/`loadRequirementsFile`/`loadApplicabilityFile`)
203
+ own only root-shape/JSON-parse syntax; every content rule (bounds, id
204
+ patterns, category/tolerance/subject validity) is owned by the domain
205
+ validators they call into, covered by
206
+ `externalReferenceRegions.test.ts`/`externalReferenceRequirements.test.ts`/
207
+ `externalReferenceApplicability.test.ts`.
208
+ - **State-file input**: `loadStateFile` is root-shape-only; label pattern and
209
+ `authenticatedState` enum are enforced by `isValidExplicitStateDimensions`
210
+ (`explicitState.test.ts`). The state vocabulary is explicitly documented as
211
+ never a place for credentials/tokens/cookies/session ids.
212
+ - **Bindings file**: `loadBindingsFile` is root-shape-only; every bound-region
213
+ existence/uniqueness/pattern rule is owned by
214
+ `isValidReferenceRuntimeBindingDeclarations`
215
+ (`externalReferenceRuntimeBinding.test.ts`).
216
+ - **Path traversal / operational-path privacy**: the extended smoke itself
217
+ re-verifies (as the pre-existing v0.4/v0.5/v0.6 sections already did) that
218
+ no operational absolute filesystem path (consumer dir, artifact roots,
219
+ config file paths) leaks into any persisted manifest, across the new v0.7
220
+ calls too.
221
+ - **No credential-bearing explicit-state data**: confirmed by the
222
+ `ExplicitStateDimensions`/`ExternalReferenceApplicability` closed field
223
+ vocabularies (`theme`/`applicationState`/`authenticatedState`/`viewport`
224
+ only) — no field exists for tokens/cookies/headers.
225
+ - **Reference/observation artifact immutability**: the extended smoke
226
+ re-hashes the pre-existing baseline observation manifest after running all
227
+ new v0.7 CLI/programmatic calls and confirms it is byte-identical.
228
+ - **No external AI/network upload**: `referenceCorrectionWorkflow.ts`'s own
229
+ module doc explicitly states it "never calls a remote AI provider"; grep of
230
+ `src/` confirms no `fetch`/network client exists outside the browser
231
+ automation and observer's own disposable local HTTP fixture use in tests.
232
+ - **No observer source editing**: `prepareReferenceCorrection`/
233
+ `reviewReferenceCorrectionAttempt` are pure, synchronous, in-memory
234
+ functions with no filesystem write capability — they return structured
235
+ results only; source-editing is explicitly the external actor's own
236
+ separate responsibility per the module's documented contract.
237
+
238
+ No security failure, resolved or unresolved, was found.
239
+
240
+ ## Cross-platform CI result
241
+
242
+ - **Run**: [34054085344](https://github.com/dailephd/my-frontend-observer/actions/runs/34054085344) ("Pre-release readiness"), triggered by the push of `validation/v0.7-pre-release` at commit `b2286bd`.
243
+ - **Candidate job** ("Package exact candidate (Linux, Node 24)"): **success**, 1m34s. Node `v24.20.0`, npm `11.19.0`. Reproduced the exact same test counts as local: 1000 unit / 124 browser / 5+63 security. Produced exactly one tarball and one SHA-256.
244
+ - **Windows matrix** (`windows-latest exact-candidate smoke`): **success**, 1m22s. Node `v24.19.0`.
245
+ - **Linux matrix** (`ubuntu-latest exact-candidate smoke`): **success**, 54s. Node `v24.20.0`.
246
+ - **macOS matrix** (`macos-latest exact-candidate smoke`): **success**, 36s. Node `v24.20.0`.
247
+
248
+ ### Same-candidate hash verification
249
+
250
+ The candidate job produced exactly one tarball and computed its SHA-256 once
251
+ (`0347b1f3cfd5d311e13b405c0c2fbc2f507e250cb63223d58b4d2d31df029414`). Each
252
+ matrix lane downloaded that same uploaded `candidate-package` artifact and
253
+ independently recomputed its SHA-256 before running any smoke step:
254
+
255
+ ```
256
+ windows-latest: expected=0347b1f3... actual=0347b1f3... (match)
257
+ ubuntu-latest: expected=0347b1f3... actual=0347b1f3... (match)
258
+ macos-latest: expected=0347b1f3... actual=0347b1f3... (match)
259
+ ```
260
+
261
+ No matrix lane ran `npm pack` itself — the workflow's `matrix-smoke` job has
262
+ no packaging step at all, only a download-and-verify step followed by the
263
+ smoke script. Same-candidate architecture confirmed intact.
264
+
265
+ ### v0.7 cross-platform proof
266
+
267
+ All three matrix lanes' `smoke-summary-<os>.json` artifacts carry
268
+ `"v07PackedSmokeOk": true` plus every individual v0.7 flag true
269
+ (`packedImportReferenceOk`, `packedApproveReferenceOk`,
270
+ `packedExplicitStateOk`, `packedReferenceFidelityPassOk`,
271
+ `packedReferenceFidelityFailOk`, `packedProgrammaticFidelityOk`,
272
+ `packedPrepareReferenceCorrectionOk`,
273
+ `packedReviewReferenceCorrectionAttemptOk`), confirmed directly from each
274
+ job's raw log output (not merely inferred from the job's green checkmark).
275
+
276
+ ### v0.1–v0.6 regression proof (same candidate, same run)
277
+
278
+ The same three logs also carry the pre-existing v0.1–v0.6 flags unchanged and
279
+ still true: `legacyCssObservationPassed`, `windowScrollScenarioPassed`,
280
+ `targetScrollScenarioPassed` (v0.1/v0.3), semantic-locator target coverage
281
+ (v0.2), `comparableCompareOk`/`incomparableCompareOk` (v0.4),
282
+ `packedApproveBaselineOk`/`packedSaveChangeContractOk`/`packedEvaluatePassOk`
283
+ (v0.5), `v06PackedSmokeOk` (v0.6). No old assertion was removed or weakened to
284
+ make room for the new v0.7 section — it was appended.
285
+
286
+ ## Known flake investigation
287
+
288
+ Prompt 6 previously observed one unrelated browser-test flake that passed on
289
+ rerun; Prompts 7/8 reported clean runs. No test failure of any kind occurred
290
+ during this readiness stage, locally or in CI — nothing required
291
+ investigation or rerun.
292
+
293
+ ## Ecosystem documentation
294
+
295
+ `docs/ecosystem/TOOL_ECOSYSTEM_REFERENCE.txt` and
296
+ `docs/ecosystem/WORKFLOW_PROMPT_ASSEMBLY_RULES.txt` do not exist in this
297
+ repository. Ecosystem docs inspected; no update needed.
298
+
299
+ ## Report/commit discipline
300
+
301
+ - `VALIDATED_CANDIDATE_HEAD` = `b2286bdc9550d70fa1047a1f732968a8eca46a1e` — this is the exact commit the successful cross-platform CI run (34054085344) validated.
302
+ - `REPORT_COMMIT` = the commit that adds this file, made after the CI run completed successfully, containing only this report — no product or readiness-infrastructure behavior changes. Per the task's own instruction, the readiness workflow is not re-run a second time merely to fold the report commit's own SHA into itself.
303
+
304
+ ## Remaining risks
305
+
306
+ - The packed-smoke script's temporary consumer install directory uses
307
+ `node:os`'s `tmpdir()` rather than a project-local path (a pre-existing
308
+ characteristic of `scripts/ci/runPackedObservationSmoke.mjs`, unchanged by
309
+ this readiness stage — modifying it was out of scope per the instruction
310
+ not to build a second, parallel package-smoke architecture, and CI's own
311
+ hosted runners have no more "project-local" location for an ephemeral job
312
+ container in any case). This does not affect the truth of any readiness
313
+ claim in this report.
314
+ - `package.json`'s `engines.node` requires `>=24` with no upper bound;
315
+ runtime drift on future Node majors is a normal, unremarkable release-prep
316
+ concern, not a v0.7-specific risk.
317
+ - No new product defect was discovered during this readiness stage.
318
+
319
+ ## Final verdict
320
+
321
+ **`PASS_READY_FOR_RELEASE_PREP`**
322
+
323
+ All conditions in the task's PASS-verdict checklist are satisfied: audited
324
+ baseline present, clean install, typecheck, lint, full unit tests (1000),
325
+ full browser tests (124), security tests (68), build, docs check, diff
326
+ check, and pack dry-run all pass; one exact candidate tarball was built and
327
+ its SHA-256 recorded; a clean consumer installed it and the installed-
328
+ candidate smoke passed, meaningfully exercising the full v0.7 public surface
329
+ (CLI + programmatic) in addition to preserving v0.1–v0.6 regression coverage;
330
+ GitHub Actions' candidate job and all three (Windows/Linux/macOS) matrix
331
+ lanes passed, each independently verifying the identical candidate SHA-256
332
+ with no lane building a replacement tarball; no unresolved security,
333
+ product, or coverage-gap issue exists; the package version remains `0.6.0`;
334
+ no tag, release, or publish action occurred; and the repository's tracked
335
+ state is clean at completion. This means the v0.7 implementation is **ready
336
+ for release preparation** — not that release preparation has already
337
+ happened.