@techspokes/typescript-wsdl-client 0.28.0 → 0.29.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.
package/README.md CHANGED
@@ -233,7 +233,7 @@ See [CLI Reference](docs/cli-reference.md) for all flags and examples.
233
233
  | [Core Concepts](docs/concepts.md) | Flattening, $value, primitives, determinism |
234
234
  | [Architecture](docs/architecture.md) | Internal pipeline for contributors |
235
235
  | [Agent Skill Artifact](docs/agent-skill.md) | Release ZIP for consumer-project AI agents |
236
- | [Version 1.0 Roadmap Plan](docs/roadmap/README.md) | Implementation slices and release gates for 1.0 |
236
+ | [Version 1.0 Roadmap Plan](docs/roadmap/README.md) | Conformance framework, implementation slices, and release gates for 1.0 |
237
237
  | [Streamable Responses (ADR-002)](docs/decisions/002-streamable-responses.md) | Opt-in streaming: client `AsyncIterable`, gateway NDJSON or JSON array, `x-wsdl-tsc-stream` |
238
238
  | [Version Migration](docs/migration.md) | Upgrading between package versions |
239
239
 
@@ -510,12 +510,12 @@ function generatePackageJson(appDir, force) {
510
510
  },
511
511
  dependencies: {
512
512
  fastify: "^5.8.5",
513
- "fastify-plugin": "^5.1.0",
513
+ "fastify-plugin": "^6.0.0",
514
514
  saxes: "^6.0.0",
515
515
  soap: "^1.9.3",
516
516
  },
517
517
  devDependencies: {
518
- "@types/node": "^25.9.1",
518
+ "@types/node": "^25.9.3",
519
519
  tsx: "^4.22.4",
520
520
  typescript: "^6.0.3",
521
521
  },
package/docs/README.md CHANGED
@@ -29,7 +29,7 @@ Human-maintained reference documents for `@techspokes/typescript-wsdl-client`. T
29
29
  - [concepts.md](concepts.md): flattening, `$value`, primitives, determinism
30
30
  - [architecture.md](architecture.md): internal pipeline for contributors
31
31
  - [agent-skill.md](agent-skill.md): release ZIP for consumer-project AI agents
32
- - [roadmap/README.md](roadmap/README.md): implementation slices and release gates for 1.0
32
+ - [roadmap/README.md](roadmap/README.md): conformance framework, implementation slices, and release gates for 1.0
33
33
  - [decisions/002-streamable-responses.md](decisions/002-streamable-responses.md): opt-in streaming design (client `AsyncIterable`, gateway NDJSON or JSON array, `x-wsdl-tsc-stream` OpenAPI extension); shipped in 0.17.0 and extended in 0.28.0
34
34
  - [migration.md](migration.md): upgrading between package versions
35
35
 
@@ -0,0 +1,32 @@
1
+ # TypeScript WSDL Client v0.29.0
2
+
3
+ ## Dependency And Roadmap Maintenance
4
+
5
+ This release brings the project dependency floor and generated app scaffold pins up to date after Dependabot and security review updates. It also carries forward the latest 1.0 readiness documentation so maintainers and adopters can track the remaining capability conformance work.
6
+
7
+ ## What This Improves
8
+
9
+ Developers get current dependency minimums in both the published package and newly scaffolded Fastify gateway apps. The refreshed lockfile includes transitive security maintenance for build and request-related packages, while the roadmap documentation now reflects the JSON array streaming release and the 1.0 conformance planning model.
10
+
11
+ ## Highlights
12
+
13
+ - Updates root dependency minimums for `fast-xml-parser`, `fastify-plugin`, `@types/node`, and `vitest`.
14
+ - Refreshes lockfile security updates for `esbuild`, `form-data`, and `hasown`.
15
+ - Updates generated app scaffold pins for `fastify-plugin` and `@types/node`.
16
+ - Refreshes 1.0 roadmap documentation after the JSON array streaming release.
17
+ - Adds the 1.0 capability conformance framework documentation.
18
+
19
+ ## Upgrade Notes
20
+
21
+ No special upgrade steps. Regenerate generated Fastify app scaffolds when you want new app projects to start with the updated dependency pins.
22
+
23
+ ## Validation
24
+
25
+ - CI passed.
26
+ - NPM package contents were validated.
27
+ - Documentation links and TypeScript fenced snippets were validated.
28
+ - Agent skill artifact was validated and packaged.
29
+
30
+ ## Notes
31
+
32
+ Release tag: `v0.29.0`.
@@ -1,6 +1,6 @@
1
1
  # Version 1.0 Roadmap Plan
2
2
 
3
- Detailed plan for moving `@techspokes/typescript-wsdl-client` from `0.28.x` to a stable `1.0.0` release.
3
+ Detailed plan for moving `@techspokes/typescript-wsdl-client` from the released `0.28.x` line to a stable `1.0.0` release.
4
4
 
5
5
  See the root [README.md](../../README.md) for project overview and the root [ROADMAP.md](../../ROADMAP.md) for the public roadmap summary.
6
6
 
