@shapeshift-labs/frontier-lang-compiler 0.2.192 → 0.2.193

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.
@@ -16,11 +16,11 @@ function htmlCssProjectMergeMissingEvidenceRoutes(route, signals) {
16
16
  [signals.cssParserEvidence]: route('prove-css-parser-source-evidence', 'layout-style-parser', 'supply-postcss-source-span-and-trivia-evidence'),
17
17
  [signals.htmlIdentityEvidence]: route('prove-html-identity-evidence', 'layout-markup-identity', 'supply-stable-element-identity-and-structural-addressability-evidence'),
18
18
  [signals.cssSelectorTargetEvidence]: route('prove-css-selector-target-evidence', 'layout-style-targets', 'supply-selector-target-graph-and-rebase-evidence'),
19
- [signals.htmlStructuralMerge]: route('admit-html-structural-merge', 'layout-markup-graph', 'attach-source-bound-html-runtime-proof-or-fix-duplicate-identity'),
19
+ [signals.htmlStructuralMerge]: route('admit-html-structural-merge', 'layout-markup-graph', 'attach-runtime-evidence-bound-html-runtime-proof-or-fix-duplicate-identity'),
20
20
  [signals.cssCascadeMerge]: route('admit-css-cascade-merge', 'layout-style-graph', 'supply-source-bound-css-shape-scoped-cascade-proof'),
21
21
  [signals.cssDependencyGraphEvidence]: route('prove-css-dependency-graph', 'layout-style-graph', 'supply-css-custom-property-animation-font-and-asset-dependency-graph'),
22
22
  [signals.cssRuntimeDescriptorEvidence]: route('prove-css-runtime-descriptor-evidence', 'layout-style-descriptors', 'supply-property-page-typed-descriptor-source-evidence'),
23
- [signals.htmlCssBrowserRuntimeProof]: route('prove-html-css-browser-runtime', 'browser-proof', 'attach-source-bound-html-css-browser-runtime-proof-bundle')
23
+ [signals.htmlCssBrowserRuntimeProof]: route('prove-html-css-browser-runtime', 'browser-proof', 'attach-runtime-evidence-bound-html-css-browser-runtime-proof-bundle')
24
24
  };
25
25
  }
26
26
 
