@volter/twin-catalog 0.2.30 → 0.2.32

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/catalog.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "sourceCommit": "0053b5936eec781b314e51a78486e05d39523ee1",
3
+ "sourceCommit": "8139c5d489b73762bf5ba34d4cf37235eb30bb46",
4
4
  "digest": "3195c901d6068ef7be8e9e23676b9b6ec58fb4e50c2d5604bbea390fefec9fdb",
5
5
  "versions": [
6
6
  {
@@ -16,7 +16,10 @@ bunx --bun twin-standard create stripe --init stripe --package @example/payments
16
16
  The generated files contain explicit fill markers. Author the vendored spec and its provenance, demand, manifest,
17
17
  stored resource states, decision table, handlers and customer journey in the standard's required order. Start the
18
18
  outline from the vendor quickstart and pinned SDK's ordinary default requests, app environment and issued identity.
19
- Walk that customer entry while building; reducing its requested fields to match the twin does not establish compatibility. The package
19
+ Write the executable customer entry as `journeys/first-use.json` at this outline stage, before implementing
20
+ resource semantics; its format is below. Walk it through `runConsumerWorkflow` while building, using a new
21
+ prepared app for each walk. Fix the pack or shared mechanism when an ordinary SDK call fails; keep the SDK
22
+ request unchanged. Source coverage reports describe source journeys and do not establish installed readiness. The package
20
23
  README describes its vendor surface, refusals and limits. Declare your own public GitHub repository and license in
21
24
  package.json. Complete source requirements before derivation:
22
25
 
@@ -34,9 +37,9 @@ consumers while retaining the TypeScript source the pinned standard reads. Use T
34
37
  bin at their compiled entrypoints. A `files` list includes `src`, `dist`, `generated`, `spec`, `journeys`, README and
35
38
  LICENSE. A build and `npm pack --dry-run` must show those paths; no platform-specific prepack script is required.
36
39
 
37
- ## Assess before submitting
40
+ ## Customer entry and release qualification
38
41
 
39
- Package the customer entry in `journeys/first-use.json`. It has `schemaVersion: 1`, the upstream `source`, an
42
+ Author the customer entry with the outline, then package it in `journeys/first-use.json`. It has `schemaVersion: 1`, the upstream `source`, an
40
43
  `about` describing its scope, and a `files` map of relative paths to text. Include `package.json` with exact registry
41
44
  SDK dependencies, `.env.example` with the names the app reads, and its unchanged client script with result
42
45
  assertions. `run` is an argument array such as `["node", "workflow.mjs"]`. For stored workflows,
@@ -54,8 +57,9 @@ twin-standard prepare-consumer <installed pack dir> --app <new app dir> --cli <a
54
57
  npm install --prefix <new app dir> --ignore-scripts --no-audit --no-fund
55
58
  ```
56
59
 
57
- This preparation writes fixture files only; SDK dependency installation precedes offline execution. The product
58
- CLI must resolve the installed candidate through that app's parent dependency directory. For the final assessment,
60
+ This preparation writes fixture files only; SDK dependency installation precedes offline execution. Select `--cli` from the installed `@volter/world` package's declared `bin.volter`, rather than the shared
61
+ `node_modules/.bin/volter`: another package may claim that shortcut. The runner invokes compiled JavaScript
62
+ through Node and records the actual entrypoint, command and Node version. The product CLI must resolve the installed candidate through that app's parent dependency directory. For the final assessment,
59
63
  run the released standard through a World:
60
64
 
61
65
  Create `assessment.world.config.json`:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volter/twin-catalog",
3
- "version": "0.2.30",
3
+ "version": "0.2.32",
4
4
  "description": "The moderated twin distribution: approved versions and submission tooling for independent publishers.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -38,7 +38,7 @@
38
38
  "evidence"
39
39
  ],
40
40
  "catalog": {
41
- "sourceCommit": "0053b5936eec781b314e51a78486e05d39523ee1",
41
+ "sourceCommit": "8139c5d489b73762bf5ba34d4cf37235eb30bb46",
42
42
  "digest": "3195c901d6068ef7be8e9e23676b9b6ec58fb4e50c2d5604bbea390fefec9fdb"
43
43
  }
44
44
  }
package/policy.json CHANGED
@@ -2,11 +2,11 @@
2
2
  "schemaVersion": 1,
3
3
  "registry": "https://registry.npmjs.org",
4
4
  "tools": {
5
- "@volter/world-core": "3.0.105",
6
- "@volter/world-runtime": "3.0.105",
7
- "@volter/twin-standard": "1.0.97",
5
+ "@volter/world-core": "3.0.108",
6
+ "@volter/world-runtime": "3.0.108",
7
+ "@volter/twin-standard": "1.0.100",
8
8
  "playwright": "1.63.0",
9
- "@volter/world": "3.0.105"
9
+ "@volter/world": "3.0.108"
10
10
  },
11
11
  "bun": "1.4.2",
12
12
  "nodeImage": "node:24-bookworm-slim",
@@ -1,6 +1,6 @@
1
1
  // No credentials enter this container. This phase downloads data; scripts are disabled.
2
- import { readFileSync, writeFileSync, mkdirSync, cpSync } from 'node:fs';
3
- import { join } from 'node:path';
2
+ import { readFileSync, writeFileSync, mkdirSync, cpSync, realpathSync } from 'node:fs';
3
+ import { join, relative } from 'node:path';
4
4
  import { spawnSync } from 'node:child_process';
5
5
  import { createRequire } from 'node:module';
6
6
  import { x } from 'tar';
@@ -92,7 +92,14 @@ for (const [path, entry] of Object.entries(consumerLock.packages ?? {})) {
92
92
  requireThat(!entry.link && entry.resolved && entry.integrity, `${path}: customer dependency is not a locked registry artifact`);
93
93
  registryURL(entry.resolved, policy.registry);
94
94
  }
95
- const consumer = { appDir, cli: '/work/node_modules/.bin/volter', artifactIntegrity: s.integrity };
95
+ // Other dependencies can own the flattened volter shortcut; use the exact product's declared entry.
96
+ const productRoot = '/work/node_modules/@volter/world';
97
+ const product = read(join(productRoot, 'package.json'));
98
+ requireThat(product.name === '@volter/world' && product.version === policy.tools['@volter/world'], 'customer CLI differs from the product pin');
99
+ requireThat(typeof product.bin?.volter === 'string', 'product has no declared volter entry');
100
+ const cli = realpathSync(join(productRoot, product.bin.volter));
101
+ requireThat(!relative(realpathSync(productRoot), cli).startsWith('..'), 'CLI entry is outside the installed product');
102
+ const consumer = { appDir, cli, artifactIntegrity: s.integrity };
96
103
  // Retain listing facts from these exact bytes, never the registry's moving latest metadata.
97
104
  const packageMetadata = {
98
105
  description: typeof pack.description === 'string' ? pack.description : null,