@volter/twin-standard 1.0.127 → 1.0.128

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.
@@ -31,7 +31,6 @@ export declare function packIndexFile(dir: string, vendor: string): string;
31
31
  export declare function serverFile(vendor: string, grpc: boolean, wire?: boolean): string;
32
32
  /** A pack's tsconfig.json, a fixed file: what the grade's typecheck (soundness) compiles, the pack and its lanes. */
33
33
  export declare const TSCONFIG: string;
34
- /** The fixed files of a new pack, by path, for a vendor: what nobody should write by hand. */
35
34
  export declare function initFiles(vendor: string): Record<string, string>;
36
35
  /** The fixed files of a pack of lanes (Cloudflare's API and R2, Sigstore's Fulcio and Rekor): each lane a derived
37
36
  * surface of its own under `<lane>/src`, keeping the vendor's one store and sharing its `src/semantics/shared.ts`, and the
@@ -361,6 +361,43 @@ export const TSCONFIG = `${JSON.stringify({
361
361
  exclude: ['node_modules'],
362
362
  }, null, 2)}\n`;
363
363
  /** The fixed files of a new pack, by path, for a vendor: what nobody should write by hand. */
364
+ function customerReadme(vendor) {
365
+ return `# @volter/twin-${vendor}
366
+
367
+ FILL: the customer outcome this twin enables with the vendor's unchanged SDK.
368
+
369
+ ## Use it in a World
370
+
371
+ Choose this package's exact release in the [catalog](https://world.volter.ai/twins/${vendor}).
372
+ Its Setup tab supplies release-specific installation and World initialization commands.
373
+ Review the selected vendor, retain its package/version and lockfile, and run the app through
374
+ the World. [First local World](https://world-docs.volter.ai/docs/getting-started) explains the shared workflow.
375
+
376
+ ## SDK workflow
377
+
378
+ FILL: the public vendor quickstart, pinned SDK/API versions and methods used by journeys/first-use.json.
379
+ FILL: a short unchanged-SDK example with asserted returned data and its expected result.
380
+ FILL: normal environment names, structurally valid throwaway credentials, required backing and API-created prerequisites.
381
+
382
+ ## Data and behavior
383
+
384
+ FILL: what is synthetic stored state, what is a scenario or labeled stub, and how to inspect the result.
385
+ FILL: the workflow's stop/resume and reset behavior; state any non-applicable retained-readback scope.
386
+ Do not use real vendor credentials for local substitution.
387
+
388
+ ## Scope and limits
389
+
390
+ FILL: supported customer operations and explicit gaps; generated surface counts are not a full SDK claim.
391
+ FILL: limitations specific to this vendor (for example model quality, real delivery or unsupported APIs).
392
+ The catalog's Evidence tab records actual measured journeys and their exact tool versions.
393
+
394
+ ## Package facts
395
+
396
+ Protocol 3; vendor specification in spec/, provenance in spec/SOURCE.md.
397
+ FILL: license, Node requirement, kernel compatibility and the public issue tracker from package.json.
398
+ Contributor mechanics belong to the [pack procedure](https://world-docs.volter.ai/docs/contributing/architecture#creating-a-pack).
399
+ `;
400
+ }
364
401
  export function initFiles(vendor) {
365
402
  const Name = pascal(vendor);
366
403
  const semantics = `${Name[0].toLowerCase()}${Name.slice(1)}Semantics`;
@@ -371,7 +408,7 @@ export function initFiles(vendor) {
371
408
  peerDependencies: { '@volter/world-core': '*' }, engines: { node: '>=22.3' },
372
409
  }, null, 2)}\n`,
373
410
  'tsconfig.json': TSCONFIG,
374
- 'README.md': `# @volter/twin-${vendor}\n\nThe ${vendor} twin (Protocol 3). Its surface is derived from the vendor's spec (\`spec/\`, provenance in\n\`spec/SOURCE.md\`); what it serves and why is its manifest and semantics.\n\nRules, layout and tools: twin-world's architecture ("Protocol 3", "The catalog: where twins come from").\n`,
411
+ 'README.md': customerReadme(vendor),
375
412
  'journeys/demand.json': `${JSON.stringify({ measured: 'FILL: when and how the applications were read', applications: [] }, null, 1)}\n`,
376
413
  // Deliberately incomplete: the author supplies the SDK entry with the outline, before semantics. Keeping the file
377
414
  // present prevents a new vendor from falling back to an older standard fixture; empty commands cannot qualify.
@@ -401,7 +438,7 @@ export function laneInitFiles(vendor, lanes) {
401
438
  const single = initFiles(vendor);
402
439
  const files = {
403
440
  'package.json': single['package.json'].replace('"spec",', lanes.map((l) => `"${l}",`).join('\n ')),
404
- 'README.md': `# @volter/twin-${vendor}\n\nThe ${vendor} twin (Protocol 3), one lane per API: ${lanes.map((l) => `\`${l}/\``).join(', ')}, each derived from its own spec\n(\`<lane>/spec/\`, provenance in its SOURCE.md). FILL: what each lane is of.\n`,
441
+ 'README.md': customerReadme(vendor).replace('Protocol 3; vendor specification in spec/, provenance in spec/SOURCE.md.', `Protocol 3; API lanes: ${lanes.map(l => `\`${l}/\``).join(', ')}. Vendor specifications and provenance live in each lane's spec/ and spec/SOURCE.md. FILL: the customer scope of each lane.`),
405
442
  'journeys/demand.json': single['journeys/demand.json'],
406
443
  'journeys/first-use.json': single['journeys/first-use.json'],
