@hraness/slopcamera 3.8.0 → 3.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.
@@ -24,6 +24,9 @@ import {
24
24
  } from "./html-overlay-browser-runtime";
25
25
 
26
26
  const Sha256Schema = z.string().regex(/^[a-f0-9]{64}$/u);
27
+ const ExecutionContractVersionSchema = z.union([z.literal(1), z.literal(2)]);
28
+ export type HtmlOverlayExecutionContractVersion = z.infer<typeof ExecutionContractVersionSchema>;
29
+
27
30
  const IntegrityLeafSchema = z.strictObject({
28
31
  key: z.string().min(1).max(512),
29
32
  sha256: Sha256Schema,
@@ -44,7 +47,7 @@ export const HtmlOverlayExecutionIntegritySchema = z.strictObject({
44
47
  }),
45
48
  rootSha256: Sha256Schema,
46
49
  runtimeSha256: Sha256Schema,
47
- schemaVersion: z.literal(1),
50
+ schemaVersion: ExecutionContractVersionSchema,
48
51
  });
49
52
  export type HtmlOverlayExecutionIntegrity = Readonly<
50
53
  z.infer<typeof HtmlOverlayExecutionIntegritySchema>
@@ -185,7 +188,7 @@ function legacyHtmlOverlayRendererContract(profileInput?: HtmlOverlayExecutionPr
185
188
  }
186
189
 
187
190
  /** Fetch opt-in grants only the exact declared private paths and changes execution identity. */
188
- export function htmlOverlayRendererContract(
191
+ function historicalHtmlOverlayRendererContract(
189
192
  profileInput?: HtmlOverlayExecutionProfile,
190
193
  resourcesInput: readonly HtmlOverlayDeclaredResource[] = [],
191
194
  ) {
@@ -204,6 +207,25 @@ export function htmlOverlayRendererContract(
204
207
  });
205
208
  }
206
209
 
210
+ /** Historical receipts select v1 explicitly; all new execution binds clone prevention. */
211
+ export function htmlOverlayRendererContract(
212
+ profileInput?: HtmlOverlayExecutionProfile,
213
+ resourcesInput: readonly HtmlOverlayDeclaredResource[] = [],
214
+ version: HtmlOverlayExecutionContractVersion = 2,
215
+ ) {
216
+ const contract = historicalHtmlOverlayRendererContract(profileInput, resourcesInput);
217
+ if (ExecutionContractVersionSchema.parse(version) === 1) return contract;
218
+ return Object.freeze({
219
+ ...contract,
220
+ launch: Object.freeze({
221
+ ...contract.launch,
222
+ args: Object.freeze(contract.launch.args.map(argument => argument.startsWith("--disable-features=")
223
+ ? `${argument},PaintHolding,MacAppCodeSignClone` : argument)),
224
+ }),
225
+ schemaVersion: 4,
226
+ });
227
+ }
228
+
207
229
  export function assertHtmlOverlayExecutionProfileLibraries(
208
230
  libraries: readonly string[], profile?: HtmlOverlayExecutionProfile,
209
231
  ): void {
@@ -258,6 +280,7 @@ export function createHtmlOverlayExecutionBundle(
258
280
  authoringInput: HtmlOverlayAuthoringInput,
259
281
  browserRuntimeInput: HtmlOverlayBrowserRuntimeBinding,
260
282
  executionProfile?: HtmlOverlayExecutionProfile,
283
+ contractVersion: HtmlOverlayExecutionContractVersion = 2,
261
284
  ): HtmlOverlayExecutionBundle {
262
285
  const authoring = HtmlOverlayAuthoringInputSchema.parse(authoringInput);
263
286
  assertHtmlOverlayExecutionProfileLibraries(authoring.libraries, executionProfile);
@@ -290,7 +313,7 @@ export function createHtmlOverlayExecutionBundle(
290
313
  },
291
314
  },
292
315
  { key: "browser-runtime", value: browserRuntime },
293
- { key: "renderer-contract", value: htmlOverlayRendererContract(executionProfile, authoring.resources) },
316
+ { key: "renderer-contract", value: htmlOverlayRendererContract(executionProfile, authoring.resources, contractVersion) },
294
317
  {
295
318
  key: "document",
296
319
  value: {
@@ -326,7 +349,7 @@ export function createHtmlOverlayExecutionBundle(
326
349
  leaves,
327
350
  rootSha256: merkleRoot(leaves),
328
351
  runtimeSha256,
329
- schemaVersion: 1,
352
+ schemaVersion: contractVersion,
330
353
  });
331
354
  return Object.freeze({
332
355
  importMap,
@@ -4,7 +4,7 @@ import type { z } from "zod";
4
4
 
5
5
  import type { ApplicationContext } from "./context";
6
6
 
7
- export const SLOPCAMERA_APPLICATION_TOOL_VERSION = "slopcamera-3.8.0" as const;
7
+ export const SLOPCAMERA_APPLICATION_TOOL_VERSION = "slopcamera-3.8.1" as const;
8
8
 
9
9
  export const OPERATION_KINDS = [
10
10
  "scene.audit",
@@ -381,7 +381,7 @@ export async function recoverSpatialRenderOutput(application: ApplicationContext
381
381
  mode: plan.request.mode, frameRate: plan.request.selection.kind === "video" ? plan.request.selection.frameRate : { numerator: 1, denominator: 1 }, preparedAssets: batch.preparedAssets });
382
382
  equal(batch.metadata, expectedBatch.metadata, "Spatial batch metadata differs from the exact scene samples.");
383
383
  equal(batch.metadataSha256, expectedBatch.metadataSha256, "Spatial batch metadata digest is invalid.");
384
- const execution = createHtmlOverlayExecutionBundle(expectedBatch.authoring, input.browserRuntime, plan.request.executionProfile);
384
+ const execution = createHtmlOverlayExecutionBundle(expectedBatch.authoring, input.browserRuntime, plan.request.executionProfile, batch.executionIntegrity.schemaVersion);
385
385
  assertHtmlOverlayGpuEvidenceProfile(plan.request.executionProfile, batch.gpuEvidence);
386
386
  equal(batch.gpuEvidence, receipt.runtime.gpuEvidence, "Spatial batch hardware identity differs from its completion receipt.");
387
387
  equal(batch.executionIntegrity, execution.integrity, "Spatial batch execution integrity differs from its exact authored runtime.");
@@ -365,7 +365,7 @@ import {
365
365
  workflowRunStore,
366
366
  } from "./workflow-runs";
367
367
 
368
- export const SLOPCAMERA_VERSION = "3.8.0";
368
+ export const SLOPCAMERA_VERSION = "3.8.1";
369
369
 
370
370
  // Legacy direct renders predate per-target output contracts. Keep them
371
371
  // bounded generously enough for long-form production while preventing one