@techspokes/typescript-wsdl-client 1.1.3 → 1.1.5

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.
Files changed (360) hide show
  1. package/README.md +50 -1
  2. package/dist/app/generateApp.d.ts.map +1 -1
  3. package/dist/app/generateApp.js +8 -6
  4. package/dist/cli.js +49 -5
  5. package/dist/client/checkedDirectRuntime.d.ts +59 -0
  6. package/dist/client/checkedDirectRuntime.d.ts.map +1 -0
  7. package/dist/client/checkedDirectRuntime.js +23 -0
  8. package/dist/client/directClientRuntime.d.ts +49 -0
  9. package/dist/client/directClientRuntime.d.ts.map +1 -0
  10. package/dist/client/directClientRuntime.js +112 -0
  11. package/dist/client/directClientVersion.d.ts +4 -0
  12. package/dist/client/directClientVersion.d.ts.map +1 -0
  13. package/dist/client/directClientVersion.js +3 -0
  14. package/dist/client/generateClient.d.ts.map +1 -1
  15. package/dist/client/generateClient.js +22 -9
  16. package/dist/client/generateDirectClient.d.ts +14 -0
  17. package/dist/client/generateDirectClient.d.ts.map +1 -0
  18. package/dist/client/generateDirectClient.js +136 -0
  19. package/dist/compiler/buildCanonicalGraph.d.ts +7 -0
  20. package/dist/compiler/buildCanonicalGraph.d.ts.map +1 -0
  21. package/dist/compiler/buildCanonicalGraph.js +381 -0
  22. package/dist/compiler/canonicalGraph.d.ts +198 -0
  23. package/dist/compiler/canonicalGraph.d.ts.map +1 -0
  24. package/dist/compiler/canonicalGraph.js +37 -0
  25. package/dist/compiler/catalogErrors.d.ts +18 -0
  26. package/dist/compiler/catalogErrors.d.ts.map +1 -0
  27. package/dist/compiler/catalogErrors.js +86 -0
  28. package/dist/compiler/catalogProvenance.d.ts +15 -0
  29. package/dist/compiler/catalogProvenance.d.ts.map +1 -0
  30. package/dist/compiler/catalogProvenance.js +229 -0
  31. package/dist/compiler/checkedAssessment.d.ts +91 -0
  32. package/dist/compiler/checkedAssessment.d.ts.map +1 -0
  33. package/dist/compiler/checkedAssessment.js +300 -0
  34. package/dist/compiler/checkedSourcePreparation.d.ts +35 -0
  35. package/dist/compiler/checkedSourcePreparation.d.ts.map +1 -0
  36. package/dist/compiler/checkedSourcePreparation.js +131 -0
  37. package/dist/compiler/complexTypeContent.d.ts +59 -0
  38. package/dist/compiler/complexTypeContent.d.ts.map +1 -0
  39. package/dist/compiler/complexTypeContent.js +558 -0
  40. package/dist/compiler/composeCanonicalGraph.d.ts +69 -0
  41. package/dist/compiler/composeCanonicalGraph.d.ts.map +1 -0
  42. package/dist/compiler/composeCanonicalGraph.js +252 -0
  43. package/dist/compiler/dataOwnership.d.ts +22 -0
  44. package/dist/compiler/dataOwnership.d.ts.map +1 -0
  45. package/dist/compiler/dataOwnership.js +157 -0
  46. package/dist/compiler/datatypeValues.d.ts +47 -0
  47. package/dist/compiler/datatypeValues.d.ts.map +1 -0
  48. package/dist/compiler/datatypeValues.js +275 -0
  49. package/dist/compiler/directCodec.d.ts +59 -0
  50. package/dist/compiler/directCodec.d.ts.map +1 -0
  51. package/dist/compiler/directCodec.js +192 -0
  52. package/dist/compiler/directExecutionPolicy.d.ts +10 -0
  53. package/dist/compiler/directExecutionPolicy.d.ts.map +1 -0
  54. package/dist/compiler/directExecutionPolicy.js +17 -0
  55. package/dist/compiler/directOperation.d.ts +72 -0
  56. package/dist/compiler/directOperation.d.ts.map +1 -0
  57. package/dist/compiler/directOperation.js +282 -0
  58. package/dist/compiler/directSoap.d.ts +42 -0
  59. package/dist/compiler/directSoap.d.ts.map +1 -0
  60. package/dist/compiler/directSoap.js +298 -0
  61. package/dist/compiler/directSoapSource.d.ts +15 -0
  62. package/dist/compiler/directSoapSource.d.ts.map +1 -0
  63. package/dist/compiler/directSoapSource.js +86 -0
  64. package/dist/compiler/directSourceCapsule.d.ts +97 -0
  65. package/dist/compiler/directSourceCapsule.d.ts.map +1 -0
  66. package/dist/compiler/directSourceCapsule.js +305 -0
  67. package/dist/compiler/directStructure.d.ts +51 -0
  68. package/dist/compiler/directStructure.d.ts.map +1 -0
  69. package/dist/compiler/directStructure.js +252 -0
  70. package/dist/compiler/directStructurePlan.d.ts +16 -0
  71. package/dist/compiler/directStructurePlan.d.ts.map +1 -0
  72. package/dist/compiler/directStructurePlan.js +58 -0
  73. package/dist/compiler/directValues.d.ts +69 -0
  74. package/dist/compiler/directValues.d.ts.map +1 -0
  75. package/dist/compiler/directValues.js +282 -0
  76. package/dist/compiler/finiteRe01Verification.d.ts +140 -0
  77. package/dist/compiler/finiteRe01Verification.d.ts.map +1 -0
  78. package/dist/compiler/finiteRe01Verification.js +830 -0
  79. package/dist/compiler/graphTraversal.d.ts +11 -0
  80. package/dist/compiler/graphTraversal.d.ts.map +1 -0
  81. package/dist/compiler/graphTraversal.js +37 -0
  82. package/dist/compiler/hypotheticalScopedIdentity.d.ts +23 -0
  83. package/dist/compiler/hypotheticalScopedIdentity.d.ts.map +1 -0
  84. package/dist/compiler/hypotheticalScopedIdentity.js +81 -0
  85. package/dist/compiler/occurrenceAnalysis.d.ts +65 -0
  86. package/dist/compiler/occurrenceAnalysis.d.ts.map +1 -0
  87. package/dist/compiler/occurrenceAnalysis.js +300 -0
  88. package/dist/compiler/originalSourceMembership.d.ts +6 -0
  89. package/dist/compiler/originalSourceMembership.d.ts.map +1 -0
  90. package/dist/compiler/originalSourceMembership.js +31 -0
  91. package/dist/compiler/particleAttribution.d.ts +17 -0
  92. package/dist/compiler/particleAttribution.d.ts.map +1 -0
  93. package/dist/compiler/particleAttribution.js +474 -0
  94. package/dist/compiler/particleDeclarationConsistency.d.ts +24 -0
  95. package/dist/compiler/particleDeclarationConsistency.d.ts.map +1 -0
  96. package/dist/compiler/particleDeclarationConsistency.js +197 -0
  97. package/dist/compiler/particleExtension.d.ts +22 -0
  98. package/dist/compiler/particleExtension.d.ts.map +1 -0
  99. package/dist/compiler/particleExtension.js +119 -0
  100. package/dist/compiler/particleLocalAssessment.d.ts +20 -0
  101. package/dist/compiler/particleLocalAssessment.d.ts.map +1 -0
  102. package/dist/compiler/particleLocalAssessment.js +92 -0
  103. package/dist/compiler/particleRestriction.d.ts +24 -0
  104. package/dist/compiler/particleRestriction.d.ts.map +1 -0
  105. package/dist/compiler/particleRestriction.js +489 -0
  106. package/dist/compiler/particleSemanticView.d.ts +50 -0
  107. package/dist/compiler/particleSemanticView.d.ts.map +1 -0
  108. package/dist/compiler/particleSemanticView.js +297 -0
  109. package/dist/compiler/particleWildcardRelation.d.ts +88 -0
  110. package/dist/compiler/particleWildcardRelation.d.ts.map +1 -0
  111. package/dist/compiler/particleWildcardRelation.js +143 -0
  112. package/dist/compiler/re01CandidateCorrespondence.d.ts +64 -0
  113. package/dist/compiler/re01CandidateCorrespondence.d.ts.map +1 -0
  114. package/dist/compiler/re01CandidateCorrespondence.js +572 -0
  115. package/dist/compiler/re01TypeProperties.d.ts +71 -0
  116. package/dist/compiler/re01TypeProperties.d.ts.map +1 -0
  117. package/dist/compiler/re01TypeProperties.js +120 -0
  118. package/dist/compiler/re01TypePropertyValidation.d.ts +23 -0
  119. package/dist/compiler/re01TypePropertyValidation.d.ts.map +1 -0
  120. package/dist/compiler/re01TypePropertyValidation.js +161 -0
  121. package/dist/compiler/resolveCanonicalGraph.d.ts +38 -0
  122. package/dist/compiler/resolveCanonicalGraph.d.ts.map +1 -0
  123. package/dist/compiler/resolveCanonicalGraph.js +170 -0
  124. package/dist/compiler/scalarSchemaAssessment.d.ts +425 -0
  125. package/dist/compiler/scalarSchemaAssessment.d.ts.map +1 -0
  126. package/dist/compiler/scalarSchemaAssessment.js +5198 -0
  127. package/dist/compiler/schemaAttributeGroupProperties.d.ts +17 -0
  128. package/dist/compiler/schemaAttributeGroupProperties.d.ts.map +1 -0
  129. package/dist/compiler/schemaAttributeGroupProperties.js +53 -0
  130. package/dist/compiler/schemaAttributeProperties.d.ts +10 -0
  131. package/dist/compiler/schemaAttributeProperties.d.ts.map +1 -0
  132. package/dist/compiler/schemaAttributeProperties.js +11 -0
  133. package/dist/compiler/schemaAttributeUses.d.ts +90 -0
  134. package/dist/compiler/schemaAttributeUses.d.ts.map +1 -0
  135. package/dist/compiler/schemaAttributeUses.js +725 -0
  136. package/dist/compiler/schemaBinaryWordReconstruction.d.ts +10 -0
  137. package/dist/compiler/schemaBinaryWordReconstruction.d.ts.map +1 -0
  138. package/dist/compiler/schemaBinaryWordReconstruction.js +33 -0
  139. package/dist/compiler/schemaBuiltinFacets.d.ts +14 -0
  140. package/dist/compiler/schemaBuiltinFacets.d.ts.map +1 -0
  141. package/dist/compiler/schemaBuiltinFacets.js +51 -0
  142. package/dist/compiler/schemaCalendarImages.d.ts +8 -0
  143. package/dist/compiler/schemaCalendarImages.d.ts.map +1 -0
  144. package/dist/compiler/schemaCalendarImages.js +204 -0
  145. package/dist/compiler/schemaCalendarLanguage.d.ts +11 -0
  146. package/dist/compiler/schemaCalendarLanguage.d.ts.map +1 -0
  147. package/dist/compiler/schemaCalendarLanguage.js +227 -0
  148. package/dist/compiler/schemaComponentEquality.d.ts +28 -0
  149. package/dist/compiler/schemaComponentEquality.d.ts.map +1 -0
  150. package/dist/compiler/schemaComponentEquality.js +446 -0
  151. package/dist/compiler/schemaConstructionAssessment.d.ts +46 -0
  152. package/dist/compiler/schemaConstructionAssessment.d.ts.map +1 -0
  153. package/dist/compiler/schemaConstructionAssessment.js +663 -0
  154. package/dist/compiler/schemaDatatypeValues.d.ts +4 -0
  155. package/dist/compiler/schemaDatatypeValues.d.ts.map +1 -0
  156. package/dist/compiler/schemaDatatypeValues.js +2 -0
  157. package/dist/compiler/schemaDecimalLanguage.d.ts +7 -0
  158. package/dist/compiler/schemaDecimalLanguage.d.ts.map +1 -0
  159. package/dist/compiler/schemaDecimalLanguage.js +102 -0
  160. package/dist/compiler/schemaDeclarationPrimitives.d.ts +34 -0
  161. package/dist/compiler/schemaDeclarationPrimitives.d.ts.map +1 -0
  162. package/dist/compiler/schemaDeclarationPrimitives.js +194 -0
  163. package/dist/compiler/schemaDocumentSyntax.d.ts +55 -0
  164. package/dist/compiler/schemaDocumentSyntax.d.ts.map +1 -0
  165. package/dist/compiler/schemaDocumentSyntax.js +294 -0
  166. package/dist/compiler/schemaDurationLanguage.d.ts +11 -0
  167. package/dist/compiler/schemaDurationLanguage.d.ts.map +1 -0
  168. package/dist/compiler/schemaDurationLanguage.js +170 -0
  169. package/dist/compiler/schemaElementProperties.d.ts +16 -0
  170. package/dist/compiler/schemaElementProperties.d.ts.map +1 -0
  171. package/dist/compiler/schemaElementProperties.js +23 -0
  172. package/dist/compiler/schemaEndpointWordCapacity.d.ts +36 -0
  173. package/dist/compiler/schemaEndpointWordCapacity.d.ts.map +1 -0
  174. package/dist/compiler/schemaEndpointWordCapacity.js +39 -0
  175. package/dist/compiler/schemaExactCalendar.d.ts +73 -0
  176. package/dist/compiler/schemaExactCalendar.d.ts.map +1 -0
  177. package/dist/compiler/schemaExactCalendar.js +264 -0
  178. package/dist/compiler/schemaFacetAnnotation.d.ts +32 -0
  179. package/dist/compiler/schemaFacetAnnotation.d.ts.map +1 -0
  180. package/dist/compiler/schemaFacetAnnotation.js +199 -0
  181. package/dist/compiler/schemaGeneratedScalarShape.d.ts +35 -0
  182. package/dist/compiler/schemaGeneratedScalarShape.d.ts.map +1 -0
  183. package/dist/compiler/schemaGeneratedScalarShape.js +176 -0
  184. package/dist/compiler/schemaIdentityConstraints.d.ts +73 -0
  185. package/dist/compiler/schemaIdentityConstraints.d.ts.map +1 -0
  186. package/dist/compiler/schemaIdentityConstraints.js +362 -0
  187. package/dist/compiler/schemaIeeeLanguage.d.ts +43 -0
  188. package/dist/compiler/schemaIeeeLanguage.d.ts.map +1 -0
  189. package/dist/compiler/schemaIeeeLanguage.js +759 -0
  190. package/dist/compiler/schemaIntegerImages.d.ts +11 -0
  191. package/dist/compiler/schemaIntegerImages.d.ts.map +1 -0
  192. package/dist/compiler/schemaIntegerImages.js +113 -0
  193. package/dist/compiler/schemaLexicalPredicates.d.ts +29 -0
  194. package/dist/compiler/schemaLexicalPredicates.d.ts.map +1 -0
  195. package/dist/compiler/schemaLexicalPredicates.js +63 -0
  196. package/dist/compiler/schemaNotationProperties.d.ts +32 -0
  197. package/dist/compiler/schemaNotationProperties.d.ts.map +1 -0
  198. package/dist/compiler/schemaNotationProperties.js +84 -0
  199. package/dist/compiler/schemaNumericImageConditions.d.ts +24 -0
  200. package/dist/compiler/schemaNumericImageConditions.d.ts.map +1 -0
  201. package/dist/compiler/schemaNumericImageConditions.js +66 -0
  202. package/dist/compiler/schemaParticleWildcardProperties.d.ts +20 -0
  203. package/dist/compiler/schemaParticleWildcardProperties.d.ts.map +1 -0
  204. package/dist/compiler/schemaParticleWildcardProperties.js +43 -0
  205. package/dist/compiler/schemaPattern.d.ts +1062 -0
  206. package/dist/compiler/schemaPattern.d.ts.map +1 -0
  207. package/dist/compiler/schemaPattern.js +581 -0
  208. package/dist/compiler/schemaRegularLanguage.d.ts +67 -0
  209. package/dist/compiler/schemaRegularLanguage.d.ts.map +1 -0
  210. package/dist/compiler/schemaRegularLanguage.js +1166 -0
  211. package/dist/compiler/schemaScalarContext.d.ts +81 -0
  212. package/dist/compiler/schemaScalarContext.d.ts.map +1 -0
  213. package/dist/compiler/schemaScalarContext.js +78 -0
  214. package/dist/compiler/schemaScalarKernel.d.ts +182 -0
  215. package/dist/compiler/schemaScalarKernel.d.ts.map +1 -0
  216. package/dist/compiler/schemaScalarKernel.js +391 -0
  217. package/dist/compiler/schemaScalarWitnesses.d.ts +6 -0
  218. package/dist/compiler/schemaScalarWitnesses.d.ts.map +1 -0
  219. package/dist/compiler/schemaScalarWitnesses.js +118 -0
  220. package/dist/compiler/schemaSimpleTypeProperties.d.ts +95 -0
  221. package/dist/compiler/schemaSimpleTypeProperties.d.ts.map +1 -0
  222. package/dist/compiler/schemaSimpleTypeProperties.js +103 -0
  223. package/dist/compiler/schemaSourceGrammar.d.ts +27 -0
  224. package/dist/compiler/schemaSourceGrammar.d.ts.map +1 -0
  225. package/dist/compiler/schemaSourceGrammar.js +290 -0
  226. package/dist/compiler/schemaSourceLexical.d.ts +4 -0
  227. package/dist/compiler/schemaSourceLexical.d.ts.map +1 -0
  228. package/dist/compiler/schemaSourceLexical.js +12 -0
  229. package/dist/compiler/schemaSourceValues.d.ts +51 -0
  230. package/dist/compiler/schemaSourceValues.d.ts.map +1 -0
  231. package/dist/compiler/schemaSourceValues.js +225 -0
  232. package/dist/compiler/schemaSourceWildcards.d.ts +28 -0
  233. package/dist/compiler/schemaSourceWildcards.d.ts.map +1 -0
  234. package/dist/compiler/schemaSourceWildcards.js +247 -0
  235. package/dist/compiler/schemaSymbolicSequences.d.ts +16 -0
  236. package/dist/compiler/schemaSymbolicSequences.d.ts.map +1 -0
  237. package/dist/compiler/schemaSymbolicSequences.js +99 -0
  238. package/dist/compiler/schemaSymbolicValueSets.d.ts +32 -0
  239. package/dist/compiler/schemaSymbolicValueSets.d.ts.map +1 -0
  240. package/dist/compiler/schemaSymbolicValueSets.js +149 -0
  241. package/dist/compiler/schemaSyntaxAssessment.d.ts +25 -0
  242. package/dist/compiler/schemaSyntaxAssessment.d.ts.map +1 -0
  243. package/dist/compiler/schemaSyntaxAssessment.js +361 -0
  244. package/dist/compiler/schemaTemporalAliases.d.ts +6 -0
  245. package/dist/compiler/schemaTemporalAliases.d.ts.map +1 -0
  246. package/dist/compiler/schemaTemporalAliases.js +195 -0
  247. package/dist/compiler/schemaTokenImages.d.ts +9 -0
  248. package/dist/compiler/schemaTokenImages.d.ts.map +1 -0
  249. package/dist/compiler/schemaTokenImages.js +142 -0
  250. package/dist/compiler/schemaTypeIdentity.d.ts +39 -0
  251. package/dist/compiler/schemaTypeIdentity.d.ts.map +1 -0
  252. package/dist/compiler/schemaTypeIdentity.js +78 -0
  253. package/dist/compiler/schemaTypeRelations.d.ts +38 -0
  254. package/dist/compiler/schemaTypeRelations.d.ts.map +1 -0
  255. package/dist/compiler/schemaTypeRelations.js +576 -0
  256. package/dist/compiler/schemaUri.d.ts +13 -0
  257. package/dist/compiler/schemaUri.d.ts.map +1 -0
  258. package/dist/compiler/schemaUri.js +103 -0
  259. package/dist/compiler/schemaValueContext.d.ts +26 -0
  260. package/dist/compiler/schemaValueContext.d.ts.map +1 -0
  261. package/dist/compiler/schemaValueContext.js +1 -0
  262. package/dist/compiler/schemaValueImages.d.ts +10 -0
  263. package/dist/compiler/schemaValueImages.d.ts.map +1 -0
  264. package/dist/compiler/schemaValueImages.js +142 -0
  265. package/dist/compiler/schemaValueSequences.d.ts +15 -0
  266. package/dist/compiler/schemaValueSequences.d.ts.map +1 -0
  267. package/dist/compiler/schemaValueSequences.js +19 -0
  268. package/dist/compiler/semanticBudget.d.ts +50 -0
  269. package/dist/compiler/semanticBudget.d.ts.map +1 -0
  270. package/dist/compiler/semanticBudget.js +178 -0
  271. package/dist/compiler/semanticCatalog.d.ts +122 -0
  272. package/dist/compiler/semanticCatalog.d.ts.map +1 -0
  273. package/dist/compiler/semanticCatalog.js +160 -0
  274. package/dist/compiler/semanticContext.d.ts +172 -0
  275. package/dist/compiler/semanticContext.d.ts.map +1 -0
  276. package/dist/compiler/semanticContext.js +1168 -0
  277. package/dist/compiler/semanticTypeDependencies.d.ts +8 -0
  278. package/dist/compiler/semanticTypeDependencies.d.ts.map +1 -0
  279. package/dist/compiler/semanticTypeDependencies.js +64 -0
  280. package/dist/compiler/semanticTypeReference.d.ts +24 -0
  281. package/dist/compiler/semanticTypeReference.d.ts.map +1 -0
  282. package/dist/compiler/semanticTypeReference.js +36 -0
  283. package/dist/compiler/shapeResolver.d.ts +1 -0
  284. package/dist/compiler/shapeResolver.d.ts.map +1 -1
  285. package/dist/compiler/shapeResolver.js +7 -9
  286. package/dist/compiler/sourceSchemaBinding.d.ts +26 -0
  287. package/dist/compiler/sourceSchemaBinding.d.ts.map +1 -0
  288. package/dist/compiler/sourceSchemaBinding.js +39 -0
  289. package/dist/compiler/structuralCompanions.d.ts +16 -0
  290. package/dist/compiler/structuralCompanions.d.ts.map +1 -0
  291. package/dist/compiler/structuralCompanions.js +232 -0
  292. package/dist/compiler/validateSemanticGraph.d.ts +5 -0
  293. package/dist/compiler/validateSemanticGraph.d.ts.map +1 -0
  294. package/dist/compiler/validateSemanticGraph.js +376 -0
  295. package/dist/compiler/wildcardAlgebra.d.ts +26 -0
  296. package/dist/compiler/wildcardAlgebra.d.ts.map +1 -0
  297. package/dist/compiler/wildcardAlgebra.js +155 -0
  298. package/dist/gateway/generateGateway.d.ts.map +1 -1
  299. package/dist/gateway/generateGateway.js +2 -2
  300. package/dist/index.d.ts +3 -0
  301. package/dist/index.d.ts.map +1 -1
  302. package/dist/index.js +2 -0
  303. package/dist/loader/orderedSyntax.d.ts +77 -0
  304. package/dist/loader/orderedSyntax.d.ts.map +1 -0
  305. package/dist/loader/orderedSyntax.js +202 -0
  306. package/dist/loader/resolutionDepth.d.ts +7 -0
  307. package/dist/loader/resolutionDepth.d.ts.map +1 -0
  308. package/dist/loader/resolutionDepth.js +65 -0
  309. package/dist/loader/schemaInput.d.ts +53 -0
  310. package/dist/loader/schemaInput.d.ts.map +1 -0
  311. package/dist/loader/schemaInput.js +212 -0
  312. package/dist/loader/schemaResources.d.ts +59 -0
  313. package/dist/loader/schemaResources.d.ts.map +1 -0
  314. package/dist/loader/schemaResources.js +292 -0
  315. package/dist/openapi/generateOpenAPI.d.ts.map +1 -1
  316. package/dist/openapi/generateOpenAPI.js +2 -2
  317. package/dist/test/generateTests.d.ts.map +1 -1
  318. package/dist/test/generateTests.js +2 -2
  319. package/dist/util/xmlWhitespace.d.ts +3 -0
  320. package/dist/util/xmlWhitespace.d.ts.map +1 -0
  321. package/dist/util/xmlWhitespace.js +4 -0
  322. package/docs/README.md +14 -1
  323. package/docs/architecture.md +9 -0
  324. package/docs/cli-reference.md +21 -1
  325. package/docs/content-model-analysis.md +92 -0
  326. package/docs/content-model-baseline.md +121 -0
  327. package/docs/content-model-catalog.md +116 -0
  328. package/docs/content-model-companions.md +90 -0
  329. package/docs/content-model-composition.md +103 -0
  330. package/docs/content-model-decisions.md +79 -0
  331. package/docs/content-model-gateway-feasibility.md +169 -0
  332. package/docs/content-model-graph.md +121 -0
  333. package/docs/content-model-loading.md +163 -0
  334. package/docs/content-model-matching.md +85 -0
  335. package/docs/content-model-readiness.md +144 -0
  336. package/docs/content-model-resolution.md +81 -0
  337. package/docs/content-model-s02-handoff.md +98 -0
  338. package/docs/content-model-s06-au-01.md +425 -0
  339. package/docs/content-model-s06-dt-01.md +386 -0
  340. package/docs/content-model-s06-pw-01.md +350 -0
  341. package/docs/content-model-s06-re-01-resolver-implementation.md +869 -0
  342. package/docs/content-model-s06-re-01-resolver.md +513 -0
  343. package/docs/content-model-s06-re-01-scalar-witnesses.md +1423 -0
  344. package/docs/content-model-s06-re-01-support-reconstruction.md +6337 -0
  345. package/docs/content-model-s06-re-01.md +7477 -0
  346. package/docs/content-model-s06-research-handoff.md +909 -0
  347. package/docs/content-model-shipped-fix.md +83 -0
  348. package/docs/content-model-soap-feasibility.md +165 -0
  349. package/docs/decisions/002-streamable-responses.md +2 -0
  350. package/docs/decisions/003-content-model-contracts.md +280 -0
  351. package/docs/direct-values.md +311 -0
  352. package/docs/generated-code.md +4 -0
  353. package/docs/reference-validation.md +243 -0
  354. package/docs/releases/v1.1.4.md +36 -0
  355. package/docs/releases/v1.1.5.md +38 -0
  356. package/docs/roadmap/README.md +2 -2
  357. package/docs/supported-patterns.md +13 -5
  358. package/package.json +27 -13
  359. package/src/generation/preambles/direct-client/typescript.preamble +3 -0
  360. package/src/runtime/clientStreamMethods.tpl.txt +1 -1