407
444
  'tsconfig.json': TSCONFIG,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volter/twin-standard",
3
- "version": "1.0.127",
3
+ "version": "1.0.128",
4
4
  "description": "The Protocol 3 standard for Volter twin packs: the criteria a pack is graded by, the grader, the gate a pack repository and the twin catalog run on every change and submission, and the spec derivation the grade checks against. Pin a version: every place a pack is judged judges by that standard.",
5
5
  "keywords": [
6
6
  "twin",
@@ -75,7 +75,7 @@
75
75
  "yaml": "2.9.0"
76
76
  },
77
77
  "peerDependencies": {
78
- "@volter/world-core": "3.0.135",
78
+ "@volter/world-core": "3.0.136",
79
79
  "@volter/world-runtime": "*",
80
80
  "playwright": "^1.63.0"
81
81
  },
@@ -352,6 +352,44 @@ export const TSCONFIG = `${JSON.stringify({
352
352
  }, null, 2)}\n`;
353
353
 
354
354
  /** The fixed files of a new pack, by path, for a vendor: what nobody should write by hand. */
355
+ function customerReadme(vendor: string): string {
356
+ return `# @volter/twin-${vendor}
357
+
358
+ FILL: the customer outcome this twin enables with the vendor's unchanged SDK.
359
+
360
+ ## Use it in a World
361
+
362
+ Choose this package's exact release in the [catalog](https://world.volter.ai/twins/${vendor}).
363
+ Its Setup tab supplies release-specific installation and World initialization commands.
364
+ Review the selected vendor, retain its package/version and lockfile, and run the app through
365
+ the World. [First local World](https://world-docs.volter.ai/docs/getting-started) explains the shared workflow.
366
+
367
+ ## SDK workflow
368
+
369
+ FILL: the public vendor quickstart, pinned SDK/API versions and methods used by journeys/first-use.json.
370
+ FILL: a short unchanged-SDK example with asserted returned data and its expected result.
371
+ FILL: normal environment names, structurally valid throwaway credentials, required backing and API-created prerequisites.
372
+
373
+ ## Data and behavior
374
+
375
+ FILL: what is synthetic stored state, what is a scenario or labeled stub, and how to inspect the result.
376
+ FILL: the workflow's stop/resume and reset behavior; state any non-applicable retained-readback scope.
377
+ Do not use real vendor credentials for local substitution.
378
+
379
+ ## Scope and limits
380
+
381
+ FILL: supported customer operations and explicit gaps; generated surface counts are not a full SDK claim.
382
+ FILL: limitations specific to this vendor (for example model quality, real delivery or unsupported APIs).
383
+ The catalog's Evidence tab records actual measured journeys and their exact tool versions.
384
+
385
+ ## Package facts
386
+
387
+ Protocol 3; vendor specification in spec/, provenance in spec/SOURCE.md.
388
+ FILL: license, Node requirement, kernel compatibility and the public issue tracker from package.json.
389
+ Contributor mechanics belong to the [pack procedure](https://world-docs.volter.ai/docs/contributing/architecture#creating-a-pack).
390
+ `;
391
+ }
392
+
355
393
  export function initFiles(vendor: string): Record<string, string> {
356
394
  const Name = pascal(vendor);
357
395
  const semantics = `${Name[0]!.toLowerCase()}${Name.slice(1)}Semantics`;
@@ -362,7 +400,7 @@ export function initFiles(vendor: string): Record<string, string> {
362
400
  peerDependencies: { '@volter/world-core': '*' }, engines: { node: '>=22.3' },
363
401
  }, null, 2)}\n`,
364
402
  'tsconfig.json': TSCONFIG,
365
- 'README.md': `# @volter/twin-${vendor}\n\nThe ${vendor} twin (Protocol 3). Its surface is derived from the vendor's spec (\`spec/\`, provenance in\n\`spec/SOURCE.md\`); what it serves and why is its manifest and semantics.\n\nRules, layout and tools: twin-world's architecture ("Protocol 3", "The catalog: where twins come from").\n`,
403
+ 'README.md': customerReadme(vendor),
366
404
  'journeys/demand.json': `${JSON.stringify({ measured: 'FILL: when and how the applications were read', applications: [] }, null, 1)}\n`,
367
405
  // Deliberately incomplete: the author supplies the SDK entry with the outline, before semantics. Keeping the file
368
406
  // present prevents a new vendor from falling back to an older standard fixture; empty commands cannot qualify.
@@ -393,7 +431,7 @@ export function laneInitFiles(vendor: string, lanes: string[]): Record<string, s
393
431
  const single = initFiles(vendor);
394
432
  const files: Record<string, string> = {
395
433
  'package.json': single['package.json']!.replace('"spec",', lanes.map((l) => `"${l}",`).join('\n ')),
396
- 'README.md': `# @volter/twin-${vendor}\n\nThe ${vendor} twin (Protocol 3), one lane per API: ${lanes.map((l) => `\`${l}/\``).join(', ')}, each derived from its own spec\n(\`<lane>/spec/\`, provenance in its SOURCE.md). FILL: what each lane is of.\n`,
434
+ 'README.md': customerReadme(vendor).replace('Protocol 3; vendor specification in spec/, provenance in spec/SOURCE.md.', `Protocol 3; API lanes: ${lanes.map(l => `\`${l}/\``).join(', ')}. Vendor specifications and provenance live in each lane's spec/ and spec/SOURCE.md. FILL: the customer scope of each lane.`),
397
435
  'journeys/demand.json': single['journeys/demand.json']!,
398
436
  'journeys/first-use.json': single['journeys/first-use.json']!,
399
437
  'tsconfig.json': TSCONFIG,