@techspokes/typescript-wsdl-client 0.31.0 → 0.33.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"generateApp.d.ts","sourceRoot":"","sources":["../../src/app/generateApp.ts"],"names":[],"mappings":"AAgCA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAmpBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDzE"}
1
+ {"version":3,"file":"generateApp.d.ts","sourceRoot":"","sources":["../../src/app/generateApp.ts"],"names":[],"mappings":"AAgCA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAuqBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDzE"}
@@ -92,6 +92,22 @@ function isUrl(value) {
92
92
  function toPosix(filePath) {
93
93
  return filePath.split(path.sep).join("/");
94
94
  }
95
+ function commonPathPrefix(paths) {
96
+ if (paths.length === 0)
97
+ return ".";
98
+ const [first, ...rest] = paths.map(filePath => path.resolve(filePath).split(path.sep));
99
+ let prefixLength = first.length;
100
+ for (const parts of rest) {
101
+ prefixLength = Math.min(prefixLength, parts.length);
102
+ for (let index = 0; index < prefixLength; index += 1) {
103
+ if (parts[index] !== first[index]) {
104
+ prefixLength = index;
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ return first.slice(0, prefixLength).join(path.sep) || path.parse(paths[0]).root;
110
+ }
95
111
  /**
96
112
  * Resolves a WSDL source path relative to the app directory.
97
113
  * URLs are returned as-is. File paths are computed relative to appDir.
@@ -536,6 +552,7 @@ function generateTsConfig(appDir, opts, force) {
536
552
  // Compute include paths relative to app directory
537
553
  const clientInclude = toPosix(path.relative(appDir, opts.clientDir)) + "/**/*.ts";
538
554
  const gatewayInclude = toPosix(path.relative(appDir, opts.gatewayDir)) + "/**/*.ts";
555
+ const rootDir = toPosix(path.relative(appDir, commonPathPrefix([appDir, opts.clientDir, opts.gatewayDir]))) || ".";
539
556
  const tsconfig = {
540
557
  compilerOptions: {
541
558
  module: "NodeNext",
@@ -546,7 +563,7 @@ function generateTsConfig(appDir, opts, force) {
546
563
  skipLibCheck: true,
547
564
  types: ["node"],
548
565
  outDir: "dist",
549
- rootDir: ".",
566
+ rootDir,
550
567
  },
551
568
  include: [
552
569
  "*.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"mockData.d.ts","sourceRoot":"","sources":["../../src/test/mockData.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mockData.d.ts","sourceRoot":"","sources":["../../src/test/mockData.ts"],"names":[],"mappings":"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"}
@@ -117,6 +117,11 @@ export function generateMockData(typeName, catalog, opts, visited, depth) {
117
117
  const value = generateMockPrimitive(propType, propName);
118
118
  result[propName] = isArray ? [value] : value;
119
119
  }
120
+ else if (catalog.aliases?.some(alias => alias.name === propType)) {
121
+ const alias = catalog.aliases.find(entry => entry.name === propType);
122
+ const value = generateMockPrimitive(alias.tsType, propName);
123
+ result[propName] = isArray ? [value] : value;
124
+ }
120
125
  else {
121
126
  // Complex type — recurse
122
127
  const childData = generateMockData(propType, catalog, opts, newVisited, currentDepth + 1);
@@ -0,0 +1,33 @@
1
+ # TypeScript WSDL Client v0.32.0
2
+
3
+ ## Gateway Conformance Evidence
4
+
5
+ This release extends the WSDL capability conformance framework through generated Fastify gateway artifacts and runtime request checks for the current supported and partial capability rows.
6
+
7
+ ## What This Improves
8
+
9
+ Maintainers can now verify that documented WSDL support survives the full downstream path from fixture compilation to generated client code, OpenAPI output, generated gateway code, and Fastify request handling. This makes the public support matrix more trustworthy before the project moves into the remaining generated-test and app evidence needed for 1.0.
10
+
11
+ Conformance mini-projects now run under `tmp/conformance/` inside the repository, which keeps TypeScript and Node module resolution aligned with a consumer-style project while avoiding machine-specific temporary-directory behavior.
12
+
13
+ ## Highlights
14
+
15
+ - Adds generated gateway type-check evidence for supported and partial WSDL conformance rows.
16
+ - Adds Fastify runtime injection checks for generated gateway routes.
17
+ - Documents `tmp/conformance/` as the architecture boundary for generated conformance projects.
18
+ - Updates the roadmap so the next 1.0 slice is generated-test and app conformance evidence.
19
+
20
+ ## Upgrade Notes
21
+
22
+ No special upgrade steps.
23
+
24
+ ## Validation
25
+
26
+ - CI passed.
27
+ - NPM package contents were validated.
28
+ - Agent skill artifact was validated and packaged.
29
+ - Release preflight passed against the target tag.
30
+
31
+ ## Notes
32
+
33
+ Release tag: `v0.32.0`.
@@ -0,0 +1,34 @@
1
+ # TypeScript WSDL Client v0.33.0
2
+
3
+ ## Generated Artifact Conformance
4
+
5
+ This release extends the WSDL capability conformance framework into generated test suites and generated app scaffolds for the current supported and partial capability rows.
6
+
7
+ ## What This Improves
8
+
9
+ Maintainers can now verify that documented WSDL support survives the full generated artifact path: compile, client, OpenAPI, gateway runtime, generated tests, and generated app scaffolds. This makes the support matrix more useful as a 1.0 readiness gate because it proves consumer-facing generated files work together instead of only proving internal compiler behavior.
10
+
11
+ Generated app scaffolds now emit a `tsconfig.json` root that covers sibling client and gateway folders. Generated test mocks also produce valid primitive values for request properties backed by simple type aliases, including `xs:union` aliases.
12
+
13
+ ## Highlights
14
+
15
+ - Adds generated-test conformance evidence for supported and partial WSDL capability rows.
16
+ - Adds generated app scaffold conformance evidence for supported and partial WSDL capability rows.
17
+ - Fixes generated app `tsconfig.json` roots for sibling client and gateway artifacts.
18
+ - Fixes generated mock payloads for alias-backed request properties.
19
+ - Updates the roadmap so the next 1.0 slice is validation-gate wiring.
20
+
21
+ ## Upgrade Notes
22
+
23
+ No special upgrade steps.
24
+
25
+ ## Validation
26
+
27
+ - CI passed.
28
+ - NPM package contents were validated.
29
+ - Agent skill artifact was validated and packaged.
30
+ - Release preflight passed against the target tag.
31
+
32
+ ## Notes
33
+
34
+ Release tag: `v0.33.0`.
@@ -18,8 +18,8 @@ The plan is optimized for preserving quality. The contract and compatibility bas
18
18
  | OpenAPI compatibility | [OpenAPI Fastify Compatibility](v1.0-openapi-fastify-compatibility.md) | baseline complete | Schema strategy is proven |
19
19
  | Choice union mode | [Choice Union Mode](v1.0-choice-union-mode.md) | complete | Implemented in `0.26.0` |
20
20
  | JSON array streaming | [JSON Array Streaming](v1.0-json-array-streaming.md) | complete | Implemented in `0.28.0` |
21
- | Conformance framework | [Capability Conformance Framework](v1.0-capability-conformance-framework.md) | phase 2 shipped | Pipeline claims are test-backed |
22
- | WSDL coverage matrix | [WSDL Coverage Matrix](v1.0-wsdl-coverage-matrix.md) | client and OpenAPI evidence shipped | Feature support is test-backed |
21
+ | Conformance framework | [Capability Conformance Framework](v1.0-capability-conformance-framework.md) | phase 4 shipped | Pipeline claims are test-backed |
22
+ | WSDL coverage matrix | [WSDL Coverage Matrix](v1.0-wsdl-coverage-matrix.md) | generated artifacts proven | Feature support is test-backed |
23
23
  | Release candidate | [Release Candidate Gates](v1.0-release-candidate-gates.md) | remaining | 1.0 release is repeatable |
24
24
 
25
25
  ## Execution Order
@@ -42,11 +42,11 @@ JSON array streaming is complete in `0.28.0`. The default `ndjson` format remain
42
42
 
43
43
  ### Slice 5: Capability Conformance Framework
44
44
 
45
- The registry, fixture strategy, compile runner, client evidence, OpenAPI evidence, documentation drift check, and generated support matrix are shipped. The next work is to extend relevant rows into gateway runtime evidence without expanding public APIs.
45
+ The registry, fixture strategy, compile runner, client evidence, OpenAPI evidence, gateway runtime evidence, generated-test evidence, app evidence, documentation drift check, and generated support matrix are shipped. The next work is to wire the right conformance subset into validation gates without making local development too slow.
46
46
 
47
47
  ### Slice 6: WSDL Coverage Matrix
48
48
 
49
- The first WSDL matrix rows now exist as conformance registry entries with compile, client, OpenAPI, and documentation evidence. The next work is to prove relevant rows through generated gateway runtime artifacts.
49
+ The first WSDL matrix rows now exist as conformance registry entries with compile, client, OpenAPI, gateway runtime, generated-test, app, and documentation evidence. The next work is to keep those rows current while release candidate gates are prepared.
50
50
 
51
51
  ### Slice 7: Release Candidate Gates
52
52
 
@@ -54,8 +54,7 @@ Run the release candidate gates after feature work and documentation have conver
54
54
 
55
55
  ## Remaining Before 1.0
56
56
 
57
- - Extend the capability registry beyond OpenAPI evidence into gateway runtime evidence.
58
- - Add generated gateway checks for supported and partial WSDL rows where HTTP behavior is part of the contract.
57
+ - Decide which conformance checks should run in CI, release preflight, or local-only workflows.
59
58
  - Turn remaining unsupported, diagnostic, or partial matrix rows into diagnostics, documentation, or scoped fixes.
60
59
  - Confirm `docs/supported-patterns.md` matches the matrix.
61
60
  - Run the release-candidate gates.
@@ -1,10 +1,10 @@
1
1
  # Version 1.0 Capability Conformance Framework
2
2
 
3
- Status: Phase 2 shipped; gateway runtime evidence remaining before `1.0.0`.
3
+ Status: Phase 4 shipped; validation-gate wiring remaining before `1.0.0`.
4
4
 
5
5
  Plan for turning SOAP, WSDL, OpenAPI, gateway, app, generated-test, and documentation support claims into fixture-backed conformance evidence.
6
6
 
7
- Phase 1 shipped a TypeScript registry, reusable WSDL fixtures, compile-stage runner, documentation drift tests, and generated public support matrix. Phase 2 added generated client type-checking, OpenAPI validation, and executable diagnostics for terminal rows. The next slice should extend relevant rows into gateway runtime evidence before adding more feature rows.
7
+ Phase 1 shipped a TypeScript registry, reusable WSDL fixtures, compile-stage runner, documentation drift tests, and generated public support matrix. Phase 2 added generated client type-checking, OpenAPI validation, and executable diagnostics for terminal rows. Phase 3 added generated gateway type-checking and Fastify runtime evidence for current supported and partial rows. Phase 4 added generated-test and app scaffold evidence for those rows.
8
8
 
9
9
  See the root [README.md](../../README.md) for project overview and [Version 1.0 Roadmap Plan](README.md) for the complete 1.0 route.
10
10
 
@@ -362,25 +362,186 @@ Skeptical review notes:
362
362
 
363
363
  ## Phase 3: Gateway Runtime Evidence
364
364
 
365
- Extend relevant rows to generate gateways and test Fastify runtime behavior through `fastify.inject`. Add mock operations clients and request/response fixtures as part of the registry.
365
+ Phase 3 is implemented for the current supported and partial WSDL rows. Keep this section as the baseline for future gateway conformance rows.
366
366
 
367
- Acceptance criteria:
367
+ Extend current supported and partial rows to generate gateways, type-check generated gateway artifacts, and test Fastify runtime behavior through `fastify.inject`. Add mock operations clients and request/response fixtures as part of each row's registry evidence.
368
+
369
+ ### Phase 3 Goal
370
+
371
+ A supported or partial row should no longer stop at compile, client, and OpenAPI evidence when gateway behavior is relevant. The row should prove that the generated Fastify plugin can be imported, registered with a mock operations client, and exercised through HTTP injection.
372
+
373
+ Diagnostic and unsupported rows must continue to stop at compile. They must not generate client, OpenAPI, or gateway artifacts after the expected diagnostic.
374
+
375
+ ### Phase 3 Source Files
376
+
377
+ - `test/conformance/types.ts`
378
+ - `test/conformance/registry.ts`
379
+ - `test/conformance/runner.ts`
380
+ - `test/conformance/conformance.test.ts`
381
+ - `src/gateway/generateGateway.ts`
382
+ - `test/integration/gateway-routes.test.ts`
383
+
384
+ Use `test/integration/gateway-routes.test.ts` as the runtime pattern for generated plugin imports, mock clients, Fastify registration, and `fastify.inject` assertions. Keep conformance-specific helpers in `test/conformance/runner.ts`.
385
+
386
+ ### Phase 3 Type Model
387
+
388
+ Add a small optional `gateway` expectation block to `CapabilityCase`. Keep it internal to `test/conformance/types.ts`; do not export it from `src/index.ts` and do not add a public CLI command.
389
+
390
+ The initial model should stay close to the current `client` and `openapi` expectations:
391
+
392
+ ```ts
393
+ export interface GatewayArtifacts {
394
+ clientDir: string;
395
+ gatewayDir: string;
396
+ openapiFile: string;
397
+ catalogFile: string;
398
+ compiled: CompiledCatalog;
399
+ doc: any;
400
+ routeFor: (operationId: string) => {method: string; path: string};
401
+ readGatewayFile: (relativePath: string) => string;
402
+ }
403
+
404
+ export interface GatewayRequestExpectation {
405
+ operationId: string;
406
+ payload: unknown;
407
+ mockClient: Record<string, (args: unknown) => Promise<{response: unknown; headers: unknown}>>;
408
+ expectedStatus: number;
409
+ assertBody?: (body: any) => void;
410
+ assertClientArgs?: (args: unknown) => void;
411
+ }
412
+
413
+ export interface GatewayExpectation {
414
+ outcome: "success";
415
+ requests?: GatewayRequestExpectation[];
416
+ sourceIncludes?: Array<{file: string; text: string}>;
417
+ assert?: (artifacts: GatewayArtifacts) => void | Promise<void>;
418
+ }
419
+ ```
420
+
421
+ This shape is a starting contract, not a generic assertion language. If implementation reveals a simpler local helper, prefer the simpler helper as long as a fresh agent can still understand how to add a new row.
422
+
423
+ ### Phase 3 Runner Flow
424
+
425
+ `runGatewayCase` should use one temporary output root per capability row and remove it after success. If a row fails, the thrown error should include the capability ID and the generated path involved.
426
+
427
+ Generated conformance projects should live under `tmp/conformance/`, not the OS temp directory. Gateway conformance generates a small TypeScript project that imports `soap`, `fastify`, `fastify-plugin`, generated JSON schemas, and generated sibling modules. Keeping that project under the repository lets normal Node and TypeScript ancestor lookup find `node_modules`, package metadata, and tool caches without brittle `paths` shims. OS temp directories remain acceptable for unit probes that do not type-check or import generated project graphs.
428
+
429
+ The runner should perform these steps:
430
+
431
+ 1. Compile the row fixture with `loadWsdl`, `resolveCompilerOptions`, and `compileCatalog`.
432
+ 2. Generate client artifacts into `<temp>/client`.
433
+ 3. Write `<temp>/client/catalog.json` with `generateCatalog`.
434
+ 4. Type-check generated client artifacts using the existing temporary `tsconfig.json` pattern.
435
+ 5. Generate OpenAPI into `<temp>/openapi.json` with validation enabled.
436
+ 6. Generate gateway artifacts into `<temp>/gateway` with `generateGateway`.
437
+ 7. Pass `clientDir`, `catalogFile`, `versionSlug`, and `serviceSlug` to `generateGateway`.
438
+ 8. Type-check generated client and gateway artifacts together.
439
+ 9. Dynamically import `<temp>/gateway/plugin.ts`.
440
+ 10. Register the plugin with `Fastify({logger: false})` and the row's mock operations client.
441
+ 11. Resolve each request path from the generated OpenAPI operation when possible.
442
+ 12. Execute `fastify.inject` and run row-specific status and body assertions.
443
+
444
+ Use stable gateway options unless a row declares a reason to override them:
445
+
446
+ ```ts
447
+ await generateGateway({
448
+ openapiFile,
449
+ outDir: gatewayDir,
450
+ clientDir,
451
+ catalogFile,
452
+ versionSlug: "v1",
453
+ serviceSlug: "conformance",
454
+ });
455
+ ```
456
+
457
+ Keep service and version slugs deterministic. Do not derive slugs from temporary paths.
458
+
459
+ ### Phase 3 Registry Scope
460
+
461
+ Add `gateway` expectations only to rows that already have successful compile, client, and OpenAPI expectations.
462
+
463
+ Rows expected to receive gateway evidence in this slice:
464
+
465
+ - `choice-union-simple`
466
+ - `xs-union-simple-type`
467
+ - `multi-binding-first-soap`
468
+ - `external-policy-reference`
469
+ - `deep-composition-sequence`
470
+ - `xs-anyattribute`
471
+
472
+ Rows that must not receive gateway evidence in this slice:
473
+
474
+ - `abstract-complex-type`
475
+ - `substitution-group-element`
476
+ - `mtom-xop-attachment`
477
+
478
+ ### Phase 3 Assertion Guidance
479
+
480
+ Every row with a `gateway` expectation should at least prove plugin import and registration. Add request assertions when HTTP behavior is part of the row's public contract.
481
+
482
+ For supported rows, prefer one accepted request with a SOAP-wrapper-shaped mock response and an assertion on the generated success envelope. Add one rejected request only when the generated OpenAPI schema can express a meaningful invalid payload for that capability.
483
+
484
+ For partial rows, prove the documented subset and avoid implying full support. For `xs-anyattribute`, gateway evidence should prove generation and runtime do not emit or require wildcard attribute bags. For external `PolicyReference`, gateway evidence should prove no generated inbound security requirement appears unless configured elsewhere.
485
+
486
+ For multi-binding rows, assert that the gateway route calls the operation selected by the deterministic first SOAP binding behavior. Do not implement explicit binding selection in this slice.
487
+
488
+ ### Phase 3 Non-Goals
368
489
 
369
- - Supported gateway rows register generated plugins successfully.
370
- - Valid request fixtures return expected envelopes or streams.
371
- - Invalid request fixtures fail with expected status codes.
372
- - Stream rows prove NDJSON and JSON array behavior separately.
490
+ - Do not add new WSDL feature rows.
491
+ - Do not add a public inspector command.
492
+ - Do not change generated gateway public APIs unless gateway evidence exposes a real bug.
493
+ - Do not snapshot whole generated files.
494
+ - Do not treat plugin generation alone as runtime support.
495
+ - Do not proceed past compile for diagnostic or unsupported rows.
496
+
497
+ ### Phase 3 Acceptance Criteria
498
+
499
+ - `CapabilityCase` supports optional gateway expectations.
500
+ - `test/conformance/conformance.test.ts` requires gateway expectations for supported and partial rows.
501
+ - `runGatewayCase` generates client, catalog, OpenAPI, and gateway artifacts in a row-local temp directory.
502
+ - Generated client and gateway artifacts type-check together.
503
+ - Generated plugins import and register successfully in Fastify.
504
+ - Gateway request expectations run through `fastify.inject`.
505
+ - Diagnostic and unsupported rows remain compile-terminal.
506
+ - `npm run test:conformance` passes.
507
+ - `npm run typecheck` passes.
508
+ - `npm run docs:validate` passes after any support matrix or roadmap updates.
509
+
510
+ ### Phase 3 Test-First Sequence
511
+
512
+ Start by adding the type fields, the downstream declaration guard, and the `runGatewayCase` test call. The first focused run of `npm run test:conformance` should fail because registry rows do not yet declare gateway expectations or because the runner is not implemented.
513
+
514
+ Then implement the runner helper and add the smallest gateway expectations per row. Keep failures local: if one row exposes a real gateway bug, either fix the bug with focused tests or downgrade the row's public contract only when the decision framework supports that change.
515
+
516
+ ### Phase 3 Verification Commands
517
+
518
+ Run these commands before concluding the slice:
519
+
520
+ ```bash
521
+ npm run test:conformance
522
+ npm run typecheck
523
+ npm run docs:validate
524
+ npm test
525
+ ```
526
+
527
+ Run `npm run smoke:pipeline` as a final end-to-end guard if gateway generator behavior changes outside the conformance runner.
373
528
 
374
529
  ## Phase 4: Generated Test And App Evidence
375
530
 
531
+ Phase 4 is implemented for the current supported and partial WSDL rows. Keep this section as the baseline for future generated-test and app conformance rows.
532
+
376
533
  Extend relevant rows to generate `--test-dir` output and app scaffolds. Run generated tests only for rows where generated-test behavior is part of the capability contract.
377
534
 
535
+ Generated-test and app evidence must consume generated artifacts as a consumer would. Route paths, operation IDs, schemas, and app wiring must come from generated OpenAPI, gateway, test, and app files. Do not add conformance-only route overrides or fixture-specific route maps to make generated tests pass.
536
+
378
537
  Acceptance criteria:
379
538
 
380
539
  - Generated tests pass for supported rows that request them.
381
540
  - Generated validation tests include capability-specific invalid cases.
382
541
  - App scaffolds type-check when the capability affects app wiring.
383
542
  - Runtime dependency assumptions stay aligned with `package.json`.
543
+ - Generated app `tsconfig.json` covers sibling client and gateway artifacts when those folders are outside the app directory.
544
+ - Diagnostic and unsupported rows remain compile-terminal.
384
545
 
385
546
  ## Phase 5: Documentation And Release Gates
386
547
 
@@ -1,10 +1,10 @@
1
1
  # Version 1.0 WSDL Coverage Matrix
2
2
 
3
- Status: client and OpenAPI evidence shipped; gateway runtime evidence remaining before `1.0.0`.
3
+ Status: generated-test and app evidence shipped; validation-gate wiring remaining before `1.0.0`.
4
4
 
5
5
  Plan for turning WSDL and XSD support claims into automated, fixture-backed evidence before 1.0. This is the first domain under the [Capability Conformance Framework](v1.0-capability-conformance-framework.md).
6
6
 
7
- The initial fixture-backed compile matrix shipped in `0.30.2` and `0.30.3`. Client and OpenAPI evidence now prove the current supported and partial rows, and terminal rows have executable diagnostics. The remaining work is to prove generated gateway runtime artifacts and keep public support claims tied to registry rows.
7
+ The initial fixture-backed compile matrix shipped in `0.30.2` and `0.30.3`. Client, OpenAPI, gateway runtime, generated-test, and app evidence now prove the current supported and partial rows, and terminal rows have executable diagnostics. The remaining work is to decide which conformance checks belong in CI and release preflight.
8
8
 
9
9
  See the root [README.md](../../README.md) for project overview and [Version 1.0 Roadmap Plan](README.md) for the complete 1.0 route.
10
10
 
@@ -23,14 +23,14 @@ Each matrix row should have a minimal fixture, an expected support status, and a
23
23
  - `test/conformance/conformance.test.ts` runs compile-stage expectations for runnable rows.
24
24
  - Supported and partial rows generate client artifacts that type-check.
25
25
  - Supported and partial rows generate validated OpenAPI specs with targeted contract assertions.
26
+ - Supported and partial rows generate gateway artifacts that type-check and run through Fastify injection.
26
27
  - Diagnostic and unsupported rows have executable compiler error expectations.
27
28
  - `docs/supported-patterns.md` includes a generated capability evidence matrix.
28
29
  - `npm run docs:support-matrix:check` prevents support matrix drift.
29
30
 
30
31
  ## Remaining Scope
31
32
 
32
- - Add stage expectations for generated gateway output and runtime behavior.
33
- - Add generated request and response fixtures where HTTP behavior is part of a capability contract.
33
+ - Decide which conformance checks should run in CI, release preflight, and focused local commands.
34
34
  - Keep diagnostics executable as more unsupported rows are added.
35
35
  - Keep fixture metadata useful for a future public conformance fixture corpus.
36
36
  - Preserve the weather smoke fixture as the canonical end-to-end happy path.
@@ -104,20 +104,46 @@ Ensure every documented unsupported or partial feature has a corresponding matri
104
104
  - No known feature silently miscompiles in matrix coverage.
105
105
  - The matrix can run in CI or release preflight without network access.
106
106
 
107
- ## Next Slice
107
+ ## Gateway Runtime Evidence
108
108
 
109
- The next slice should implement Phase 3 gateway runtime evidence for the current registry rows before adding more feature rows. This keeps the matrix honest: support claims become pipeline evidence, while diagnostic and unsupported claims remain stopped before downstream generation.
109
+ Phase 3 gateway runtime evidence is shipped for the current supported and partial rows. The current matrix now proves the WSDL to client to OpenAPI to Fastify path for rows that claim support or partial support.
110
110
 
111
- Work items:
111
+ Use [Capability Conformance Framework](v1.0-capability-conformance-framework.md) as the detailed implementation baseline. This section defines the WSDL-matrix-specific shipped scope.
112
+
113
+ ### Phase 3 Shipped Scope
114
+
115
+ - Optional `gateway` expectations exist in the conformance type model.
116
+ - Gateway artifacts are generated from each relevant row's OpenAPI document.
117
+ - The generated `catalog.json` is written before gateway generation.
118
+ - Generated gateway artifacts type-check with the generated client artifacts.
119
+ - Mock operations clients and `fastify.inject` assertions cover HTTP behavior.
120
+ - Diagnostic and unsupported rows stop at compile.
121
+ - The generated public support matrix remains status-focused.
122
+
123
+ ### Phase 3 Row Scope
124
+
125
+ Rows that should gain gateway evidence:
126
+
127
+ - `choice-union-simple`
128
+ - `xs-union-simple-type`
129
+ - `multi-binding-first-soap`
130
+ - `external-policy-reference`
131
+ - `deep-composition-sequence`
132
+ - `xs-anyattribute`
133
+
134
+ Rows that should stay compile-terminal:
135
+
136
+ - `abstract-complex-type`
137
+ - `substitution-group-element`
138
+ - `mtom-xop-attachment`
139
+
140
+ ### Phase 3 Runtime Expectations
141
+
142
+ Each gateway-enabled row should prove plugin import, plugin registration, and at least one `fastify.inject` request when route behavior is relevant. Assertions should inspect the generated success or error envelope, not just the existence of generated files.
112
143
 
113
- - Add optional `gateway` expectations to the conformance type model.
114
- - Generate gateway artifacts from each relevant row's OpenAPI document.
115
- - Type-check generated gateway artifacts with the generated client artifacts.
116
- - Add mock operations clients and `fastify.inject` assertions where request or response behavior is part of the contract.
117
- - Leave diagnostic and unsupported rows stopped at compile.
118
- - Update the generated public support matrix only when a row status or public contract changes.
144
+ Partial rows must prove only the documented subset. `xs:anyAttribute` should not imply generated wildcard attribute bags. External `PolicyReference` should not imply fetched or enforced external policy.
119
145
 
120
- Gotchas:
146
+ ### Phase 3 Gotchas
121
147
 
122
148
  - Do not overclaim `supported` when gateway behavior is relevant but unproven.
123
149
  - Do not snapshot whole generated files for conformance rows; assert stable contract surfaces instead.
@@ -125,6 +151,31 @@ Gotchas:
125
151
  - Do not let diagnostic or unsupported rows proceed to client, OpenAPI, or gateway generation.
126
152
  - Do not add a public inspector command in this slice.
127
153
 
154
+ ### Next Slice
155
+
156
+ The next slice is Phase 5 documentation and release-gate wiring. Implement it before adding more feature rows unless a production bug requires a focused diagnostic or support decision.
157
+
158
+ Work items:
159
+
160
+ - Decide whether `npm run test:conformance` should run in CI, release preflight, or both.
161
+ - Keep a focused command for maintainers who want only conformance checks.
162
+ - Confirm release preflight runtime remains acceptable.
163
+ - Keep diagnostic and unsupported rows stopped at compile.
164
+ - Update public docs only when a row status or public contract changes.
165
+
166
+ ### Verification
167
+
168
+ Run these commands before the slice is considered ready:
169
+
170
+ ```bash
171
+ npm run test:conformance
172
+ npm run typecheck
173
+ npm run docs:validate
174
+ npm test
175
+ ```
176
+
177
+ Run `npm run smoke:pipeline` if the gateway generator or pipeline behavior changes.
178
+
128
179
  ## Release Implications
129
180
 
130
181
  This slice may reveal features that should be implemented before 1.0. It may also justify explicit post-1.0 deferrals if diagnostics and documentation are strong enough.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techspokes/typescript-wsdl-client",
3
- "version": "0.31.0",
3
+ "version": "0.33.0",
4
4
  "description": "Turn legacy WSDL/SOAP services into typed TypeScript clients, OpenAPI 3.1 specs, and production-ready Fastify REST gateways. Built for enterprise SOAP modernization.",
5
5
  "keywords": [
6
6
  "wsdl",