@@ -44,11 +44,11 @@ function htmlCssProjectMergeMissingEvidenceItems(summary, signals, missingEviden
44
44
  if (summary.cssFiles && summary.cssParserEvidenceFiles !== summary.cssFiles) items.push(missingEvidenceItem({ code: signals.cssParserEvidence, scope: 'layout-style-parser', kind: 'css-parser-source-evidence', proofLevel: 'css-parser-source-evidence', action: 'review', summary: `CSS project merge has parser/source evidence for ${summary.cssParserEvidenceFiles}/${summary.cssFiles} file(s); require PostCSS rule/declaration spans, raw trivia hashes, and zero parse errors before parser evidence admission.` }));
45
45
  if (summary.htmlFiles && summary.htmlIdentityEvidenceFiles !== summary.htmlFiles) items.push(missingEvidenceItem({ code: signals.htmlIdentityEvidence, scope: 'layout-markup-identity', kind: 'html-identity-evidence', proofLevel: 'html-identity-evidence', action: 'review', summary: `HTML project merge has structural identity evidence for ${summary.htmlIdentityEvidenceFiles}/${summary.htmlFiles} file(s) with ${summary.htmlDuplicateIdentityEvidenceFiles ?? 0} duplicate identity evidence file(s); require parser-backed structural spans, unique explicit identity keys, and stable explicit/path identity accounting before structural admission.` }));
46
46
  if (summary.cssFiles && (summary.cssSelectorTargetEvidenceFiles !== summary.cssFiles || summary.cssSelectorTargetConflictFiles)) items.push(missingEvidenceItem({ code: signals.cssSelectorTargetEvidence, scope: 'layout-style-targets', kind: 'css-selector-target-evidence', proofLevel: 'css-selector-target-evidence', action: 'review', summary: `CSS project merge has selector-target evidence for ${summary.cssSelectorTargetEvidenceFiles}/${summary.cssFiles} file(s) with ${summary.cssSelectorTargetConflictFiles} selector target conflict(s); require selector target graph and proven rebase before target-moving merges.` }));
47
- if (summary.htmlBlockedFiles) items.push(missingEvidenceItem({ code: signals.htmlStructuralMerge, scope: 'layout-markup-graph', kind: 'html-structural-merge-proof', proofLevel: 'html-structural-merge', action: 'review', summary: `HTML project merge has ${summary.htmlBlockedFiles} blocked file(s); for runtime-boundary changes attach htmlRuntimeBoundaryProofsByPath[sourcePath] with exact base/worker/head/output binding, and for duplicate identity keys make explicit HTML identities unique before admission.`, suggestedInput: { htmlRuntimeBoundaryProofsByPath: true, htmlUniqueExplicitIdentityKeys: true } }));
47
+ if (summary.htmlBlockedFiles) items.push(missingEvidenceItem({ code: signals.htmlStructuralMerge, scope: 'layout-markup-graph', kind: 'html-structural-merge-proof', proofLevel: 'html-structural-merge', action: 'review', summary: `HTML project merge has ${summary.htmlBlockedFiles} blocked file(s); for runtime-boundary changes attach htmlRuntimeBoundaryProofsByPath[sourcePath] with exact base/worker/head/output binding plus runtime command, probe id, evidence hash, and required runtime signals, and for duplicate identity keys make explicit HTML identities unique before admission.`, suggestedInput: { htmlRuntimeBoundaryProofsByPath: true, htmlUniqueExplicitIdentityKeys: true } }));
48
48
  if (summary.cssBlockedFiles) items.push(missingEvidenceItem({ code: signals.cssCascadeMerge, scope: 'layout-style-graph', kind: 'css-cascade-merge-proof', proofLevel: 'css-cascade-merge', action: 'review', summary: `CSS project merge has ${summary.cssBlockedFiles} blocked file(s), including ${summary.cssDuplicateCascadeKeyBlockedFiles ?? 0} duplicate cascade-key blocker(s), ${summary.cssShorthandExpansionBlockedFiles ?? 0} shorthand expansion blocker(s), ${summary.cssScopedCascadeBlockedFiles} scoped cascade proof block(s), and ${summary.cssScopedCascadeShapeEvidenceFiles ?? 0} shape-keyed scoped proof file(s); supply parser/cascade/scope evidence, require deterministic shorthand expansion evidence for changed box shorthands, require ordered cascade occurrence evidence for duplicate same-property declarations, require source-bound scoped cascade proofs with exact scope shape keys and base/worker/head/output hashes for changed declarations under @media/@supports/@container/@layer/@scope or nested scopes, and keep browser claims false until runtime proof passes.` }));
49
49
  if (summary.cssDependencySurfaceFiles && (summary.cssDependencyGraphEvidenceFiles !== summary.cssDependencySurfaceFiles || summary.cssDependencyGraphMissingProofFiles || summary.cssDependencyGraphBlockedFiles)) items.push(missingEvidenceItem({ code: signals.cssDependencyGraphEvidence, scope: 'layout-style-graph', kind: 'css-dependency-graph-evidence', proofLevel: 'css-dependency-graph', action: 'review', summary: `CSS project merge has dependency graph evidence for ${summary.cssDependencyGraphEvidenceFiles}/${summary.cssDependencySurfaceFiles} dependency-surface file(s), ${summary.cssDependencyGraphMissingProofFiles} missing dependency graph proof(s), and ${summary.cssDependencyGraphBlockedFiles} dependency blocker(s); require custom property, var() fallback, @keyframes/animation-name, @font-face, @property, @page, and url() asset graph evidence before cascade/browser equivalence claims.`, suggestedInput: { cssDependencyGraphEvidence: true } }));
50
50
  if (summary.cssRuntimeDescriptorFiles && (summary.cssRuntimeDescriptorEvidenceFiles !== summary.cssRuntimeDescriptorFiles || summary.cssRuntimeDescriptorBlockedFiles)) items.push(missingEvidenceItem({ code: signals.cssRuntimeDescriptorEvidence, scope: 'layout-style-descriptors', kind: 'css-runtime-descriptor-evidence', proofLevel: 'css-runtime-descriptor-evidence', action: 'review', summary: `CSS project merge has typed descriptor evidence for ${summary.cssRuntimeDescriptorEvidenceFiles}/${summary.cssRuntimeDescriptorFiles} runtime descriptor file(s), including ${summary.cssPropertyDescriptorEvidenceFiles}/${summary.cssPropertyDescriptorFiles} @property file(s) and ${summary.cssPageDescriptorEvidenceFiles}/${summary.cssPageDescriptorFiles} @page file(s); require parser-backed descriptor records, descriptor source spans, typed @property syntax/inherits/initial-value evidence, @page descriptor records, and stable at-rule shape keys before descriptor admission. Browser equivalence still requires separate cssCascadeRuntimeProofs.`, suggestedInput: { cssRuntimeDescriptorEvidence: true } }));
51
- if (summary.htmlCssMergedFiles && !summary.htmlCssBrowserRuntimeProofs) items.push(missingEvidenceItem({ code: signals.htmlCssBrowserRuntimeProof, scope: 'browser-proof', kind: 'browser-runtime-proof', proofLevel: 'browser-runtime-proof', action: 'review', summary: 'HTML/CSS structural source merge was available, but browser DOM/cascade/layout/runtime proof was not attached; attach htmlRuntimeBoundaryProofsByPath for HTML runtime boundaries or cssCascadeRuntimeProofs for CSS runtime at-rules such as @keyframes, @property, and @page, and keep browser equivalence claims false until proof passes.', suggestedInput: { browserRuntimeProof: true } }));
51
+ if (summary.htmlCssMergedFiles && !summary.htmlCssBrowserRuntimeProofs) items.push(missingEvidenceItem({ code: signals.htmlCssBrowserRuntimeProof, scope: 'browser-proof', kind: 'browser-runtime-proof', proofLevel: 'browser-runtime-proof', action: 'review', summary: 'HTML/CSS structural source merge was available, but runtime-evidence-bound browser DOM/cascade/layout/runtime proof was not attached; attach htmlRuntimeBoundaryProofsByPath for HTML runtime boundaries or cssCascadeRuntimeProofs for CSS runtime at-rules such as @keyframes, @property, and @page with runtime command, probe id, evidence hash, required runtime signals, and no broad proof self-claims.', suggestedInput: { browserRuntimeProof: true } }));
52
52
  return items;
53
53
  }