@@ -8,28 +8,29 @@ See the root [README.md](../../README.md) for project overview and the root [ROA
8
8
 
9
9
  This plan turns the 1.0 roadmap into implementation slices that can be picked up independently. Each slice has its own plan document with scope, testing strategy, acceptance gates, and release implications.
10
10
 
11
- The plan is optimized for preserving quality. Contract mismatches are resolved before new capability work, compatibility research constrains schema changes, and WSDL coverage work turns unsupported behavior into explicit diagnostics.
11
+ The plan is optimized for preserving quality. The contract and compatibility baselines now exist, choice union mode is shipped, and JSON array streaming is shipped. The remaining readiness work is WSDL coverage evidence and the final release candidate gate pass.
12
12
 
13
13
  ## Route Summary
14
14
 
15
- | Slice | Document | Outcome |
16
- |-------|----------|---------|
17
- | Contract audit | [Contract Audit](v1.0-contract-audit.md) | Public surfaces match behavior |
18
- | OpenAPI compatibility | [OpenAPI Fastify Compatibility](v1.0-openapi-fastify-compatibility.md) | Schema strategy is proven |
19
- | Choice union mode | [Choice Union Mode](v1.0-choice-union-mode.md) | Implemented in `0.26.0` |
20
- | JSON array streaming | [JSON Array Streaming](v1.0-json-array-streaming.md) | `format: "json-array"` works |
21
- | WSDL coverage matrix | [WSDL Coverage Matrix](v1.0-wsdl-coverage-matrix.md) | Feature support is test-backed |
22
- | Release candidate | [Release Candidate Gates](v1.0-release-candidate-gates.md) | 1.0 release is repeatable |
15
+ | Slice | Document | Status | Outcome |
16
+ |-----------------------|------------------------------------------------------------------------------|-------------------|---------------------------------|
17
+ | Contract audit | [Contract Audit](v1.0-contract-audit.md) | baseline complete | Public surfaces match behavior |
18
+ | OpenAPI compatibility | [OpenAPI Fastify Compatibility](v1.0-openapi-fastify-compatibility.md) | baseline complete | Schema strategy is proven |
19
+ | Choice union mode | [Choice Union Mode](v1.0-choice-union-mode.md) | complete | Implemented in `0.26.0` |
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) | planned | Pipeline claims are test-backed |
22
+ | WSDL coverage matrix | [WSDL Coverage Matrix](v1.0-wsdl-coverage-matrix.md) | remaining | Feature support is test-backed |
23
+ | Release candidate | [Release Candidate Gates](v1.0-release-candidate-gates.md) | remaining | 1.0 release is repeatable |
23
24
 
24
25
  ## Execution Order
25
26
 
26
27
  ### Slice 1: Contract Audit
27
28
 
28
- Start with contract audit because it defines the exact public promises that later slices must satisfy. This slice updates docs, identifies mismatched flags and options, and creates failing tests for the behavior that must become true.
29
+ The baseline contract audit is complete. Keep it active as release hygiene so CLI docs, API docs, configuration docs, examples, roadmap statements, and generated behavior stay aligned.
29
30
 
30
31
  ### Slice 2: OpenAPI Fastify Compatibility
31
32
 
32
- Run compatibility research before changing union schemas or streaming JSON schemas. This keeps schema design constrained by Fastify validation, Fastify serialization, and generated gateway behavior.
33
+ Compatibility research is complete for choice union mode and JSON array streaming. Run the same local Fastify probes before any future schema output changes.
33
34
 
34
35
  ### Slice 3: Choice Union Mode
35
36
 
@@ -39,14 +40,26 @@ Choice union mode is complete in `0.26.0`. The default `all-optional` mode remai
39
40
 
40
41
  JSON array streaming is complete in `0.28.0`. The default `ndjson` format remains unchanged, and `format: "json-array"` streams records incrementally without buffering the full SOAP response.
41
42
 
42
- ### Slice 5: WSDL Coverage Matrix
43
+ ### Slice 5: Capability Conformance Framework
43
44
 
44
- Build the automated WSDL feature matrix once the two existing public contract gaps are handled. The matrix should then drive the remaining WSDL support and diagnostic decisions.
45
+ Build the conformance registry, fixture strategy, stage runners, and issue-triage model. This slice turns feature claims into testable pipeline-wide capability cases.
45
46
 
46
- ### Slice 6: Release Candidate Gates
47
+ ### Slice 6: WSDL Coverage Matrix
48
+
49
+ Build the automated WSDL feature matrix next. The matrix should drive the remaining WSDL support, diagnostic, and deferral decisions.
50
+
51
+ ### Slice 7: Release Candidate Gates
47
52
 
48
53
  Run the release candidate gates after feature work and documentation have converged. This slice validates docs, tests, generated examples, package contents, skill artifact, release notes, and provenance workflow readiness.
49
54
 
55
+ ## Remaining Before 1.0
56
+
57
+ - Build the capability conformance registry and runner.
58
+ - Build and run the WSDL feature matrix as the first conformance domain.
59
+ - Turn unsupported or partial matrix rows into diagnostics, documentation, or scoped fixes.
60
+ - Confirm `docs/supported-patterns.md` matches the matrix.
61
+ - Run the release-candidate gates.
62
+
50
63
  ## Quality Principles
51
64
 
52
65
  - Keep default generated output stable unless a slice explicitly changes it.
