@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/docs/SECURITY.md
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
Project acceptance paths are portable, project-relative, and realpath-contained before use, including symlink/junction escape rejection. `current` alias replacement changes only catalog metadata and never deletes or overwrites canonical evidence. `check` adds no generic file-serving route, inferred binding, source mutation, persisted check artifact, or image bytes to JSON; configured references must be explicitly approved. JSON artifact paths are project-relative.
|
|
4
|
+
|
|
5
|
+
## Current controls
|
|
6
|
+
|
|
7
|
+
`my-frontend-observer` launches a real, sandboxed Chromium browser
|
|
8
|
+
(`src/browser/chromiumAdapter.ts`) and enforces a conservative, local-first,
|
|
9
|
+
credential-free, non-destructive browser/network boundary
|
|
10
|
+
(`src/safety/policy.ts`) as actual product behavior, covered by real-Chromium
|
|
11
|
+
tests:
|
|
12
|
+
|
|
13
|
+
- allowed schemes are `http`/`https` only;
|
|
14
|
+
- allowed hosts are loopback only (`localhost`, `127.0.0.1`, `::1`, and any
|
|
15
|
+
`127.x.x.x` form) - no DNS resolution, no arbitrary "local dev host";
|
|
16
|
+
- credential-bearing URLs (`user:pass@host`) are rejected;
|
|
17
|
+
- the initial target, every navigation redirect, and every subresource
|
|
18
|
+
request are independently classified against the same loopback policy and
|
|
19
|
+
blocked before being contacted if unsafe;
|
|
20
|
+
- popups and downloads are never followed/saved (reported as non-fatal
|
|
21
|
+
diagnostics);
|
|
22
|
+
- navigation and readiness are bounded by explicit, request-configured
|
|
23
|
+
timeouts - no unbounded wait;
|
|
24
|
+
- the Chromium browser/context/page are reliably closed on every exit path
|
|
25
|
+
(success, safety rejection, navigation/readiness failure, or an
|
|
26
|
+
unexpected internal error);
|
|
27
|
+
- the observed target's own content/source is never modified by observation.
|
|
28
|
+
|
|
29
|
+
## Comparison (`compare`, shipped as part of the published `0.4.0` package)
|
|
30
|
+
|
|
31
|
+
`my-frontend-observer compare` introduces no new network or browser
|
|
32
|
+
surface: it never
|
|
33
|
+
launches Chromium, never navigates, and never re-observes a target - it only
|
|
34
|
+
reads two local, already-persisted observation-artifact `manifest.json`
|
|
35
|
+
files (`src/artifacts/artifactReader.ts`) through the same structural
|
|
36
|
+
validator the observation writer uses, computes a pure in-memory
|
|
37
|
+
comparison, and writes one local comparison `manifest.json`
|
|
38
|
+
(`src/artifacts/comparisonArtifactWriter.ts`). Manifest content is parsed
|
|
39
|
+
as JSON only and is never executed (no `eval`, no dynamic code loading from
|
|
40
|
+
a manifest).
|
|
41
|
+
|
|
42
|
+
## Frontend contracts (`approve-baseline`/`save-change-contract`/`evaluate-contract`, shipped as part of the published `0.5.0` package)
|
|
43
|
+
|
|
44
|
+
These three commands introduce no new browser or network surface:
|
|
45
|
+
`src/application/frontendContractPersistenceService.ts` and
|
|
46
|
+
`src/application/frontendContractEvaluationService.ts` import nothing from
|
|
47
|
+
`src/browser/` and never launch Chromium. `approve-baseline` and
|
|
48
|
+
`save-change-contract` validate and persist a local JSON contract file
|
|
49
|
+
(parsed as JSON only, never executed); `evaluate-contract` reads
|
|
50
|
+
already-persisted local observation/comparison/contract artifacts and runs
|
|
51
|
+
the pure `evaluateFrontendContract` function. None of the three navigates,
|
|
52
|
+
re-observes a target, or contacts a network resource.
|
|
53
|
+
|
|
54
|
+
## Bounded agent context and correlation (v0.6, released as `0.6.0`)
|
|
55
|
+
|
|
56
|
+
`src/domain/boundedAgentContextProjection.ts` and
|
|
57
|
+
`src/domain/boundedAgentContextCorrelation.ts` introduce no new browser or
|
|
58
|
+
network surface: neither imports anything from `src/browser/`, neither
|
|
59
|
+
launches Chromium or navigates, and neither performs filesystem or network
|
|
60
|
+
I/O of its own. Both are pure, in-memory functions over already-captured
|
|
61
|
+
observation/comparison/contract evidence plus caller-supplied candidate
|
|
62
|
+
static-evidence records - the correlation module never reads a file path or
|
|
63
|
+
retrieves anything itself; the caller (outside this repository) is
|
|
64
|
+
responsible for however it obtained the candidate evidence it passes in.
|
|
65
|
+
Neither module embeds source code snippets, redacts anything, or invokes
|
|
66
|
+
another ecosystem tool (`@dailephd/my-dev-kit` is not a dependency of either
|
|
67
|
+
module). Bounded runtime projections may include existing screenshot *path
|
|
68
|
+
references* (never embedded bytes), consistent with every other artifact
|
|
69
|
+
family's existing reference-not-embed discipline.
|
|
70
|
+
|
|
71
|
+
## External visual-reference security and privacy boundary (v0.7, released as `0.7.0`)
|
|
72
|
+
|
|
73
|
+
External visual-reference support (`import-reference`/`approve-reference`/
|
|
74
|
+
`evaluate-reference-fidelity`, plus the programmatic correction-workflow
|
|
75
|
+
coordinator) is released as part of the published `0.7.0` package. Imported reference images remain
|
|
76
|
+
local-first evidence: `import-reference` reads a local file path only,
|
|
77
|
+
never a URL, and no code path in this repository uploads a reference image,
|
|
78
|
+
a candidate screenshot, source code, or any derived evidence to an external
|
|
79
|
+
service. Reference/candidate compatibility and fidelity evaluation are pure,
|
|
80
|
+
in-process computations over already-loaded artifacts - neither launches a
|
|
81
|
+
network request.
|
|
82
|
+
|
|
83
|
+
Bounded local-file safety for reference images is a frozen, source-verified
|
|
84
|
+
policy, not an open decision: `EXTERNAL_REFERENCE_SUPPORTED_IMAGE_FORMATS`
|
|
85
|
+
(`png`/`jpeg`/`webp`, detected from header/magic bytes only, never from a
|
|
86
|
+
caller-declared file extension), `EXTERNAL_REFERENCE_MAX_IMAGE_BYTES`
|
|
87
|
+
(20,000,000 bytes), and `[EXTERNAL_REFERENCE_MIN_DIMENSION_PX,
|
|
88
|
+
EXTERNAL_REFERENCE_MAX_DIMENSION_PX]` (`[1, 8192]` pixels per side, parsed
|
|
89
|
+
from the same bounded header bytes, never a full pixel decode) are all
|
|
90
|
+
enforced before any artifact is persisted; an unsupported/undetectable
|
|
91
|
+
format, an over-limit file, or invalid/out-of-bound dimensions is rejected
|
|
92
|
+
outright (`unsupported-image-format`/`invalid-image-dimensions`/
|
|
93
|
+
`image-too-large`), never silently clamped or accepted.
|
|
94
|
+
|
|
95
|
+
Reference images are treated as untrusted data, not executable content: the
|
|
96
|
+
format/dimension detector never evaluates embedded code, never dynamically
|
|
97
|
+
loads a script, and never treats image metadata as an instruction source -
|
|
98
|
+
only bounded header-byte inspection is performed, no general-purpose image
|
|
99
|
+
or video codec is invoked. Explicit, caller-supplied state
|
|
100
|
+
(`--state-file`/`--applicability-file`, `theme`/`applicationState`/
|
|
101
|
+
`authenticatedState`) is a closed, bounded label vocabulary with no field
|
|
102
|
+
capable of holding a credential, token, cookie, session id, or authorization
|
|
103
|
+
header - `authenticatedState` accepts only the literal values
|
|
104
|
+
`'authenticated'`/`'unauthenticated'`.
|
|
105
|
+
|
|
106
|
+
Reference artifacts and the bounded correction handoff preserve path privacy
|
|
107
|
+
and boundedness: every reference/observation/binding/fidelity/context
|
|
108
|
+
identity function is a pure hash of semantic content only - an operational
|
|
109
|
+
file path (the image path, a `--regions-file`/`--requirements-file`/
|
|
110
|
+
`--applicability-file`/`--state-file`/`--bindings-file` path, or an artifact
|
|
111
|
+
root directory) is never included in any logical identity, and importing
|
|
112
|
+
the same semantic reference content from two different filesystem locations
|
|
113
|
+
produces the same `referenceRequestId`. The bounded coding-agent handoff
|
|
114
|
+
(`ReferenceCorrectionHandoff`) never embeds raw reference image bytes, a
|
|
115
|
+
full `ObservationArtifact`, or a source excerpt - only stable identifiers,
|
|
116
|
+
bounded fidelity mismatch records, and evidence path *references*.
|
|
117
|
+
|
|
118
|
+
Import never silently promotes an image to an approved reference: only the
|
|
119
|
+
explicit `approve-reference` command (or `approveExternalReference`
|
|
120
|
+
programmatically) transitions a reference out of the `'imported'` lifecycle
|
|
121
|
+
state, and the v0.7 correction workflow's `prepareReferenceCorrection`/
|
|
122
|
+
`reviewReferenceCorrectionAttempt` both fail closed if the supplied
|
|
123
|
+
reference is not already approved. Neither function - nor anything either
|
|
124
|
+
calls - ever invokes `approveExternalReference` or
|
|
125
|
+
`approveAndPersistBaseline` itself; a `'pass'` review result is reported as
|
|
126
|
+
`approvalEligible: true`, a plain flag, never an automatic approval action.
|
|
127
|
+
|
|
128
|
+
Reference/candidate comparison and fidelity evaluation do not broaden the
|
|
129
|
+
existing browser/network boundary: candidate rendering continues through the
|
|
130
|
+
existing loopback-only Chromium observation path unchanged, and reference
|
|
131
|
+
evaluation itself never launches a browser at all (it consumes only
|
|
132
|
+
already-captured `ObservationArtifact` evidence). The v0.7 correction
|
|
133
|
+
workflow never edits target source: `src/domain/referenceCorrectionWorkflow.ts`
|
|
134
|
+
and everything it imports contain no filesystem-write call, no
|
|
135
|
+
`child_process` invocation, and no patch-application mechanism - the actual
|
|
136
|
+
source edit between review attempts is always the responsibility of an
|
|
137
|
+
external implementation actor (a human or a coding agent), never this
|
|
138
|
+
package's own product code. No remote AI/model-provider dependency was
|
|
139
|
+
introduced anywhere in v0.7.
|
|
140
|
+
|
|
141
|
+
## Interactive local viewer (v0.8, released as `0.8.0`)
|
|
142
|
+
|
|
143
|
+
`my-frontend-observer view` (`src/viewerServer/`, `viewer/`) is implemented,
|
|
144
|
+
tested, and formally security-reviewed. The properties below were verified
|
|
145
|
+
locally/manually during implementation (Batches 1-8) and then re-verified
|
|
146
|
+
through the formal pre-release security audit - see
|
|
147
|
+
`docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md`,
|
|
148
|
+
which also found and fixed one real finding: a media filename that is
|
|
149
|
+
itself a symlink/junction pointing outside the evidence root could
|
|
150
|
+
previously have had its linked-to file's content served. `checkExists()`
|
|
151
|
+
(`src/viewerServer/evidence/mediaResolver.ts`) now uses `lstat()` and
|
|
152
|
+
rejects any non-regular-file entry, closing that escape.
|
|
153
|
+
|
|
154
|
+
- **Loopback-only, fixed local origin**: the Node viewer server binds only
|
|
155
|
+
to `127.0.0.1` (never `0.0.0.0`), never a configurable remote host.
|
|
156
|
+
`--port` selects the TCP port only (default `4319`); an explicit alternate
|
|
157
|
+
port fails startup if already in use rather than silently falling back.
|
|
158
|
+
- **Explicit evidence root, path containment, traversal rejection**: `--root`
|
|
159
|
+
is the only filesystem root the server ever reads from. Every artifact/
|
|
160
|
+
media route resolves a caller-supplied handle against that root through
|
|
161
|
+
the existing canonical discovery/classification path and rejects any
|
|
162
|
+
handle that would resolve outside it - the server never exposes `--root`
|
|
163
|
+
as a generic static directory or arbitrary filesystem path, and never
|
|
164
|
+
interprets an `EvidenceReference` as a filesystem path to the browser.
|
|
165
|
+
- **No arbitrary filesystem browsing, no static-candidate path
|
|
166
|
+
interpretation**: the viewer offers no directory-listing or free-path
|
|
167
|
+
endpoint; every route addresses one specific, already-discovered handle.
|
|
168
|
+
- **Read-only API**: every `/api/*` route rejects non-`GET`/`HEAD` methods
|
|
169
|
+
with `405` at a single top-of-handler check
|
|
170
|
+
(`src/viewerServer/httpServer.ts`), covering every route uniformly,
|
|
171
|
+
including ones added in later batches.
|
|
172
|
+
- **No target-source or evidence mutation**: the viewer server has no
|
|
173
|
+
filesystem-write call anywhere in its own code path; it never edits
|
|
174
|
+
target source and never modifies, supersedes, or persists a new instance
|
|
175
|
+
of any existing Observer evidence artifact.
|
|
176
|
+
- **Binding/context files are explicit local session input, not persisted
|
|
177
|
+
evidence**: `--bindings-file`/`--context-file` are read once at startup,
|
|
178
|
+
validated through the existing canonical validators, held only in server
|
|
179
|
+
memory, and never written into any Observer artifact or exposed as a
|
|
180
|
+
filesystem path to the browser. The viewer never runs
|
|
181
|
+
`@dailephd/my-dev-kit` and never rebuilds a bounded context or its
|
|
182
|
+
correlation from these files - it only displays what it was given.
|
|
183
|
+
- **PWA shell cache scope**: the service worker precaches only the built
|
|
184
|
+
application shell (HTML/JS/CSS/icons/manifest); `navigateFallbackDenylist`
|
|
185
|
+
excludes every `/api/` route from the precache, verified both statically
|
|
186
|
+
(built `sw.js`) and live (real Chromium: zero Cache Storage entries under
|
|
187
|
+
any `/api/` pathname after normal use - see
|
|
188
|
+
`docs/reports/v0.8-integrated-viewer-acceptance-batch8.md`).
|
|
189
|
+
- **Server-down stale-evidence protection**: proven in real Chromium - after
|
|
190
|
+
the server is stopped and the page reloaded, the app shell may still
|
|
191
|
+
render from the precache, but the evidence-dependent surface shows an
|
|
192
|
+
explicit unavailable state, never previously-fetched evidence presented
|
|
193
|
+
as current.
|
|
194
|
+
|
|
195
|
+
## Not yet addressed
|
|
196
|
+
|
|
197
|
+
Certificate-failure-specific handling, permission-prompt-specific handling
|
|
198
|
+
(Chromium's default deny-all applies; no permission is ever explicitly
|
|
199
|
+
granted), and any non-loopback/remote browsing mode remain unimplemented and
|
|
200
|
+
out of scope. `@dailephd/my-frontend-observer@0.8.1` is published to npm, and a
|
|
201
|
+
pre-release readiness CI workflow (Windows/Linux/macOS packed-candidate
|
|
202
|
+
validation, now covering the v0.8 viewer alongside every earlier version's
|
|
203
|
+
packed behavior) exists (see `docs/CI_CD.md`). The v0.7 external-reference/
|
|
204
|
+
correction-workflow security properties above are released as part of
|
|
205
|
+
`0.7.0`, following a completed cross-platform pre-release security
|
|
206
|
+
validation stage (see `docs/reports/v0.7-pre-release-readiness.md`). The
|
|
207
|
+
v0.8 interactive viewer's security boundary described above is released as
|
|
208
|
+
part of `0.8.0`, following a completed formal pre-release cross-platform
|
|
209
|
+
security validation stage (see
|
|
210
|
+
`docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md`).
|
|
211
|
+
Symlink/junction filesystem-escape handling for the viewer's raw-evidence
|
|
212
|
+
routes is now exercised by a dedicated regression test
|
|
213
|
+
(`tests/unit/viewerEvidenceServer.test.ts`), which caught and led to the fix
|
|
214
|
+
described above. Annotation (v0.9) remains a future, unimplemented concern
|
|
215
|
+
with its own security review still to come. None of this expands the
|
|
216
|
+
security scope above: remote browsing, certificate handling,
|
|
217
|
+
permission-prompt handling, and future annotation-specific file handling
|
|
218
|
+
remain separate, unimplemented concerns.
|