54
54
 
@@ -80,7 +80,8 @@ function hasRuntimeBoundaryConflict(file) {
80
80
  return (file?.result?.conflicts ?? file?.conflicts ?? []).some((conflict) => HtmlRuntimeBoundaryReasonCodes.has(conflict?.details?.reasonCode));
81
81
  }
82
82
  function hasHtmlRuntimeBoundaryProof(file) {
83
- return [...(file?.result?.runtimeBoundaryProofs ?? []), ...(file?.result?.htmlRuntimeProofs ?? []), ...(file?.result?.admission?.htmlRuntimeBoundaryProofs ?? file?.admission?.htmlRuntimeBoundaryProofs ?? []), ...(file?.result?.admission?.htmlBrowserRuntimeProofs ?? file?.admission?.htmlBrowserRuntimeProofs ?? [])].some((proof) => proof?.status === 'passed' && HtmlRuntimeBoundaryReasonCodes.has(proof.reasonCode));
83
+ return hasAdmittedBrowserRuntimeProof(file) &&
84
+ htmlRuntimeProofRecords(file).some((proof) => isRuntimeEvidenceBoundProof(proof) && HtmlRuntimeBoundaryReasonCodes.has(proof.reasonCode));
84
85
  }
85
86
  function hasFrameworkBoundaryConflict(file) {
86
87
  return (file?.result?.conflicts ?? file?.conflicts ?? []).some((conflict) => HtmlFrameworkBoundaryReasonCodes.has(conflict?.details?.reasonCode));
@@ -178,8 +179,41 @@ function isCssDependencyConflict(conflict) {
178
179
  }
179
180
  function isCssDependencyAtRule(shape) { return CssDependencyAtRuleNames.has(String(shape?.atRuleName ?? '').toLowerCase()); }
180
181
  function hasBrowserRuntimeProof(file) {
182
+ return hasAdmittedBrowserRuntimeProof(file) && browserRuntimeProofRecords(file).some(isRuntimeEvidenceBoundProof);
183
+ }
184
+
185
+ function hasAdmittedBrowserRuntimeProof(file) {
181
186
  const admission = file?.result?.admission ?? file?.admission ?? {};
182
- return admission.browserRuntimeEquivalenceClaim === true || admission.browserCascadeEquivalenceClaim === true || admission.browserRenderEquivalenceClaim === true;
187
+ return admission.browserRuntimeEquivalenceClaim === true ||
188
+ admission.browserCascadeEquivalenceClaim === true ||
189
+ admission.browserRenderEquivalenceClaim === true;
190
+ }
191
+
192
+ function htmlRuntimeProofRecords(file) {
193
+ return [
194
+ ...(file?.result?.runtimeBoundaryProofs ?? []),
195
+ ...(file?.result?.htmlRuntimeProofs ?? []),
196
+ ...(file?.result?.admission?.htmlRuntimeBoundaryProofs ?? file?.admission?.htmlRuntimeBoundaryProofs ?? []),
197
+ ...(file?.result?.admission?.htmlBrowserRuntimeProofs ?? file?.admission?.htmlBrowserRuntimeProofs ?? [])
198
+ ];
199
+ }
200
+
201
+ function browserRuntimeProofRecords(file) {
202
+ return [
203
+ ...htmlRuntimeProofRecords(file),
204
+ ...(file?.result?.cascadeRuntimeProofs ?? []),
205
+ ...(file?.result?.admission?.cssCascadeRuntimeProofs ?? file?.admission?.cssCascadeRuntimeProofs ?? [])
206
+ ];
207
+ }
208
+
209
+ function isRuntimeEvidenceBoundProof(proof) {
210
+ return proof?.status === 'passed' &&
211
+ proof.runtimeEvidenceBound === true &&
212
+ typeof proof.runtimeCommand === 'string' &&
213
+ typeof proof.runtimeProbeId === 'string' &&
214
+ typeof proof.runtimeEvidenceHash === 'string' &&
215
+ Array.isArray(proof.runtimeSignals) &&
216
+ proof.runtimeSignals.length > 0;
183
217
  }
184
218
  function hasHtmlDuplicateIdentityEvidence(file) { return hasDuplicateExplicitIdentityKeys(file?.result?.identityEvidence); }
185
219
  function htmlDuplicateIdentityKeyCount(file) {
@@ -150,40 +150,44 @@ function htmlProofGapConflict(id, sourcePath, reasonCode, details = {}, code = '
150
150
 
151
151
  function htmlProofGapSummary(reasonCode) {
152
152
  if (reasonCode === 'html-duplicate-explicit-identity') return 'Duplicate explicit HTML identity keys make structural target admission ambiguous.';
153
- if (reasonCode === 'script-runtime-boundary') return 'HTML script execution can mutate document, module, network, and global runtime behavior and requires source-bound host evidence.';
154
- if (reasonCode === 'style-runtime-boundary') return 'HTML style blocks affect browser cascade and rendering and require source-bound host evidence.';
155
- if (reasonCode === 'template-runtime-boundary') return 'HTML template content can be cloned, stamped, or consumed by host code and requires source-bound host evidence.';
156
- if (reasonCode === 'slot-runtime-boundary') return 'HTML slots participate in shadow-DOM distribution and require source-bound host evidence.';
157
- if (reasonCode === 'custom-element-runtime-boundary') return 'Custom element upgrade, lifecycle, attributes, and shadow behavior require source-bound host evidence.';
158
- if (reasonCode === 'framework-directive-boundary') return 'Framework directive attributes are interpreted by framework runtimes and require source-bound host evidence.';
159
- if (reasonCode === 'event-handler-runtime-boundary') return 'HTML event handler attributes execute in the browser runtime and require source-bound host evidence.';
160
- if (reasonCode === 'inline-style-runtime-boundary') return 'HTML inline style attributes affect browser cascade and rendering and require source-bound host evidence.';
161
- if (reasonCode === 'iframe-runtime-boundary' || reasonCode === 'iframe-srcdoc-runtime-boundary') return reasonCode === 'iframe-runtime-boundary' ? 'HTML iframe runtime attributes affect nested browsing-context execution and require source-bound host evidence.' : 'HTML iframe srcdoc attributes define nested browsing-context content and require source-bound host evidence.';
162
- if (reasonCode === 'form-runtime-boundary') return 'HTML form runtime attributes affect submission, navigation, encoding, or validation and require source-bound host evidence.';
163
- if (reasonCode === 'form-submitter-runtime-boundary') return 'HTML submitter attributes affect form submission behavior and require source-bound host evidence.';
164
- if (reasonCode === 'form-control-runtime-boundary') return 'HTML form-control attributes affect user input, validation, state, or submission data and require source-bound host evidence.';
165
- if (reasonCode === 'document-base-runtime-boundary') return 'HTML base attributes affect URL resolution or navigation targets and require source-bound host evidence.';
166
- if (reasonCode === 'document-metadata-runtime-boundary') return 'HTML metadata attributes can affect document loading, policy, refresh, viewport, or discovery behavior and require source-bound host evidence.';
167
- if (reasonCode === 'resource-loading-runtime-boundary') return 'HTML resource-loading attributes affect fetched resources, selection, privacy, media behavior, or layout and require source-bound host evidence.';
168
- return 'HTML proof gap requires source-bound evidence before structural merge admission.';
153
+ if (reasonCode === 'script-runtime-boundary') return 'HTML script execution can mutate document, module, network, and global runtime behavior and requires source-bound runtime evidence.';
154
+ if (reasonCode === 'style-runtime-boundary') return 'HTML style blocks affect browser cascade and rendering and require source-bound runtime evidence.';
155
+ if (reasonCode === 'template-runtime-boundary') return 'HTML template content can be cloned, stamped, or consumed by host code and requires source-bound runtime evidence.';
156
+ if (reasonCode === 'slot-runtime-boundary') return 'HTML slots participate in shadow-DOM distribution and require source-bound runtime evidence.';
157
+ if (reasonCode === 'custom-element-runtime-boundary') return 'Custom element upgrade, lifecycle, attributes, and shadow behavior require source-bound runtime evidence.';
158
+ if (reasonCode === 'framework-directive-boundary') return 'Framework directive attributes are interpreted by framework runtimes and require source-bound runtime evidence.';
159
+ if (reasonCode === 'event-handler-runtime-boundary') return 'HTML event handler attributes execute in the browser runtime and require source-bound runtime evidence.';
160
+ if (reasonCode === 'inline-style-runtime-boundary') return 'HTML inline style attributes affect browser cascade and rendering and require source-bound runtime evidence.';
161
+ if (reasonCode === 'iframe-runtime-boundary' || reasonCode === 'iframe-srcdoc-runtime-boundary') return reasonCode === 'iframe-runtime-boundary' ? 'HTML iframe runtime attributes affect nested browsing-context execution and require source-bound runtime evidence.' : 'HTML iframe srcdoc attributes define nested browsing-context content and require source-bound runtime evidence.';
162
+ if (reasonCode === 'form-runtime-boundary') return 'HTML form runtime attributes affect submission, navigation, encoding, or validation and require source-bound runtime evidence.';
163
+ if (reasonCode === 'form-submitter-runtime-boundary') return 'HTML submitter attributes affect form submission behavior and require source-bound runtime evidence.';
164
+ if (reasonCode === 'form-control-runtime-boundary') return 'HTML form-control attributes affect user input, validation, state, or submission data and require source-bound runtime evidence.';
165
+ if (reasonCode === 'document-base-runtime-boundary') return 'HTML base attributes affect URL resolution or navigation targets and require source-bound runtime evidence.';
166
+ if (reasonCode === 'document-metadata-runtime-boundary') return 'HTML metadata attributes can affect document loading, policy, refresh, viewport, or discovery behavior and require source-bound runtime evidence.';
167
+ if (reasonCode === 'resource-loading-runtime-boundary') return 'HTML resource-loading attributes affect fetched resources, selection, privacy, media behavior, or layout and require source-bound runtime evidence.';
168
+ return 'HTML proof gap requires source-bound runtime evidence before structural merge admission.';
169
169
  }
170
170
 
171
171
  function htmlProofGapNextProof(reasonCode) {
172
172
  if (reasonCode === 'html-duplicate-explicit-identity') return 'Rename duplicate explicit HTML identity keys or supply parser-backed identity evidence with unique explicitIdentityKeys on every side.';
173
- if (reasonCode === 'script-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary "html-script-runtime", and exact base/worker/head/output source text or hashes.';
174
- if (reasonCode === 'style-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary "html-style-runtime", and exact base/worker/head/output source text or hashes.';
175
- if (reasonCode === 'template-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary "html-template-runtime", and exact base/worker/head/output source text or hashes.';
176
- if (reasonCode === 'slot-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary "html-slot-runtime", and exact base/worker/head/output source text or hashes.';
177
- if (reasonCode === 'custom-element-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary "html-custom-element-runtime", and exact base/worker/head/output source text or hashes.';
178
- if (reasonCode === 'framework-directive-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary "html-framework-directive", boundaryAttributes for the changed directive attributes, and exact base/worker/head/output source text or hashes.';
179
- if (reasonCode === 'event-handler-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary, boundaryAttributes, and exact base/worker/head/output source text or hashes.';
180
- if (reasonCode === 'inline-style-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary "html-inline-style-attribute", boundaryAttributes ["style"], and exact base/worker/head/output source text or hashes.';
181
- if (reasonCode === 'iframe-runtime-boundary' || reasonCode === 'iframe-srcdoc-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary, boundaryAttributes, and exact base/worker/head/output source text or hashes.';
182
- if (reasonCode === 'form-runtime-boundary' || reasonCode === 'form-submitter-runtime-boundary' || reasonCode === 'form-control-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary, boundaryAttributes, and exact base/worker/head/output source text or hashes.';
183
- if (reasonCode === 'document-base-runtime-boundary' || reasonCode === 'document-metadata-runtime-boundary' || reasonCode === 'resource-loading-runtime-boundary') return 'Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, boundary, boundaryAttributes, and exact base/worker/head/output source text or hashes.';
173
+ if (reasonCode === 'script-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary "html-script-runtime"');
174
+ if (reasonCode === 'style-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary "html-style-runtime"');
175
+ if (reasonCode === 'template-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary "html-template-runtime"');
176
+ if (reasonCode === 'slot-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary "html-slot-runtime"');
177
+ if (reasonCode === 'custom-element-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary "html-custom-element-runtime"');
178
+ if (reasonCode === 'framework-directive-boundary') return htmlRuntimeBoundaryProofInstruction('boundary "html-framework-directive" and boundaryAttributes for the changed directive attributes');
179
+ if (reasonCode === 'event-handler-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary and boundaryAttributes');
180
+ if (reasonCode === 'inline-style-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary "html-inline-style-attribute" and boundaryAttributes ["style"]');
181
+ if (reasonCode === 'iframe-runtime-boundary' || reasonCode === 'iframe-srcdoc-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary and boundaryAttributes');
182
+ if (reasonCode === 'form-runtime-boundary' || reasonCode === 'form-submitter-runtime-boundary' || reasonCode === 'form-control-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary and boundaryAttributes');
183
+ if (reasonCode === 'document-base-runtime-boundary' || reasonCode === 'document-metadata-runtime-boundary' || reasonCode === 'resource-loading-runtime-boundary') return htmlRuntimeBoundaryProofInstruction('boundary and boundaryAttributes');
184
184
  return 'Attach source-bound HTML parser, identity, and runtime-boundary evidence for the changed file before structural admission.';
185
185
  }
186
186
 
187
+ function htmlRuntimeBoundaryProofInstruction(boundaryClause) {
188
+ return `Attach htmlRuntimeBoundaryProofsByPath[sourcePath] with kind html-source-bound-runtime-boundary-proof, status passed, sourcePath, reasonCode, side, ${boundaryClause}, exact base/worker/head/output source text or hashes, runtime command, runtime probe id, runtime evidence hash, required runtime signals, and no broad browser/semantic/auto-merge self-claims.`;
189
+ }
190
+
187
191
  function blockedHtmlProofGapAdmission(admission = {}, conflicts = []) {
188
192
  return {
189
193
  ...admission,
@@ -38,6 +38,7 @@ function isHtmlRuntimeBoundaryProofForChange(proof, change, binding) {
38
38
  proof.boundary === change.boundary &&
39
39
  sameStringSet(proof.boundaryAttributes ?? proof.changedBoundaryAttributes, change.boundaryAttributes) &&
40
40
  htmlRuntimeBoundaryProofSourceBound(proof, binding) &&
41
+ !htmlRuntimeBoundaryProofMakesBroadClaims(proof) &&
41
42
  htmlRuntimeBoundaryProofEvidenceMetadata(proof, change) !== undefined;
42
43
  }
43
44
 
@@ -66,7 +67,7 @@ function htmlRuntimeBoundaryProofRecord(proof, change, binding) {
66
67
  id: proof.id,
67
68
  kind: proof.kind,
68
69
  status: 'passed',
69
- proofLevel: proof.proofLevel ?? 'html-runtime-boundary-source-bound',
70
+ proofLevel: proof.proofLevel ?? 'html-runtime-boundary-evidence-bound',
70
71
  reasonCode: change.reasonCode,
71
72
  side: change.side,
72
73
  boundary: change.boundary,
@@ -182,11 +183,19 @@ function htmlRuntimeBoundaryProvenResult(result, runtimeBoundaryProofs) {
182
183
  ...(result.admission ?? {}),
183
184
  browserRuntimeEquivalenceClaim: true,
184
185
  htmlRuntimeBoundaryProofs: runtimeBoundaryProofs,
185
- reasonCodes: uniqueStrings([...(result.admission?.reasonCodes ?? []), 'html-runtime-boundary-source-bound'])
186
+ reasonCodes: uniqueStrings([...(result.admission?.reasonCodes ?? []), 'html-runtime-boundary-evidence-bound'])
186
187
  })
187
188
  });
188
189
  }
189
190
 
191
+ function htmlRuntimeBoundaryProofMakesBroadClaims(proof) {
192
+ return proof.browserRuntimeEquivalenceClaim === true ||
193
+ proof.browserRenderEquivalenceClaim === true ||
194
+ proof.browserCascadeEquivalenceClaim === true ||
195
+ proof.semanticEquivalenceClaim === true ||
196
+ proof.autoMergeClaim === true;
197
+ }
198
+
190
199
  function htmlRuntimeBoundaryAttributeGroups(sourceText) {
191
200
  const groups = new Map();
192
201
  for (const attribute of htmlRuntimeBoundaryAttributes(sourceText)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshift-labs/frontier-lang-compiler",
3
- "version": "0.2.192",
3
+ "version": "0.2.193",
4
4
  "description": "Compiler facade for Frontier Lang source documents and language projection adapters.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",