@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,477 @@
|
|
|
1
|
+
import { MAX_RUNTIME_TARGETS, MAX_RELATIONSHIP_EVIDENCE_PER_TARGET, MAX_OMISSIONS, MAX_TRUNCATIONS, BOUNDED_AGENT_CONTEXT_ARTIFACT_KIND, BOUNDED_AGENT_CONTEXT_SCHEMA_VERSION, } from './boundedAgentContext.js';
|
|
2
|
+
import { buildBoundedAgentContextRequestIdentity, buildBoundedAgentContextInstanceIdentity } from './boundedAgentContextIdentity.js';
|
|
3
|
+
import { evidenceValue } from './evidence.js';
|
|
4
|
+
import { isValidEvidenceReference } from './relationships.js';
|
|
5
|
+
import { PRODUCER_NAME, isValidObservationArtifact } from './schema.js';
|
|
6
|
+
import { isValidComparisonArtifact } from './comparison.js';
|
|
7
|
+
import { isValidPersistentBaselineContract, isValidPerChangeContract } from './frontendContracts.js';
|
|
8
|
+
import { isValidFrontendContractEvaluationArtifact } from './frontendContractEvaluationArtifact.js';
|
|
9
|
+
import { REFERENCE_FIDELITY_STATES } from './externalReferenceFidelity.js';
|
|
10
|
+
import { projectReferenceFidelity } from './referenceFidelityProjection.js';
|
|
11
|
+
function isNonEmptyString(value) {
|
|
12
|
+
return typeof value === 'string' && value.length > 0;
|
|
13
|
+
}
|
|
14
|
+
function isValidFocusTargetIds(value) {
|
|
15
|
+
return Array.isArray(value) && value.every((entry) => isNonEmptyString(entry));
|
|
16
|
+
}
|
|
17
|
+
// --- boundary validation -----------------------------------------------------
|
|
18
|
+
function validateInput(input) {
|
|
19
|
+
const observationValidation = isValidObservationArtifact(input.observation);
|
|
20
|
+
if (!observationValidation.valid)
|
|
21
|
+
return `observation is invalid: ${observationValidation.reason}`;
|
|
22
|
+
if (input.baselineObservation !== undefined) {
|
|
23
|
+
const baselineObservationValidation = isValidObservationArtifact(input.baselineObservation);
|
|
24
|
+
if (!baselineObservationValidation.valid)
|
|
25
|
+
return `baselineObservation is invalid: ${baselineObservationValidation.reason}`;
|
|
26
|
+
}
|
|
27
|
+
if (input.comparison !== undefined) {
|
|
28
|
+
const comparisonValidation = isValidComparisonArtifact(input.comparison);
|
|
29
|
+
if (!comparisonValidation.valid)
|
|
30
|
+
return `comparison is invalid: ${comparisonValidation.reason}`;
|
|
31
|
+
if (input.comparison.after.observationId !== input.observation.observationId) {
|
|
32
|
+
return 'comparison.after.observationId does not match the supplied observation';
|
|
33
|
+
}
|
|
34
|
+
if (input.baselineObservation === undefined) {
|
|
35
|
+
return 'comparison requires a matching baselineObservation';
|
|
36
|
+
}
|
|
37
|
+
if (input.comparison.before.observationId !== input.baselineObservation.observationId) {
|
|
38
|
+
return 'comparison.before.observationId does not match the supplied baselineObservation';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Known authoritative observation identities this request actually carries (IMP-SHARED-004 coherence anchor).
|
|
42
|
+
const knownObservationIds = new Set([input.observation.observationId, ...(input.baselineObservation ? [input.baselineObservation.observationId] : [])]);
|
|
43
|
+
if (input.baseline !== undefined) {
|
|
44
|
+
const baselineValidation = isValidPersistentBaselineContract(input.baseline);
|
|
45
|
+
if (!baselineValidation.valid)
|
|
46
|
+
return `baseline is invalid: ${baselineValidation.reason}`;
|
|
47
|
+
if (!knownObservationIds.has(input.baseline.sourceObservation.observationId)) {
|
|
48
|
+
return 'baseline.sourceObservation.observationId does not identify the supplied observation or baselineObservation';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (input.change !== undefined) {
|
|
52
|
+
const changeValidation = isValidPerChangeContract(input.change);
|
|
53
|
+
if (!changeValidation.valid)
|
|
54
|
+
return `change is invalid: ${changeValidation.reason}`;
|
|
55
|
+
}
|
|
56
|
+
if (input.evaluationArtifact !== undefined) {
|
|
57
|
+
const evaluationValidation = isValidFrontendContractEvaluationArtifact(input.evaluationArtifact);
|
|
58
|
+
if (!evaluationValidation.valid)
|
|
59
|
+
return `evaluationArtifact is invalid: ${evaluationValidation.reason}`;
|
|
60
|
+
if (input.comparison === undefined || input.baseline === undefined || input.change === undefined) {
|
|
61
|
+
return 'evaluationArtifact requires comparison, baseline, and change to all be supplied';
|
|
62
|
+
}
|
|
63
|
+
const ea = input.evaluationArtifact;
|
|
64
|
+
if (ea.contracts.baselineId !== input.baseline.baselineId)
|
|
65
|
+
return 'evaluationArtifact.contracts.baselineId does not match the supplied baseline';
|
|
66
|
+
if (ea.contracts.contractId !== input.change.contractId)
|
|
67
|
+
return 'evaluationArtifact.contracts.contractId does not match the supplied change contract';
|
|
68
|
+
if (ea.comparisonId !== input.comparison.comparisonId)
|
|
69
|
+
return 'evaluationArtifact.comparisonId does not match the supplied comparison';
|
|
70
|
+
if (ea.after.observationId !== input.observation.observationId)
|
|
71
|
+
return 'evaluationArtifact.after does not match the supplied observation';
|
|
72
|
+
if (input.baselineObservation === undefined || ea.before.observationId !== input.baselineObservation.observationId) {
|
|
73
|
+
return 'evaluationArtifact.before does not match the supplied baselineObservation';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (input.fidelity !== undefined) {
|
|
77
|
+
if (!isNonEmptyString(input.fidelity.referenceId) || !isNonEmptyString(input.fidelity.referenceRequestId)) {
|
|
78
|
+
return 'fidelity.referenceId/referenceRequestId must be non-empty strings';
|
|
79
|
+
}
|
|
80
|
+
if (!REFERENCE_FIDELITY_STATES.includes(input.fidelity.state)) {
|
|
81
|
+
return `fidelity.state must be one of: ${REFERENCE_FIDELITY_STATES.join(', ')}`;
|
|
82
|
+
}
|
|
83
|
+
if (input.fidelity.candidateObservationId !== input.observation.observationId) {
|
|
84
|
+
return 'fidelity.candidateObservationId does not match the supplied observation';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (!isValidFocusTargetIds(input.focusTargetIds))
|
|
88
|
+
return 'focusTargetIds must be an array of non-empty strings';
|
|
89
|
+
if (!isNonEmptyString(input.generatedAt))
|
|
90
|
+
return 'generatedAt must be a non-empty string';
|
|
91
|
+
if (!isNonEmptyString(input.producerVersion))
|
|
92
|
+
return 'producerVersion must be a non-empty string';
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
// --- target-id extraction from authored contract primitives -----------------
|
|
96
|
+
function primitiveTargetIds(primitive) {
|
|
97
|
+
switch (primitive.kind) {
|
|
98
|
+
case 'target-visible':
|
|
99
|
+
case 'target-not-clipped':
|
|
100
|
+
case 'target-width-within-bound':
|
|
101
|
+
case 'target-does-not-own-scroll':
|
|
102
|
+
case 'target-begins-below-initial-viewport':
|
|
103
|
+
return [primitive.target];
|
|
104
|
+
case 'targets-do-not-overlap':
|
|
105
|
+
case 'target-wider-than':
|
|
106
|
+
case 'target-follows-vertically':
|
|
107
|
+
return [primitive.targetA, primitive.targetB];
|
|
108
|
+
case 'target-fits-inside':
|
|
109
|
+
return [primitive.target, primitive.container];
|
|
110
|
+
case 'property-unchanged-within-tolerance':
|
|
111
|
+
case 'property-increases':
|
|
112
|
+
case 'property-decreases':
|
|
113
|
+
return [primitive.target];
|
|
114
|
+
case 'relationship-unchanged':
|
|
115
|
+
return [primitive.subjectTarget, primitive.relatedTarget].filter(isNonEmptyString);
|
|
116
|
+
case 'document-width-fits-viewport':
|
|
117
|
+
case 'scroll-owner-is-document':
|
|
118
|
+
return [];
|
|
119
|
+
default:
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function clauseTier(category, mode) {
|
|
124
|
+
if (category === 'protected' || category === 'preserved')
|
|
125
|
+
return 'required';
|
|
126
|
+
if (category === 'expected-dependent')
|
|
127
|
+
return mode === 'permitted' ? 'optional' : 'required';
|
|
128
|
+
return 'optional'; // 'requested'
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Whether an authored change clause belongs to the *required* target-set
|
|
132
|
+
* membership tier (rescue fix for IMP-SHARED-002: previously every change
|
|
133
|
+
* clause target - including 'expected-dependent'/'permitted' ones - was
|
|
134
|
+
* unconditionally added to the required target set, letting a permitted
|
|
135
|
+
* target displace a genuinely required one at the MAX_RUNTIME_TARGETS bound).
|
|
136
|
+
* Only 'protected', 'preserved', 'requested', and 'expected-dependent'/
|
|
137
|
+
* 'required' clauses make their targets required; 'expected-dependent'/
|
|
138
|
+
* 'permitted' clauses make their targets permitted (bound-competing after
|
|
139
|
+
* required allocation, same as relationship-adjacent optional targets).
|
|
140
|
+
*/
|
|
141
|
+
function isRequiredMembershipClause(category, mode) {
|
|
142
|
+
if (category === 'expected-dependent')
|
|
143
|
+
return mode === 'required';
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
/** A non-'pass' clause result must never be silently dropped or displaced (IMP-B-001 / B2-P009-011): its contributed evidence is always required-tier regardless of the clause's own authored category/mode. */
|
|
147
|
+
function evidenceTierForClauseResult(status, fallback) {
|
|
148
|
+
if (status === 'fail' || status === 'unavailable' || status === 'conflict')
|
|
149
|
+
return 'required';
|
|
150
|
+
return fallback;
|
|
151
|
+
}
|
|
152
|
+
/** Aggregate-cap enforcement for the frozen `omissions` collection (IMP-SHARED-001): required-loss records are preserved preferentially, and a single truthful summary record replaces whatever had to be dropped rather than silently vanishing. */
|
|
153
|
+
function capOmissions(records, max) {
|
|
154
|
+
if (records.length <= max)
|
|
155
|
+
return [...records];
|
|
156
|
+
const ranked = [...records].sort((a, b) => Number(b.required) - Number(a.required));
|
|
157
|
+
const kept = ranked.slice(0, max - 1);
|
|
158
|
+
const dropped = ranked.slice(max - 1);
|
|
159
|
+
const anyRequired = dropped.some((d) => d.required);
|
|
160
|
+
const summary = {
|
|
161
|
+
subject: 'omissions-summary',
|
|
162
|
+
reason: 'omitted-by-bound',
|
|
163
|
+
required: anyRequired,
|
|
164
|
+
detail: `${dropped.length} additional omission record(s) omitted by the aggregate ${max}-omission cap; see the 'targets' truncation record for the true total`,
|
|
165
|
+
};
|
|
166
|
+
return [...kept, summary];
|
|
167
|
+
}
|
|
168
|
+
/** Aggregate-cap enforcement for the frozen `truncations` collection (IMP-SHARED-001), same policy as `capOmissions`. */
|
|
169
|
+
function capTruncations(records, max) {
|
|
170
|
+
if (records.length <= max)
|
|
171
|
+
return [...records];
|
|
172
|
+
const ranked = [...records].sort((a, b) => Number(b.required) - Number(a.required));
|
|
173
|
+
const kept = ranked.slice(0, max - 1);
|
|
174
|
+
const dropped = ranked.slice(max - 1);
|
|
175
|
+
const anyRequired = dropped.some((d) => d.required);
|
|
176
|
+
const summary = {
|
|
177
|
+
subject: 'truncations-summary',
|
|
178
|
+
limit: max,
|
|
179
|
+
actualCount: records.length,
|
|
180
|
+
required: anyRequired,
|
|
181
|
+
};
|
|
182
|
+
return [...kept, summary];
|
|
183
|
+
}
|
|
184
|
+
// --- canonical entry point ---------------------------------------------------
|
|
185
|
+
/**
|
|
186
|
+
* The one canonical pure v0.6 bounded runtime projection entry point:
|
|
187
|
+
* already-authoritative v0.1-v0.5 evidence + the frozen Batch 1 bounded-agent-
|
|
188
|
+
* context contract -> one deterministic, bounded `BoundedAgentContextArtifact`.
|
|
189
|
+
* Deterministic given identical semantic input; never mutates its inputs.
|
|
190
|
+
*/
|
|
191
|
+
export function projectBoundedAgentContext(input) {
|
|
192
|
+
const validationError = validateInput(input);
|
|
193
|
+
if (validationError)
|
|
194
|
+
return { ok: false, reason: validationError };
|
|
195
|
+
const { observation, baselineObservation, comparison, baseline, change, evaluationArtifact, fidelity } = input;
|
|
196
|
+
const sources = {
|
|
197
|
+
observationIds: baselineObservation ? [baselineObservation.observationId, observation.observationId].sort() : [observation.observationId],
|
|
198
|
+
...(comparison !== undefined ? { comparisonId: comparison.comparisonId, comparisonRequestId: comparison.comparisonRequestId } : {}),
|
|
199
|
+
...(baseline !== undefined ? { baselineContractId: baseline.baselineId } : {}),
|
|
200
|
+
...(change !== undefined ? { changeContractId: change.contractId } : {}),
|
|
201
|
+
...(evaluationArtifact !== undefined ? { evaluationId: evaluationArtifact.evaluationId, evaluationRequestId: evaluationArtifact.evaluationRequestId } : {}),
|
|
202
|
+
...(fidelity !== undefined ? { referenceId: fidelity.referenceId, referenceRequestId: fidelity.referenceRequestId } : {}),
|
|
203
|
+
};
|
|
204
|
+
// v0.7 Prompt 7: derived once, up front, so its required/permitted target
|
|
205
|
+
// ids can compete fairly for MAX_RUNTIME_TARGETS capacity exactly like
|
|
206
|
+
// contract-clause-derived targets already do, and its omissions/
|
|
207
|
+
// truncations fold into the same aggregate arrays/adequacy computation
|
|
208
|
+
// below - never a second, parallel bounded-context concept.
|
|
209
|
+
const fidelityOutput = fidelity !== undefined ? projectReferenceFidelity(fidelity, { required: input.fidelityRequired ?? true }) : undefined;
|
|
210
|
+
const clauseResultByClauseId = new Map((evaluationArtifact?.clauseResults ?? []).map((r) => [r.clauseId, r]));
|
|
211
|
+
// --- relevance: required target ids (explicit focus + authored required-tier clause targets + unexpected-change subjects) --
|
|
212
|
+
const requiredTargetIds = new Set(input.focusTargetIds);
|
|
213
|
+
// --- relevance: permitted target ids (expected-dependent/permitted clause targets - compete for capacity after required allocation, same as relationship-adjacent targets) --
|
|
214
|
+
const permittedTargetIds = new Set();
|
|
215
|
+
const evidenceByTarget = new Map();
|
|
216
|
+
function addEvidence(targetId, refs, tier) {
|
|
217
|
+
const bucket = evidenceByTarget.get(targetId) ?? [];
|
|
218
|
+
for (const ref of refs) {
|
|
219
|
+
if (isValidEvidenceReference(ref))
|
|
220
|
+
bucket.push({ ref, tier });
|
|
221
|
+
}
|
|
222
|
+
evidenceByTarget.set(targetId, bucket);
|
|
223
|
+
}
|
|
224
|
+
for (const clause of baseline?.clauses ?? []) {
|
|
225
|
+
// Baseline clauses have no authored category - they are the frozen 'preserved' invariant and are always required-tier for both membership and evidence.
|
|
226
|
+
const targets = primitiveTargetIds(clause.primitive);
|
|
227
|
+
const clauseResult = clauseResultByClauseId.get(clause.clauseId);
|
|
228
|
+
const evidenceTier = evidenceTierForClauseResult(clauseResult?.status, 'required');
|
|
229
|
+
const evidence = [...clause.supportingEvidence, ...(clauseResult ? clauseResult.supportingEvidence : [])];
|
|
230
|
+
for (const t of targets) {
|
|
231
|
+
requiredTargetIds.add(t);
|
|
232
|
+
addEvidence(t, evidence, evidenceTier);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
for (const clause of change?.clauses ?? []) {
|
|
236
|
+
const targets = primitiveTargetIds(clause.primitive);
|
|
237
|
+
const membershipRequired = isRequiredMembershipClause(clause.category, clause.expectedDependentMode);
|
|
238
|
+
const fallbackEvidenceTier = clauseTier(clause.category, clause.expectedDependentMode);
|
|
239
|
+
const clauseResult = clauseResultByClauseId.get(clause.clauseId);
|
|
240
|
+
const evidenceTier = evidenceTierForClauseResult(clauseResult?.status, fallbackEvidenceTier);
|
|
241
|
+
const evidence = [...clause.supportingEvidence, ...(clauseResult ? clauseResult.supportingEvidence : [])];
|
|
242
|
+
for (const t of targets) {
|
|
243
|
+
if (membershipRequired || evidenceTier === 'required') {
|
|
244
|
+
// A non-'pass' authoritative result always promotes membership to required too - IMP-B-001 requires failed/unavailable/conflict evidence to survive cap pressure, which a merely-permitted target-set membership could still lose entirely.
|
|
245
|
+
requiredTargetIds.add(t);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
permittedTargetIds.add(t);
|
|
249
|
+
}
|
|
250
|
+
addEvidence(t, evidence, evidenceTier);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
for (const unexpected of evaluationArtifact?.unexpectedChanges ?? []) {
|
|
254
|
+
const subject = unexpected.subject;
|
|
255
|
+
const targets = subject.type === 'target' ? [subject.target] : subject.type === 'relationship' ? [subject.subjectTarget, subject.relatedTarget].filter(isNonEmptyString) : [];
|
|
256
|
+
for (const t of targets) {
|
|
257
|
+
requiredTargetIds.add(t);
|
|
258
|
+
addEvidence(t, unexpected.supportingEvidence, 'required');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// v0.7 Prompt 7: fidelity-derived required/permitted runtime target ids compete for
|
|
262
|
+
// MAX_RUNTIME_TARGETS capacity exactly like contract-clause-derived ones above - no fidelity
|
|
263
|
+
// mismatch's bound runtime target is ever silently excluded from the target-selection pipeline.
|
|
264
|
+
for (const t of fidelityOutput?.requiredTargetIds ?? [])
|
|
265
|
+
requiredTargetIds.add(t);
|
|
266
|
+
for (const t of fidelityOutput?.permittedTargetIds ?? [])
|
|
267
|
+
permittedTargetIds.add(t);
|
|
268
|
+
for (const permitted of permittedTargetIds) {
|
|
269
|
+
if (requiredTargetIds.has(permitted))
|
|
270
|
+
permittedTargetIds.delete(permitted);
|
|
271
|
+
}
|
|
272
|
+
// --- relevance: context target ids (one relationship hop from a required OR permitted target) --
|
|
273
|
+
const contextTargetIds = new Set();
|
|
274
|
+
const relationshipGraph = comparison?.relationshipsAfter;
|
|
275
|
+
if (relationshipGraph) {
|
|
276
|
+
const priorityTargetIds = new Set([...requiredTargetIds, ...permittedTargetIds]);
|
|
277
|
+
for (const rel of relationshipGraph.pairwiseRelationships) {
|
|
278
|
+
const subjectPriority = priorityTargetIds.has(rel.subjectTarget);
|
|
279
|
+
const relatedPriority = priorityTargetIds.has(rel.relatedTarget);
|
|
280
|
+
if (subjectPriority && !relatedPriority) {
|
|
281
|
+
contextTargetIds.add(rel.relatedTarget);
|
|
282
|
+
addEvidence(rel.relatedTarget, rel.evidence, 'context');
|
|
283
|
+
}
|
|
284
|
+
if (relatedPriority && !subjectPriority) {
|
|
285
|
+
contextTargetIds.add(rel.subjectTarget);
|
|
286
|
+
addEvidence(rel.subjectTarget, rel.evidence, 'context');
|
|
287
|
+
}
|
|
288
|
+
if (subjectPriority || relatedPriority) {
|
|
289
|
+
addEvidence(rel.subjectTarget, rel.evidence, 'context');
|
|
290
|
+
addEvidence(rel.relatedTarget, rel.evidence, 'context');
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
for (const contextId of [...contextTargetIds]) {
|
|
295
|
+
if (requiredTargetIds.has(contextId) || permittedTargetIds.has(contextId))
|
|
296
|
+
contextTargetIds.delete(contextId);
|
|
297
|
+
}
|
|
298
|
+
// --- required-first bounded allocation of the `targets` collection (required > permitted > context) --
|
|
299
|
+
const orderedRequired = [...requiredTargetIds].sort();
|
|
300
|
+
const orderedPermitted = [...permittedTargetIds].sort();
|
|
301
|
+
const orderedContext = [...contextTargetIds].sort();
|
|
302
|
+
const allowedRequired = orderedRequired.slice(0, MAX_RUNTIME_TARGETS);
|
|
303
|
+
const droppedRequired = orderedRequired.slice(MAX_RUNTIME_TARGETS);
|
|
304
|
+
let remainingSlots = Math.max(0, MAX_RUNTIME_TARGETS - allowedRequired.length);
|
|
305
|
+
const allowedPermitted = orderedPermitted.slice(0, remainingSlots);
|
|
306
|
+
const droppedPermitted = orderedPermitted.slice(remainingSlots);
|
|
307
|
+
remainingSlots = Math.max(0, remainingSlots - allowedPermitted.length);
|
|
308
|
+
const allowedContext = orderedContext.slice(0, remainingSlots);
|
|
309
|
+
const droppedContext = orderedContext.slice(remainingSlots);
|
|
310
|
+
const omissions = [...(fidelityOutput?.omissions ?? [])];
|
|
311
|
+
const truncations = [...(fidelityOutput?.truncations ?? [])];
|
|
312
|
+
for (const targetId of droppedRequired) {
|
|
313
|
+
omissions.push({ subject: `target:${targetId}`, reason: 'required-evidence-lost-by-bound', required: true });
|
|
314
|
+
}
|
|
315
|
+
for (const targetId of droppedPermitted) {
|
|
316
|
+
omissions.push({ subject: `target:${targetId}`, reason: 'omitted-by-bound', required: false });
|
|
317
|
+
}
|
|
318
|
+
for (const targetId of droppedContext) {
|
|
319
|
+
omissions.push({ subject: `target:${targetId}`, reason: 'omitted-by-bound', required: false });
|
|
320
|
+
}
|
|
321
|
+
const totalCandidateTargets = orderedRequired.length + orderedPermitted.length + orderedContext.length;
|
|
322
|
+
const anyTargetsDropped = droppedRequired.length > 0 || droppedPermitted.length > 0 || droppedContext.length > 0;
|
|
323
|
+
if (anyTargetsDropped) {
|
|
324
|
+
truncations.push({
|
|
325
|
+
subject: 'targets',
|
|
326
|
+
limit: MAX_RUNTIME_TARGETS,
|
|
327
|
+
actualCount: totalCandidateTargets,
|
|
328
|
+
required: droppedRequired.length > 0,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
// --- target-scoped diagnostics -> omissions (frozen contract has no diagnostics field; only the closed diagnostic code is ever propagated - IMP-B-005) --
|
|
332
|
+
const includedTargetIds = new Set([...allowedRequired, ...allowedPermitted, ...allowedContext]);
|
|
333
|
+
for (const diagnostic of observation.diagnostics) {
|
|
334
|
+
if (!diagnostic.targetName || !includedTargetIds.has(diagnostic.targetName))
|
|
335
|
+
continue;
|
|
336
|
+
if (diagnostic.code === 'target-missing' || diagnostic.code === 'target-hidden' || diagnostic.code === 'target-ambiguous') {
|
|
337
|
+
omissions.push({
|
|
338
|
+
subject: `target:${diagnostic.targetName}`,
|
|
339
|
+
reason: 'unsupported-or-unavailable',
|
|
340
|
+
required: requiredTargetIds.has(diagnostic.targetName),
|
|
341
|
+
detail: `diagnostic code: ${diagnostic.code}`,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
else if (diagnostic.code === 'browser-evidence-unavailable' || diagnostic.code === 'partial-evidence') {
|
|
345
|
+
omissions.push({
|
|
346
|
+
subject: `target:${diagnostic.targetName}`,
|
|
347
|
+
reason: 'not-observed',
|
|
348
|
+
required: requiredTargetIds.has(diagnostic.targetName),
|
|
349
|
+
detail: `diagnostic code: ${diagnostic.code}`,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// --- per-target projection assembly --
|
|
354
|
+
const evidenceTierRank = { required: 0, optional: 1, context: 2 };
|
|
355
|
+
function boundedEvidenceForTarget(targetId) {
|
|
356
|
+
const collected = evidenceByTarget.get(targetId) ?? [];
|
|
357
|
+
const seen = new Set();
|
|
358
|
+
const deduped = [];
|
|
359
|
+
// Rescue fix for IMP-B-003: equal-tier entries are ordered by the stable
|
|
360
|
+
// semantic key `ref.path`, never by caller-supplied array insertion
|
|
361
|
+
// order, so permuting a caller's clause/relationship arrays cannot change
|
|
362
|
+
// which evidence is retained or its output order.
|
|
363
|
+
for (const entry of [...collected].sort((a, b) => {
|
|
364
|
+
const tierDiff = evidenceTierRank[a.tier] - evidenceTierRank[b.tier];
|
|
365
|
+
if (tierDiff !== 0)
|
|
366
|
+
return tierDiff;
|
|
367
|
+
return a.ref.path < b.ref.path ? -1 : a.ref.path > b.ref.path ? 1 : 0;
|
|
368
|
+
})) {
|
|
369
|
+
if (seen.has(entry.ref.path))
|
|
370
|
+
continue;
|
|
371
|
+
seen.add(entry.ref.path);
|
|
372
|
+
deduped.push(entry);
|
|
373
|
+
}
|
|
374
|
+
if (deduped.length > MAX_RELATIONSHIP_EVIDENCE_PER_TARGET) {
|
|
375
|
+
const dropped = deduped.slice(MAX_RELATIONSHIP_EVIDENCE_PER_TARGET);
|
|
376
|
+
const requiredLost = dropped.some((d) => d.tier === 'required');
|
|
377
|
+
truncations.push({
|
|
378
|
+
subject: `target:${targetId}.relationshipEvidence`,
|
|
379
|
+
limit: MAX_RELATIONSHIP_EVIDENCE_PER_TARGET,
|
|
380
|
+
actualCount: deduped.length,
|
|
381
|
+
required: requiredLost,
|
|
382
|
+
});
|
|
383
|
+
if (requiredLost) {
|
|
384
|
+
omissions.push({ subject: `target:${targetId}.relationshipEvidence`, reason: 'required-evidence-lost-by-bound', required: true });
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
return deduped.slice(0, MAX_RELATIONSHIP_EVIDENCE_PER_TARGET).map((d) => d.ref);
|
|
388
|
+
}
|
|
389
|
+
const screenshotRef = evidenceValue(observation.screenshot);
|
|
390
|
+
const targets = [...allowedRequired, ...allowedPermitted, ...allowedContext].sort().map((targetId) => {
|
|
391
|
+
const record = observation.targetEvidence[targetId];
|
|
392
|
+
const geometry = record ? evidenceValue(record.geometry) : undefined;
|
|
393
|
+
const visibility = record ? evidenceValue(record.visibility) : undefined;
|
|
394
|
+
const scrollOwner = observation.scrollScenarioEvidence ? evidenceValue(observation.scrollScenarioEvidence.scrollOwner) : undefined;
|
|
395
|
+
const overflowField = observation.scrollScenarioEvidence?.final.targets[targetId]?.overflow;
|
|
396
|
+
const overflow = overflowField ? evidenceValue(overflowField) : undefined;
|
|
397
|
+
const relationshipEvidence = boundedEvidenceForTarget(targetId);
|
|
398
|
+
const projection = { targetId };
|
|
399
|
+
if (geometry !== undefined)
|
|
400
|
+
projection.geometry = geometry;
|
|
401
|
+
if (visibility !== undefined)
|
|
402
|
+
projection.visibility = visibility;
|
|
403
|
+
if (overflow !== undefined)
|
|
404
|
+
projection.overflow = overflow;
|
|
405
|
+
if (scrollOwner !== undefined)
|
|
406
|
+
projection.scrollOwner = scrollOwner;
|
|
407
|
+
if (relationshipEvidence.length > 0)
|
|
408
|
+
projection.relationshipEvidence = relationshipEvidence;
|
|
409
|
+
if (screenshotRef !== undefined)
|
|
410
|
+
projection.screenshotRef = { path: screenshotRef.path, kind: 'screenshot' };
|
|
411
|
+
if (!record || geometry === undefined) {
|
|
412
|
+
omissions.push({
|
|
413
|
+
subject: `target:${targetId}.geometry`,
|
|
414
|
+
reason: 'unsupported-or-unavailable',
|
|
415
|
+
required: requiredTargetIds.has(targetId),
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
return projection;
|
|
419
|
+
});
|
|
420
|
+
// --- aggregate cap enforcement (IMP-SHARED-001): every output collection stays within its frozen cap, with a truthful summary record for whatever had to be dropped --
|
|
421
|
+
const boundedOmissions = capOmissions(omissions, MAX_OMISSIONS);
|
|
422
|
+
const boundedTruncations = capTruncations(truncations, MAX_TRUNCATIONS);
|
|
423
|
+
// --- adequacy (IMP-SHARED-003 / IMP-B-002): derived directly from the full,
|
|
424
|
+
// pre-cap omission/truncation `required` flags so capping the reported
|
|
425
|
+
// collections above can never hide required loss from adequacy, and any
|
|
426
|
+
// known optional-only loss is reported as non-'adequate' truthfully.
|
|
427
|
+
// CONTRACT-002 (partial vs. inadequate threshold) is deliberately left
|
|
428
|
+
// unresolved beyond this: required loss must never report 'adequate';
|
|
429
|
+
// optional-only loss is conservatively reported 'partial'. --
|
|
430
|
+
const anyRequiredLoss = omissions.some((o) => o.required) || truncations.some((t) => t.required);
|
|
431
|
+
const anyOptionalLoss = omissions.some((o) => !o.required) || truncations.some((t) => !t.required);
|
|
432
|
+
const requiredUnavailableCount = allowedRequired.filter((targetId) => {
|
|
433
|
+
const record = observation.targetEvidence[targetId];
|
|
434
|
+
return !record || evidenceValue(record.geometry) === undefined;
|
|
435
|
+
}).length;
|
|
436
|
+
const adequacy = { state: 'adequate', reasons: [] };
|
|
437
|
+
if (droppedRequired.length > 0) {
|
|
438
|
+
adequacy.reasons.push({ code: 'required-evidence-omitted-by-bound', detail: `${droppedRequired.length} required target(s) omitted by the ${MAX_RUNTIME_TARGETS}-target bound` });
|
|
439
|
+
}
|
|
440
|
+
if (requiredUnavailableCount > 0) {
|
|
441
|
+
adequacy.reasons.push({ code: 'required-runtime-target-unavailable', detail: `${requiredUnavailableCount} required target(s) have no available runtime geometry` });
|
|
442
|
+
}
|
|
443
|
+
if (anyRequiredLoss && adequacy.reasons.length === 0) {
|
|
444
|
+
adequacy.reasons.push({ code: 'required-source-evidence-truncated', detail: 'required source evidence was lost to a per-target or aggregate bound' });
|
|
445
|
+
}
|
|
446
|
+
if (adequacy.reasons.length > 0) {
|
|
447
|
+
adequacy.state = orderedRequired.length > 0 && requiredUnavailableCount + droppedRequired.length >= orderedRequired.length ? 'inadequate' : 'partial';
|
|
448
|
+
}
|
|
449
|
+
else if (anyOptionalLoss) {
|
|
450
|
+
adequacy.state = 'partial';
|
|
451
|
+
adequacy.reasons.push({ code: 'required-source-evidence-truncated', detail: 'optional evidence was truncated by a bound; no required evidence was lost' });
|
|
452
|
+
}
|
|
453
|
+
// --- identity (IMP-B-004): computed here from semantic input via the
|
|
454
|
+
// canonical identity helpers - never accepted as caller-supplied input, so
|
|
455
|
+
// caller/path noise cannot influence logical identity, and fresh instance
|
|
456
|
+
// identity remains a separate concept from the deterministic logical one. --
|
|
457
|
+
const allCandidateTargetIds = [...new Set([...orderedRequired, ...orderedPermitted, ...orderedContext])].sort();
|
|
458
|
+
const contextRequestId = buildBoundedAgentContextRequestIdentity(sources, allCandidateTargetIds, input.projectionProfile, fidelityOutput?.projection);
|
|
459
|
+
const contextId = buildBoundedAgentContextInstanceIdentity(contextRequestId);
|
|
460
|
+
const artifact = {
|
|
461
|
+
artifactKind: BOUNDED_AGENT_CONTEXT_ARTIFACT_KIND,
|
|
462
|
+
schemaVersion: BOUNDED_AGENT_CONTEXT_SCHEMA_VERSION,
|
|
463
|
+
contextId,
|
|
464
|
+
contextRequestId,
|
|
465
|
+
producer: { name: PRODUCER_NAME, version: input.producerVersion },
|
|
466
|
+
provenance: { generatedAt: input.generatedAt },
|
|
467
|
+
projectionProfile: input.projectionProfile,
|
|
468
|
+
sources,
|
|
469
|
+
targets,
|
|
470
|
+
adequacy,
|
|
471
|
+
omissions: boundedOmissions,
|
|
472
|
+
truncations: boundedTruncations,
|
|
473
|
+
...(fidelityOutput !== undefined ? { fidelity: fidelityOutput.projection } : {}),
|
|
474
|
+
};
|
|
475
|
+
return { ok: true, artifact };
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=boundedAgentContextProjection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundedAgentContextProjection.js","sourceRoot":"","sources":["../../src/domain/boundedAgentContextProjection.ts"],"names":[],"mappings":"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"}
|