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