@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.
Files changed (316) hide show
  1. package/CHANGELOG.md +397 -0
  2. package/LICENSE +21 -0
  3. package/README.md +255 -0
  4. package/dist/application/browserCaptureService.d.ts +11 -0
  5. package/dist/application/browserCaptureService.js +12 -0
  6. package/dist/application/browserCaptureService.js.map +1 -0
  7. package/dist/application/comparisonService.d.ts +56 -0
  8. package/dist/application/comparisonService.js +77 -0
  9. package/dist/application/comparisonService.js.map +1 -0
  10. package/dist/application/externalReferencePersistenceService.d.ts +75 -0
  11. package/dist/application/externalReferencePersistenceService.js +182 -0
  12. package/dist/application/externalReferencePersistenceService.js.map +1 -0
  13. package/dist/application/frontendContractEvaluationService.d.ts +49 -0
  14. package/dist/application/frontendContractEvaluationService.js +112 -0
  15. package/dist/application/frontendContractEvaluationService.js.map +1 -0
  16. package/dist/application/frontendContractPersistenceService.d.ts +56 -0
  17. package/dist/application/frontendContractPersistenceService.js +91 -0
  18. package/dist/application/frontendContractPersistenceService.js.map +1 -0
  19. package/dist/application/observationPersistence.d.ts +59 -0
  20. package/dist/application/observationPersistence.js +79 -0
  21. package/dist/application/observationPersistence.js.map +1 -0
  22. package/dist/application/projectCheckService.d.ts +3 -0
  23. package/dist/application/projectCheckService.js +169 -0
  24. package/dist/application/projectCheckService.js.map +1 -0
  25. package/dist/application/projectWorkflowService.d.ts +46 -0
  26. package/dist/application/projectWorkflowService.js +92 -0
  27. package/dist/application/projectWorkflowService.js.map +1 -0
  28. package/dist/application/referenceFidelityEvaluationService.d.ts +28 -0
  29. package/dist/application/referenceFidelityEvaluationService.js +45 -0
  30. package/dist/application/referenceFidelityEvaluationService.js.map +1 -0
  31. package/dist/artifacts/artifactReader.d.ts +19 -0
  32. package/dist/artifacts/artifactReader.js +36 -0
  33. package/dist/artifacts/artifactReader.js.map +1 -0
  34. package/dist/artifacts/artifactWriter.d.ts +25 -0
  35. package/dist/artifacts/artifactWriter.js +68 -0
  36. package/dist/artifacts/artifactWriter.js.map +1 -0
  37. package/dist/artifacts/comparisonArtifactReader.d.ts +18 -0
  38. package/dist/artifacts/comparisonArtifactReader.js +35 -0
  39. package/dist/artifacts/comparisonArtifactReader.js.map +1 -0
  40. package/dist/artifacts/comparisonArtifactWriter.d.ts +41 -0
  41. package/dist/artifacts/comparisonArtifactWriter.js +67 -0
  42. package/dist/artifacts/comparisonArtifactWriter.js.map +1 -0
  43. package/dist/artifacts/externalReferenceArtifactReader.d.ts +18 -0
  44. package/dist/artifacts/externalReferenceArtifactReader.js +35 -0
  45. package/dist/artifacts/externalReferenceArtifactReader.js.map +1 -0
  46. package/dist/artifacts/externalReferenceArtifactWriter.d.ts +44 -0
  47. package/dist/artifacts/externalReferenceArtifactWriter.js +77 -0
  48. package/dist/artifacts/externalReferenceArtifactWriter.js.map +1 -0
  49. package/dist/artifacts/frontendContractArtifactReader.d.ts +24 -0
  50. package/dist/artifacts/frontendContractArtifactReader.js +47 -0
  51. package/dist/artifacts/frontendContractArtifactReader.js.map +1 -0
  52. package/dist/artifacts/frontendContractArtifactWriter.d.ts +34 -0
  53. package/dist/artifacts/frontendContractArtifactWriter.js +70 -0
  54. package/dist/artifacts/frontendContractArtifactWriter.js.map +1 -0
  55. package/dist/artifacts/frontendContractEvaluationArtifactReader.d.ts +17 -0
  56. package/dist/artifacts/frontendContractEvaluationArtifactReader.js +34 -0
  57. package/dist/artifacts/frontendContractEvaluationArtifactReader.js.map +1 -0
  58. package/dist/artifacts/frontendContractEvaluationArtifactWriter.d.ts +32 -0
  59. package/dist/artifacts/frontendContractEvaluationArtifactWriter.js +58 -0
  60. package/dist/artifacts/frontendContractEvaluationArtifactWriter.js.map +1 -0
  61. package/dist/artifacts/types.d.ts +17 -0
  62. package/dist/artifacts/types.js +2 -0
  63. package/dist/artifacts/types.js.map +1 -0
  64. package/dist/browser/chromiumAdapter.d.ts +21 -0
  65. package/dist/browser/chromiumAdapter.js +204 -0
  66. package/dist/browser/chromiumAdapter.js.map +1 -0
  67. package/dist/browser/evidenceCapture.d.ts +62 -0
  68. package/dist/browser/evidenceCapture.js +500 -0
  69. package/dist/browser/evidenceCapture.js.map +1 -0
  70. package/dist/browser/scrollCapture.d.ts +32 -0
  71. package/dist/browser/scrollCapture.js +163 -0
  72. package/dist/browser/scrollCapture.js.map +1 -0
  73. package/dist/browser/types.d.ts +24 -0
  74. package/dist/browser/types.js +2 -0
  75. package/dist/browser/types.js.map +1 -0
  76. package/dist/cli.d.ts +8 -0
  77. package/dist/cli.js +2411 -0
  78. package/dist/cli.js.map +1 -0
  79. package/dist/domain/boundedAgentContext.d.ts +226 -0
  80. package/dist/domain/boundedAgentContext.js +355 -0
  81. package/dist/domain/boundedAgentContext.js.map +1 -0
  82. package/dist/domain/boundedAgentContextCorrelation.d.ts +74 -0
  83. package/dist/domain/boundedAgentContextCorrelation.js +441 -0
  84. package/dist/domain/boundedAgentContextCorrelation.js.map +1 -0
  85. package/dist/domain/boundedAgentContextIdentity.d.ts +26 -0
  86. package/dist/domain/boundedAgentContextIdentity.js +69 -0
  87. package/dist/domain/boundedAgentContextIdentity.js.map +1 -0
  88. package/dist/domain/boundedAgentContextProjection.d.ts +71 -0
  89. package/dist/domain/boundedAgentContextProjection.js +477 -0
  90. package/dist/domain/boundedAgentContextProjection.js.map +1 -0
  91. package/dist/domain/comparison.d.ts +220 -0
  92. package/dist/domain/comparison.js +350 -0
  93. package/dist/domain/comparison.js.map +1 -0
  94. package/dist/domain/comparisonEngine.d.ts +76 -0
  95. package/dist/domain/comparisonEngine.js +734 -0
  96. package/dist/domain/comparisonEngine.js.map +1 -0
  97. package/dist/domain/comparisonIdentity.d.ts +13 -0
  98. package/dist/domain/comparisonIdentity.js +46 -0
  99. package/dist/domain/comparisonIdentity.js.map +1 -0
  100. package/dist/domain/completion.d.ts +30 -0
  101. package/dist/domain/completion.js +22 -0
  102. package/dist/domain/completion.js.map +1 -0
  103. package/dist/domain/diagnostics.d.ts +17 -0
  104. package/dist/domain/diagnostics.js +77 -0
  105. package/dist/domain/diagnostics.js.map +1 -0
  106. package/dist/domain/evidence.d.ts +29 -0
  107. package/dist/domain/evidence.js +59 -0
  108. package/dist/domain/evidence.js.map +1 -0
  109. package/dist/domain/explicitState.d.ts +40 -0
  110. package/dist/domain/explicitState.js +54 -0
  111. package/dist/domain/explicitState.js.map +1 -0
  112. package/dist/domain/externalReference.d.ts +158 -0
  113. package/dist/domain/externalReference.js +167 -0
  114. package/dist/domain/externalReference.js.map +1 -0
  115. package/dist/domain/externalReferenceApplicability.d.ts +43 -0
  116. package/dist/domain/externalReferenceApplicability.js +52 -0
  117. package/dist/domain/externalReferenceApplicability.js.map +1 -0
  118. package/dist/domain/externalReferenceCompatibility.d.ts +40 -0
  119. package/dist/domain/externalReferenceCompatibility.js +48 -0
  120. package/dist/domain/externalReferenceCompatibility.js.map +1 -0
  121. package/dist/domain/externalReferenceFidelity.d.ts +171 -0
  122. package/dist/domain/externalReferenceFidelity.js +419 -0
  123. package/dist/domain/externalReferenceFidelity.js.map +1 -0
  124. package/dist/domain/externalReferenceIdentity.d.ts +38 -0
  125. package/dist/domain/externalReferenceIdentity.js +70 -0
  126. package/dist/domain/externalReferenceIdentity.js.map +1 -0
  127. package/dist/domain/externalReferenceImage.d.ts +35 -0
  128. package/dist/domain/externalReferenceImage.js +160 -0
  129. package/dist/domain/externalReferenceImage.js.map +1 -0
  130. package/dist/domain/externalReferenceRegionRelationships.d.ts +63 -0
  131. package/dist/domain/externalReferenceRegionRelationships.js +98 -0
  132. package/dist/domain/externalReferenceRegionRelationships.js.map +1 -0
  133. package/dist/domain/externalReferenceRegions.d.ts +65 -0
  134. package/dist/domain/externalReferenceRegions.js +105 -0
  135. package/dist/domain/externalReferenceRegions.js.map +1 -0
  136. package/dist/domain/externalReferenceRequirementIdentity.d.ts +12 -0
  137. package/dist/domain/externalReferenceRequirementIdentity.js +35 -0
  138. package/dist/domain/externalReferenceRequirementIdentity.js.map +1 -0
  139. package/dist/domain/externalReferenceRequirements.d.ts +215 -0
  140. package/dist/domain/externalReferenceRequirements.js +401 -0
  141. package/dist/domain/externalReferenceRequirements.js.map +1 -0
  142. package/dist/domain/externalReferenceRuntimeBinding.d.ts +146 -0
  143. package/dist/domain/externalReferenceRuntimeBinding.js +183 -0
  144. package/dist/domain/externalReferenceRuntimeBinding.js.map +1 -0
  145. package/dist/domain/frontendContractEvaluation.d.ts +57 -0
  146. package/dist/domain/frontendContractEvaluation.js +454 -0
  147. package/dist/domain/frontendContractEvaluation.js.map +1 -0
  148. package/dist/domain/frontendContractEvaluationArtifact.d.ts +65 -0
  149. package/dist/domain/frontendContractEvaluationArtifact.js +108 -0
  150. package/dist/domain/frontendContractEvaluationArtifact.js.map +1 -0
  151. package/dist/domain/frontendContractIdentity.d.ts +39 -0
  152. package/dist/domain/frontendContractIdentity.js +70 -0
  153. package/dist/domain/frontendContractIdentity.js.map +1 -0
  154. package/dist/domain/frontendContracts.d.ts +188 -0
  155. package/dist/domain/frontendContracts.js +260 -0
  156. package/dist/domain/frontendContracts.js.map +1 -0
  157. package/dist/domain/identity.d.ts +21 -0
  158. package/dist/domain/identity.js +47 -0
  159. package/dist/domain/identity.js.map +1 -0
  160. package/dist/domain/referenceCorrectionIdentity.d.ts +40 -0
  161. package/dist/domain/referenceCorrectionIdentity.js +77 -0
  162. package/dist/domain/referenceCorrectionIdentity.js.map +1 -0
  163. package/dist/domain/referenceCorrectionWorkflow.d.ts +160 -0
  164. package/dist/domain/referenceCorrectionWorkflow.js +165 -0
  165. package/dist/domain/referenceCorrectionWorkflow.js.map +1 -0
  166. package/dist/domain/referenceFidelityProjection.d.ts +65 -0
  167. package/dist/domain/referenceFidelityProjection.js +135 -0
  168. package/dist/domain/referenceFidelityProjection.js.map +1 -0
  169. package/dist/domain/relationships.d.ts +210 -0
  170. package/dist/domain/relationships.js +352 -0
  171. package/dist/domain/relationships.js.map +1 -0
  172. package/dist/domain/schema.d.ts +269 -0
  173. package/dist/domain/schema.js +442 -0
  174. package/dist/domain/schema.js.map +1 -0
  175. package/dist/domain/scrollEvidence.d.ts +51 -0
  176. package/dist/domain/scrollEvidence.js +134 -0
  177. package/dist/domain/scrollEvidence.js.map +1 -0
  178. package/dist/index.d.ts +114 -0
  179. package/dist/index.js +64 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/projectWorkflow/aliasCatalog.d.ts +21 -0
  182. package/dist/projectWorkflow/aliasCatalog.js +67 -0
  183. package/dist/projectWorkflow/aliasCatalog.js.map +1 -0
  184. package/dist/projectWorkflow/checkAcceptance.d.ts +25 -0
  185. package/dist/projectWorkflow/checkAcceptance.js +55 -0
  186. package/dist/projectWorkflow/checkAcceptance.js.map +1 -0
  187. package/dist/projectWorkflow/checkResult.d.ts +85 -0
  188. package/dist/projectWorkflow/checkResult.js +101 -0
  189. package/dist/projectWorkflow/checkResult.js.map +1 -0
  190. package/dist/projectWorkflow/projectConfig.d.ts +43 -0
  191. package/dist/projectWorkflow/projectConfig.js +84 -0
  192. package/dist/projectWorkflow/projectConfig.js.map +1 -0
  193. package/dist/projectWorkflow/projectDiscovery.d.ts +9 -0
  194. package/dist/projectWorkflow/projectDiscovery.js +20 -0
  195. package/dist/projectWorkflow/projectDiscovery.js.map +1 -0
  196. package/dist/projectWorkflow/projectPaths.d.ts +8 -0
  197. package/dist/projectWorkflow/projectPaths.js +23 -0
  198. package/dist/projectWorkflow/projectPaths.js.map +1 -0
  199. package/dist/request/paths.d.ts +14 -0
  200. package/dist/request/paths.js +33 -0
  201. package/dist/request/paths.js.map +1 -0
  202. package/dist/request/request.d.ts +111 -0
  203. package/dist/request/request.js +464 -0
  204. package/dist/request/request.js.map +1 -0
  205. package/dist/safety/policy.d.ts +14 -0
  206. package/dist/safety/policy.js +81 -0
  207. package/dist/safety/policy.js.map +1 -0
  208. package/dist/viewer/assets/index-CN_yb9Uf.css +1 -0
  209. package/dist/viewer/assets/index-D98S1_2d.js +9 -0
  210. package/dist/viewer/icons/icon-192.png +0 -0
  211. package/dist/viewer/icons/icon-512.png +0 -0
  212. package/dist/viewer/index.html +15 -0
  213. package/dist/viewer/manifest.webmanifest +1 -0
  214. package/dist/viewer/registerSW.js +1 -0
  215. package/dist/viewer/sw.js +1 -0
  216. package/dist/viewer/workbox-9c191d2f.js +1 -0
  217. package/dist/viewerServer/context.d.ts +48 -0
  218. package/dist/viewerServer/context.js +60 -0
  219. package/dist/viewerServer/context.js.map +1 -0
  220. package/dist/viewerServer/evidence/classify.d.ts +59 -0
  221. package/dist/viewerServer/evidence/classify.js +124 -0
  222. package/dist/viewerServer/evidence/classify.js.map +1 -0
  223. package/dist/viewerServer/evidence/comparisonView.d.ts +28 -0
  224. package/dist/viewerServer/evidence/comparisonView.js +43 -0
  225. package/dist/viewerServer/evidence/comparisonView.js.map +1 -0
  226. package/dist/viewerServer/evidence/contextSourceView.d.ts +25 -0
  227. package/dist/viewerServer/evidence/contextSourceView.js +20 -0
  228. package/dist/viewerServer/evidence/contextSourceView.js.map +1 -0
  229. package/dist/viewerServer/evidence/discovery.d.ts +31 -0
  230. package/dist/viewerServer/evidence/discovery.js +78 -0
  231. package/dist/viewerServer/evidence/discovery.js.map +1 -0
  232. package/dist/viewerServer/evidence/evaluationView.d.ts +32 -0
  233. package/dist/viewerServer/evidence/evaluationView.js +50 -0
  234. package/dist/viewerServer/evidence/evaluationView.js.map +1 -0
  235. package/dist/viewerServer/evidence/handles.d.ts +21 -0
  236. package/dist/viewerServer/evidence/handles.js +43 -0
  237. package/dist/viewerServer/evidence/handles.js.map +1 -0
  238. package/dist/viewerServer/evidence/index.d.ts +41 -0
  239. package/dist/viewerServer/evidence/index.js +82 -0
  240. package/dist/viewerServer/evidence/index.js.map +1 -0
  241. package/dist/viewerServer/evidence/limits.d.ts +27 -0
  242. package/dist/viewerServer/evidence/limits.js +28 -0
  243. package/dist/viewerServer/evidence/limits.js.map +1 -0
  244. package/dist/viewerServer/evidence/linkedEvidence.d.ts +43 -0
  245. package/dist/viewerServer/evidence/linkedEvidence.js +151 -0
  246. package/dist/viewerServer/evidence/linkedEvidence.js.map +1 -0
  247. package/dist/viewerServer/evidence/mediaResolver.d.ts +16 -0
  248. package/dist/viewerServer/evidence/mediaResolver.js +85 -0
  249. package/dist/viewerServer/evidence/mediaResolver.js.map +1 -0
  250. package/dist/viewerServer/evidence/observationView.d.ts +29 -0
  251. package/dist/viewerServer/evidence/observationView.js +46 -0
  252. package/dist/viewerServer/evidence/observationView.js.map +1 -0
  253. package/dist/viewerServer/evidence/pathSafety.d.ts +11 -0
  254. package/dist/viewerServer/evidence/pathSafety.js +31 -0
  255. package/dist/viewerServer/evidence/pathSafety.js.map +1 -0
  256. package/dist/viewerServer/evidence/projection.d.ts +55 -0
  257. package/dist/viewerServer/evidence/projection.js +152 -0
  258. package/dist/viewerServer/evidence/projection.js.map +1 -0
  259. package/dist/viewerServer/evidence/referenceView.d.ts +133 -0
  260. package/dist/viewerServer/evidence/referenceView.js +169 -0
  261. package/dist/viewerServer/evidence/referenceView.js.map +1 -0
  262. package/dist/viewerServer/httpServer.d.ts +27 -0
  263. package/dist/viewerServer/httpServer.js +381 -0
  264. package/dist/viewerServer/httpServer.js.map +1 -0
  265. package/dist/viewerServer/openBrowser.d.ts +7 -0
  266. package/dist/viewerServer/openBrowser.js +32 -0
  267. package/dist/viewerServer/openBrowser.js.map +1 -0
  268. package/dist/viewerServer/port.d.ts +16 -0
  269. package/dist/viewerServer/port.js +19 -0
  270. package/dist/viewerServer/port.js.map +1 -0
  271. package/dist/viewerServer/viewerService.d.ts +62 -0
  272. package/dist/viewerServer/viewerService.js +88 -0
  273. package/dist/viewerServer/viewerService.js.map +1 -0
  274. package/docs/ARCHITECTURE.md +1286 -0
  275. package/docs/CI_CD.md +250 -0
  276. package/docs/COMMANDS.md +972 -0
  277. package/docs/CONTRACTS.md +1856 -0
  278. package/docs/CURRENT_STATE.md +1049 -0
  279. package/docs/DEVELOPMENT.md +202 -0
  280. package/docs/DOCUMENTATION_PRESERVATION_POLICY.md +50 -0
  281. package/docs/PROJECT_DESCRIPTION.md +2221 -0
  282. package/docs/PROJECT_MILESTONES.md +2526 -0
  283. package/docs/PROJECT_OVERVIEW.md +150 -0
  284. package/docs/QUICKSTART.md +83 -0
  285. package/docs/RELEASE.md +27 -0
  286. package/docs/ROADMAP.md +641 -0
  287. package/docs/SECURITY.md +218 -0
  288. package/docs/WORKFLOWS.md +642 -0
  289. package/docs/plans/v0.8-implementation-plan.md +655 -0
  290. package/docs/plans/v0.8.1-cli-usability-patch-plan.md +505 -0
  291. package/docs/reports/v0.7-bounded-fidelity-context-prompt7.md +243 -0
  292. package/docs/reports/v0.7-implementation-completeness-documentation-reconciliation.md +497 -0
  293. package/docs/reports/v0.7-pre-release-readiness.md +337 -0
  294. package/docs/reports/v0.7-reference-binding-prompt5.md +223 -0
  295. package/docs/reports/v0.7-reference-compatibility-prompt4.md +234 -0
  296. package/docs/reports/v0.7-reference-correction-workflow-prompt8.md +222 -0
  297. package/docs/reports/v0.7-reference-fidelity-prompt6.md +216 -0
  298. package/docs/reports/v0.7-reference-foundation-prompt1.md +151 -0
  299. package/docs/reports/v0.7-reference-regions-prompt2.md +195 -0
  300. package/docs/reports/v0.7-reference-requirements-prompt3.md +217 -0
  301. package/docs/reports/v0.7-release-prep.md +423 -0
  302. package/docs/reports/v0.8-binding-fidelity-interaction-batch6.md +279 -0
  303. package/docs/reports/v0.8-bounded-context-correlation-batch7.md +233 -0
  304. package/docs/reports/v0.8-comparison-contract-inspection-batch4.md +279 -0
  305. package/docs/reports/v0.8-evidence-index-readers-batch2.md +247 -0
  306. package/docs/reports/v0.8-implementation-completeness-documentation-reconciliation.md +741 -0
  307. package/docs/reports/v0.8-integrated-viewer-acceptance-batch8.md +128 -0
  308. package/docs/reports/v0.8-observation-svg-inspection-batch3.md +223 -0
  309. package/docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md +687 -0
  310. package/docs/reports/v0.8-reference-candidate-inspection-batch5.md +232 -0
  311. package/docs/reports/v0.8-viewer-runtime-pwa-batch1.md +278 -0
  312. package/docs/reports/v0.8.1-check-orchestration-prompt2.md +69 -0
  313. package/docs/reports/v0.8.1-implementation-completeness-documentation-reconciliation.md +114 -0
  314. package/docs/reports/v0.8.1-prerelease-readiness-cross-platform-security-code-rot.md +170 -0
  315. package/docs/reports/v0.8.1-project-workflow-foundation-prompt1.md +66 -0
  316. package/package.json +58 -0
