@voce-engine/testkit 0.1.0-rc.3 → 0.1.0-rc.4

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/README.md CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  Small deterministic fixtures and Mock-only helpers for offline VOCE contract tests.
4
4
 
5
- > `0.1.0-rc.3` is a release candidate, not production-ready. Test contracts may change before `0.1.0`.
5
+ > `0.1.0-rc.4` is a release candidate, not production-ready. Test contracts may change before `0.1.0`.
6
6
 
7
7
  ```bash
8
- npm install --save-dev @voce-engine/testkit@0.1.0-rc.3
8
+ npm install --save-dev @voce-engine/testkit@0.1.0-rc.4
9
9
  ```
package/dist/m5.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { CompilationContext, OfflineExecutionInput, OutputContract, PromptCandidateIR, PromptCompilationInput, PromptGuardInput, PromptIR, PromptTransformation, ProviderCapabilityProfile, RemoteCallAuthorization } from '@voce-engine/contracts';
1
+ import type { CompilationContext, EffectiveScenario, OfflineExecutionInput, OutputContract, PromptCandidateIR, PromptCompilationInput, PromptGuardInput, PromptIR, PromptTransformation, ProviderCapabilityProfile, RemoteCallAuthorization } from '@voce-engine/contracts';
2
+ export declare function fixtureM5Scenario(): EffectiveScenario;
2
3
  export declare function fixtureM5Output(): OutputContract;
3
4
  export declare function fixtureM5Context(overrides?: Partial<Omit<CompilationContext, 'contextHash'>>): CompilationContext;
4
5
  export declare function fixtureM5CompilationInput(profile?: ProviderCapabilityProfile, overrides?: Partial<PromptCompilationInput>): PromptCompilationInput;
package/dist/m5.js CHANGED
@@ -1,5 +1,5 @@
1
- import { computeExecutionBudgetDigest, computeExecutionDataTransferDigest, computeExecutionStepInputHash, computeOutputContractHash, computePromptIRHash, createExecutionAuthorization, createPromptCandidateIR, createRemoteCallAuthorization, compilePromptIR, MOCK_IMAGE_PROFILE, MOCK_JPEG_PROFILE, planPipeline, } from '@voce-engine/core';
2
- import { fixtureM4ConstraintIR, fixtureM4Context, fixtureM4Output, fixtureM4ReferencePlan, M4_FIXTURE_CASE_ID, M4_FIXTURE_CASE_REVISION, } from './m4.js';
1
+ import { computeExecutionBudgetDigest, computeExecutionDataTransferDigest, computeExecutionStepInputHash, computeOutputContractHash, computePromptIRHash, createExecutionAuthorization, createPromptCandidateIR, createRemoteCallAuthorization, compilePromptIR, MOCK_IMAGE_PROFILE, MOCK_JPEG_PROFILE, planPipeline, planReferences, sha256, } from '@voce-engine/core';
2
+ import { fixtureM4Candidate, fixtureM4ConstraintIR, fixtureM4Context, fixtureM4Output, M4_FIXTURE_CASE_ID, M4_FIXTURE_CASE_REVISION, } from './m4.js';
3
3
  const FIXED_M5_TIME = '2026-01-01T00:00:00.000Z';