@@ -72,8 +85,8 @@ Run the release candidate gates after feature work and documentation have conver
72
85
 
73
86
  ### Coverage Gate
74
87
 
75
- - A WSDL feature matrix runs under test automation.
76
- - Each matrix entry has a fixture and expected behavior.
88
+ - A capability conformance matrix runs under test automation.
89
+ - Each matrix entry has a fixture, status, and stage expectations.
77
90
  - Unsupported features fail loudly or are documented as deliberately unsupported.
78
91
 
79
92
  ### Release Gate
@@ -0,0 +1,219 @@
1
+ # Version 1.0 Capability Conformance Framework
2
+
3
+ Status: planned before `1.0.0`.
4
+
5
+ Plan for turning SOAP, WSDL, OpenAPI, gateway, app, generated-test, and documentation support claims into fixture-backed conformance evidence.
6
+
7
+ See the root [README.md](../../README.md) for project overview and [Version 1.0 Roadmap Plan](README.md) for the complete 1.0 route.
8
+
9
+ ## Goal
10
+
11
+ The project should have an internal conformance framework that proves what each important SOAP and WSDL capability does across the full generation pipeline. A capability claim is not complete until the relevant compile, client, OpenAPI, gateway, app, generated-test, runtime, and documentation surfaces either pass or fail with an explicit diagnostic.
12
+
13
+ The framework should also give maintainers a repeatable issue triage path. When a user reports that a WSDL pattern does not work, maintainers should be able to reduce the report to a fixture, add a matrix row, run the conformance suite, and state exactly which stage supports, rejects, or partially supports that pattern.
14
+
15
+ ## Values To Preserve
16
+
17
+ - Preserve deterministic generated output.
18
+ - Preserve strict TypeScript and NodeNext behavior.
19
+ - Preserve the current smoke fixture as the canonical happy path.
20
+ - Prefer small minimized fixtures over large real-world WSDL files.
21
+ - Prefer diagnostics and documented deferrals over silent miscompilation.
22
+ - Keep generated gateway behavior proven through Fastify, not only snapshots.
23
+ - Keep OpenAPI behavior proven through schema assertions and validation.
24
+ - Keep docs aligned with machine-readable capability IDs.
25
+ - Avoid new dependencies unless the existing toolchain cannot provide the evidence.
26
+ - Keep public CLI changes separate from internal conformance infrastructure.
27
+
28
+ ## Capability Model
29
+
30
+ A capability is a named repository behavior that can be detected, documented, and tested. Examples include `xs:choice` union mode, JSON array streaming, external `PolicyReference`, abstract complex types, substitution groups, multi-binding WSDLs, and MTOM/XOP attachments.
31
+
32
+ Each capability should have a stable ID, a status, one or more fixtures, and per-stage expectations. The status describes the product contract. The stage expectations describe how the repository proves the contract.
33
+
34
+ ## Capability Statuses
35
+
36
+ - `supported`: the capability works through every relevant stage.
37
+ - `partial`: the capability has deliberate limits that docs must describe.
38
+ - `diagnostic`: the capability is rejected or warned about clearly.
39
+ - `unsupported`: the capability is intentionally out of scope.
40
+ - `research`: the capability needs fixture evidence before a final status.
41
+
42
+ ## Stage Expectations
43
+
44
+ Each matrix row should declare only the stages that apply to that capability. A diagnostic row might stop at compile. A supported gateway feature should prove compile, client, OpenAPI, gateway, and runtime behavior.
45
+
46
+ ### Compile Stage
47
+
48
+ The compile stage proves WSDL loading, schema compilation, catalog shape, and diagnostics. Assertions should prefer catalog metadata and structured errors over brittle full generated-file comparisons.
49
+
50
+ ### Client Stage
51
+
52
+ The client stage proves generated `types.ts`, `operations.ts`, `client.ts`, and helpers type-check under the repository TypeScript settings. Capability-specific assertions should inspect generated types only where the type shape is part of the public contract.
53
+
54
+ ### OpenAPI Stage
55
+
56
+ The OpenAPI stage proves the generated spec validates and uses the expected schema strategy. Assertions should cover schema shape, media types, operation metadata, extensions such as `x-wsdl-tsc-stream`, and security output where relevant.
57
+
58
+ ### Gateway Generation Stage
59
+
60
+ The gateway generation stage proves route, schema, runtime, plugin, and type-check fixture output can be generated from the OpenAPI result. Assertions should cover route registration shape and generated helper selection when those are part of the capability contract.
61
+
62
+ ### Gateway Runtime Stage
63
+
64
+ The gateway runtime stage proves generated Fastify routes with a mock operations client behave correctly under `fastify.inject`. Assertions should cover valid requests, invalid requests, response envelopes, response content types, stream formats, and terminal-error behavior where relevant.
65
+
66
+ ### App Stage
67
+
68
+ The app stage proves the standalone app scaffold can consume the generated gateway when the capability affects app wiring, package dependencies, environment variables, or gateway plugin registration. Most rows can skip this stage unless the capability changes app behavior.
69
+
70
+ ### Generated Test Stage
71
+
72
+ The generated test stage proves `--test-dir` emits tests that compile and pass for supported capabilities. It should also prove generated tests include capability-specific invalid cases when request validation is part of the contract.
73
+
74
+ ### Documentation Stage
75
+
76
+ The documentation stage proves `docs/supported-patterns.md` agrees with the capability registry. It should prevent docs from claiming support, partial support, or non-support without a matching conformance row.
77
+
78
+ ## Registry Shape
79
+
80
+ The first implementation should use a TypeScript manifest because tests can import it with full type safety. JSON can be added later if external tooling needs a stable data format.
81
+
82
+ ```ts
83
+ declare const capabilities: CapabilityCase[];
84
+
85
+ interface CapabilityCase {
86
+ id: string;
87
+ title: string;
88
+ status: "supported" | "partial" | "diagnostic" | "unsupported" | "research";
89
+ featureTags: string[];
90
+ fixture: string;
91
+ docsAnchor?: string;
92
+ stages: CapabilityStages;
93
+ }
94
+ ```
95
+
96
+ Stage payloads should stay small and explicit. Avoid a generic assertion language in the first version; use typed expectation objects and small runner helpers instead.
97
+
98
+ ## Fixture Strategy
99
+
100
+ Fixtures should live under a dedicated conformance fixture directory, separate from the weather smoke fixture. Each fixture should be minimal, synthetic, deterministic, and focused on one capability unless the purpose is to prove a composition case.
101
+
102
+ Reported user WSDLs should not be committed wholesale by default. Maintainers should reduce them to the smallest reproducible fixture and remove private endpoints, credentials, business names, and proprietary type names.
103
+
104
+ ## Fastify Gateway Testing Pattern
105
+
106
+ Gateway conformance rows should generate the gateway into a temporary directory, import the generated plugin, provide a mock operations client, and call routes with `fastify.inject`. This proves the generated gateway works as a Fastify integration, not just as emitted text.
107
+
108
+ Supported request-validation capabilities should include at least one accepted request and one rejected request when the schema can represent invalid input. Response capabilities should assert envelope shape, status code, content type, and serialized payload.
109
+
110
+ Streaming capabilities should assert the configured content type, NDJSON or JSON array parsing behavior, and terminal-error behavior. JSON array rows should keep the pre-first-record and post-first-byte error cases distinct.
111
+
112
+ ## Issue Triage Workflow
113
+
114
+ When a user reports a WSDL incompatibility, maintainers should first run or approximate the future inspector output. The report should be classified by capability IDs before generator code changes are considered.
115
+
116
+ The triage flow should be:
117
+
118
+ 1. Reduce the reported WSDL to a minimal fixture.
119
+ 2. Add or update a capability row.
120
+ 3. Mark the row as `research`, `diagnostic`, `partial`, or `supported`.
121
+ 4. Run the relevant conformance stages.
122
+ 5. Decide whether to implement support, add diagnostics, or document a deferral.
123
+ 6. Link the issue to the capability ID in the changelog or release notes when behavior changes.
124
+
125
+ ## WSDL Inspector Direction
126
+
127
+ The WSDL inspector should be built after the first conformance registry exists. It should reuse the same capability IDs and statuses rather than maintaining a separate feature list.
128
+
129
+ The inspector should analyze a WSDL and report detected patterns, support status, known limitations, and suggested workarounds. It should have a JSON output for CI and issue templates, and a Markdown or text output for humans.
130
+
131
+ The inspector should not be treated as proof that generation will succeed. It is an orientation and triage tool. The conformance runner remains the proof mechanism.
132
+
133
+ ## Inspector Research Questions
134
+
135
+ - Which feature signals are visible in the raw WSDL and XSD AST before compilation?
136
+ - Which feature signals require the compiled catalog?
137
+ - Which current limitations silently compile and need diagnostics first?
138
+ - Which recommendations can be stable enough for user-facing output?
139
+ - Which output shape should be public if the inspector becomes a CLI command?
140
+
141
+ ## Phase 1: Registry And Compile Matrix
142
+
143
+ Create the capability registry, fixture directory, and a Vitest runner for compile-stage expectations. Include the existing roadmap priority rows and keep unsupported rows diagnostic or research-only until behavior is proven.
144
+
145
+ Acceptance criteria:
146
+
147
+ - The registry includes every priority row from the WSDL coverage slice.
148
+ - Each row has a stable ID, status, fixture, and compile expectation.
149
+ - `docs/supported-patterns.md` has matching capability IDs or anchors.
150
+ - The runner works without network access.
151
+
152
+ ## Phase 2: Client And OpenAPI Evidence
153
+
154
+ Extend supported rows to generate clients and OpenAPI specs. Add type-check verification for generated clients and schema assertions for OpenAPI output.
155
+
156
+ Acceptance criteria:
157
+
158
+ - Supported rows type-check generated client output.
159
+ - OpenAPI specs validate for supported rows.
160
+ - Capability-specific schema strategies are asserted where they matter.
161
+ - Diagnostic rows stop before downstream stages.
162
+
163
+ ## Phase 3: Gateway Runtime Evidence
164
+
165
+ 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.
166
+
167
+ Acceptance criteria:
168
+
169
+ - Supported gateway rows register generated plugins successfully.
170
+ - Valid request fixtures return expected envelopes or streams.
171
+ - Invalid request fixtures fail with expected status codes.
172
+ - Stream rows prove NDJSON and JSON array behavior separately.
173
+
174
+ ## Phase 4: Generated Test And App Evidence
175
+
176
+ 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.
177
+
178
+ Acceptance criteria:
179
+
180
+ - Generated tests pass for supported rows that request them.
181
+ - Generated validation tests include capability-specific invalid cases.
182
+ - App scaffolds type-check when the capability affects app wiring.
183
+ - Runtime dependency assumptions stay aligned with `package.json`.
184
+
185
+ ## Phase 5: Documentation And Release Gates
186
+
187
+ Wire the conformance framework into docs validation, CI, or release preflight once runtime cost is acceptable. Keep a focused command for maintainers who want only conformance checks.
188
+
189
+ Acceptance criteria:
190
+
191
+ - `docs/supported-patterns.md` cannot drift from the registry.
192
+ - CI or release preflight runs the selected conformance subset.
193
+ - Full conformance can run locally before `1.0.0`.
194
+ - Release notes can cite capability IDs for behavior changes.
195
+
196
+ ## Phase 6: WSDL Inspector
197
+
198
+ Build the inspector after the registry has enough stable coverage to be useful. Start with a programmatic API and internal CLI output before committing to public command semantics.
199
+
200
+ Acceptance criteria:
201
+
202
+ - The inspector maps detected WSDL patterns to capability IDs.
203
+ - JSON output is stable enough for issue templates.
204
+ - Human output includes status, limitation, and workaround text.
205
+ - Inspector findings link back to matrix evidence.
206
+
207
+ ## Open Decisions
208
+
209
+ - Decide whether the first registry lives under `test/fixtures` or `test/conformance`.
210
+ - Decide whether conformance should be a normal `npm test` suite or a separate script at first.
211
+ - Decide how much generated output type-checking is acceptable in CI runtime.
212
+ - Decide which inspector output format becomes public before `1.0.0`.
213
+ - Decide whether docs should remain manually maintained or eventually generated from the registry.
214
+
215
+ ## Release Implications
216
+
217
+ This framework is 1.0 readiness infrastructure. It can ship incrementally in `0.28.x` or later patch releases as tests, docs, and diagnostics improve.
218
+
219
+ Do not block the first conformance slice on the WSDL inspector. The registry and runner create the durable foundation; the inspector should reuse that foundation after it proves useful.
@@ -1,6 +1,8 @@
1
1
  # Version 1.0 Contract Audit
