@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
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { isValidExternalReferenceArtifact } from './externalReference.js';
|
|
2
|
+
import { REFERENCE_REGION_ID_PATTERN } from './externalReferenceRegions.js';
|
|
3
|
+
import { isValidObservationArtifact } from './schema.js';
|
|
4
|
+
import { evaluateReferenceCandidateCompatibility } from './externalReferenceCompatibility.js';
|
|
5
|
+
import { targetPresence } from './comparisonEngine.js';
|
|
6
|
+
import { evidenceValue } from './evidence.js';
|
|
7
|
+
function isPlainObject(value) {
|
|
8
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Independently-owned duplicate of request/request.ts's private
|
|
12
|
+
* `TARGET_NAME_RE` (`^[A-Za-z0-9_-]{1,64}$`) - same "stable, portable,
|
|
13
|
+
* log-safe identifier" convention already duplicated by
|
|
14
|
+
* `externalReferenceRegions.ts#REFERENCE_REGION_ID_PATTERN` and
|
|
15
|
+
* `explicitState.ts#STATE_LABEL_PATTERN`. Never imported cross-module, per
|
|
16
|
+
* the established per-module pattern-ownership convention.
|
|
17
|
+
*/
|
|
18
|
+
export const RUNTIME_TARGET_NAME_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
19
|
+
/** Mirrors `MAX_REFERENCE_REGIONS` (20) - a binding declaration collection is authoring input over the same region set, so the same bound applies; independently owned, not imported, since the two constants describe different collections that merely happen to share a value. */
|
|
20
|
+
export const MAX_REFERENCE_RUNTIME_BINDINGS = 20;
|
|
21
|
+
export const REFERENCE_RUNTIME_BINDING_STATUSES = ['bound', 'ambiguous', 'unavailable'];
|
|
22
|
+
/**
|
|
23
|
+
* Closed, bounded reason vocabulary - one code per distinct evidence
|
|
24
|
+
* situation the evaluator can actually observe, mirroring the
|
|
25
|
+
* "one diagnostic code per validation domain" convention already used by
|
|
26
|
+
* `DIAGNOSTIC_CODES`. Never a place for a free-form or source-derived
|
|
27
|
+
* explanation; `detail` (free text) carries the human-readable specifics.
|
|
28
|
+
*/
|
|
29
|
+
export const REFERENCE_RUNTIME_BINDING_REASON_CODES = [
|
|
30
|
+
'runtime-target-not-configured',
|
|
31
|
+
'runtime-target-not-found',
|
|
32
|
+
'runtime-target-ambiguous',
|
|
33
|
+
'runtime-target-evidence-unavailable',
|
|
34
|
+
];
|
|
35
|
+
function isValidBindingDeclarationShape(value) {
|
|
36
|
+
if (!isPlainObject(value))
|
|
37
|
+
return false;
|
|
38
|
+
if (typeof value.referenceRegion !== 'string' || !REFERENCE_REGION_ID_PATTERN.test(value.referenceRegion))
|
|
39
|
+
return false;
|
|
40
|
+
if (typeof value.runtimeTarget !== 'string' || !RUNTIME_TARGET_NAME_PATTERN.test(value.runtimeTarget))
|
|
41
|
+
return false;
|
|
42
|
+
const knownKeys = new Set(['referenceRegion', 'runtimeTarget']);
|
|
43
|
+
return Object.keys(value).every((key) => knownKeys.has(key));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Structural, candidate-independent validation: shape, bounds, uniqueness,
|
|
47
|
+
* and reference-region existence against the supplied
|
|
48
|
+
* `ExternalReferenceArtifact` only - this never touches a candidate
|
|
49
|
+
* observation (runtime-target availability is inherently per-candidate; see
|
|
50
|
+
* `evaluateReferenceRuntimeBindings`). A reference with no `regions` at all
|
|
51
|
+
* (Prompt 1/2-era artifact, or one that simply declared none) makes every
|
|
52
|
+
* binding declaration fail closed - there is nothing to bind against.
|
|
53
|
+
*
|
|
54
|
+
* Duplicate/conflicting-subject rule (mirrors Prompt 3's requirement-subject
|
|
55
|
+
* uniqueness rule exactly): no two declarations may name the same
|
|
56
|
+
* `referenceRegion` (case-insensitively), regardless of whether their
|
|
57
|
+
* `runtimeTarget` values agree (an exact duplicate) or disagree (a
|
|
58
|
+
* conflict) - both are rejected identically, fail-closed, never resolved by
|
|
59
|
+
* silently keeping the first. The reverse - several distinct reference
|
|
60
|
+
* regions naming the same `runtimeTarget` - is deliberately allowed: two
|
|
61
|
+
* design sub-regions may legitimately correspond to one runtime container
|
|
62
|
+
* element, whereas one region needing several runtime targets would be
|
|
63
|
+
* inherently ambiguous about which target represents it (the "one region,
|
|
64
|
+
* one explicit primary target" rule).
|
|
65
|
+
*/
|
|
66
|
+
export function isValidReferenceRuntimeBindingDeclarations(value, reference) {
|
|
67
|
+
if (!Array.isArray(value))
|
|
68
|
+
return { valid: false, reason: 'bindings must be an array' };
|
|
69
|
+
if (value.length > MAX_REFERENCE_RUNTIME_BINDINGS) {
|
|
70
|
+
return { valid: false, reason: `bindings must contain at most ${MAX_REFERENCE_RUNTIME_BINDINGS} entries` };
|
|
71
|
+
}
|
|
72
|
+
const referenceValidation = isValidExternalReferenceArtifact(reference);
|
|
73
|
+
if (!referenceValidation.valid)
|
|
74
|
+
return { valid: false, reason: `reference is invalid: ${referenceValidation.reason}` };
|
|
75
|
+
const knownRegionIds = new Set((reference.regions ?? []).map((r) => r.id.toLowerCase()));
|
|
76
|
+
const seenRegions = new Set();
|
|
77
|
+
for (const entry of value) {
|
|
78
|
+
if (!isValidBindingDeclarationShape(entry)) {
|
|
79
|
+
return { valid: false, reason: 'each binding must be { referenceRegion, runtimeTarget }, both matching ^[A-Za-z0-9_-]{1,64}$' };
|
|
80
|
+
}
|
|
81
|
+
const lowerRegion = entry.referenceRegion.toLowerCase();
|
|
82
|
+
if (!knownRegionIds.has(lowerRegion)) {
|
|
83
|
+
return { valid: false, reason: `binding refers to unknown reference region id "${entry.referenceRegion}"` };
|
|
84
|
+
}
|
|
85
|
+
if (seenRegions.has(lowerRegion)) {
|
|
86
|
+
return { valid: false, reason: `duplicate or conflicting binding declaration for reference region "${entry.referenceRegion}"` };
|
|
87
|
+
}
|
|
88
|
+
seenRegions.add(lowerRegion);
|
|
89
|
+
}
|
|
90
|
+
return { valid: true };
|
|
91
|
+
}
|
|
92
|
+
function findConfiguredTargetName(candidate, runtimeTarget) {
|
|
93
|
+
const lower = runtimeTarget.toLowerCase();
|
|
94
|
+
return candidate.requestConfig.targets.find((t) => t.name.toLowerCase() === lower)?.name;
|
|
95
|
+
}
|
|
96
|
+
function evaluateOneBinding(candidate, declaration) {
|
|
97
|
+
const configuredName = findConfiguredTargetName(candidate, declaration.runtimeTarget);
|
|
98
|
+
if (configuredName === undefined) {
|
|
99
|
+
return {
|
|
100
|
+
referenceRegion: declaration.referenceRegion,
|
|
101
|
+
runtimeTarget: declaration.runtimeTarget,
|
|
102
|
+
status: 'unavailable',
|
|
103
|
+
reasonCode: 'runtime-target-not-configured',
|
|
104
|
+
detail: `runtime target "${declaration.runtimeTarget}" was not part of this candidate observation's configured target set`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const record = candidate.targetEvidence[configuredName];
|
|
108
|
+
const presence = targetPresence(record);
|
|
109
|
+
const resolution = record ? evidenceValue(record.resolution) : undefined;
|
|
110
|
+
const visibility = record ? evidenceValue(record.visibility) : undefined;
|
|
111
|
+
const targetResolutionStatus = resolution?.selectionStatus;
|
|
112
|
+
if (presence === 'matched') {
|
|
113
|
+
return {
|
|
114
|
+
referenceRegion: declaration.referenceRegion,
|
|
115
|
+
runtimeTarget: declaration.runtimeTarget,
|
|
116
|
+
status: 'bound',
|
|
117
|
+
detail: `runtime target "${declaration.runtimeTarget}" resolved uniquely for this candidate observation`,
|
|
118
|
+
...(targetResolutionStatus !== undefined ? { targetResolutionStatus } : {}),
|
|
119
|
+
...(visibility !== undefined ? { targetVisible: visibility.visible } : {}),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (presence === 'ambiguous') {
|
|
123
|
+
return {
|
|
124
|
+
referenceRegion: declaration.referenceRegion,
|
|
125
|
+
runtimeTarget: declaration.runtimeTarget,
|
|
126
|
+
status: 'ambiguous',
|
|
127
|
+
reasonCode: 'runtime-target-ambiguous',
|
|
128
|
+
detail: `runtime target "${declaration.runtimeTarget}" resolved ambiguously (more than one match) for this candidate observation`,
|
|
129
|
+
...(targetResolutionStatus !== undefined ? { targetResolutionStatus } : {}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
if (presence === 'not-found') {
|
|
133
|
+
return {
|
|
134
|
+
referenceRegion: declaration.referenceRegion,
|
|
135
|
+
runtimeTarget: declaration.runtimeTarget,
|
|
136
|
+
status: 'unavailable',
|
|
137
|
+
reasonCode: 'runtime-target-not-found',
|
|
138
|
+
detail: `runtime target "${declaration.runtimeTarget}" was configured but not found on the candidate observation's page`,
|
|
139
|
+
...(targetResolutionStatus !== undefined ? { targetResolutionStatus } : {}),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
referenceRegion: declaration.referenceRegion,
|
|
144
|
+
runtimeTarget: declaration.runtimeTarget,
|
|
145
|
+
status: 'unavailable',
|
|
146
|
+
reasonCode: 'runtime-target-evidence-unavailable',
|
|
147
|
+
detail: `runtime target "${declaration.runtimeTarget}" has no usable resolution evidence in this candidate observation`,
|
|
148
|
+
...(targetResolutionStatus !== undefined ? { targetResolutionStatus } : {}),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Pure and synchronous: no browser, no filesystem, no network, no second
|
|
153
|
+
* target resolver. Validates both artifacts and the declaration collection,
|
|
154
|
+
* runs the Prompt 4 compatibility gate exactly once, and - only when the
|
|
155
|
+
* candidate is not `incomparable` with the reference - evaluates each
|
|
156
|
+
* declaration in authored order against the candidate's own already-
|
|
157
|
+
* captured `requestConfig.targets`/`targetEvidence`. Mutates neither input.
|
|
158
|
+
*/
|
|
159
|
+
export function evaluateReferenceRuntimeBindings(reference, candidate, declarations) {
|
|
160
|
+
const referenceValidation = isValidExternalReferenceArtifact(reference);
|
|
161
|
+
if (!referenceValidation.valid)
|
|
162
|
+
return { ok: false, reason: `reference is invalid: ${referenceValidation.reason}` };
|
|
163
|
+
const candidateValidation = isValidObservationArtifact(candidate);
|
|
164
|
+
if (!candidateValidation.valid)
|
|
165
|
+
return { ok: false, reason: `candidate is invalid: ${candidateValidation.reason}` };
|
|
166
|
+
const declarationsValidation = isValidReferenceRuntimeBindingDeclarations(declarations, reference);
|
|
167
|
+
if (!declarationsValidation.valid)
|
|
168
|
+
return { ok: false, reason: declarationsValidation.reason };
|
|
169
|
+
const compatibilityResult = evaluateReferenceCandidateCompatibility(reference, candidate);
|
|
170
|
+
const bindings = compatibilityResult.compatibility.state === 'incomparable' ? [] : declarations.map((declaration) => evaluateOneBinding(candidate, declaration));
|
|
171
|
+
return {
|
|
172
|
+
ok: true,
|
|
173
|
+
evaluation: {
|
|
174
|
+
referenceId: compatibilityResult.referenceId,
|
|
175
|
+
referenceRequestId: compatibilityResult.referenceRequestId,
|
|
176
|
+
candidateObservationId: compatibilityResult.candidateObservationId,
|
|
177
|
+
candidateRequestId: compatibilityResult.candidateRequestId,
|
|
178
|
+
compatibility: compatibilityResult.compatibility,
|
|
179
|
+
bindings,
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=externalReferenceRuntimeBinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalReferenceRuntimeBinding.js","sourceRoot":"","sources":["../../src/domain/externalReferenceRuntimeBinding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.5 Batch 2 canonical pure frontend contract evaluation engine. Consumes
|
|
3
|
+
* already-loaded evidence (before/after ObservationArtifact, ComparisonArtifact,
|
|
4
|
+
* PersistentBaselineContract, PerChangeContract - all frozen by v0.4/Batch 1) and
|
|
5
|
+
* derives per-clause results plus one overall PASS/FAIL verdict. Pure and
|
|
6
|
+
* synchronous: no Chromium, no filesystem, no target re-resolution, no
|
|
7
|
+
* reimplementation of v0.4 comparison/relationship/clipping/scroll-owner logic.
|
|
8
|
+
* Mutates none of its inputs. This module owns no persistence, no CLI, and no
|
|
9
|
+
* unexpected-change *authoring* semantics - `unexpected` remains a derived
|
|
10
|
+
* classification only, never an authored category (see domain/frontendContracts.ts).
|
|
11
|
+
*/
|
|
12
|
+
import type { EvidenceReference } from './relationships.js';
|
|
13
|
+
import type { ObservationArtifact } from './schema.js';
|
|
14
|
+
import type { ComparisonArtifact, ComparisonDifferenceSubject, DifferenceKind } from './comparison.js';
|
|
15
|
+
import type { PersistentBaselineContract, PerChangeContract, ClauseEvaluationResult, OverallVerdict } from './frontendContracts.js';
|
|
16
|
+
export interface FrontendContractEvaluationInput {
|
|
17
|
+
before: ObservationArtifact;
|
|
18
|
+
after: ObservationArtifact;
|
|
19
|
+
comparison: ComparisonArtifact;
|
|
20
|
+
baseline: PersistentBaselineContract;
|
|
21
|
+
change: PerChangeContract;
|
|
22
|
+
}
|
|
23
|
+
/** A meaningful rendered difference not accounted for by any active authored clause - derived only, never authorable. */
|
|
24
|
+
export interface UnexpectedChangeResult {
|
|
25
|
+
classification: 'unexpected';
|
|
26
|
+
subject: ComparisonDifferenceSubject;
|
|
27
|
+
differenceKind: DifferenceKind;
|
|
28
|
+
supportingEvidence: EvidenceReference[];
|
|
29
|
+
}
|
|
30
|
+
export interface FrontendContractEvaluationResult {
|
|
31
|
+
overallVerdict: OverallVerdict;
|
|
32
|
+
activeBaselineClauseIds: string[];
|
|
33
|
+
supersededBaselineClauseIds: string[];
|
|
34
|
+
clauseResults: ClauseEvaluationResult[];
|
|
35
|
+
unexpectedChanges: UnexpectedChangeResult[];
|
|
36
|
+
}
|
|
37
|
+
export type EvaluateFrontendContractResult = {
|
|
38
|
+
ok: true;
|
|
39
|
+
evaluation: FrontendContractEvaluationResult;
|
|
40
|
+
} | {
|
|
41
|
+
ok: false;
|
|
42
|
+
reason: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* The one canonical pure v0.5 contract-evaluation entry point:
|
|
46
|
+
* `active persistent baseline contracts + current per-change contract + actual
|
|
47
|
+
* before/after runtime evidence -> PASS | FAIL` with full clause-level
|
|
48
|
+
* evidence. Deterministic given identical inputs; never mutates
|
|
49
|
+
* before/after/comparison/baseline/change.
|
|
50
|
+
*
|
|
51
|
+
* NOTE: `comparison.differences` already includes one `ComparisonDifference`
|
|
52
|
+
* per `RelationshipChangeRecord` (see `comparisonEngine.ts#relationshipChangesToDifferences`),
|
|
53
|
+
* so unexpected-change derivation consumes `differences` only - iterating
|
|
54
|
+
* `relationshipChanges` separately would double-count the same logical
|
|
55
|
+
* transition.
|
|
56
|
+
*/
|
|
57
|
+
export declare function evaluateFrontendContract(input: FrontendContractEvaluationInput): EvaluateFrontendContractResult;
|