4
4
  function sorted(values) {
5
5
  return [...new Set(values)].sort();
@@ -7,22 +7,44 @@ function sorted(values) {
7
7
  function profileForPrompt(prompt) {
8
8
  return prompt.targetCapabilityProfile.id === MOCK_JPEG_PROFILE.id ? MOCK_JPEG_PROFILE : MOCK_IMAGE_PROFILE;
9
9
  }
10
+ export function fixtureM5Scenario() {
11
+ const sections = [
12
+ { id: 'subject-and-product-fidelity', group: 'subject-and-product-fidelity', order: 1, pathPrefixes: ['person', 'product', 'wardrobe'], templateKey: 'subject-and-product-fidelity' },
13
+ { id: 'pose-and-object-relations', group: 'pose-and-object-relations', order: 2, pathPrefixes: ['pose', 'prop', 'object'], templateKey: 'pose-and-object-relations' },
14
+ { id: 'composition-shot-and-crop', group: 'composition-shot-and-crop', order: 3, pathPrefixes: ['camera.framing'], templateKey: 'composition-shot-and-crop' },
15
+ { id: 'composition-view-and-roll', group: 'composition-view-and-roll', order: 4, pathPrefixes: ['camera.view', 'camera.roll'], templateKey: 'composition-view-and-roll' },
16
+ { id: 'composition-layout-and-space', group: 'composition-layout-and-space', order: 5, pathPrefixes: ['camera.composition.patterns', 'camera.composition.placement', 'camera.composition.negativeSpace', 'camera.composition.leadingRoom'], templateKey: 'composition-layout-and-space' },
17
+ { id: 'composition-depth-framing-and-reflection', group: 'composition-depth-framing-and-reflection', order: 6, pathPrefixes: ['camera.composition.foregroundTreatment', 'camera.composition.framingDevices', 'camera.composition.reflection'], templateKey: 'composition-depth-framing-and-reflection' },
18
+ { id: 'composition-lens-and-environment', group: 'composition-lens-and-environment', order: 7, pathPrefixes: ['camera.lens', 'camera.composition.environmentRelationship'], templateKey: 'composition-lens-and-environment' },
19
+ { id: 'forbidden-and-output', group: 'forbidden-and-output', order: 8, pathPrefixes: ['output'], templateKey: 'forbidden-and-output' },
20
+ ];
21
+ const base = {
22
+ lockHash: sha256({ fixture: 'm5-lock' }), rootPackId: 'fixture.m5', extensionPackIds: [], compositionOrder: ['fixture.m5'], configurations: {},
23
+ ontologyVocabulary: [], rulePacks: [], interpretationScopes: [],
24
+ promptSections: [{ packId: 'fixture.m5', contributionKind: 'promptSections', contributionId: 'fixture.m5.prompt-sections', contentDigest: sha256({ fixture: 'm5-prompt-sections' }), sections }],
25
+ reviewTemplates: [], defaults: [], capabilityRequirements: [], declarations: [], appliedOverrides: [], effectiveScenarioHash: '',
26
+ };
27
+ const hashBase = { ...base };
28
+ delete hashBase.effectiveScenarioHash;
29
+ return { ...base, effectiveScenarioHash: sha256(hashBase) };
30
+ }
10
31
  export function fixtureM5Output() {
11
32
  return fixtureM4Output('opaque');
12
33
  }
13
34
  export function fixtureM5Context(overrides = {}) {
14
- return fixtureM4Context(overrides);
35
+ return fixtureM4Context({ effectiveScenarioHash: fixtureM5Scenario().effectiveScenarioHash, ...overrides });
15
36
  }
16
37
  export function fixtureM5CompilationInput(profile = MOCK_IMAGE_PROFILE, overrides = {}) {
17
38
  const context = overrides.context ?? fixtureM5Context();
39
+ const effectiveScenario = overrides.effectiveScenario ?? fixtureM5Scenario();
18
40
  const constraintIR = overrides.constraintIR ?? fixtureM4ConstraintIR({ context });
19
- const referencePlan = overrides.referencePlan ?? fixtureM4ReferencePlan(profile);
41
+ const referencePlan = overrides.referencePlan ?? planReferences({ schemaVersion: 'voce.reference-planning-input/v1alpha1', caseId: M4_FIXTURE_CASE_ID, caseRevision: M4_FIXTURE_CASE_REVISION, contextHash: constraintIR.contextHash, constraintIR, candidates: [fixtureM4Candidate('ref-01', 'required', 100_000, profile)], dependencies: [], profile });
20
42
  const outputContract = overrides.outputContract ?? fixtureM5Output();
21
43
  const pipelineResult = overrides.pipelinePlan ? { status: 'ok', pipelinePlan: overrides.pipelinePlan } : planPipeline({ schemaVersion: 'voce.pipeline-planning-input/v1alpha1', caseId: M4_FIXTURE_CASE_ID, caseRevision: M4_FIXTURE_CASE_REVISION, contextHash: context.contextHash, outputContract, constraintIR, referencePlan, profile });
22
44
  if (!pipelineResult.pipelinePlan)
23
45
  throw new Error('M5_FIXTURE_PIPELINE_BLOCKED');
24
46
  return {
25
- schemaVersion: 'voce.prompt-compilation-input/v1alpha1',
47
+ schemaVersion: 'voce.prompt-compilation-input/v1alpha2',
26
48
  caseId: M4_FIXTURE_CASE_ID,
27
49
  caseRevision: M4_FIXTURE_CASE_REVISION,
28
50
  context,
@@ -33,6 +55,7 @@ export function fixtureM5CompilationInput(profile = MOCK_IMAGE_PROFILE, override
33
55
  outputContract,
34
56
  targetAdapter: { id: profile.adapterId, version: profile.version, digest: profile.adapterDigest },
35
57
  targetCapabilityProfile: { id: profile.id, version: profile.version, digest: profile.profileHash },
58
+ effectiveScenario,
36
59
  ...overrides,
37
60
  };
38
61
  }
@@ -44,20 +67,16 @@ export function fixtureM5Candidate(prompt = fixtureM5PromptIR(), transformations
44
67
  }
45
68
  export function fixtureM5GuardInput(prompt = fixtureM5PromptIR(), candidate = fixtureM5Candidate(prompt), policy = 'reject') {
46
69
  const profile = profileForPrompt(prompt);
47
- const constraintIR = fixtureM4ConstraintIR();
48
- const referencePlan = fixtureM4ReferencePlan(profile);
49
- const pipelineResult = planPipeline({ schemaVersion: 'voce.pipeline-planning-input/v1alpha1', caseId: prompt.caseId, caseRevision: prompt.caseRevision, contextHash: prompt.contextHash, outputContract: prompt.output, constraintIR, referencePlan, profile });
50
- if (!pipelineResult.pipelinePlan)
51
- throw new Error('M5_FIXTURE_PIPELINE_BLOCKED');
70
+ const compilation = fixtureM5CompilationInput(profile);
52
71
  return {
53
- schemaVersion: 'voce.prompt-guard-input/v1alpha1',
72
+ schemaVersion: 'voce.prompt-guard-input/v1alpha2',
54
73
  promptIR: prompt,
55
74
  candidate,
56
- constraintIR,
57
- referencePlan,
58
- pipelinePlan: pipelineResult.pipelinePlan,
75
+ constraintIR: compilation.constraintIR,
76
+ referencePlan: compilation.referencePlan,
77
+ pipelinePlan: compilation.pipelinePlan,
59
78
  outputContract: prompt.output,
60
- context: fixtureM5Context(),
79
+ context: compilation.context,
61
80
  policy,
62
81
  };
63
82
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voce-engine/testkit",
3
- "version": "0.1.0-rc.3",
3
+ "version": "0.1.0-rc.4",
4
4
  "description": "Deterministic fixtures and Mock-only helpers for offline VOCE contract and runtime tests.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -37,7 +37,7 @@
37
37
  "tag": "next"
38
38
  },
39
39
  "dependencies": {
40
- "@voce-engine/core": "0.1.0-rc.3",
41
- "@voce-engine/contracts": "0.1.0-rc.3"
40
+ "@voce-engine/core": "0.1.0-rc.4",
41
+ "@voce-engine/contracts": "0.1.0-rc.4"
42
42
  }
43
43
  }