@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,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.7 Prompt 2 explicit reference-region geometry. A region is one
|
|
3
|
+
* user/configuration-authored rectangle in the coordinate system of an
|
|
4
|
+
* external reference image - origin at the image's top-left corner, x
|
|
5
|
+
* increasing rightward, y increasing downward, unit is reference-image
|
|
6
|
+
* pixels (never CSS pixels - this is a static image, not a rendered page).
|
|
7
|
+
* Coordinates may be fractional. This module never infers a region from
|
|
8
|
+
* pixel content: no OCR, no computer vision, no automatic segmentation.
|
|
9
|
+
*
|
|
10
|
+
* Only the rectangle {x, y, width, height} is canonical/authored; every
|
|
11
|
+
* other geometric fact (right, bottom, centerX, centerY) is a pure
|
|
12
|
+
* calculation over it (see deriveReferenceRegionGeometry) so that no
|
|
13
|
+
* redundant, potentially-drifting copy of the same fact is ever persisted.
|
|
14
|
+
*/
|
|
15
|
+
function isPlainObject(value) {
|
|
16
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
function isFiniteNumber(value) {
|
|
19
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
20
|
+
}
|
|
21
|
+
/** Same character/length convention as request/request.ts's target-name pattern (`^[A-Za-z0-9_-]{1,64}$`) - reused directly, not reinvented, for the same "stable, portable, log/path-safe identifier" reason. */
|
|
22
|
+
export const REFERENCE_REGION_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
23
|
+
/** Same numeric bound as request/request.ts's MAX_TARGETS (20) - a coincidentally equal, independently-owned constant: reference regions are design-authoring input, not runtime targets, so the two are not structurally coupled even though they share a value and the same "bound the O(n^2) pairwise-relationship explosion" rationale (see externalReferenceRegionRelationships.ts). */
|
|
24
|
+
export const MAX_REFERENCE_REGIONS = 20;
|
|
25
|
+
export function deriveReferenceRegionGeometry(rectangle) {
|
|
26
|
+
return {
|
|
27
|
+
x: rectangle.x,
|
|
28
|
+
y: rectangle.y,
|
|
29
|
+
width: rectangle.width,
|
|
30
|
+
height: rectangle.height,
|
|
31
|
+
right: rectangle.x + rectangle.width,
|
|
32
|
+
bottom: rectangle.y + rectangle.height,
|
|
33
|
+
centerX: rectangle.x + rectangle.width / 2,
|
|
34
|
+
centerY: rectangle.y + rectangle.height / 2,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Structural + numeric validation of one rectangle only - does not know
|
|
39
|
+
* about image bounds (see isValidReferenceRegions for the boundary check,
|
|
40
|
+
* which needs the owning image's dimensions). Fails closed on non-finite,
|
|
41
|
+
* negative, or zero width/height: authored design geometry is never
|
|
42
|
+
* silently clamped into validity.
|
|
43
|
+
*/
|
|
44
|
+
export function isValidReferenceRegionRectangle(value) {
|
|
45
|
+
if (!isPlainObject(value))
|
|
46
|
+
return { valid: false, reason: 'rectangle must be an object' };
|
|
47
|
+
if (!isFiniteNumber(value.x))
|
|
48
|
+
return { valid: false, reason: 'rectangle.x must be a finite number' };
|
|
49
|
+
if (!isFiniteNumber(value.y))
|
|
50
|
+
return { valid: false, reason: 'rectangle.y must be a finite number' };
|
|
51
|
+
if (!isFiniteNumber(value.width))
|
|
52
|
+
return { valid: false, reason: 'rectangle.width must be a finite number' };
|
|
53
|
+
if (!isFiniteNumber(value.height))
|
|
54
|
+
return { valid: false, reason: 'rectangle.height must be a finite number' };
|
|
55
|
+
if (value.x < 0)
|
|
56
|
+
return { valid: false, reason: 'rectangle.x must not be negative' };
|
|
57
|
+
if (value.y < 0)
|
|
58
|
+
return { valid: false, reason: 'rectangle.y must not be negative' };
|
|
59
|
+
if (value.width <= 0)
|
|
60
|
+
return { valid: false, reason: 'rectangle.width must be greater than 0' };
|
|
61
|
+
if (value.height <= 0)
|
|
62
|
+
return { valid: false, reason: 'rectangle.height must be greater than 0' };
|
|
63
|
+
return { valid: true };
|
|
64
|
+
}
|
|
65
|
+
export function isValidReferenceRegion(value) {
|
|
66
|
+
if (!isPlainObject(value))
|
|
67
|
+
return { valid: false, reason: 'region must be an object' };
|
|
68
|
+
if (typeof value.id !== 'string' || value.id.length === 0)
|
|
69
|
+
return { valid: false, reason: 'region.id must be a non-empty string' };
|
|
70
|
+
if (!REFERENCE_REGION_ID_PATTERN.test(value.id))
|
|
71
|
+
return { valid: false, reason: `region.id "${value.id}" must match ${REFERENCE_REGION_ID_PATTERN}` };
|
|
72
|
+
return isValidReferenceRegionRectangle(value.rectangle);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Collection-level validation: bounded count, unique IDs (case-insensitive,
|
|
76
|
+
* mirroring request/request.ts's target-name dedup convention), and every
|
|
77
|
+
* region's rectangle contained within the owning image's own dimensions -
|
|
78
|
+
* never silently clipped, rejected outright instead. `imageWidth`/
|
|
79
|
+
* `imageHeight` come from the artifact's own already-validated image
|
|
80
|
+
* metadata (ExternalReferenceImageReference or the approved artifact's
|
|
81
|
+
* sourceReference.image), never re-parsed here.
|
|
82
|
+
*/
|
|
83
|
+
export function isValidReferenceRegions(value, imageWidth, imageHeight) {
|
|
84
|
+
if (!Array.isArray(value))
|
|
85
|
+
return { valid: false, reason: 'regions must be an array' };
|
|
86
|
+
if (value.length > MAX_REFERENCE_REGIONS)
|
|
87
|
+
return { valid: false, reason: `regions must contain at most ${MAX_REFERENCE_REGIONS} entries` };
|
|
88
|
+
const seenIds = new Set();
|
|
89
|
+
for (const entry of value) {
|
|
90
|
+
const regionValidation = isValidReferenceRegion(entry);
|
|
91
|
+
if (!regionValidation.valid)
|
|
92
|
+
return regionValidation;
|
|
93
|
+
const region = entry;
|
|
94
|
+
const lowerId = region.id.toLowerCase();
|
|
95
|
+
if (seenIds.has(lowerId))
|
|
96
|
+
return { valid: false, reason: `duplicate region id "${region.id}"` };
|
|
97
|
+
seenIds.add(lowerId);
|
|
98
|
+
const geometry = deriveReferenceRegionGeometry(region.rectangle);
|
|
99
|
+
if (geometry.right > imageWidth || geometry.bottom > imageHeight) {
|
|
100
|
+
return { valid: false, reason: `region "${region.id}" extends outside the reference image bounds (${imageWidth}x${imageHeight})` };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { valid: true };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=externalReferenceRegions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalReferenceRegions.js","sourceRoot":"","sources":["../../src/domain/externalReferenceRegions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic identity of a single reference requirement's own semantic
|
|
3
|
+
* content - independent of authoring order or which reference it belongs to.
|
|
4
|
+
* Mirrors domain/frontendContractIdentity.ts#buildClauseIdentity exactly
|
|
5
|
+
* (same canonicalize+sha256 shape over {subject, tolerance}), extended with
|
|
6
|
+
* `category`/`expectedDependentMode` because - unlike a v0.5 baseline
|
|
7
|
+
* clause, whose identity is deliberately category-independent - two
|
|
8
|
+
* reference requirements with the same subject/tolerance but different
|
|
9
|
+
* authored category are semantically distinct authored intents (see
|
|
10
|
+
* docs/CONTRACTS.md "v0.7 Prompt 3").
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildReferenceRequirementIdentity(subject: unknown, category: string, tolerance: unknown, expectedDependentMode?: string): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Deliberately duplicated from domain/identity.ts#canonicalize (itself
|
|
4
|
+
* duplicated across comparisonIdentity.ts/frontendContractIdentity.ts/
|
|
5
|
+
* externalReferenceIdentity.ts) rather than imported - each identity module
|
|
6
|
+
* owns its own private canonicalize per existing repository convention.
|
|
7
|
+
*/
|
|
8
|
+
function canonicalize(value) {
|
|
9
|
+
if (Array.isArray(value))
|
|
10
|
+
return value.map(canonicalize);
|
|
11
|
+
if (value !== null && typeof value === 'object') {
|
|
12
|
+
const entries = Object.entries(value)
|
|
13
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
14
|
+
.map(([key, entryValue]) => [key, canonicalize(entryValue)]);
|
|
15
|
+
return Object.fromEntries(entries);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Deterministic identity of a single reference requirement's own semantic
|
|
21
|
+
* content - independent of authoring order or which reference it belongs to.
|
|
22
|
+
* Mirrors domain/frontendContractIdentity.ts#buildClauseIdentity exactly
|
|
23
|
+
* (same canonicalize+sha256 shape over {subject, tolerance}), extended with
|
|
24
|
+
* `category`/`expectedDependentMode` because - unlike a v0.5 baseline
|
|
25
|
+
* clause, whose identity is deliberately category-independent - two
|
|
26
|
+
* reference requirements with the same subject/tolerance but different
|
|
27
|
+
* authored category are semantically distinct authored intents (see
|
|
28
|
+
* docs/CONTRACTS.md "v0.7 Prompt 3").
|
|
29
|
+
*/
|
|
30
|
+
export function buildReferenceRequirementIdentity(subject, category, tolerance, expectedDependentMode) {
|
|
31
|
+
const semanticView = { subject, category, expectedDependentMode: expectedDependentMode ?? null, tolerance: tolerance ?? null };
|
|
32
|
+
const serialized = JSON.stringify(canonicalize(semanticView));
|
|
33
|
+
return createHash('sha256').update(serialized).digest('hex');
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=externalReferenceRequirementIdentity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalReferenceRequirementIdentity.js","sourceRoot":"","sources":["../../src/domain/externalReferenceRequirementIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7D,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,UAAU,CAAC,CAAU,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iCAAiC,CAC/C,OAAgB,EAChB,QAAgB,EAChB,SAAkB,EAClB,qBAA8B;IAE9B,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,qBAAqB,IAAI,IAAI,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;IAC/H,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9D,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.7 Prompt 3 selected design requirements, tolerance semantics, and
|
|
3
|
+
* reference-evidence adequacy. Builds only on Prompt 2's `ReferenceRegion`/
|
|
4
|
+
* `ReferenceRegionGeometry`/relationship-derivation - it does not implement
|
|
5
|
+
* runtime-target binding, candidate comparison, or fidelity PASS/FAIL (those
|
|
6
|
+
* remain later v0.7 prompts).
|
|
7
|
+
*
|
|
8
|
+
* Central distinction (see docs/CONTRACTS.md "v0.7 Prompt 3"): a reference
|
|
9
|
+
* region's geometry is REFERENCE EVIDENCE - everything visibly/measurably
|
|
10
|
+
* present in the supplied image. A requirement is SELECTED DESIGN INTENT -
|
|
11
|
+
* only what the user/configuration explicitly authored as mattering for
|
|
12
|
+
* later candidate evaluation. This module never infers a requirement merely
|
|
13
|
+
* because a property or relationship exists.
|
|
14
|
+
*
|
|
15
|
+
* Requirement categories are the exact v0.5 `AuthoredChangeScopeCategory`
|
|
16
|
+
* vocabulary (`requested`/`expected-dependent`/`protected`/`preserved`),
|
|
17
|
+
* imported directly rather than reinvented as a "reference-only" taxonomy -
|
|
18
|
+
* that type carries no runtime-only coupling in its own definition. As in
|
|
19
|
+
* v0.5, `'unexpected'` remains impossible to author here: it is not a member
|
|
20
|
+
* of `AuthoredChangeScopeCategory` at all.
|
|
21
|
+
*/
|
|
22
|
+
import { AUTHORED_CHANGE_SCOPE_CATEGORIES, isAuthoredChangeScopeCategory, EXPECTED_DEPENDENT_MODES, isValidExpectedDependentMode } from './frontendContracts.js';
|
|
23
|
+
import type { AuthoredChangeScopeCategory, ExpectedDependentMode } from './frontendContracts.js';
|
|
24
|
+
import type { PairwiseRelationshipKind } from './relationships.js';
|
|
25
|
+
import type { ReferenceRegion, ReferenceRegionGeometry } from './externalReferenceRegions.js';
|
|
26
|
+
export { AUTHORED_CHANGE_SCOPE_CATEGORIES, isAuthoredChangeScopeCategory, EXPECTED_DEPENDENT_MODES, isValidExpectedDependentMode };
|
|
27
|
+
export type { AuthoredChangeScopeCategory, ExpectedDependentMode };
|
|
28
|
+
export declare const MAX_REFERENCE_REQUIREMENTS = 50;
|
|
29
|
+
/** Exactly the fields of ReferenceRegionGeometry - the smallest coherent vocabulary already available from Prompt 2, nothing invented (no separate "left"/"top" aliases - x/y already are the left/top edges of the canonical rectangle). */
|
|
30
|
+
export declare const REFERENCE_REQUIREMENT_REGION_PROPERTIES: readonly ["x", "y", "width", "height", "right", "bottom", "centerX", "centerY"];
|
|
31
|
+
export type ReferenceRequirementRegionProperty = (typeof REFERENCE_REQUIREMENT_REGION_PROPERTIES)[number];
|
|
32
|
+
export declare function isReferenceRequirementRegionProperty(value: unknown): value is ReferenceRequirementRegionProperty;
|
|
33
|
+
/** Smallest useful set of pure two-region derived measurements (request section 18) - not an unrestricted geometry expression language. */
|
|
34
|
+
export declare const REFERENCE_REQUIREMENT_MEASUREMENTS: readonly ["vertical-gap", "horizontal-gap", "center-x-delta", "center-y-delta", "left-edge-delta", "right-edge-delta"];
|
|
35
|
+
export type ReferenceRequirementMeasurement = (typeof REFERENCE_REQUIREMENT_MEASUREMENTS)[number];
|
|
36
|
+
export declare function isReferenceRequirementMeasurement(value: unknown): value is ReferenceRequirementMeasurement;
|
|
37
|
+
/**
|
|
38
|
+
* Pure derived two-region measurements. `vertical-gap`/`horizontal-gap`
|
|
39
|
+
* return `undefined` when the two regions overlap on that axis (the gap is
|
|
40
|
+
* geometrically undefined, never fabricated as 0 or negative) - direction is
|
|
41
|
+
* decided by actual geometry, mirroring relationships.ts's
|
|
42
|
+
* verticalSequenceOf/horizontalOrderOf convention. The delta measurements
|
|
43
|
+
* are always defined (a plain numeric distance, never negative).
|
|
44
|
+
*/
|
|
45
|
+
export declare function deriveReferenceRequirementMeasurement(kind: ReferenceRequirementMeasurement, a: ReferenceRegionGeometry, b: ReferenceRegionGeometry): number | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Deliberately not a reuse of domain/frontendContracts.ts#ContractTolerance:
|
|
48
|
+
* that type's `'absolute-px'` member is implicitly runtime/CSS pixels
|
|
49
|
+
* (compared against `TargetGeometry` from a live ObservationArtifact).
|
|
50
|
+
* Reference-image pixels are a different, explicitly-labeled unit (see
|
|
51
|
+
* externalReferenceRegions.ts's coordinate-semantics doc comment) - Prompt 6
|
|
52
|
+
* will eventually need an explicit scale/compatibility mapping between the
|
|
53
|
+
* two; nothing here assumes 1 reference pixel = 1 CSS pixel. Numeric bounds
|
|
54
|
+
* intentionally mirror CONTRACT_TOLERANCE_ABSOLUTE_PX_MIN/MAX and
|
|
55
|
+
* CONTRACT_TOLERANCE_PERCENT_MIN/MAX (same values, independently owned
|
|
56
|
+
* constants) rather than importing them, for the same unit-labeling reason.
|
|
57
|
+
*/
|
|
58
|
+
export declare const REFERENCE_REQUIREMENT_TOLERANCE_ABSOLUTE_PX_MIN = 0;
|
|
59
|
+
export declare const REFERENCE_REQUIREMENT_TOLERANCE_ABSOLUTE_PX_MAX = 100;
|
|
60
|
+
export declare const REFERENCE_REQUIREMENT_TOLERANCE_PERCENT_MIN = 0;
|
|
61
|
+
export declare const REFERENCE_REQUIREMENT_TOLERANCE_PERCENT_MAX = 100;
|
|
62
|
+
export type ReferenceRequirementTolerance = {
|
|
63
|
+
kind: 'exact';
|
|
64
|
+
} | {
|
|
65
|
+
kind: 'absolute-reference-px';
|
|
66
|
+
amount: number;
|
|
67
|
+
} | {
|
|
68
|
+
kind: 'percent';
|
|
69
|
+
amount: number;
|
|
70
|
+
};
|
|
71
|
+
export declare function isValidReferenceRequirementTolerance(value: unknown): value is ReferenceRequirementTolerance;
|
|
72
|
+
export interface RegionPropertyRequirementSubject {
|
|
73
|
+
kind: 'region-property';
|
|
74
|
+
region: string;
|
|
75
|
+
property: ReferenceRequirementRegionProperty;
|
|
76
|
+
}
|
|
77
|
+
export interface RegionRelationshipRequirementSubject {
|
|
78
|
+
kind: 'region-relationship';
|
|
79
|
+
subjectRegion: string;
|
|
80
|
+
relatedRegion: string;
|
|
81
|
+
relationship: PairwiseRelationshipKind;
|
|
82
|
+
}
|
|
83
|
+
export interface RegionMeasurementRequirementSubject {
|
|
84
|
+
kind: 'region-measurement';
|
|
85
|
+
subjectRegion: string;
|
|
86
|
+
relatedRegion: string;
|
|
87
|
+
measurement: ReferenceRequirementMeasurement;
|
|
88
|
+
}
|
|
89
|
+
export type ReferenceRequirementSubject = RegionPropertyRequirementSubject | RegionRelationshipRequirementSubject | RegionMeasurementRequirementSubject;
|
|
90
|
+
export declare function isValidReferenceRequirementSubjectShape(value: unknown): value is ReferenceRequirementSubject;
|
|
91
|
+
export interface ExternalReferenceRequirement {
|
|
92
|
+
/** Deterministic identity from {subject, category, expectedDependentMode, tolerance} only - see externalReferenceRequirementIdentity.ts. Never a timestamp or config path. */
|
|
93
|
+
requirementId: string;
|
|
94
|
+
category: AuthoredChangeScopeCategory;
|
|
95
|
+
expectedDependentMode?: ExpectedDependentMode;
|
|
96
|
+
subject: ReferenceRequirementSubject;
|
|
97
|
+
/** Required for region-property/region-measurement subjects (a numeric comparison needs a tolerance); must be absent for region-relationship subjects (a categorical fact - see docs/CONTRACTS.md). */
|
|
98
|
+
tolerance?: ReferenceRequirementTolerance;
|
|
99
|
+
}
|
|
100
|
+
export type ReferenceRequirementValidationResult = {
|
|
101
|
+
valid: true;
|
|
102
|
+
} | {
|
|
103
|
+
valid: false;
|
|
104
|
+
reason: string;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Raw authored input shape: exactly what a user/config supplies via
|
|
108
|
+
* `--requirements-file` - {category, expectedDependentMode?, subject,
|
|
109
|
+
* tolerance?}, deliberately with no `requirementId` field. Identity is
|
|
110
|
+
* always system-computed from this exact content (see
|
|
111
|
+
* buildReferenceRequirement below), never author-supplied - unlike v0.5's
|
|
112
|
+
* BaselineClause/PerChangeClause, which need an author-visible `clauseId` so
|
|
113
|
+
* separate documents can cross-reference it via `supersedesBaselineClauseIds`;
|
|
114
|
+
* Prompt 3 requirements have no cross-document reference need yet, so
|
|
115
|
+
* requiring (and trusting) an authored id would only invite drift between a
|
|
116
|
+
* user-typed id and the content it is supposed to identify.
|
|
117
|
+
*/
|
|
118
|
+
export interface RawReferenceRequirement {
|
|
119
|
+
category: AuthoredChangeScopeCategory;
|
|
120
|
+
expectedDependentMode?: ExpectedDependentMode;
|
|
121
|
+
subject: ReferenceRequirementSubject;
|
|
122
|
+
tolerance?: ReferenceRequirementTolerance;
|
|
123
|
+
}
|
|
124
|
+
/** Validates one raw, not-yet-identified authored requirement - the shape accepted from `--requirements-file`. */
|
|
125
|
+
export declare function isValidRawReferenceRequirement(value: unknown): ReferenceRequirementValidationResult;
|
|
126
|
+
/** Computes the deterministic requirementId and returns a complete ExternalReferenceRequirement. Callers must validate via isValidRawReferenceRequirement first. */
|
|
127
|
+
export declare function buildReferenceRequirement(raw: RawReferenceRequirement): ExternalReferenceRequirement;
|
|
128
|
+
/** Validates one already-identified, fully-constructed requirement's own shape (category/mode/subject/tolerance-applicability, plus requirementId presence) - never region existence, which needs the owning reference's `regions` (see isValidReferenceRequirements). Used to defensively re-validate a persisted/about-to-be-persisted ExternalReferenceRequirement, mirroring how every other artifact family's writer re-validates via the same gate it will later read with. */
|
|
129
|
+
export declare function isValidReferenceRequirementShape(value: unknown): ReferenceRequirementValidationResult;
|
|
130
|
+
/**
|
|
131
|
+
* Collection-level validation: bounded count, every subject's region id(s)
|
|
132
|
+
* must exist among the owning artifact's own already-validated `regions`
|
|
133
|
+
* (an authored requirement pointing at a nonexistent region is a structural
|
|
134
|
+
* validation failure, never merely "unavailable" evidence - see
|
|
135
|
+
* docs/CONTRACTS.md), and no two requirements may share the same structural
|
|
136
|
+
* subject (the chosen conflict-handling rule - see the same doc section for
|
|
137
|
+
* why v0.5's runtime-evidence conflict detector could not be reused here).
|
|
138
|
+
*/
|
|
139
|
+
export declare function isValidReferenceRequirements(value: unknown, regions: readonly ReferenceRegion[]): ReferenceRequirementValidationResult;
|
|
140
|
+
export type ReferenceRequirementExpectation = {
|
|
141
|
+
available: true;
|
|
142
|
+
kind: 'numeric';
|
|
143
|
+
value: number;
|
|
144
|
+
} | {
|
|
145
|
+
available: true;
|
|
146
|
+
kind: 'relationship';
|
|
147
|
+
matches: boolean;
|
|
148
|
+
} | {
|
|
149
|
+
available: false;
|
|
150
|
+
reason: string;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Derives what the reference itself shows for one requirement's subject,
|
|
154
|
+
* purely from the supplied regions - never stored on the requirement or the
|
|
155
|
+
* artifact (avoids the exact drift risk request section 14 warns about: a
|
|
156
|
+
* stored `width: 424` could silently disagree with the region's own
|
|
157
|
+
* rectangle after some future change). `geometryTolerancePx` is passed
|
|
158
|
+
* through to relationship derivation unchanged (Prompt 2's own default
|
|
159
|
+
* applies when omitted).
|
|
160
|
+
*/
|
|
161
|
+
export declare function deriveReferenceRequirementExpectation(subject: ReferenceRequirementSubject, regions: readonly ReferenceRegion[], options?: {
|
|
162
|
+
geometryTolerancePx?: number;
|
|
163
|
+
}): ReferenceRequirementExpectation;
|
|
164
|
+
export declare const REFERENCE_REQUIREMENT_ADEQUACY_STATES: readonly ["adequate", "partial", "inadequate"];
|
|
165
|
+
export type ReferenceRequirementAdequacyState = (typeof REFERENCE_REQUIREMENT_ADEQUACY_STATES)[number];
|
|
166
|
+
/**
|
|
167
|
+
* Deliberately its own small, reference-owned vocabulary - not a reuse of
|
|
168
|
+
* domain/boundedAgentContext.ts#ADEQUACY_REASON_CODES, which describes
|
|
169
|
+
* runtime-target/static-correlation concerns that do not exist yet at this
|
|
170
|
+
* stage (see docs/CONTRACTS.md "v0.7 Prompt 3" for the full precedent
|
|
171
|
+
* review). Only two codes exist because only two conditions can make an
|
|
172
|
+
* already-*structurally-valid* requirement collection reference-inadequate:
|
|
173
|
+
* authoring zero requirements at all, or a validly-shaped relationship/
|
|
174
|
+
* measurement requirement whose evidence cannot actually be derived from the
|
|
175
|
+
* reference geometry. An unknown-region or malformed requirement is a
|
|
176
|
+
* construction-time validation failure (isValidReferenceRequirements) and
|
|
177
|
+
* never reaches adequacy at all.
|
|
178
|
+
*/
|
|
179
|
+
export declare const REFERENCE_REQUIREMENT_ADEQUACY_REASON_CODES: readonly ["no-selected-requirements", "missing-reference-relationship-evidence"];
|
|
180
|
+
export type ReferenceRequirementAdequacyReasonCode = (typeof REFERENCE_REQUIREMENT_ADEQUACY_REASON_CODES)[number];
|
|
181
|
+
export interface ReferenceRequirementAdequacyReason {
|
|
182
|
+
code: ReferenceRequirementAdequacyReasonCode;
|
|
183
|
+
requirementId?: string;
|
|
184
|
+
detail?: string;
|
|
185
|
+
}
|
|
186
|
+
export interface ReferenceRequirementAdequacy {
|
|
187
|
+
status: ReferenceRequirementAdequacyState;
|
|
188
|
+
totalRequirements: number;
|
|
189
|
+
evaluableRequirements: number;
|
|
190
|
+
unavailableRequirements: number;
|
|
191
|
+
reasons: ReferenceRequirementAdequacyReason[];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* REFERENCE-SIDE adequacy only: does the reference definition itself contain
|
|
195
|
+
* enough evidence to understand every selected requirement? This never asks
|
|
196
|
+
* whether a runtime target/candidate exists (that is Prompt 4/5's
|
|
197
|
+
* responsibility). A reference with zero authored requirements is explicitly
|
|
198
|
+
* `inadequate` (request section 24F's documented decision: an
|
|
199
|
+
* externally-valid, region-rich reference is still not usable for a
|
|
200
|
+
* correction task until the user has actually selected what matters).
|
|
201
|
+
* Deterministic: reasons are ordered by authored requirement index, never by
|
|
202
|
+
* object-key iteration order.
|
|
203
|
+
*/
|
|
204
|
+
export declare function deriveReferenceRequirementAdequacy(regions: readonly ReferenceRegion[], requirements: readonly ExternalReferenceRequirement[], options?: {
|
|
205
|
+
geometryTolerancePx?: number;
|
|
206
|
+
}): ReferenceRequirementAdequacy;
|
|
207
|
+
/**
|
|
208
|
+
* v0.7 Prompt 7 addition (additive, previously no structural validator
|
|
209
|
+
* existed for this already-frozen Prompt 3 shape): a defense-in-depth
|
|
210
|
+
* structural check, reused by `boundedAgentContext.ts` when accepting an
|
|
211
|
+
* already-computed `ReferenceRequirementAdequacy` value as part of a bounded
|
|
212
|
+
* fidelity projection. No change to `deriveReferenceRequirementAdequacy`'s
|
|
213
|
+
* own logic or the `ReferenceRequirementAdequacy` contract itself.
|
|
214
|
+
*/
|
|
215
|
+
export declare function isValidReferenceRequirementAdequacy(value: unknown): value is ReferenceRequirementAdequacy;
|