@@ -0,0 +1,311 @@
1
+ # Direct scalar values
2
+
3
+ Internal direct mapping, bare-root XML codec and portable source contract. See the root [README](../README.md) and [matching contract](content-model-matching.md).
4
+
5
+ ## Package-root binding for generated direct clients
6
+
7
+ The unreleased additive root export `checkedDirectRuntimeV1` runs an already generated checked direct client through the existing native source, capsule, schema/scalar, XML and buffered SOAP engines. Package metadata remains 1.1.4; published 1.x packages do not thereby gain structured generation support. Generation remains internal, and existing CLI commands and legacy defaults are unchanged.
8
+
9
+ Use a matched generated client, capsule and explicitly authorized original local WSDL. The caller supplies its actual owned server endpoint; a WSDL service address never authorizes dispatch.
10
+
11
+ ```typescript
12
+ import {readFile} from 'node:fs/promises';
13
+ import {fileURLToPath} from 'node:url';
14
+ import {checkedDirectRuntimeV1} from '@techspokes/typescript-wsdl-client';
15
+ import {createClient} from '../.generated/checked-client.js';
16
+
17
+ declare const endpoint: string; // Actual endpoint returned by the host's owned loopback server.
18
+ const directory = new URL('../.generated/', import.meta.url);
19
+ const controller = new AbortController();
20
+ const client = createClient(checkedDirectRuntimeV1);
21
+ const result = await client.GetForecast({city: 'Paris', days: 2}, {
22
+ localSource: fileURLToPath(new URL('forecast.wsdl', directory)),
23
+ fileRoots: [fileURLToPath(directory)],
24
+ capsule: await readFile(new URL('forecast.capsule.json', directory)),
25
+ soap: {
26
+ service: {namespace: 'urn:checked:forecast', local: 'ForecastService'},
27
+ port: 'ForecastPort', endpoint,
28
+ allowEndpoint: url => url.href === endpoint,
29
+ signal: controller.signal,
30
+ timeoutMs: 5000,
31
+ limits: {maxBytes: 8 * 1024 * 1024, maxDepth: 64, maxNodes: 100000, maxText: 8 * 1024 * 1024},
32
+ },
33
+ });
34
+ if (result.kind === 'soap-response') console.log(result.value.temperature);
35
+ else if (result.kind === 'soap-fault') console.log(result.fault.name, result.value.message);
36
+ else console.error(result.kind, result.rule);
37
+ ```
38
+
39
+ The timeout, size/depth controls and signal above are explicit caller choices. Omitting them installs no normal work quota, source/XML size ceiling or SOAP deadline; timeout zero also disables the SOAP deadline. Limits cover the XML request and complete response, including the envelope; text counts UTF-16 units. The host owns capacity, logging and resource failure handling, including source-file size policy and worker/process/OS containment. Same-thread cancellation cannot preempt synchronous JavaScript; no hard heap/RSS/CPU guarantee is provided. Profiling budgets are private test/research hooks and are refused by this root entry.
40
+
41
+ ### Compatibility and repair
42
+
43
+ The frozen binding's `version` and generated invocation protocol are exactly `checked-direct-runtime-v1`, independent of npm version. The generated wrapper checks the binding version before execution; the binding independently checks the invocation version before inspecting options or loading source. Missing, older or foreign protocol versions return `incompatible-artifact` with rule `generated-runtime-version`. P3.7 artifacts without this handshake require regeneration; no guessed upgrade is supported.
44
+
45
+ Capsule format 1 requires model `xsd10-faithful-v1`, scope `direct-soap11-single-utf8-v1`, mapping `direct-values-v1`, scalar policy `direct-string-boolean-int-v1` and runtime policy `owned-loopback-http-no-extensions-v1`. Each invocation pins capsule bytes to the generated literal, reads the separately authorized local file and reissues fresh native authority. It compares selected service/port/binding/action, input/output/fault roots and types, ordered slots, occurrences and scalar identities before HTTP. Saved reports, fingerprints and old handles authorize no I/O.
46
+
47
+ `generated-capsule-mismatch`, `local-source-changed` and version/contract incompatibility require regenerating the client and capsule together from the explicitly authorized original WSDL with the installed runtime. Exact byte changes require regeneration even when the semantic descriptor would remain compatible. Harmless file relocation preserves emitted source; location still needs fresh file-root authorization. Missing authority requires correcting the explicit file-root permission or endpoint selection/authorization, never enabling implicit source fetching.
48
+
49
+ Failures retain `unsupported`, `missing-authority`, `incompatible-artifact`, `invalid-schema`, `inconclusive`, `scalar-invalid`, `value-invalid`, `xml-invalid`, `mismatch`, `protocol`, `transport`, `resource-limit` and `cancelled` categories. A configured size refusal is `resource-limit`, a SOAP deadline or early connection close is `transport`, and caller abort is `cancelled`; none becomes schema invalidity or partial successful output. Host/runtime capacity failures can still throw; malformed data-only options or invalid operational limit values can throw `TypeError`/`RangeError`. Normal usage counters `{nodes: 0, work: 0}` mean disabled profiling.
50
+
51
+ ### Restricted supported grammar
52
+
53
+ This entry supports one safe UTF-8 local WSDL resource and SOAP 1.1 document/literal over explicitly authorized owned IPv4 loopback HTTP. Values are built-in string/int32/Boolean scalar roots, empty sequences or flat sequences of distinct scalar elements with minOccurs 0/1 and maxOccurs 1/unbounded, including declared faults. Source loading and native qualification retain the [direct correspondence restrictions](decisions/003-content-model-contracts.md#qualified-dated-xsd-direct-route).
54
+
55
+ Nested complex/group content, attributes, nil, facets, import/include graphs and general XSD completeness are outside this slice. Dependency-reserved names such as `__proto__`, `constructor`, `toString`, inherited Object.prototype names and `prototype` refuse safely. Remote source loading, production endpoints, TLS/auth/WS-Security, arbitrary headers, SOAP 1.2, redirects, attachments, compression and streaming remain unsupported. `admitted:false` remains unchanged.
56
+
57
+ TypeScript approximates the runtime contract: `number` does not enforce int32 range, and structural typing does not exclude every extra property or invalid occurrence. Fresh values always undergo native shape/scalar checks. The generated `Runtime` is a trusted injection interface; supply the documented root binding, since a replacement implementation can lie about its protocol or returned values. No source authorization handle, mutable transport object or native receipt is exported.
58
+
59
+ ## Current direct-client resource policy
60
+
61
+ Normal generated-client execution has no profiling work quota, payload-size quota or default SOAP deadline. The application hosting a client or REST gateway owns its resource capacity, timeout choices, logging and failure handling. This policy implements the October 27, 2026 clarification and supersedes older direct-path claims below that test budgets protect consumer applications.
62
+
63
+ ### Plan and implementation
64
+
65
+ The implementation separates data ownership from profiling, removes artificial allocation reservations, makes normal execution unmetered, and keeps bounded profiles explicit in tests. It reuses the existing copier, validators, codec and transport. Source authorization, native contract identity, correct schema/protocol validation and rejection of unsupported features remain required; they are not resource quotas.
66
+
67
+ `createApplicationBudget()` supplies the semantic engine interface without collecting counters or rejecting work. Tests explicitly supply profiling limits to opt into the existing measured/bounded engine. The default 125-million-work/100,000-node research profile is unchanged for those tests and research tools; it is not silently installed into ordinary generated calls. Zero usage counters in normal mode mean metering is disabled, not that execution was free.
68
+
69
+ The generated client options do not expose the internal profiling budget. A caller may still explicitly supply SOAP byte/depth/text/node limits or a timeout for its own application policy. Only supplied size/depth values are enforced in normal mode; an absent timeout or timeout zero creates no SOAP deadline. Configuration is owned before asynchronous use, preserving the earlier mutation fix independently of profiling.
70
+
71
+ Portable capsule/source handling, generated-file emission, value inverse construction and metadata ownership likewise do not inherit the bounded test profile during normal execution. Existing low-level numeric interfaces use JavaScript's safe-integer representation ceiling to express the absence of a configured quota; this is not a supported maximum workload or a resource-safety promise. Actual process, runtime and operating-system limits can still fail, and those failures belong to the hosting application.
72
+
73
+ ### Testing and optimization profiles
74
+
75
+ These numbers are selected only when a test opts into profiling. They are not normal client defaults or guarantees that all data below them fits memory.
76
+
77
+ | Test boundary | Profile value | Purpose |
78
+ | --- | --- | --- |
79
+ | Local WSDL | 64 KiB | Reproduce small-source qualification cases |
80
+ | Capsule | 256 KiB | Exercise at/beyond byte-boundary behavior |
81
+ | XML | 1 MiB bytes/text, depth 256, 100,000 nodes | Test concrete buffer and traversal boundaries |
82
+ | Fresh values | 1 MiB string content, 100,000 scalar items | Test failure before inverse construction |
83
+ | Metadata copies | 100,000 entries, 1 MiB text, depth 256 | Exercise malformed option-graph cases |
84
+ | Generated file | 512 KiB conservative bound | Test emission refusal |
85
+ | Native algorithms | Existing work/node counters | Compare optimization behavior and test exhaustion |
86
+
87
+ Text counters use UTF-16 units; byte counters use encoded bytes. Work units remain an internal diagnostic model, not milliseconds, CPU time, heap allocation or RSS. Historical measurements and default research-engine accounting are not rewritten. The extracted ownership implementation preserves those counters when profiling is explicitly selected.
88
+
89
+ Routine base64/JSON handling, copying, freezing, source bootstrap, codec emission and publication no longer assign artificial work prices. In particular, the node-soap bootstrap does not reserve `4 * sourceBytes²` or invented bootstrap node allocations. Profiling exhaustion stays sticky within a profiled test invocation; each independent invocation creates fresh state.
90
+
91
+ ### Alternatives and product decision
92
+
93
+ | Approach | Decision | Consequence |
94
+ | --- | --- | --- |
95
+ | Mandatory library quotas | Removed from normal direct execution | Valid work is not rejected by a test allowance |
96
+ | Explicit profiling limits | Retained in test/internal controls | Optimization and at/beyond-boundary evidence remain reproducible |
97
+ | Application-selected timeout/size controls | Honored when supplied | The host chooses its own operational policy |
98
+ | Worker/process or OS CPU/memory containment | Hosting-application option | Requires deployment and lifecycle decisions outside this library |
99
+
100
+ The library makes no hard heap, RSS, CPU-time or preemption guarantee. A large workload can exhaust process resources; the hosting application observes and handles that failure. Same-thread timers cannot interrupt synchronous JavaScript. Format, schema and authorization checks remain separate from resource profiling, including the existing restriction to the supported direct grammar and owned-loopback adapter.
101
+
102
+ ### Verification and observed improvement
103
+
104
+ The diagnostic probe in `test/helpers/directResourceProbe.ts` compares separately loaded builds against the same local server and 10,655-byte WSDL. The archived P3.7 build returned resource-limit with zero requests; the changed build returned soap-response with one request. This demonstrates removal of an artificial rejection, not a latency speedup: the old build never completed equivalent work.
105
+
106
+ Installed-consumer tests additionally generate and execute a client from a WSDL above 64 KiB with request and response values above 1 MiB using normal defaults. The same generated call explicitly given a 1 KiB application limit refuses before HTTP. Normal loading also follows an authorized seven-redirect chain and caller cancellation interrupts a deliberately stalled WSDL fetch without relying on a deadline. Existing request/response/fault, authority, optional/array, mutation/getter/proxy and cancellation controls remain. Tests of profiling limits now opt in explicitly; normal-mode tests assert that no work quota or counters are activated.
107
+
108
+ ## Implementation checkpoint
109
+
110
+ One integration owner implements the complete chain under #382, #155, #184 and #182. Inputs are an authentic operation, a newly issued successful structural match, or an authentic source-derived mapping plus fresh application data. Receipt identity, never digest or diagnostic JSON, supplies authority.
111
+
112
+ The complete native root plan determines every slot, including unobserved optional members. Scalar roots project to primitives; complex roots project to owned null-prototype records keyed by distinct source local names. Required singletons are required; optional singletons are omitted when absent; unbounded members always have dense ordered arrays, empty only when min=0. Empty sequences yield empty records.
113
+
114
+ String content is preserved; boolean maps to boolean; validated int32 maps exactly to number, normalizing negative zero to zero. Original lexical spellings, declaration/type identities, namespaces and source paths remain immutable evidence. The inverse accepts fresh values, reconstructs expanded names and source order with canonical scalar spellings, and reuses structural and shared scalar validation. It produces lexical data, not XML bytes.
115
+
116
+ Data inputs are plain records and dense arrays without proxies or accessors. Unknown keys, symbols, nonenumerable fields, inherited/custom prototypes, boxed/callable values, sparse/extra-property arrays, missing required members and wrong scalar types are refused without coercion, getters or caller mutation. Ordinary Object.prototype and null prototypes are accepted for fresh records.
117
+
118
+ The original inclusive sticky request budget covers controlled inspections, planning, values, text, keys, construction, revalidation and publication, subject to the intrinsic enumeration limitation below. Cancellation is cooperative; failures issue no partial receipt. No new runtime budget lifetime is introduced. Success still has admitted:false; transport, persistence, generation and public activation remain deferred. The internal byte codec below extends the value boundary only.
119
+
120
+ ## Laws and rule basis
121
+
122
+ For admitted data-only fresh application values, project(validate(expand(v))) equals normalizeApplication(v). Expansion of a projected validated payload preserves expanded names, declaration order, occurrence counts and typed values modulo canonical scalar spelling. Normalization is deterministic, idempotent and non-mutating; it changes only record key order/prototype ownership and numeric negative zero, never repairs invalid shapes.
123
+
124
+ These are the original in-memory structure/value laws. The byte codec below extends them across its qualified XML boundary. Scalar rules come from the dated [XSD Datatypes recommendation](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/): string 3.2.1, boolean 3.2.2, int 3.3.17, integer 3.3.13 and whiteSpace 4.3.6; XML character validity follows XML 1.0 Char. Neutral datatype calculations are shared with schema assessment; payload diagnostics and issuance are separate.
125
+
126
+ ## APIs and failures
127
+
128
+ `createDirectValueMapping(contract, direction, options?)` returns an issued `direct-mapping`, independent of any payload. `assessDirectScalars(contract, match, options?)` authenticates the final `structural-match`, validates every duty, projects the application value and returns an issued `direct-value` with `mapping`, `structural`, `operands`, `value` and usage. `expandDirectValue(contract, mapping, freshValue, options?)` returns an issued `direct-expanded` with generated `payload` lexical data and its revalidated `validated` value receipt.
129
+
130
+ The identity-only inspectors are `inspectDirectStructuralMatch`, `inspectDirectValueMapping`, `inspectDirectValue` and `inspectDirectExpandedValue`; every inspector takes the receipt then the expected original operation contract. Inspectors do not perform operational work or grant a fresh budget. Each operational API checks cancellation and remaining resources again. Copies, JSON, context IDs and equal digests supply no authority.
131
+
132
+ Payload lexical failures return `scalar-invalid` with schema and numeric payload paths. Application shape/type failures return `value-invalid`; native unavailability returns `unsupported`; interruption returns `cancelled` or sticky `resource-limit`. No failure publishes values, operands, mappings or partially reconstructed payloads. Malformed receipt authority throws `TypeError`; genuine internal errors propagate rather than becoming invalid caller data.
133
+
134
+ ## Accepted resource model
135
+
136
+ This section records the historical P3.3 accounting contract. The current direct-client resource policy above supersedes its procedural pricing requirements while retaining data/shape validation and the intrinsic-enumeration limitation.
137
+
138
+ The user explicitly accepted the following scoped resource qualification for P3.3 on October 26, 2026, recorded in [#382](https://github.com/TechSpokes/typescript-wsdl-client/issues/382#issuecomment-6424153066): JavaScript `Reflect.ownKeys` constructs an intrinsic temporary key vector before its length can be known. Rejecting every symbol/nonenumerable extra field on an arbitrary plain data object requires this bulk intrinsic; a prior guessed cap cannot bound the allocation. The inverse precharges the maximum valid vector before the intrinsic: the source slot count for records, or length plus one for dense arrays. It immediately refuses any excess count before per-key traversal. This reserves every valid key vector before construction, but a malformed object can still cause the engine to allocate a larger temporary vector before control returns.
139
+
140
+ All controlled traversal, scalar work, retained copies, construction and publication use the original budget. This model does not establish a hard heap bound or preemption of intrinsic enumeration. Exact all-allocation precharging for arbitrary malformed application objects is not established and is outside the accepted model. The scope decision preserves all value/shape checks and the original budget; it does not introduce a V8 memory ceiling or permit successful output on exhaustion. No default budgets or test deadlines were raised.
141
+
142
+ ## Runnable three-direction example
143
+
144
+ From the repository root run `node --import tsx --input-type=module-typescript` and supply this program on standard input. The existing ordered parser is used only as a test adapter; this example does not qualify a secure SOAP codec.
145
+
146
+ ```typescript
147
+ import path from 'node:path';
148
+ import {readFile} from 'node:fs/promises';
149
+ import {pathToFileURL} from 'node:url';
150
+ import {selectDirectOperation} from './src/compiler/directOperation.ts';
151
+ import {matchDirectOperation} from './src/compiler/directStructure.ts';
152
+ import {assessDirectScalars, createDirectValueMapping, expandDirectValue} from './src/compiler/directValues.ts';
153
+ import {parseOrderedSyntax, syntaxElements} from './src/loader/orderedSyntax.ts';
154
+
155
+ const directory = path.resolve('test/conformance/fixtures/assessment');
156
+ const namespace = 'urn:checked:forecast';
157
+ const selected = await selectDirectOperation(path.join(directory, 'forecast.wsdl'), {
158
+ portType: {namespace, local: 'ForecastPortType'},
159
+ binding: {namespace, local: 'ForecastBinding'}, operation: 'GetForecast',
160
+ }, {loading: {policy: {fileRoots: [directory]}}});
161
+ if (selected.kind !== 'selected') throw new Error(selected.kind);
162
+ const cases = [
163
+ ['request', {kind: 'input'}, {city: 'Paris', days: 2}],
164
+ ['response', {kind: 'output'}, {city: 'Paris', temperature: [18, -2], complete: true}],
165
+ ['fault', {kind: 'fault', name: 'ForecastError'}, {code: 'NOT_FOUND', message: 'Unknown city'}],
166
+ ] as const;
167
+ for (const [file, direction, fresh] of cases) {
168
+ const uri = path.join(directory, 'forecast-messages', file + '.xml');
169
+ const envelope = parseOrderedSyntax(await readFile(uri), pathToFileURL(uri).href).root;
170
+ let payload = syntaxElements(syntaxElements(envelope)[0]!)[0]!;
171
+ if (file === 'fault') payload = syntaxElements(syntaxElements(payload).find(n => n.name.local === 'detail')!)[0]!;
172
+ const match = matchDirectOperation(selected.contract, direction, payload);
173
+ if (match.kind !== 'structural-match') throw new Error(match.kind);
174
+ const value = assessDirectScalars(selected.contract, match);
175
+ const mapping = createDirectValueMapping(selected.contract, direction);
176
+ if (value.kind !== 'direct-value' || mapping.kind !== 'direct-mapping') throw new Error('validation failed');
177
+ const inverse = expandDirectValue(selected.contract, mapping, fresh);
178
+ if (inverse.kind !== 'direct-expanded') throw new Error(inverse.kind);
179
+ console.log(file, value.value, inverse.validated.value);
180
+ }
181
+ ```
182
+
183
+ ## Internal bare-root XML codec
184
+
185
+ P3.4 under [#384](https://github.com/TechSpokes/typescript-wsdl-client/issues/384) implements the minimal in-memory consumer for #185/#186/#187/#188/#189. Its metadata is the original authentic operation and source-owned mapping with version `direct-values-v1`; no additional bundle or fingerprint authority is introduced. The broader owners retain their full-profile acceptance criteria.
186
+
187
+ `encodeDirectXml(contract, mapping, freshValue, options?)` calls `expandDirectValue` before emitting deterministic UTF-8 bytes. It returns `direct-encoded` with caller-owned mutable `bytes`, the authentic `expanded` receipt, encoding and usage. The byte array is data, never authority; changing it cannot change the validated expansion or authenticate another payload.
188
+
189
+ `decodeDirectXml(contract, mapping, bytes, options?)` accepts a non-shared `Uint8Array` or Buffer, copies its native byte slots without length/buffer/iterator getters, parses ordered observed syntax, then calls `matchDirectOperation` and `assessDirectScalars`. It returns `direct-decoded` with immutable observed `payload`, authentic `validated` receipt and usage. Both APIs are internal exports from [directCodec.ts](../src/compiler/directCodec.ts), absent from the package public API.
190
+
191
+ Identity checks precede property/version interpretation. Foreign/copied/JSON/wrong-version handles throw TypeError; genuine future incompatible metadata returns unsupported. Direction and exact root come from the mapping, with no guessed catalog upgrade or source reload. SOAP 1.1 document/literal binding/action remain source metadata and authorize no I/O.
192
+
193
+ ### Supported values and joint laws
194
+
195
+ The codec covers the entire currently admitted direct grammar: string/int/boolean scalar roots and named element-only flat distinct scalar sequences, including empty sequences and every admitted optional/required singleton/unbounded pair. It preserves optional omission versus present empty strings and always-present dense repeated arrays. It emits schema order, independent of application key order, without synthetic application containers.
196
+
197
+ For valid fresh data, `decode(encode(v)).validated.value = normalizeApplication(v)`. For admissible XML, re-encoding the decoded value preserves expanded names, declaration order, occurrence counts and exact typed values modulo canonical scalar spelling. It preserves string content; boolean emits true/false, int32 emits exact decimal with numeric negative zero becoming zero. This is not original lexical-byte identity or a signed-byte round trip.
198
+
199
+ Prefixes are allocated by first source-order use of expanded namespaces, then bound at each use. The encoder never emits a default namespace, so unqualified children stay unqualified without inheriting an ambient default. Text escapes ampersand/angle brackets, preserves Unicode and encodes CR as `
`; namespace attributes additionally escape quotes/tab/newline. The delivered shared scalar core checks XML characters and scalar validity before successful encoding.
200
+
201
+ ### Secure byte boundary and provenance
202
+
203
+ The codec reuses [orderedSyntax.ts](../src/loader/orderedSyntax.ts) with namespace-aware `saxes` 6.0.0, strict fatal decoding and XML 1.0-only mode. Saxes is an in-memory tokenizer with no resolver or external I/O; DTD declarations are refused, predefined/numeric references are processed, and unknown/general/external entities fail. Schema locations, namespace URIs and xml:base are never fetched; unsupported application attributes, nil and xsi:type fail through the existing matcher.
204
+
205
+ UTF-8 with optional BOM and BOM-qualified UTF-16LE/BE are supported. XML declaration encoding must agree with the bytes; unsupported encodings, doubled BOMs, isolated surrogates, malformed Unicode, namespace errors, multiple roots and truncated syntax fail without repair. XML 1.1 is unsupported. BOM-less UTF-16 is refused. EOF completion precedes any successful decoded result.
206
+
207
+ Observed syntax retains the digest of the exact incoming bytes, caller-supplied absolute `options.uri` (default `urn:typescript-wsdl-client:observed-direct-xml`), namespace contexts, lexical text and numeric source paths. Positions remain one-based lines/columns and zero-based UTF-16 offsets in BOM-decoded text, as in the syntax owner; these are decoded-text positions, not byte offsets. Generated expansions retain their explicit generated URN/empty digest/zero positions and are never relabeled as observed input.
208
+
209
+ Malformed XML returns `xml-invalid`; unsupported syntax/semantics returns `unsupported`; valid XML with wrong structure returns `mismatch`; shared-core lexical failures return `scalar-invalid`; fresh shape/type errors return `value-invalid`. Cancellation and resource limits remain separate terminal failures, with no bytes or validated payload on failure. Diagnostics contain safe fixed rules and source coordinates rather than raw payload text; native internal errors propagate.
210
+
211
+ ### Resources and cancellation
212
+
213
+ `options.limits` may set positive safe-integer `maxBytes`, `maxDepth`, `maxNodes` and `maxText`. The initial internal codec profile defaults to 1 MiB bytes, depth 256, 100,000 emitted/retained syntax nodes and 1 MiB aggregate element text in UTF-16 units; it deliberately does not claim the broader ADR buffered transport profile. Limits are inclusive and apply per invocation; raising them never raises or resets the original request budget.
214
+
215
+ The inclusive sticky operation budget still covers selection, mapping, inverse, parser/encoder traversal, native byte copies, hash/decoder/SAX token buffers, line indexes, inherited namespace/path copies, scalar checks and publication. Bytes are capped and bulk work reserved before copying/decoding/tokenization, including ignored comments, processing instructions and forbidden DTD tokens. Namespace/path copies, relative xml:base URL resolution and retained nodes/text are charged before construction. The engine-intrinsic exclusion for malformed arbitrary application key vectors remains exactly as accepted above.
216
+
217
+ A configured syntax cap fails that invocation; work already spent remains spent. Exhaustion of the original operation work/node budget is sticky across both codec APIs and all earlier APIs. No V8 heap ceiling or instantaneous preemption is promised. Cancellation is cooperative at entry, parser chunks of at most 1024 decoded UTF-16 units, node/text visits and before publication; the bounded decoder/hash intrinsics complete before the next checkpoint.
218
+
219
+ Encoder node/text accounting includes generated empty text nodes; the parser counts retained text events, so empty XML elements may consume fewer nodes. Both stages honor their declared inclusive caps; neither metric is a wire-byte equivalence claim. A production reusable client's per-call budget lifetime remains a later explicit decision, not a permanent-client counter or new session framework.
220
+
221
+ ### Runnable codec example
222
+
223
+ After selecting an authentic operation with the earlier example, use its contract and mapping directly:
224
+
225
+ ```typescript
226
+ import {encodeDirectXml, decodeDirectXml} from './src/compiler/directCodec.ts';
227
+ import {createDirectValueMapping} from './src/compiler/directValues.ts';
228
+ import type {DirectOperationContract} from './src/compiler/directOperation.ts';
229
+ declare const contract: DirectOperationContract;
230
+ const mapping = createDirectValueMapping(contract, {kind: 'input'});
231
+ if (mapping.kind !== 'direct-mapping') throw new Error(mapping.kind);
232
+ const encoded = encodeDirectXml(contract, mapping, {city: 'Paris', days: 2});
233
+ if (encoded.kind !== 'direct-encoded') throw new Error(encoded.kind);
234
+ const decoded = decodeDirectXml(contract, mapping, encoded.bytes);
235
+ if (decoded.kind !== 'direct-decoded') throw new Error(decoded.kind);
236
+ console.log(decoded.validated.value);
237
+ ```
238
+
239
+ ### Qualification and remaining boundary
240
+
241
+ [Codec controls](../test/unit/direct-codec.test.ts) run the actual Forecast request/response/ForecastError fixture payload bytes against independent expectations, fresh-byte laws, renamed/form/prefix sources, scalar/empty roots, all counts, reserved names, Unicode/CR/escaping, encoding/security failures, authenticity, cancellation and inclusive limits. [Nonauthor controls](../test/unit/direct-codec-independent.test.ts) independently exercise BOM/URN repairs, native byte access, chunk boundaries and observed provenance. These are bare-root tests; their test-only SOAP extraction is not a production envelope parser.
242
+
243
+ Exact P3.4 review, local/hosted checks and merged-main identities belong to #384 and [roadmap #379](https://github.com/TechSpokes/typescript-wsdl-client/issues/379). The separately scoped P3.5 adapter under #388 now consumes this codec for an internal buffered SOAP 1.1 unauthenticated loopback exchange; its [transport contract and qualifications](content-model-soap-feasibility.md#p35-original-byte-qualification) cover source-byte bootstrap, original response bytes, envelopes, declared Faults and request lifetime. Broad portable bundles, public structured generation, security combinations and activation remain separate work.
244
+
245
+ The internal decoder accepts a protocol payload selector over the single parsed observed document. Its selected mapping is authenticated against the same operation, and the payload must be an actual descendant by object identity. It reuses structural/scalar checks without subtree reserialization, preserving the complete original document digest, actual coordinates and inherited namespace bindings on the selected response or fault detail. A synthetic tree cannot acquire observed provenance through this seam.
246
+
247
+ ## P3.6 internal portable source capsule
248
+
249
+ [The private capsule module](../src/compiler/directSourceCapsule.ts) consumes authentic operations and existing native mappings. It adds no package export, public CLI, generated client or admission; package 1.1.4 and legacy defaults remain unchanged. This narrow capsule is not the full ADR bundle format or completion of #185/#186.
250
+
251
+ ### Source authority and reconstruction
252
+
253
+ An installed consumer must separately authorize a new physical local WSDL copy. `reconstructDirectSourceCapsule(bytes, localSource, {policy, limits?, signal?})` reads that file through the existing resource loader, checks its exact bytes against the capsule, then runs whole-source native qualification, explicit operation selection, the shared SOAP bootstrap guard and fresh native mapping issuance. The reader does not write the source file or choose a filesystem location.
254
+
255
+ The original checkout URI is never retained, authorized or fetched. File-root and symlink policy remain enforced; resource graphs and network sources are refused. An artifact digest detects corruption and never supplies permission, source authority or signature verification.
256
+
257
+ `readDirectSourceCapsule(bytes, budget, signal?)` reads bounded data without I/O. Its result is not a contract or a reconstructible handle. Serialized operation/mapping/report objects and copied reconstruction results cannot acquire WeakMap authority.
258
+
259
+ `createDirectSourceCapsule(contract, {service, port}, signal?)` writes deterministic UTF-8 JSON bytes from a native operation. Its sole source payload is canonical base64 of the exact retained UTF-8 WSDL bytes, including any original BOM; it does not reconstruct WSDL from declarations.
260
+
261
+ ### Format and comparison
262
+
263
+ The closed format records its capsule/model/scope versions, native mapping and scalar policy versions, and the owned-loopback HTTP runtime policy. Compatibility records the explicit expanded portType/binding, operation, service, port and action, plus request/response/declared-fault message parts, expanded root/type names and native ordered slots with exact bounds and builtins. No executable plan, source path, context identifier, endpoint permission or runtime handle is persisted.
264
+
265
+ `checkDirectSourceCompatibility(expected, contract, selection, signal?)` requires an identity-issued reconstruction as `expected`, so its embedded source and claimed contract have already been checked together. The actual contract must also be a fresh native operation; raw artifact bytes or JSON copies are refused. A comparison checks complete native-derived descriptors and distinguishes `exact-bytes` from `revised-bytes` without calling either authenticated trust.
266
+
267
+ Authorized retrieval relocation, harmless QName prefix changes and source formatting can preserve the checked contract. Changed action, service/port/binding/operation identity, expanded roots/faults/members, order, occurrence bounds or scalar meaning require regeneration. Unknown/mixed/legacy formats and unsupported version or policy identifiers fail closed with regeneration guidance.
268
+
269
+ The reader accepts at most 256 KiB of artifact bytes, 64 KiB of source and JSON nesting depth 16. It rejects malformed UTF-8/JSON, duplicate escaped keys, missing/unknown fields, noncanonical base64, corruption, shared byte backing and unsupported versions before semantic preparation. A recomputed checksum cannot rescue a false source-derived descriptor: reconstruction compares it against the newly qualified source before publishing handles.
270
+
271
+ ### Request resources and installed evidence
272
+
273
+ Reconstruction starts one fresh request-specific inclusive sticky budget for artifact decoding, duplicate/shape checks, canonical copies/hashes, physical source reading, preliminary syntax, native load/qualification, mappings and publication. Comparison spends the actual operation's existing budget; reading an already reconstructed expected descriptor does not revive or dispatch its operation. Each future independent invocation starts a new budget; there is no reusable-client lifetime counter.
274
+
275
+ Byte/depth/node limits, cancellation, schema inconclusive, incompatible artifacts, unsupported scope and missing authority remain separate failures. These are engineering work/allocation reservations with cooperative checkpoints, not a hard heap limit or preemptive execution guarantee.
276
+
277
+ [Installed qualification](../test/integration/portable-installed.test.ts) packs and installs the npm tarball in a separate temporary directory and process. The copied test-only TypeScript harness verifies physical private `dist` imports, denies checkout filesystem reads with Node permissions, blocks implicit fetches, requalifies an authorized copy, relocates it and issues fresh mappings and deterministic XML. Private-module testing establishes no supported package subpath; package exports remain root-only.
278
+
279
+ ### Next consumer boundary
280
+
281
+ The P3.6 handoff to P3.7 under #195/#201 is implemented by the internal consumer below. It preserves explicit service/port/endpoint authorization and fresh per-invocation budgets. Public exports/CLI, general generated-client design, broader grammar/security and activation require later decisions.
282
+
283
+ ## P3.7 internal generated TypeScript consumer
284
+
285
+ [The native-plan generator](../src/client/generateDirectClient.ts) accepts an identity-issued reconstructed source, authenticates compatibility and each mapping, and emits one deterministic strict NodeNext TypeScript file plus its exact capsule. It uses the shared preamble composer with a dedicated internal-artifact preamble. There is no public command or package export for this generator.
286
+
287
+ ### Typed internal binding
288
+
289
+ The generated file has no imports. `createClient(runtime)` receives a trusted internal binding with one `execute` method; the generated operation has the exact source operation spelling as a computed quoted key. [The binding owner](../src/client/directClientRuntime.ts) delegates exclusively to the existing capsule, mapping and buffered SOAP owners. The test harness loads this binding by verified physical installed private-module path; that mechanism is not a supported package subpath or plugin interface.
290
+
291
+ The generated capsule literal pins the static contract. Each invocation requires matching loaded capsule bytes, an explicitly authorized physical local source and file roots, and explicit SOAP service, port, endpoint and endpoint authorization. The binding copies options before asynchronous work, refuses accessors/proxies and unsupported options, creates one fresh budget, reconstructs native authority from the authorized file, checks native compatibility and calls `exchangeDirectSoap`. No handle, endpoint permission, budget or source authorization is cached between independent calls.
292
+
293
+ Exact capsule pinning intentionally rejects mixed generated files and capsules, even where a different source might have a compatible semantic shape. Regenerate the matched internal file and capsule after source-byte changes; an authorized relocation of identical bytes remains valid. Capsule reading and checksums confer no permission. Failure results retain native categories and never contain a typed usable value.
294
+
295
+ ### Static shapes and naming
296
+
297
+ `Request`, `Response` and indexed `Fault_0` declarations are direction-specific roles, not prettified schema names. Equal local names in different namespaces cannot merge these declarations; the capsule retains all expanded native identities. Source keys and operation spellings are JSON-quoted, and operation keys are computed to avoid prototype setters. The generated fault union retains exact declared fault names and value shapes, including scalar and empty roots.
298
+
299
+ Optional singletons are omittable; zero-or-more slots are required readonly arrays; one-or-more slots are readonly nonempty tuples. Empty sequences use `Readonly<Record<string, never>>`. String, Boolean and int32 map to `string`, `boolean` and `number`; native validation enforces int32 range, exact keys, dense arrays, scalar semantics and occurrence rules that TypeScript alone cannot express. Consumers can enable `exactOptionalPropertyTypes` to reject explicit undefined statically; the runtime always enforces omission semantics.
300
+
301
+ The inherited node-soap bootstrap refuses `__proto__`, `constructor`, `toString`, other `Object.prototype` names and `prototype` anywhere in source declaration names. These fail before generation and dispatch; this packet does not weaken that boundary or claim arbitrary XML-name execution. Accepted reserved JavaScript words and hyphenated XML names are emitted safely. Broader dependency-name support requires a separately reviewed transport-owner change.
302
+
303
+ ### Accounting and qualification
304
+
305
+ Emission bounds variable source contributions against a 512 KiB output ceiling before building source strings. `writeDirectClient` authenticates the bounded artifact and refuses an already failed semantic request; procedural emission and writes have no synthetic allocation price. Generated code contains no source path, checkout dependency or private package import.
306
+
307
+ Native semantic accounting spans qualification and validation without resetting; routine byte copying, base64 comparison, serialization and publication use actual input/output caps. Separate calls get separate budgets; exhausted calls return no partial usable value. Normal calls no longer inherit the old source/capsule/XML test caps or semantic work allowance; cooperative cancellation and any explicit application-selected limits remain available. This is engineering accounting, not a hard heap or preemption guarantee; malformed own-key vector allocation has the same intrinsic qualification as the existing adapter.
308
+
309
+ [Installed tests](../test/integration/generated-direct-installed.test.ts) generate bounded files for Forecast, renamed and prefix-aliased sources, optional/nonempty-array shapes, scalar and empty roots. They install the actual npm tarball in another directory, compile independently authored valid/invalid TypeScript and execute the emitted wrappers in a child with checkout reads denied. The harness permits only its consumer directory for file reads/writes and verifies real SOAP request namespace/order/scalars, response arrays and HTTP 200/500 declared faults, relocation, stale/mixed inputs, missing permissions, unsupported capabilities, cancellation and exhaustion. Node 24's permission model does not restrict sockets; endpoint restriction remains the native owned-loopback policy. Node versions exposing network permissions additionally receive the explicit loopback grant.
310
+
311
+ [Independent controls](../test/unit/generated-direct-independent.test.ts) challenge getters/proxies, mutable option metadata, copied authority, sticky exhausted generation and preserved dependency-name refusals. Hosted Linux and Windows Node24/26 run the generated installed qualification explicitly. Public-interface readiness and any remaining blockers belong to a separate P3.8 task; public activation, legacy defaults, package 1.1.4, root-only exports and `admitted:false` remain unchanged.
@@ -106,6 +106,10 @@ See ESLint's [ignore documentation](https://eslint.org/docs/latest/use/configure
106
106
 
107
107
  ## Client Construction
108
108
 
109
+ Generated clients import `createClientAsync` from `soap` at runtime and use type-only imports for `Client`,
110
+ `IOptions`, and `ISecurity`. Imports are aliased when a generated client class uses the same name.
111
+ Type-only imports are erased from JavaScript; install `soap` as a runtime dependency for the client factory.
112
+
109
113
  ```typescript
110
114
  import soap from "soap";
111
115
  import { Weather } from "./src/services/weather/client.js";
@@ -0,0 +1,243 @@
1
+ # Reference Validation
2
+
3
+ Internal evidence contracts for the Node tooling migration. See the root [README](../README.md).
4
+
5
+ ## Status
6
+
7
+ [Epic #239](https://github.com/TechSpokes/typescript-wsdl-client/issues/239) replaces operational Python with strict TypeScript without changing production semantics.
8
+ The [migration map](../test/conformance/reference/migration-map.json) pins every Python method, assertion block and parameterized family at the refreshed main revision.
9
+ All 53 mapped methods and 13 SOAP consumers have executable replacements. Gate S passed through the maintainer's [NT-CONT-01 acceptance](https://github.com/TechSpokes/typescript-wsdl-client/issues/239#issuecomment-6098237195); final platform evidence is recorded in the delivery ledger.
10
+
11
+ ## Evidence policy
12
+
13
+ Pure contract assertions, current engine observations and historical observations are separate evidence kinds.
14
+ Expected answers come from independently authored literal tables or reviewed source contracts, never production semantic helpers.
15
+ An engine disagreement records a new versioned observation without changing the selected project interpretation.
16
+
17
+ Schema construction must execute independently of instance validation.
18
+ Typed augmentation must expose the value, datatype, original lexical witness and namespace/source provenance where the obligation requires them.
19
+ An adjusted small-bound fixture cannot qualify the original huge-bound schema.
20
+
21
+ ## Internal result contract
22
+
23
+ Each result has `phase` (`setup`, `input`, `schema`, or `instance`) and `outcome` (`accepted`, `rejected`, `unsupported-capability`, or `resource-limit`).
24
+ Setup and input failures have explicit diagnostics and cannot count as schema rejection.
25
+ A rejected schema produces no instance results. Unavailable capabilities and exhausted resources never imply invalidity.
26
+
27
+ Reports identify the wrapper package and version, engine version, artifact/build provenance, platform and Node version.
28
+ Reports include the tested Git revision/tree, dirty-tree status and exact input SHA-256 hashes.
29
+ Historical records retain their original engine and source identity and are never counted as fresh checks.
30
+
31
+ ## Input and resource boundary
32
+
33
+ Fixtures use stable local URIs and an explicit registered input set.
34
+ Unknown resources, network resolution, DTDs, path escapes and malformed XML fail as input errors.
35
+ Extracted schemas and SOAP payloads retain inherited namespace bindings, including prefixes used only in QName-valued attributes.
36
+
37
+ WASM objects must be disposed in `finally` blocks; blocking validation needs worker isolation for enforceable elapsed-time limits.
38
+ Node/work limits are charged before copies or allocation and return no partial success.
39
+ AU01 and RE01 retain the 100,000-node and 1,000,000-work defaults; failed finite witness searches leave RE01 unresolved.
40
+
41
+ ## Migration inventory
42
+
43
+ The map pins all 14 legacy Python files, 53 method blocks and their loop/subcase families with hashes and source links.
44
+ It also maps baseline manifest rows and instances, mixed-file pure versus external ownership, SOAP consumers, setup, documentation and manifest discovery.
45
+ Follow each method's pinned source link for every literal input and module-level expectation table; total test counts are only a cross-check.
46
+ The [historical source snapshot](../test/conformance/reference/legacy-source-snapshot.json) preserves all complete source bytes and module-level tables as non-executable data. Its hashes verify coverage offline after deletion, including shallow checkouts.
47
+
48
+ Inventory verification uses Node; Python must not run to generate migration scripts or expected answers.
49
+ Both required and full launchers verify actual execution of all 53 mapped TypeScript methods. They preserve the 6-schema/15-instance required subset and 14-schema/40-instance full selection, and reject empty or missing discovery.
50
+
51
+ ## Draft #231 handoff
52
+
53
+ Draft [PR #231](https://github.com/TechSpokes/typescript-wsdl-client/pull/231) remains untouched at `460f5b8379c68ffef79917284e445b5ab046429e`.
54
+ Its additional Python reference test belongs to #179's later rebase and must be ported to strict TypeScript through the accepted reference contract.
55
+ The migration guard rejects that file and every removed executable source; no legacy allowance remains.
56
+
57
+ ## Verification commands
58
+
59
+ ```bash
60
+ npm ci
61
+ npm run docs:validate
62
+ ```
63
+
64
+ Run each executable port's focused Vitest command and scoped TypeScript project from the migration map.
65
+ Gate P qualifies one live engine within its limits; Gate S accepts the narrower scoped evidence policy below. Linux/Windows Node 24/26 qualification proves interpreter absence or execution denial during normal installation and execution.
66
+
67
+ ## Executable ports
68
+
69
+ Pure AU01/RE01 research and all structural, AU/RE, PW/DT reference suites execute through Node. SOAP consumers validate the actual captured wire bytes with separately named primary and selected-contract results. The S06 manifest reconciles every original artifact with its current path/hash and retains original inventory provenance.
70
+
71
+ ```bash
72
+ npm ci
73
+ npm run check:toolchain
74
+ npm run typecheck:tooling
75
+ npm run typecheck:research
76
+ npx tsc -p test/conformance/reference/tsconfig.json
77
+ npm run test:research:ports
78
+ npm run test:reference:full
79
+ npm run research:re01:measure
80
+ ```
81
+
82
+ AU01 uses `test/research/s06-au01/probe.ts`; RE01 uses `test/research/re01/witness-probe.ts` and `measure.ts`.
83
+ Their readonly records retain original object identity and exact lexical values.
84
+ Work accounting uses UTF-16 code units, conservatively charging non-BMP input; legacy ASCII measurements retain their counts.
85
+ Fixture syntax identities use explicit sibling indexes, preserving source distinctions without requiring Python XPath spelling.
86
+
87
+ RE01 measurements reproduce work limits 29/28, huge-operand work 228, shared-DAG work 218 and node-boundary work 600007/600006.
88
+ The adversarial prefix exhausts 1,000,000 work units and returns no partial witness.
89
+ These results leave the unresolved soundness, completeness, termination and hypothetical source-identity questions in #232/#234 unchanged.
90
+
91
+ ## Validator gates
92
+
93
+ Gate P is qualified with explicit limits for the pinned test-only `libxml2-wasm@0.7.2` artifact.
94
+ Its wrapper source pins libxml2 2.15.1, separately identified from historical lxml's libxml2 2.14.6.
95
+ The [candidate report](../test/conformance/reference/qualification/observations.json) records artifact hashes, original inputs and actual Linux Node 24 results.
96
+
97
+ The measured primary corpus matches 14 baseline schema and 40 instance outcomes, 38 PW01 schema and 8 instance outcomes, and 113 additional literal instance observations.
98
+ Original huge-bound schemas remain unsupported by the primary adapter; adjusted analysis inputs are explicitly separate.
99
+ Worker elapsed limits and JavaScript heap limits are checked; JavaScript heap limits do not cap WASM linear memory or total process RSS.
100
+
101
+ Gate S passes through accepted NT-CONT-01.
102
+ The [decision packet](https://github.com/TechSpokes/typescript-wsdl-client/issues/239#issuecomment-6097034663) documents the exact 23 live xmlschema method families, secondary baseline instance and 13 SOAP calls at risk.
103
+ Published Xerces 2.0.2 fails schema-construction controls; TypeScript engine 1.7.3 accepts invalid-all construction and rounds exact bounds.
104
+ The required lane therefore has one live general-purpose XSD engine, independent selected-contract assertions, pinned historical external observations and explicit unqualified capabilities. These checks do not supply full second-engine validation or PSVI augmentation.
105
+
106
+ ```bash
107
+ npm install --prefix tmp/conformance/node-qualification --cache tmp/cache/npm libxml2-wasm@0.7.2 xerces-wasm@2.0.2 xml-xsd-engine@1.7.3
108
+ npx tsx test/conformance/reference/qualification/primary-checks.ts
109
+ npx tsx test/conformance/reference/qualification/probe.ts
110
+ npx tsx test/conformance/reference/qualification/record.ts
111
+ ```
112
+
113
+ These are bounded investigations, not a supported alternate required lane.
114
+ Failed candidates are installed only in the classified disposable directory; only the qualified primary package is a pinned development dependency.
115
+ The original candidate investigation used PATH denial and remains historical staging evidence. Final qualification uses physical interpreter inventory and absolute-path negative controls on Linux, and removes inventoried interpreter files and aliases from disposable Windows hosted runners.
116
+ The Windows audit records its installation roots, registry-discovered paths, canonical aliases and protected OS-data exclusions. Unreadable selected installation roots fail qualification; the audit does not claim that arbitrarily renamed executables across the entire host filesystem are absent.
117
+ Windows removal requires the explicit disposable-runner marker and GitHub-hosted runner identity; it is not a local development command. The removal plan records every inventoried file, symbolic-file alias and resolvable physical target before deletion. Failed canonical lookup is diagnostic information, not evidence of execution denial. Failed deletion prevents qualification. Original and new absolute paths, command names and alias reads must be unavailable before and after installation and execution, including original aliases absent from the later inventory. Missing registry-listed paths remain in the audit. A process that starts and exits unsuccessfully fails the absence check. The copied-Node control must execute successfully before removal and be unavailable afterward. Cleanup removes task-owned controls; deleted host interpreters are discarded with the runner VM.
118
+ `record.ts` accepts an optional installation-evidence JSON path; without it, regeneration makes no installation claim.
119
+
120
+ Platform enforcement also persists `<report>.progress.json` beside its main report. This bounded latest sample pins
121
+ the tested revision, enforcement source hash, initial/verification operation, stage and sampled directory counters/path.
122
+ Repeated directory samples are throttled; a path identifies the last sample and can differ from the active directory.
123
+
124
+ Stage boundaries distinguish registry queries, installation discovery, directory inventory, control copying, target
125
+ preparation and probes. Cleanup preserves the sample so a killed process remains diagnosable in the uploaded artifact.
126
+ The sample issues no qualification and changes no inventory scope, exclusion, removal or probe requirement.
127
+
128
+ The Windows job allows 45 minutes for the complete workload. In PR #353, the
129
+ [Node 26 run](https://github.com/TechSpokes/typescript-wsdl-client/actions/runs/39962575864/job/120444017485)
130
+ completed in 28m23, while the [Node 24 run](https://github.com/TechSpokes/typescript-wsdl-client/actions/runs/39962575864/job/120444016946)
131
+ spent 28m45 enforcing interpreter absence, passed strict checks, and reached the reference tests before the former 30-minute job deadline cancelled it.
132
+ This operational allowance provides runner headroom; inventory, negative controls, probe deadlines and qualification criteria remain unchanged.
133
+
134
+ New producer runs capture source/input/engine hashes at execution. Recorders reject stale output and write ignored `recorded-report.json` or `recorded-observations.json`; checked historical reports remain unchanged.
135
+
136
+ ## Real-world relevance investigation
137
+
138
+ The [pinned source inventory](../test/conformance/reference/qualification/relevance-sources.json) covers 196 distinct published XML documents from the official ONVIF repository, eBay's SDK and Travelport's C# tutorial.
139
+ The [compact observations](../test/conformance/reference/qualification/relevance-observations.json) identify every input hash, measured environment, code source hash and sampling limitation.
140
+ This is a purposive schema sample; it does not measure deployed API prevalence or inspect production payloads.
141
+
142
+ | Sample | Snapshot | Distinct files | Largest finite occurrence |
143
+ | --- | --- | --- | --- |
144
+ | ONVIF official tree | 2026-08-18 | 38 | 3 |
145
+ | eBay SDK WSDL 1379 | 2024-11-26 | 1 | 8 |
146
+ | Travelport tutorial | 2018-05-21 | 157 | 9999 |
147
+
148
+ No sampled declaration exceeded the primary occurrence guard of 2147483647 or contained a BCE/leap-second default or fixed value.
149
+ Dates, exact numeric scalar types, defaults, restrictions, unbounded particles and repeating compositors are present.
150
+ Instance calendar values remain unrestricted by this absence finding, and scalar precision is separate from occurrence counts.
151
+
152
+ The extension/attribute screen is incomplete: 935 of 1842 extension chains contain unresolved or ambiguous references.
153
+ Its zero candidate collisions cannot establish that conflicting attribute-use cases are absent or rare.
154
+ The eBay latest-host and current Travelport archive downloads returned HTTP 403, so neither historical sample is presented as the current release.
155
+
156
+ ### Observed limits
157
+
158
+ The 4.6 MB eBay WSDL exceeds the staged reference adapter's extraction and total-input budgets.
159
+ An explicit 8 MiB extraction/total-input experiment reached independent schema construction, which rejected two `maxOccur` attributes in the unmodified SDK artifact.
160
+ A separate large valid-schema control passes with an explicit budget and retains schema/instance separation; product and default adapter limits remain unchanged.
161
+
162
+ Travelport's historical Hotel/Common pair loads into 3562 internal graph nodes but serializes about 22.8 MB of syntax/provenance.
163
+ Charging that graph requires 19529525 work units; the internal faithful preparation exhausts both tested 1000000 and 16000000 budgets before schema assessment.
164
+ This motivates Node representation/accounting work before claiming large-schema faithful support; it is not an RE01 witness failure or evidence that Python is required.
165
+
166
+ The ONVIF probe stops at its unauthorized external import under the deliberately offline policy.
167
+ The eBay internal probe stops at a provenance guard, and public legacy compilation rejects its abstract request type.
168
+ These observations do not qualify those APIs and do not change existing generation guards.
169
+
170
+ The Node primary and scoped fixture grammar accept the existing ordered SOAP body and reject the reordered body. All 13 integration consumers now use the async Node helper and retain real transport, TLS, authentication and streaming coverage.
171
+ The recorded primary recheck also preserves 14/40 baseline, 38/8 PW01, 113 additional instance observations and 15 boundary controls after the extraction experiment was added.
172
+
173
+ ### Accepted approach
174
+
175
+ Proceed toward Python removal using the qualified Node primary and independently authored strict TypeScript contract checks.
176
+ Retain all original exact research domains, historical external observations, required selections and method families.
177
+ Document unavailable full-schema or typed-augmentation evidence explicitly; do not convert it into a passing validator result.
178
+
179
+ The maintainer accepted replacing the required second general-purpose live engine with this narrower evidence contract. Ordinary defaults, datatype precision and content order retain executable scoped assertions. The #232/#234 proof obligations and production guards remain unchanged.
180
+
181
+ ## Reviewed continuation
182
+
183
+ The [NT-CONT-01 contract](../test/conformance/reference/continuation-contract.json) prepares continuation from staged revision `a69f04442b4766f7e9068c61fafd94ce1d02577b`.
184
+ The user authorized an architectural review in place of the unavailable Task Analysis skill.
185
+ The maintainer accepted the contract and authorized delivery; it records every affected method's treatment and remaining unqualified capability.
186
+
187
+ ### Decision and effect
188
+
189
+ The legacy requirement runs two general-purpose XSD validators; no adequate second Node package has been qualified.
190
+ The required lane runs the qualified Node primary, independent TypeScript checks of selected contracts and pinned historical xmlschema observations. NT-CONT-01 accepts one live general-purpose engine, with fresh scoped assertions that never claim full second-engine validation.
191
+
192
+ All 23 affected methods, the secondary zero-bound baseline instance and all 13 SOAP consumers have assigned replacement scopes.
193
+ Ordinary defaults and typed fixed values must retain executable checks of exact value, datatype, original lexical/namespace/source provenance and source identity.
194
+ The original huge-bound schemas retain exact contract checks and an explicit unqualified full-schema status; adjusted copies cannot qualify them.
195
+
196
+ The public-schema research supports prioritizing this Node path but cannot establish that rare cases never occur.
197
+ Large input/provenance limits observed in eBay and Travelport require separate Node product work when support is needed.
198
+ Neither an uncommon declaration nor an existing budget limit establishes a Python requirement; reconsider Python when a reproducible required capability and a concrete replacement justify the tradeoff.
199
+
200
+ ### Execution order
201
+
202
+ | Issues | Work before the next stage |
203
+ | --- | --- |
204
+ | #240, #244, #246 | Offline source snapshot, exact occurrence guard, trustworthy new run provenance |
205
+ | #245, #247 | Accepted contract, evidence kinds and bounded shared interfaces |
206
+ | #248 through #251 | All mapped family checks, baseline selections and captured SOAP consumers |
207
+ | #252 | Atomic command cutover, Python/allowance deletion and manifest/document reconciliation |
208
+ | #253 | Verified Python absence/denial on Linux and Windows with Node 24 and 26 |
209
+
210
+ #247 owns common interfaces and reporting mechanics; family-specific contract checks belong to their existing suite owners.
211
+ It does not become a general XSD engine or reopen the RE01 proof.
212
+ Use the existing AU01/RE01/PW01/DT01 probes with independent literal expectations and preserve all exact domains and resource limits.
213
+
214
+ ### Review findings and completion checks
215
+
216
+ The contract assigns eight concrete findings to their existing issues, including Git-history dependence and occurrence spellings that bypass the guard.
217
+ The SOAP replacement stages in a separate helper; cutover removed the original executable validation function after replacement verification.
218
+ Both reference selections must retain every migrated method, enforce nonempty discovery and preserve 6/15 fast and 14/40 full baseline coverage.
219
+
220
+ The final guard removes its allowance reader and file together and runs in required CI commands.
221
+ Launcher tests, S06 TypeScript discovery, all 147 artifact entries, engine identities and documentation must match the actual cutover.
222
+ New qualification records must capture source/input hashes at execution and reject stale raw output rather than attaching current hashes to an earlier run.
223
+
224
+ All four platform/version lanes require normal `npm ci` and execution under verified interpreter absence or denial.
225
+ Enforcement must cover named and absolute interpreter paths with negative controls; removing `setup-python` or masking PATH alone is insufficient.
226
+ The [qualification workflow](../.github/workflows/node-reference.yml) runs the four lanes on the exact PR head. It pins npm 11.9.0 so normal install hooks execute, verifies controls before/after installation and checks, and uploads actual reports. The external delivery ledger records successful and unrun lanes without inferring results.
227
+
228
+ ## Reproduction of relevance investigation
229
+
230
+ Use the existing Node dependencies and proxy/CA configuration appropriate to the environment.
231
+ Downloads verify pinned Git blobs, use four workers and enforce 8 MiB per input and 64 MiB per download run.
232
+ Full descriptive outputs and downloaded public schemas stay in the classified, ignored research directory.
233
+ The two primary recheck commands use the disposable candidate installation documented under [Validator gates](#validator-gates).
234
+
235
+ ```bash
236
+ npx tsx test/conformance/reference/qualification/relevance.ts --download
237
+ npx tsx test/conformance/reference/qualification/relevance-probes.ts
238
+ npx tsx test/conformance/reference/qualification/primary-checks.ts
239
+ npx tsx test/conformance/reference/qualification/probe.ts
240
+ npx tsx test/conformance/reference/qualification/relevance-record.ts
241
+ npx tsc -p test/conformance/reference/tsconfig.json
242
+ npx vitest run test/conformance/reference/validate.test.ts
243
+ ```