@@ -0,0 +1,183 @@
1
+ import { isValidExternalReferenceArtifact } from './externalReference.js';
2
+ import { REFERENCE_REGION_ID_PATTERN } from './externalReferenceRegions.js';
3
+ import { isValidObservationArtifact } from './schema.js';
4
+ import { evaluateReferenceCandidateCompatibility } from './externalReferenceCompatibility.js';
5
+ import { targetPresence } from './comparisonEngine.js';
6
+ import { evidenceValue } from './evidence.js';
7
+ function isPlainObject(value) {
8
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
9
+ }
10
+ /**
11
+ * Independently-owned duplicate of request/request.ts's private
12
+ * `TARGET_NAME_RE` (`^[A-Za-z0-9_-]{1,64}$`) - same "stable, portable,
13
+ * log-safe identifier" convention already duplicated by
14
+ * `externalReferenceRegions.ts#REFERENCE_REGION_ID_PATTERN` and
15
+ * `explicitState.ts#STATE_LABEL_PATTERN`. Never imported cross-module, per
16
+ * the established per-module pattern-ownership convention.
17
+ */
18
+ export const RUNTIME_TARGET_NAME_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
19
+ /** Mirrors `MAX_REFERENCE_REGIONS` (20) - a binding declaration collection is authoring input over the same region set, so the same bound applies; independently owned, not imported, since the two constants describe different collections that merely happen to share a value. */
20
+ export const MAX_REFERENCE_RUNTIME_BINDINGS = 20;
21
+ export const REFERENCE_RUNTIME_BINDING_STATUSES = ['bound', 'ambiguous', 'unavailable'];
22
+ /**
23
+ * Closed, bounded reason vocabulary - one code per distinct evidence
24
+ * situation the evaluator can actually observe, mirroring the
25
+ * "one diagnostic code per validation domain" convention already used by
26
+ * `DIAGNOSTIC_CODES`. Never a place for a free-form or source-derived
27
+ * explanation; `detail` (free text) carries the human-readable specifics.
28
+ */
29
+ export const REFERENCE_RUNTIME_BINDING_REASON_CODES = [
30
+ 'runtime-target-not-configured',
31
+ 'runtime-target-not-found',
32
+ 'runtime-target-ambiguous',
33
+ 'runtime-target-evidence-unavailable',
34
+ ];
35
+ function isValidBindingDeclarationShape(value) {
36
+ if (!isPlainObject(value))
37
+ return false;
38
+ if (typeof value.referenceRegion !== 'string' || !REFERENCE_REGION_ID_PATTERN.test(value.referenceRegion))
39
+ return false;
40
+ if (typeof value.runtimeTarget !== 'string' || !RUNTIME_TARGET_NAME_PATTERN.test(value.runtimeTarget))
41
+ return false;
42
+ const knownKeys = new Set(['referenceRegion', 'runtimeTarget']);
43
+ return Object.keys(value).every((key) => knownKeys.has(key));
44
+ }
45
+ /**
46
+ * Structural, candidate-independent validation: shape, bounds, uniqueness,
47
+ * and reference-region existence against the supplied
48
+ * `ExternalReferenceArtifact` only - this never touches a candidate
49
+ * observation (runtime-target availability is inherently per-candidate; see
50
+ * `evaluateReferenceRuntimeBindings`). A reference with no `regions` at all
51
+ * (Prompt 1/2-era artifact, or one that simply declared none) makes every
52
+ * binding declaration fail closed - there is nothing to bind against.
53
+ *
54
+ * Duplicate/conflicting-subject rule (mirrors Prompt 3's requirement-subject
55
+ * uniqueness rule exactly): no two declarations may name the same
56
+ * `referenceRegion` (case-insensitively), regardless of whether their
57
+ * `runtimeTarget` values agree (an exact duplicate) or disagree (a
58
+ * conflict) - both are rejected identically, fail-closed, never resolved by
59
+ * silently keeping the first. The reverse - several distinct reference
60
+ * regions naming the same `runtimeTarget` - is deliberately allowed: two
61
+ * design sub-regions may legitimately correspond to one runtime container
62
+ * element, whereas one region needing several runtime targets would be
63
+ * inherently ambiguous about which target represents it (the "one region,
64
+ * one explicit primary target" rule).
65
+ */
66
+ export function isValidReferenceRuntimeBindingDeclarations(value, reference) {
67
+ if (!Array.isArray(value))
68
+ return { valid: false, reason: 'bindings must be an array' };
69
+ if (value.length > MAX_REFERENCE_RUNTIME_BINDINGS) {
70
+ return { valid: false, reason: `bindings must contain at most ${MAX_REFERENCE_RUNTIME_BINDINGS} entries` };
71
+ }
72
+ const referenceValidation = isValidExternalReferenceArtifact(reference);
73
+ if (!referenceValidation.valid)
74
+ return { valid: false, reason: `reference is invalid: ${referenceValidation.reason}` };
75
+ const knownRegionIds = new Set((reference.regions ?? []).map((r) => r.id.toLowerCase()));
76
+ const seenRegions = new Set();
77
+ for (const entry of value) {
78
+ if (!isValidBindingDeclarationShape(entry)) {
79
+ return { valid: false, reason: 'each binding must be { referenceRegion, runtimeTarget }, both matching ^[A-Za-z0-9_-]{1,64}$' };
80
+ }
81
+ const lowerRegion = entry.referenceRegion.toLowerCase();
82
+ if (!knownRegionIds.has(lowerRegion)) {
83
+ return { valid: false, reason: `binding refers to unknown reference region id "${entry.referenceRegion}"` };
84
+ }
85
+ if (seenRegions.has(lowerRegion)) {
86
+ return { valid: false, reason: `duplicate or conflicting binding declaration for reference region "${entry.referenceRegion}"` };
87
+ }
88
+ seenRegions.add(lowerRegion);
89
+ }
90
+ return { valid: true };
91
+ }
92
+ function findConfiguredTargetName(candidate, runtimeTarget) {
93
+ const lower = runtimeTarget.toLowerCase();
94
+ return candidate.requestConfig.targets.find((t) => t.name.toLowerCase() === lower)?.name;
95
+ }
96
+ function evaluateOneBinding(candidate, declaration) {
97
+ const configuredName = findConfiguredTargetName(candidate, declaration.runtimeTarget);
98
+ if (configuredName === undefined) {
99
+ return {
100
+ referenceRegion: declaration.referenceRegion,
101
+ runtimeTarget: declaration.runtimeTarget,
102
+ status: 'unavailable',
103
+ reasonCode: 'runtime-target-not-configured',
104
+ detail: `runtime target "${declaration.runtimeTarget}" was not part of this candidate observation's configured target set`,
105
+ };
106
+ }
107
+ const record = candidate.targetEvidence[configuredName];
108
+ const presence = targetPresence(record);
109
+ const resolution = record ? evidenceValue(record.resolution) : undefined;
110
+ const visibility = record ? evidenceValue(record.visibility) : undefined;
111
+ const targetResolutionStatus = resolution?.selectionStatus;
112
+ if (presence === 'matched') {
113
+ return {
114
+ referenceRegion: declaration.referenceRegion,
115
+ runtimeTarget: declaration.runtimeTarget,
116
+ status: 'bound',
117
+ detail: `runtime target "${declaration.runtimeTarget}" resolved uniquely for this candidate observation`,
118
+ ...(targetResolutionStatus !== undefined ? { targetResolutionStatus } : {}),
119
+ ...(visibility !== undefined ? { targetVisible: visibility.visible } : {}),
120
+ };
121
+ }
122
+ if (presence === 'ambiguous') {
123
+ return {
124
+ referenceRegion: declaration.referenceRegion,
125
+ runtimeTarget: declaration.runtimeTarget,
126
+ status: 'ambiguous',
127
+ reasonCode: 'runtime-target-ambiguous',
128
+ detail: `runtime target "${declaration.runtimeTarget}" resolved ambiguously (more than one match) for this candidate observation`,
129
+ ...(targetResolutionStatus !== undefined ? { targetResolutionStatus } : {}),
130
+ };
131
+ }
132
+ if (presence === 'not-found') {
133
+ return {
134
+ referenceRegion: declaration.referenceRegion,
135
+ runtimeTarget: declaration.runtimeTarget,
136
+ status: 'unavailable',
137
+ reasonCode: 'runtime-target-not-found',
138
+ detail: `runtime target "${declaration.runtimeTarget}" was configured but not found on the candidate observation's page`,
139
+ ...(targetResolutionStatus !== undefined ? { targetResolutionStatus } : {}),
140
+ };
141
+ }
142
+ return {
143
+ referenceRegion: declaration.referenceRegion,
144
+ runtimeTarget: declaration.runtimeTarget,
145
+ status: 'unavailable',
146
+ reasonCode: 'runtime-target-evidence-unavailable',
147
+ detail: `runtime target "${declaration.runtimeTarget}" has no usable resolution evidence in this candidate observation`,
148
+ ...(targetResolutionStatus !== undefined ? { targetResolutionStatus } : {}),
149
+ };
150
+ }
151
+ /**
152
+ * Pure and synchronous: no browser, no filesystem, no network, no second
153
+ * target resolver. Validates both artifacts and the declaration collection,
154
+ * runs the Prompt 4 compatibility gate exactly once, and - only when the
155
+ * candidate is not `incomparable` with the reference - evaluates each
156
+ * declaration in authored order against the candidate's own already-
157
+ * captured `requestConfig.targets`/`targetEvidence`. Mutates neither input.
158
+ */
159
+ export function evaluateReferenceRuntimeBindings(reference, candidate, declarations) {
160
+ const referenceValidation = isValidExternalReferenceArtifact(reference);
161
+ if (!referenceValidation.valid)
162
+ return { ok: false, reason: `reference is invalid: ${referenceValidation.reason}` };
163
+ const candidateValidation = isValidObservationArtifact(candidate);
164
+ if (!candidateValidation.valid)
165
+ return { ok: false, reason: `candidate is invalid: ${candidateValidation.reason}` };
166
+ const declarationsValidation = isValidReferenceRuntimeBindingDeclarations(declarations, reference);
167
+ if (!declarationsValidation.valid)
168
+ return { ok: false, reason: declarationsValidation.reason };
169
+ const compatibilityResult = evaluateReferenceCandidateCompatibility(reference, candidate);
170
+ const bindings = compatibilityResult.compatibility.state === 'incomparable' ? [] : declarations.map((declaration) => evaluateOneBinding(candidate, declaration));
171
+ return {
172
+ ok: true,
173
+ evaluation: {
174
+ referenceId: compatibilityResult.referenceId,
175
+ referenceRequestId: compatibilityResult.referenceRequestId,
176
+ candidateObservationId: compatibilityResult.candidateObservationId,
177
+ candidateRequestId: compatibilityResult.candidateRequestId,
178
+ compatibility: compatibilityResult.compatibility,
179
+ bindings,
180
+ },
181
+ };
182
+ }
183
+ //# sourceMappingURL=externalReferenceRuntimeBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalReferenceRuntimeBinding.js","sourceRoot":"","sources":["../../src/domain/externalReferenceRuntimeBinding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * v0.5 Batch 2 canonical pure frontend contract evaluation engine. Consumes
3
+ * already-loaded evidence (before/after ObservationArtifact, ComparisonArtifact,
4
+ * PersistentBaselineContract, PerChangeContract - all frozen by v0.4/Batch 1) and
5
+ * derives per-clause results plus one overall PASS/FAIL verdict. Pure and
6
+ * synchronous: no Chromium, no filesystem, no target re-resolution, no
7
+ * reimplementation of v0.4 comparison/relationship/clipping/scroll-owner logic.
8
+ * Mutates none of its inputs. This module owns no persistence, no CLI, and no
9
+ * unexpected-change *authoring* semantics - `unexpected` remains a derived
10
+ * classification only, never an authored category (see domain/frontendContracts.ts).
11
+ */
12
+ import type { EvidenceReference } from './relationships.js';
13
+ import type { ObservationArtifact } from './schema.js';
14
+ import type { ComparisonArtifact, ComparisonDifferenceSubject, DifferenceKind } from './comparison.js';
15
+ import type { PersistentBaselineContract, PerChangeContract, ClauseEvaluationResult, OverallVerdict } from './frontendContracts.js';
16
+ export interface FrontendContractEvaluationInput {
17
+ before: ObservationArtifact;
18
+ after: ObservationArtifact;
19
+ comparison: ComparisonArtifact;
20
+ baseline: PersistentBaselineContract;
21
+ change: PerChangeContract;
22
+ }
23
+ /** A meaningful rendered difference not accounted for by any active authored clause - derived only, never authorable. */
24
+ export interface UnexpectedChangeResult {
25
+ classification: 'unexpected';
26
+ subject: ComparisonDifferenceSubject;
27
+ differenceKind: DifferenceKind;
28
+ supportingEvidence: EvidenceReference[];
29
+ }
30
+ export interface FrontendContractEvaluationResult {
31
+ overallVerdict: OverallVerdict;
32
+ activeBaselineClauseIds: string[];
33
+ supersededBaselineClauseIds: string[];
34
+ clauseResults: ClauseEvaluationResult[];
35
+ unexpectedChanges: UnexpectedChangeResult[];
36
+ }
37
+ export type EvaluateFrontendContractResult = {
38
+ ok: true;
39
+ evaluation: FrontendContractEvaluationResult;
40
+ } | {
41
+ ok: false;
42
+ reason: string;
43
+ };
44
+ /**
45
+ * The one canonical pure v0.5 contract-evaluation entry point:
46
+ * `active persistent baseline contracts + current per-change contract + actual
47
+ * before/after runtime evidence -> PASS | FAIL` with full clause-level
48
+ * evidence. Deterministic given identical inputs; never mutates
49
+ * before/after/comparison/baseline/change.
50
+ *
51
+ * NOTE: `comparison.differences` already includes one `ComparisonDifference`
52
+ * per `RelationshipChangeRecord` (see `comparisonEngine.ts#relationshipChangesToDifferences`),
53
+ * so unexpected-change derivation consumes `differences` only - iterating
54
+ * `relationshipChanges` separately would double-count the same logical
55
+ * transition.
56
+ */
57
+ export declare function evaluateFrontendContract(input: FrontendContractEvaluationInput): EvaluateFrontendContractResult;