2
2
 
3
- Plan for aligning public flags, programmatic options, docs, and generated behavior before implementing the remaining 1.0 features.
3
+ Status: baseline completed in `0.25.2`; ongoing as release hygiene.
4
+
5
+ Plan for keeping public flags, programmatic options, docs, generated behavior, and roadmap statements aligned through `1.0.0`.
4
6
 
5
7
  See the root [README.md](../../README.md) for project overview and [Version 1.0 Roadmap Plan](README.md) for the complete 1.0 route.
6
8
 
@@ -8,31 +10,30 @@ See the root [README.md](../../README.md) for project overview and [Version 1.0
8
10
 
9
11
  The contract audit makes every public promise explicit before 1.0. A public promise includes CLI flags, programmatic options, configuration files, generated file shapes, documentation examples, release workflow claims, and roadmap statements.
10
12
 
11
- ## Why This Slice Comes First
13
+ ## Why This Slice Remains Active
12
14
 
13
- This slice prevents later work from building on ambiguous behavior. It also gives contributors a reliable target when they implement choice union mode, JSON array streaming, and WSDL feature coverage.
15
+ This slice prevents later work from building on ambiguous behavior. Choice union mode and JSON array streaming are shipped, so the audit now protects those contracts while WSDL coverage and release-candidate work proceed.
14
16
 
15
- ## Scope
17
+ ## Ongoing Scope
16
18
 
17
19
  - Audit CLI flags in `src/cli.ts` against `docs/cli-reference.md`.
18
20
  - Audit programmatic options in exported types against `docs/api-reference.md`.
19
21
  - Audit configuration file formats against `docs/configuration.md`.
20
22
  - Audit generated output claims against snapshots and `examples/generated-output`.
21
23
  - Refresh `ROADMAP.md` so shipped work is not listed as future work.
22
- - Add failing tests for public behavior that must be implemented in later slices.
24
+ - Add focused tests for public behavior when the audit finds a real drift risk.
23
25
 
24
26
  ## Out Of Scope
25
27
 
26
- - Do not implement choice union mode in this slice.
27
- - Do not implement JSON array streaming in this slice.
28
28
  - Do not expand WSDL feature support in this slice.
29
29
  - Do not change default generated output unless a contract is already wrong.
30
+ - Do not treat release metadata gaps as feature support.
30
31
 
31
32
  ## Required Findings
32
33
 
33
34
  ### Choice Mode
34
35
 
35
- `--client-choice-mode union` must stay public because 1.0 requires full union support. The audit should identify every code path and doc section that must change when union mode is implemented.
36
+ `--client-choice-mode union` is implemented in `0.26.0`. Audit passes should keep CLI docs, API docs, generated-code docs, supported-pattern docs, tests, and examples aligned with the released opt-in behavior.
36
37
 
37
38
  ### JSON Array Streaming
38
39
 
@@ -40,7 +41,7 @@ This slice prevents later work from building on ambiguous behavior. It also give
40
41
 
41
42
  ### Roadmap State
42
43
 
43
- `ROADMAP.md` must reflect `0.25.x` as current. Release preflight and security hardening must be treated as shipped work.
44
+ `ROADMAP.md` must reflect the released `0.28.x` line. Choice union mode and JSON array streaming must be treated as shipped work, while WSDL coverage and release-candidate gates remain the active 1.0 work.
44
45
 
45
46
  ### Release Metadata
46
47
 
@@ -58,15 +59,15 @@ Add or update focused tests that inspect CLI option availability and generated m
58
59
 
59
60
  ### Negative Tests
60
61
 
61
- Add tests that document the current failing behavior for union mode and JSON array streaming only if the next slice can consume them. These tests should be skipped or marked as expected failures only if the repository already has an accepted pattern for that.
62
+ Add negative tests only for newly identified contract gaps that a follow-up slice can consume. These tests should be skipped or marked as expected failures only if the repository already has an accepted pattern for that.
62
63
 
63
64
  ## Acceptance Criteria
64
65
 
65
- - `ROADMAP.md` names `0.25.x` as current.
66
+ - `ROADMAP.md` names released `0.28.x` work accurately.
66
67
  - `docs/roadmap/README.md` links every 1.0 slice.
67
68
  - CLI, API, and configuration docs agree on required 1.0 behavior.
68
69
  - Known contract gaps are linked to implementation slices.
69
- - `CHANGELOG.md` has one `docs(roadmap):` entry for the audit docs.
70
+ - `CHANGELOG.md` has one `docs(roadmap):` entry when audit docs change.
70
71
  - `npm run docs:validate` passes.
71
72
 
72
73
  ## Release Implications
@@ -8,7 +8,7 @@ See the root [README.md](../../README.md) for project overview and [Version 1.0
8
8
 
9
9
  ## Goal
10
10
 
11
- `format: "json-array"` must stream records incrementally as a valid JSON array without buffering the full SOAP response. The implementation must be compatible with generated clients, OpenAPI output, Fastify routes, generated tests, and production docs.
11
+ `0.28.0` completes `format: "json-array"` streaming as a valid JSON array without buffering the full SOAP response. The implementation is compatible with generated clients, OpenAPI output, Fastify routes, generated tests, and production docs.
12
12
 
13
13
  ## Design Direction
14
14
 
@@ -16,14 +16,14 @@ JSON array streaming writes an opening bracket with the first record, streams co
16
16
 
17
17
  The key researched constraint is error timing. The helper prefetches the first record before sending the first byte, so an upstream error before the first record still returns the normal error envelope. Once the JSON array response has started, a later error truncates the response and clients must treat the JSON parse failure as a failed stream.
18
18
 
19
- ## Scope
19
+ ## Completed Scope
20
20
 
21
- - Implement a runtime helper for JSON array streaming.
22
- - Preserve existing NDJSON behavior.
23
- - Emit JSON array route handlers when stream metadata says `format: "json-array"`.
24
- - Emit `application/json` OpenAPI content with an array item schema.
25
- - Generate stream-aware mock clients and tests for JSON array operations.
26
- - Document terminal-error behavior for JSON array clients.
21
+ - Implemented a runtime helper for JSON array streaming.
22
+ - Preserved existing NDJSON behavior.
23
+ - Emitted JSON array route handlers when stream metadata says `format: "json-array"`.
24
+ - Emitted `application/json` OpenAPI content with an array item schema.
25
+ - Generated stream-aware mock clients and tests for JSON array operations.
26
+ - Documented terminal-error behavior for JSON array clients.
27
27
 
28
28
  ## Out Of Scope
29
29
 
@@ -31,11 +31,11 @@ The key researched constraint is error timing. The helper prefetches the first r
31
31
  - Do not change buffered SOAP operations.
32
32
  - Do not make JSON array the default stream format.
33
33
 
34
- ## Research Tasks
34
+ ## Research Findings
35
35
 
36
36
  ### First-Byte Timing
37
37
 
38
- Research whether generated routes should prefetch the first record before calling `reply.send`. Prefetching can preserve normal error envelopes for errors that happen before any record is available, but it may delay response headers for slow upstream services.
38
+ Generated routes prefetch the first record before emitting the first JSON array byte. This preserves normal error envelopes for errors that happen before any record is available, with the tradeoff that response headers wait for the first upstream record.
39
39
 
40
40
  ### Empty Stream Handling
41
41
 
@@ -43,7 +43,7 @@ An empty stream returns `[]` with `application/json`. The helper emits a syntact
43
43
 
44
44
  ### Backpressure Handling
45
45
 
46
- Confirm that the helper does not pull from the async iterable faster than the HTTP stream can write. Use tests modeled after existing NDJSON backpressure tests.
46
+ Tests confirm that the helper does not pull from the async iterable faster than the HTTP stream can write. The coverage mirrors the existing NDJSON backpressure tests.
47
47
 
48
48
  ### Terminal Error Handling
49
49
 
@@ -53,7 +53,7 @@ Fastify surfaces stream errors after the JSON array has begun as a destroyed or
53
53
 
54
54
  ### Runtime Helper
55
55
 
56
- Add `toJsonArray<T>(records: AsyncIterable<T>): Readable` beside `toNdjson`. The helper should serialize records with `JSON.stringify`, insert commas between records, and close the array when iteration completes.
56
+ Added `toJsonArray<T>(records: AsyncIterable<T>): Readable` beside `toNdjson`. The helper serializes records with `JSON.stringify`, inserts commas between records, and closes the array when iteration completes.
57
57
 
58
58
  ### Gateway Emitter
59
59
 
@@ -87,6 +87,8 @@ Test errors before the first emitted record separately from errors after at leas
87
87
 
88
88
  ## Acceptance Criteria
89
89
 
90
+ Satisfied by `0.28.0`:
91
+
90
92
  - `format: "json-array"` generates working client, OpenAPI, gateway, and tests.
91
93
  - JSON array output is parseable when the source completes normally.
92
94
  - Output is streamed incrementally and does not buffer the full response.
@@ -96,4 +98,4 @@ Test errors before the first emitted record separately from errors after at leas
96
98
 
97
99
  ## Release Implications
98
100
 
99
- This slice is a user-facing feature release. The release notes must state that `json-array` is no longer reserved and can be selected per operation with `stream-config`.
101
+ This slice shipped as the `0.28.0` user-facing feature release. The release notes state that `json-array` can be selected per operation with `stream-config`, while NDJSON remains the default stream format.
@@ -1,45 +1,47 @@
1
1
  # Version 1.0 OpenAPI Fastify Compatibility
2
2
 
3
- Plan for proving schema choices against Fastify before changing choice union output or JSON array streaming output.
3
+ Status: compatibility baseline completed for `0.26.0` choice union mode and `0.28.0` JSON array streaming.
4
+
5
+ Plan for preserving Fastify compatibility as schema output evolves toward `1.0.0`.
4
6
 
5
7
  See the root [README.md](../../README.md) for project overview and [Version 1.0 Roadmap Plan](README.md) for the complete 1.0 route.
6
8
 
7
9
  ## Goal
8
10
 
9
- This slice confirms which OpenAPI 3.1 and JSON Schema constructs are safe for generated Fastify gateways. The result should constrain choice union mode, JSON array streaming, and any future schema complexity work.
11
+ This slice confirms which OpenAPI 3.1 and JSON Schema constructs are safe for generated Fastify gateways. The completed findings constrain released choice union mode, released JSON array streaming, and any future schema complexity work.
10
12
 
11
- ## Why This Slice Comes Before Implementation
13
+ ## Why This Slice Remains Active
12
14
 
13
15
  Fastify compatibility is part of the generated gateway contract. A TypeScript type shape can be correct while the generated OpenAPI schema is unusable for Fastify request validation or response serialization.
14
16
 
15
17
  ## Scope
16
18
 
17
- - Test `oneOf`, `anyOf`, and `allOf` request schemas through Fastify validation.
18
- - Test generated response schemas through Fastify serialization where applicable.
19
- - Test route schemas that omit response serialization for streamed responses.
20
- - Verify how schema complexity interacts with the existing response-depth safety limit.
19
+ - Maintain probes for `oneOf`, `anyOf`, and `allOf` request schemas through Fastify validation.
20
+ - Maintain probes for generated response schemas through Fastify serialization where applicable.
21
+ - Maintain probes for streamed routes that omit response serialization schemas.
22
+ - Keep the response-depth safety limit aware of schema composition.
21
23
  - Document the allowed schema strategy for choice union mode.
22
24
  - Document the allowed schema strategy for JSON array streaming.
23
25
 
24
26
  ## Out Of Scope
25
27
 
26
- - Do not implement choice union mode in this slice.
27
- - Do not implement JSON array streaming in this slice.
28
+ - Do not change shipped choice union behavior without new compatibility evidence.
29
+ - Do not change shipped JSON array streaming behavior without new compatibility evidence.
28
30
  - Do not change public WSDL feature coverage in this slice.
29
31
 
30
32
  ## Research Questions
31
33
 
32
34
  ### Choice Request Validation
33
35
 
34
- The research must determine whether `oneOf` with mutually exclusive object branches behaves correctly for request bodies. It must also determine whether additional branch exclusion properties are needed to reject payloads that send more than one choice branch.
36
+ The research determined that `oneOf` with mutually exclusive object branches needs peer exclusion constraints for request bodies. Additional branch exclusion properties are needed to reject payloads that send more than one choice branch.
35
37
 
36
38
  ### Choice Response Serialization
37
39
 
38
- The research must determine whether generated response schemas should use union constructs or stay envelope-based with permissive payload branches. If Fastify serialization becomes fragile, generated route response schemas must stay conservative.
40
+ The research determined that generated response schemas should stay conservative unless a future slice proves a stricter strategy. If Fastify serialization becomes fragile, generated route response schemas must stay conservative.
39
41
 
40
42
  ### JSON Array Streaming Schema
41
43
 
42
- The research must determine how to advertise an incrementally streamed JSON array in OpenAPI while keeping generated Fastify route schemas valid. Stream routes already omit normal response serialization because the response is not a single buffered object.
44
+ The research determined how to advertise an incrementally streamed JSON array in OpenAPI while keeping generated Fastify route schemas valid. Stream routes omit normal response serialization because the response is not a single buffered object.
43
45
 
44
46
  ## Local Fastify Findings
45
47
 
@@ -94,4 +96,4 @@ Use small synthetic schemas for compatibility probes. Do not require WSDL fixtur
94
96
 
95
97
  ## Release Implications
96
98
 
97
- This slice may ship without user-facing generator changes if it only adds tests and docs. If it changes schema generation defaults, it must be paired with snapshot updates and migration notes.
99
+ This slice shipped its released findings through the choice union and JSON array streaming work. Future schema-generation changes must be paired with compatibility probes, snapshot updates, and migration notes when behavior changes.
@@ -1,5 +1,7 @@
1
1
  # Version 1.0 Release Candidate Gates
2
2
 
3
+ Status: remaining final release preparation for `1.0.0`.
4
+
3
5
  Plan for validating that `1.0.0` is repeatable, documented, test-backed, and ready to publish.
4
6
 
5
7
  See the root [README.md](../../README.md) for project overview and [Version 1.0 Roadmap Plan](README.md) for the complete 1.0 route.
@@ -1,12 +1,14 @@
1
1
  # Version 1.0 WSDL Coverage Matrix
2
2
 
3
- Plan for turning WSDL and XSD support claims into automated, fixture-backed evidence before 1.0.
3
+ Status: remaining before `1.0.0`.
4
+
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).
4
6
 
5
7
  See the root [README.md](../../README.md) for project overview and [Version 1.0 Roadmap Plan](README.md) for the complete 1.0 route.
6
8
 
7
9
  ## Goal
8
10
 
9
- The project should have an automated feature matrix that proves which WSDL and XSD patterns are supported, partially supported, or rejected with diagnostics. The matrix should feed `docs/supported-patterns.md` and protect 1.0 from silent miscompilation.
11
+ The project should have an automated WSDL and XSD feature matrix that proves which patterns are supported, partially supported, or rejected with diagnostics. The matrix should feed the conformance registry, align with `docs/supported-patterns.md`, and protect 1.0 from silent miscompilation.
10
12
 
11
13
  ## Design Direction
12
14
 
@@ -28,17 +30,17 @@ Each matrix row should have a minimal fixture, an expected support status, and a
28
30
 
29
31
  ## Priority Feature Rows
30
32
 
31
- | Feature | Expected 1.0 Status | Notes |
32
- |---------|---------------------|-------|
33
- | `xs:choice` union mode | supported | Implemented in `0.26.0` |
34
- | `xs:union` | supported or diagnostic | Decide after fixture work |
35
- | Abstract types | diagnostic | Avoid silent concrete treatment |
36
- | Substitution groups | diagnostic | Avoid silent omission |
37
- | Multi-binding WSDLs | documented behavior | First binding or explicit selection |
38
- | External `PolicyReference` | partial or diagnostic | Inline policy already exists |
39
- | Deep composition | supported | Prove current recursion behavior |
40
- | `xs:anyAttribute` | diagnostic | Current support is not full |
41
- | MTOM/XOP attachments | unsupported diagnostic | Keep out of 1.0 scope unless required |
33
+ | Feature | Expected 1.0 Status | Notes |
34
+ |----------------------------|-------------------------|---------------------------------------|
35
+ | `xs:choice` union mode | supported | Implemented in `0.26.0` |
36
+ | `xs:union` | supported or diagnostic | Decide after fixture work |
37
+ | Abstract types | diagnostic | Avoid silent concrete treatment |
38
+ | Substitution groups | diagnostic | Avoid silent omission |
39
+ | Multi-binding WSDLs | documented behavior | First binding or explicit selection |
40
+ | External `PolicyReference` | partial or diagnostic | Inline policy already exists |
41
+ | Deep composition | supported | Prove current recursion behavior |
42
+ | `xs:anyAttribute` | diagnostic | Current support is not full |
43
+ | MTOM/XOP attachments | unsupported diagnostic | Keep out of 1.0 scope unless required |
42
44
 
43
45
  ## Manifest Shape
44
46
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techspokes/typescript-wsdl-client",
3
- "version": "0.28.0",
3
+ "version": "0.29.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",
@@ -90,18 +90,18 @@
90
90
  },
91
91
  "devDependencies": {
92
92
  "@types/js-yaml": "^4.0.9",
93
- "@types/node": "^25.9.1",
93
+ "@types/node": "^25.9.3",
94
94
  "@types/yargs": "^17.0.35",
95
95
  "fastify": "^5.8.5",
96
- "fastify-plugin": "^5.1.0",
96
+ "fastify-plugin": "^6.0.0",
97
97
  "rimraf": "^6.1.3",
98
98
  "tsx": "^4.22.4",
99
99
  "typescript": "^6.0.3",
100
- "vitest": "^4.1.8"
100
+ "vitest": "^4.1.9"
101
101
  },
102
102
  "dependencies": {
103
103
  "@apidevtools/swagger-parser": "^12.1.0",
104
- "fast-xml-parser": "^5.8.0",
104
+ "fast-xml-parser": "^5.9.0",
105
105
  "js-yaml": "^4.2.0",
106
106
  "saxes": "^6.0.0",
107
107
  "soap": "^1.9.3",