@techspokes/typescript-wsdl-client 1.1.4 → 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.
- package/README.md +49 -1
- package/dist/app/generateApp.d.ts.map +1 -1
- package/dist/app/generateApp.js +8 -6
- package/dist/cli.js +49 -5
- package/dist/client/checkedDirectRuntime.d.ts +59 -0
- package/dist/client/checkedDirectRuntime.d.ts.map +1 -0
- package/dist/client/checkedDirectRuntime.js +23 -0
- package/dist/client/directClientRuntime.d.ts +49 -0
- package/dist/client/directClientRuntime.d.ts.map +1 -0
- package/dist/client/directClientRuntime.js +112 -0
- package/dist/client/directClientVersion.d.ts +4 -0
- package/dist/client/directClientVersion.d.ts.map +1 -0
- package/dist/client/directClientVersion.js +3 -0
- package/dist/client/generateDirectClient.d.ts +14 -0
- package/dist/client/generateDirectClient.d.ts.map +1 -0
- package/dist/client/generateDirectClient.js +136 -0
- package/dist/compiler/buildCanonicalGraph.d.ts +7 -0
- package/dist/compiler/buildCanonicalGraph.d.ts.map +1 -0
- package/dist/compiler/buildCanonicalGraph.js +381 -0
- package/dist/compiler/canonicalGraph.d.ts +198 -0
- package/dist/compiler/canonicalGraph.d.ts.map +1 -0
- package/dist/compiler/canonicalGraph.js +37 -0
- package/dist/compiler/catalogErrors.d.ts +18 -0
- package/dist/compiler/catalogErrors.d.ts.map +1 -0
- package/dist/compiler/catalogErrors.js +86 -0
- package/dist/compiler/catalogProvenance.d.ts +15 -0
- package/dist/compiler/catalogProvenance.d.ts.map +1 -0
- package/dist/compiler/catalogProvenance.js +229 -0
- package/dist/compiler/checkedAssessment.d.ts +91 -0
- package/dist/compiler/checkedAssessment.d.ts.map +1 -0
- package/dist/compiler/checkedAssessment.js +300 -0
- package/dist/compiler/checkedSourcePreparation.d.ts +35 -0
- package/dist/compiler/checkedSourcePreparation.d.ts.map +1 -0
- package/dist/compiler/checkedSourcePreparation.js +131 -0
- package/dist/compiler/complexTypeContent.d.ts +59 -0
- package/dist/compiler/complexTypeContent.d.ts.map +1 -0
- package/dist/compiler/complexTypeContent.js +558 -0
- package/dist/compiler/composeCanonicalGraph.d.ts +69 -0
- package/dist/compiler/composeCanonicalGraph.d.ts.map +1 -0
- package/dist/compiler/composeCanonicalGraph.js +252 -0
- package/dist/compiler/dataOwnership.d.ts +22 -0
- package/dist/compiler/dataOwnership.d.ts.map +1 -0
- package/dist/compiler/dataOwnership.js +157 -0
- package/dist/compiler/datatypeValues.d.ts +47 -0
- package/dist/compiler/datatypeValues.d.ts.map +1 -0
- package/dist/compiler/datatypeValues.js +275 -0
- package/dist/compiler/directCodec.d.ts +59 -0
- package/dist/compiler/directCodec.d.ts.map +1 -0
- package/dist/compiler/directCodec.js +192 -0
- package/dist/compiler/directExecutionPolicy.d.ts +10 -0
- package/dist/compiler/directExecutionPolicy.d.ts.map +1 -0
- package/dist/compiler/directExecutionPolicy.js +17 -0
- package/dist/compiler/directOperation.d.ts +72 -0
- package/dist/compiler/directOperation.d.ts.map +1 -0
- package/dist/compiler/directOperation.js +282 -0
- package/dist/compiler/directSoap.d.ts +42 -0
- package/dist/compiler/directSoap.d.ts.map +1 -0
- package/dist/compiler/directSoap.js +298 -0
- package/dist/compiler/directSoapSource.d.ts +15 -0
- package/dist/compiler/directSoapSource.d.ts.map +1 -0
- package/dist/compiler/directSoapSource.js +86 -0
- package/dist/compiler/directSourceCapsule.d.ts +97 -0
- package/dist/compiler/directSourceCapsule.d.ts.map +1 -0
- package/dist/compiler/directSourceCapsule.js +305 -0
- package/dist/compiler/directStructure.d.ts +51 -0
- package/dist/compiler/directStructure.d.ts.map +1 -0
- package/dist/compiler/directStructure.js +252 -0
- package/dist/compiler/directStructurePlan.d.ts +16 -0
- package/dist/compiler/directStructurePlan.d.ts.map +1 -0
- package/dist/compiler/directStructurePlan.js +58 -0
- package/dist/compiler/directValues.d.ts +69 -0
- package/dist/compiler/directValues.d.ts.map +1 -0
- package/dist/compiler/directValues.js +282 -0
- package/dist/compiler/finiteRe01Verification.d.ts +140 -0
- package/dist/compiler/finiteRe01Verification.d.ts.map +1 -0
- package/dist/compiler/finiteRe01Verification.js +830 -0
- package/dist/compiler/graphTraversal.d.ts +11 -0
- package/dist/compiler/graphTraversal.d.ts.map +1 -0
- package/dist/compiler/graphTraversal.js +37 -0
- package/dist/compiler/hypotheticalScopedIdentity.d.ts +23 -0
- package/dist/compiler/hypotheticalScopedIdentity.d.ts.map +1 -0
- package/dist/compiler/hypotheticalScopedIdentity.js +81 -0
- package/dist/compiler/occurrenceAnalysis.d.ts +65 -0
- package/dist/compiler/occurrenceAnalysis.d.ts.map +1 -0
- package/dist/compiler/occurrenceAnalysis.js +300 -0
- package/dist/compiler/originalSourceMembership.d.ts +6 -0
- package/dist/compiler/originalSourceMembership.d.ts.map +1 -0
- package/dist/compiler/originalSourceMembership.js +31 -0
- package/dist/compiler/particleAttribution.d.ts +17 -0
- package/dist/compiler/particleAttribution.d.ts.map +1 -0
- package/dist/compiler/particleAttribution.js +474 -0
- package/dist/compiler/particleDeclarationConsistency.d.ts +24 -0
- package/dist/compiler/particleDeclarationConsistency.d.ts.map +1 -0
- package/dist/compiler/particleDeclarationConsistency.js +197 -0
- package/dist/compiler/particleExtension.d.ts +22 -0
- package/dist/compiler/particleExtension.d.ts.map +1 -0
- package/dist/compiler/particleExtension.js +119 -0
- package/dist/compiler/particleLocalAssessment.d.ts +20 -0
- package/dist/compiler/particleLocalAssessment.d.ts.map +1 -0
- package/dist/compiler/particleLocalAssessment.js +92 -0
- package/dist/compiler/particleRestriction.d.ts +24 -0
- package/dist/compiler/particleRestriction.d.ts.map +1 -0
- package/dist/compiler/particleRestriction.js +489 -0
- package/dist/compiler/particleSemanticView.d.ts +50 -0
- package/dist/compiler/particleSemanticView.d.ts.map +1 -0
- package/dist/compiler/particleSemanticView.js +297 -0
- package/dist/compiler/particleWildcardRelation.d.ts +88 -0
- package/dist/compiler/particleWildcardRelation.d.ts.map +1 -0
- package/dist/compiler/particleWildcardRelation.js +143 -0
- package/dist/compiler/re01CandidateCorrespondence.d.ts +64 -0
- package/dist/compiler/re01CandidateCorrespondence.d.ts.map +1 -0
- package/dist/compiler/re01CandidateCorrespondence.js +572 -0
- package/dist/compiler/re01TypeProperties.d.ts +71 -0
- package/dist/compiler/re01TypeProperties.d.ts.map +1 -0
- package/dist/compiler/re01TypeProperties.js +120 -0
- package/dist/compiler/re01TypePropertyValidation.d.ts +23 -0
- package/dist/compiler/re01TypePropertyValidation.d.ts.map +1 -0
- package/dist/compiler/re01TypePropertyValidation.js +161 -0
- package/dist/compiler/resolveCanonicalGraph.d.ts +38 -0
- package/dist/compiler/resolveCanonicalGraph.d.ts.map +1 -0
- package/dist/compiler/resolveCanonicalGraph.js +170 -0
- package/dist/compiler/scalarSchemaAssessment.d.ts +425 -0
- package/dist/compiler/scalarSchemaAssessment.d.ts.map +1 -0
- package/dist/compiler/scalarSchemaAssessment.js +5198 -0
- package/dist/compiler/schemaAttributeGroupProperties.d.ts +17 -0
- package/dist/compiler/schemaAttributeGroupProperties.d.ts.map +1 -0
- package/dist/compiler/schemaAttributeGroupProperties.js +53 -0
- package/dist/compiler/schemaAttributeProperties.d.ts +10 -0
- package/dist/compiler/schemaAttributeProperties.d.ts.map +1 -0
- package/dist/compiler/schemaAttributeProperties.js +11 -0
- package/dist/compiler/schemaAttributeUses.d.ts +90 -0
- package/dist/compiler/schemaAttributeUses.d.ts.map +1 -0
- package/dist/compiler/schemaAttributeUses.js +725 -0
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts +10 -0
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts.map +1 -0
- package/dist/compiler/schemaBinaryWordReconstruction.js +33 -0
- package/dist/compiler/schemaBuiltinFacets.d.ts +14 -0
- package/dist/compiler/schemaBuiltinFacets.d.ts.map +1 -0
- package/dist/compiler/schemaBuiltinFacets.js +51 -0
- package/dist/compiler/schemaCalendarImages.d.ts +8 -0
- package/dist/compiler/schemaCalendarImages.d.ts.map +1 -0
- package/dist/compiler/schemaCalendarImages.js +204 -0
- package/dist/compiler/schemaCalendarLanguage.d.ts +11 -0
- package/dist/compiler/schemaCalendarLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaCalendarLanguage.js +227 -0
- package/dist/compiler/schemaComponentEquality.d.ts +28 -0
- package/dist/compiler/schemaComponentEquality.d.ts.map +1 -0
- package/dist/compiler/schemaComponentEquality.js +446 -0
- package/dist/compiler/schemaConstructionAssessment.d.ts +46 -0
- package/dist/compiler/schemaConstructionAssessment.d.ts.map +1 -0
- package/dist/compiler/schemaConstructionAssessment.js +663 -0
- package/dist/compiler/schemaDatatypeValues.d.ts +4 -0
- package/dist/compiler/schemaDatatypeValues.d.ts.map +1 -0
- package/dist/compiler/schemaDatatypeValues.js +2 -0
- package/dist/compiler/schemaDecimalLanguage.d.ts +7 -0
- package/dist/compiler/schemaDecimalLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaDecimalLanguage.js +102 -0
- package/dist/compiler/schemaDeclarationPrimitives.d.ts +34 -0
- package/dist/compiler/schemaDeclarationPrimitives.d.ts.map +1 -0
- package/dist/compiler/schemaDeclarationPrimitives.js +194 -0
- package/dist/compiler/schemaDocumentSyntax.d.ts +55 -0
- package/dist/compiler/schemaDocumentSyntax.d.ts.map +1 -0
- package/dist/compiler/schemaDocumentSyntax.js +294 -0
- package/dist/compiler/schemaDurationLanguage.d.ts +11 -0
- package/dist/compiler/schemaDurationLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaDurationLanguage.js +170 -0
- package/dist/compiler/schemaElementProperties.d.ts +16 -0
- package/dist/compiler/schemaElementProperties.d.ts.map +1 -0
- package/dist/compiler/schemaElementProperties.js +23 -0
- package/dist/compiler/schemaEndpointWordCapacity.d.ts +36 -0
- package/dist/compiler/schemaEndpointWordCapacity.d.ts.map +1 -0
- package/dist/compiler/schemaEndpointWordCapacity.js +39 -0
- package/dist/compiler/schemaExactCalendar.d.ts +73 -0
- package/dist/compiler/schemaExactCalendar.d.ts.map +1 -0
- package/dist/compiler/schemaExactCalendar.js +264 -0
- package/dist/compiler/schemaFacetAnnotation.d.ts +32 -0
- package/dist/compiler/schemaFacetAnnotation.d.ts.map +1 -0
- package/dist/compiler/schemaFacetAnnotation.js +199 -0
- package/dist/compiler/schemaGeneratedScalarShape.d.ts +35 -0
- package/dist/compiler/schemaGeneratedScalarShape.d.ts.map +1 -0
- package/dist/compiler/schemaGeneratedScalarShape.js +176 -0
- package/dist/compiler/schemaIdentityConstraints.d.ts +73 -0
- package/dist/compiler/schemaIdentityConstraints.d.ts.map +1 -0
- package/dist/compiler/schemaIdentityConstraints.js +362 -0
- package/dist/compiler/schemaIeeeLanguage.d.ts +43 -0
- package/dist/compiler/schemaIeeeLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaIeeeLanguage.js +759 -0
- package/dist/compiler/schemaIntegerImages.d.ts +11 -0
- package/dist/compiler/schemaIntegerImages.d.ts.map +1 -0
- package/dist/compiler/schemaIntegerImages.js +113 -0
- package/dist/compiler/schemaLexicalPredicates.d.ts +29 -0
- package/dist/compiler/schemaLexicalPredicates.d.ts.map +1 -0
- package/dist/compiler/schemaLexicalPredicates.js +63 -0
- package/dist/compiler/schemaNotationProperties.d.ts +32 -0
- package/dist/compiler/schemaNotationProperties.d.ts.map +1 -0
- package/dist/compiler/schemaNotationProperties.js +84 -0
- package/dist/compiler/schemaNumericImageConditions.d.ts +24 -0
- package/dist/compiler/schemaNumericImageConditions.d.ts.map +1 -0
- package/dist/compiler/schemaNumericImageConditions.js +66 -0
- package/dist/compiler/schemaParticleWildcardProperties.d.ts +20 -0
- package/dist/compiler/schemaParticleWildcardProperties.d.ts.map +1 -0
- package/dist/compiler/schemaParticleWildcardProperties.js +43 -0
- package/dist/compiler/schemaPattern.d.ts +1062 -0
- package/dist/compiler/schemaPattern.d.ts.map +1 -0
- package/dist/compiler/schemaPattern.js +581 -0
- package/dist/compiler/schemaRegularLanguage.d.ts +67 -0
- package/dist/compiler/schemaRegularLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaRegularLanguage.js +1166 -0
- package/dist/compiler/schemaScalarContext.d.ts +81 -0
- package/dist/compiler/schemaScalarContext.d.ts.map +1 -0
- package/dist/compiler/schemaScalarContext.js +78 -0
- package/dist/compiler/schemaScalarKernel.d.ts +182 -0
- package/dist/compiler/schemaScalarKernel.d.ts.map +1 -0
- package/dist/compiler/schemaScalarKernel.js +391 -0
- package/dist/compiler/schemaScalarWitnesses.d.ts +6 -0
- package/dist/compiler/schemaScalarWitnesses.d.ts.map +1 -0
- package/dist/compiler/schemaScalarWitnesses.js +118 -0
- package/dist/compiler/schemaSimpleTypeProperties.d.ts +95 -0
- package/dist/compiler/schemaSimpleTypeProperties.d.ts.map +1 -0
- package/dist/compiler/schemaSimpleTypeProperties.js +103 -0
- package/dist/compiler/schemaSourceGrammar.d.ts +27 -0
- package/dist/compiler/schemaSourceGrammar.d.ts.map +1 -0
- package/dist/compiler/schemaSourceGrammar.js +290 -0
- package/dist/compiler/schemaSourceLexical.d.ts +4 -0
- package/dist/compiler/schemaSourceLexical.d.ts.map +1 -0
- package/dist/compiler/schemaSourceLexical.js +12 -0
- package/dist/compiler/schemaSourceValues.d.ts +51 -0
- package/dist/compiler/schemaSourceValues.d.ts.map +1 -0
- package/dist/compiler/schemaSourceValues.js +225 -0
- package/dist/compiler/schemaSourceWildcards.d.ts +28 -0
- package/dist/compiler/schemaSourceWildcards.d.ts.map +1 -0
- package/dist/compiler/schemaSourceWildcards.js +247 -0
- package/dist/compiler/schemaSymbolicSequences.d.ts +16 -0
- package/dist/compiler/schemaSymbolicSequences.d.ts.map +1 -0
- package/dist/compiler/schemaSymbolicSequences.js +99 -0
- package/dist/compiler/schemaSymbolicValueSets.d.ts +32 -0
- package/dist/compiler/schemaSymbolicValueSets.d.ts.map +1 -0
- package/dist/compiler/schemaSymbolicValueSets.js +149 -0
- package/dist/compiler/schemaSyntaxAssessment.d.ts +25 -0
- package/dist/compiler/schemaSyntaxAssessment.d.ts.map +1 -0
- package/dist/compiler/schemaSyntaxAssessment.js +361 -0
- package/dist/compiler/schemaTemporalAliases.d.ts +6 -0
- package/dist/compiler/schemaTemporalAliases.d.ts.map +1 -0
- package/dist/compiler/schemaTemporalAliases.js +195 -0
- package/dist/compiler/schemaTokenImages.d.ts +9 -0
- package/dist/compiler/schemaTokenImages.d.ts.map +1 -0
- package/dist/compiler/schemaTokenImages.js +142 -0
- package/dist/compiler/schemaTypeIdentity.d.ts +39 -0
- package/dist/compiler/schemaTypeIdentity.d.ts.map +1 -0
- package/dist/compiler/schemaTypeIdentity.js +78 -0
- package/dist/compiler/schemaTypeRelations.d.ts +38 -0
- package/dist/compiler/schemaTypeRelations.d.ts.map +1 -0
- package/dist/compiler/schemaTypeRelations.js +576 -0
- package/dist/compiler/schemaUri.d.ts +13 -0
- package/dist/compiler/schemaUri.d.ts.map +1 -0
- package/dist/compiler/schemaUri.js +103 -0
- package/dist/compiler/schemaValueContext.d.ts +26 -0
- package/dist/compiler/schemaValueContext.d.ts.map +1 -0
- package/dist/compiler/schemaValueContext.js +1 -0
- package/dist/compiler/schemaValueImages.d.ts +10 -0
- package/dist/compiler/schemaValueImages.d.ts.map +1 -0
- package/dist/compiler/schemaValueImages.js +142 -0
- package/dist/compiler/schemaValueSequences.d.ts +15 -0
- package/dist/compiler/schemaValueSequences.d.ts.map +1 -0
- package/dist/compiler/schemaValueSequences.js +19 -0
- package/dist/compiler/semanticBudget.d.ts +50 -0
- package/dist/compiler/semanticBudget.d.ts.map +1 -0
- package/dist/compiler/semanticBudget.js +178 -0
- package/dist/compiler/semanticCatalog.d.ts +122 -0
- package/dist/compiler/semanticCatalog.d.ts.map +1 -0
- package/dist/compiler/semanticCatalog.js +160 -0
- package/dist/compiler/semanticContext.d.ts +172 -0
- package/dist/compiler/semanticContext.d.ts.map +1 -0
- package/dist/compiler/semanticContext.js +1168 -0
- package/dist/compiler/semanticTypeDependencies.d.ts +8 -0
- package/dist/compiler/semanticTypeDependencies.d.ts.map +1 -0
- package/dist/compiler/semanticTypeDependencies.js +64 -0
- package/dist/compiler/semanticTypeReference.d.ts +24 -0
- package/dist/compiler/semanticTypeReference.d.ts.map +1 -0
- package/dist/compiler/semanticTypeReference.js +36 -0
- package/dist/compiler/shapeResolver.d.ts +1 -0
- package/dist/compiler/shapeResolver.d.ts.map +1 -1
- package/dist/compiler/shapeResolver.js +7 -9
- package/dist/compiler/sourceSchemaBinding.d.ts +26 -0
- package/dist/compiler/sourceSchemaBinding.d.ts.map +1 -0
- package/dist/compiler/sourceSchemaBinding.js +39 -0
- package/dist/compiler/structuralCompanions.d.ts +16 -0
- package/dist/compiler/structuralCompanions.d.ts.map +1 -0
- package/dist/compiler/structuralCompanions.js +232 -0
- package/dist/compiler/validateSemanticGraph.d.ts +5 -0
- package/dist/compiler/validateSemanticGraph.d.ts.map +1 -0
- package/dist/compiler/validateSemanticGraph.js +376 -0
- package/dist/compiler/wildcardAlgebra.d.ts +26 -0
- package/dist/compiler/wildcardAlgebra.d.ts.map +1 -0
- package/dist/compiler/wildcardAlgebra.js +155 -0
- package/dist/gateway/generateGateway.d.ts.map +1 -1
- package/dist/gateway/generateGateway.js +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/loader/orderedSyntax.d.ts +77 -0
- package/dist/loader/orderedSyntax.d.ts.map +1 -0
- package/dist/loader/orderedSyntax.js +202 -0
- package/dist/loader/resolutionDepth.d.ts +7 -0
- package/dist/loader/resolutionDepth.d.ts.map +1 -0
- package/dist/loader/resolutionDepth.js +65 -0
- package/dist/loader/schemaInput.d.ts +53 -0
- package/dist/loader/schemaInput.d.ts.map +1 -0
- package/dist/loader/schemaInput.js +212 -0
- package/dist/loader/schemaResources.d.ts +59 -0
- package/dist/loader/schemaResources.d.ts.map +1 -0
- package/dist/loader/schemaResources.js +292 -0
- package/dist/openapi/generateOpenAPI.d.ts.map +1 -1
- package/dist/openapi/generateOpenAPI.js +2 -2
- package/dist/test/generateTests.d.ts.map +1 -1
- package/dist/test/generateTests.js +2 -2
- package/dist/util/xmlWhitespace.d.ts +3 -0
- package/dist/util/xmlWhitespace.d.ts.map +1 -0
- package/dist/util/xmlWhitespace.js +4 -0
- package/docs/README.md +14 -1
- package/docs/architecture.md +9 -0
- package/docs/cli-reference.md +21 -1
- package/docs/content-model-analysis.md +92 -0
- package/docs/content-model-baseline.md +121 -0
- package/docs/content-model-catalog.md +116 -0
- package/docs/content-model-companions.md +90 -0
- package/docs/content-model-composition.md +103 -0
- package/docs/content-model-decisions.md +79 -0
- package/docs/content-model-gateway-feasibility.md +169 -0
- package/docs/content-model-graph.md +121 -0
- package/docs/content-model-loading.md +163 -0
- package/docs/content-model-matching.md +85 -0
- package/docs/content-model-readiness.md +144 -0
- package/docs/content-model-resolution.md +81 -0
- package/docs/content-model-s02-handoff.md +98 -0
- package/docs/content-model-s06-au-01.md +425 -0
- package/docs/content-model-s06-dt-01.md +386 -0
- package/docs/content-model-s06-pw-01.md +350 -0
- package/docs/content-model-s06-re-01-resolver-implementation.md +869 -0
- package/docs/content-model-s06-re-01-resolver.md +513 -0
- package/docs/content-model-s06-re-01-scalar-witnesses.md +1423 -0
- package/docs/content-model-s06-re-01-support-reconstruction.md +6337 -0
- package/docs/content-model-s06-re-01.md +7477 -0
- package/docs/content-model-s06-research-handoff.md +909 -0
- package/docs/content-model-shipped-fix.md +83 -0
- package/docs/content-model-soap-feasibility.md +165 -0
- package/docs/decisions/002-streamable-responses.md +2 -0
- package/docs/decisions/003-content-model-contracts.md +280 -0
- package/docs/direct-values.md +311 -0
- package/docs/reference-validation.md +243 -0
- package/docs/releases/v1.1.5.md +38 -0
- package/docs/roadmap/README.md +2 -2
- package/docs/supported-patterns.md +13 -5
- package/package.json +26 -13
- package/src/generation/preambles/direct-client/typescript.preamble +3 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
# S06 DT01: Exact XSD 1.0 calendar decision
|
|
2
|
+
|
|
3
|
+
Selected exact calendar contract and independent evidence for schema operands and the later shared scalar owner.
|
|
4
|
+
|
|
5
|
+
See the [root README](../README.md), [S02 contracts](decisions/003-content-model-contracts.md), and [research epic #232](https://github.com/TechSpokes/typescript-wsdl-client/issues/232).
|
|
6
|
+
|
|
7
|
+
## Disposition and ownership
|
|
8
|
+
|
|
9
|
+
No adopted XSD 1.0 correction establishes a complete year-zero rollover contract.
|
|
10
|
+
The maintainer [selected candidate A's three explicit repairs on October 10, 2026](https://github.com/TechSpokes/typescript-wsdl-client/issues/236#issuecomment-6095933213): preserve lexical BCE leap dates while skipping zero, normalize second 60 as overflow, and order normalized recurring-time clocks consistently with aliases.
|
|
11
|
+
Independent semantic review and final delivery govern local acceptance; passing the probes alone does not activate product support.
|
|
12
|
+
|
|
13
|
+
The selected project contract is candidate A, including its skip-zero repair, second-60 normalization and recurring-time comparison.
|
|
14
|
+
Its lexical-year leap calculation preserves the recorded BCE domain, but its rollover repair is an interpretation added to the written Appendix E algorithm.
|
|
15
|
+
Candidate B changes which BCE leap dates are legal, while literal Appendix E does not remain closed over the XSD 1.0 value domain.
|
|
16
|
+
|
|
17
|
+
[#268](https://github.com/TechSpokes/typescript-wsdl-client/issues/268) now owns the shared pure schema scalar implementation staged under #179. [#184](https://github.com/TechSpokes/typescript-wsdl-client/issues/184) retains payload scalar enforcement, conversion policy and public encodings; #188/#189/#198 consume that later work. The original research algorithm now has one source owner, without activating guarded assessment or payload support.
|
|
18
|
+
|
|
19
|
+
The accepted baseline is main `5876065b00d4eeb6d2324eaa63ff9b70e2279198`, tree `b647d9b0343d421426a539fc008c3cffa82c7875`. The inspected draft is `460f5b8379c68ffef79917284e445b5ab046429e`, tree `56830b28d1006b019918a364aa62f1ed9d7d8817`; it remains unaccepted and unchanged.
|
|
20
|
+
|
|
21
|
+
## Authority and the historical correction
|
|
22
|
+
|
|
23
|
+
### Dated primary source
|
|
24
|
+
|
|
25
|
+
The governing source is [XSD 1.0 Part 2, Recommendation 28 October 2004](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/). The [pinned complete XML source](https://github.com/jacoelho/xsd/blob/142f25ee187e17f041af87b6bfcfc82385254520/docs/spec/xml/datatypes.xml) has SHA-256 `430f010df8ed077a4ed11d9d5812ea5e5d62ba67e715f1bbeeaa8ee1765d84c7`; editorial `diff="del"` text is excluded.
|
|
26
|
+
|
|
27
|
+
| Clause | Exact applicable text or rule | Consequence |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| [3.2.7, value space](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#dateTime) | “All timezoned times are Coordinated Universal Time” | Zoned assessed values use UTC fields |
|
|
30
|
+
| [3.2.7, year-zero note](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#year-zero) | “There is no year 0” | `-0001` precedes `0001` in the described calendar |
|
|
31
|
+
| [3.2.7.1, lexical rule](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#dateTime-lexical-representation) | “'0000' is prohibited” | Zero cannot become a legal lexical output |
|
|
32
|
+
| [3.2.7.1, hour rule](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#dateTime-lexical-representation) | Hour 24 with zero minutes/seconds denotes the following day | Rollover is required at the boundary |
|
|
33
|
+
| [Appendix E](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#adding-durations-to-dateTimes) | `E[year] := S[year] + D[year] + carry` | The literal algorithm can compute zero |
|
|
34
|
+
| [Appendix E](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#adding-durations-to-dateTimes) | Leap test applies modulo 400/100/4 to `Y` | Unshifted negative years have the stated leap pattern |
|
|
35
|
+
| [3.2.7.4, order](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#dateTime-order) | Cross-timeline differences of 14 hours or less are incomparable | Endpoint comparisons must remain strict |
|
|
36
|
+
| [3.2.6.2, duration order](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#duration-order) | Strict order must agree at all four prescribed anchors | Equality and anchor ordering are separate |
|
|
37
|
+
|
|
38
|
+
Appendix E also directly increments the year during month/day rollover and supplies no branch to skip zero. Thus `0001-01-01 + (-P1Y)` yields year zero under the literal year assignment, and subtracting a day from `0001-01-01` enters December of year zero under its literal loop. The informative year note does not specify a normative replacement for those assignments.
|
|
39
|
+
|
|
40
|
+
### Errata and WG scope
|
|
41
|
+
|
|
42
|
+
The official [second-edition errata](https://www.w3.org/2004/03/xmlschema-errata), checked October 10, 2026, lists no Part 2 errata. Its Part 1 E1-56 default/PSVI fix supplies no calendar correction. First-edition errata were incorporated in the dated second edition; neither an old correction nor an editorial deletion overrides its final text.
|
|
43
|
+
|
|
44
|
+
[WG issue 3256](https://www.w3.org/Bugs/Public/show_bug.cgi?id=3256), reported May 9, 2006 and resolved February 8, 2008, concerns XSD 1.1 compatibility wording. Comment 2 says the 1.1 text needs a more candid note and that the WG did not agree to revert the interpretation to the 1.0 form. The adopted wording explains an XSD 1.1 change; it is not an adopted XSD 1.0 rollover correction.
|
|
45
|
+
|
|
46
|
+
### Correction of the BCE engine sentence
|
|
47
|
+
|
|
48
|
+
The draft assessment says pinned engines disagree with unshifted BCE leap arithmetic. That sentence is factually wrong. Historical XMLSchema 4.2.0 and libxml2 2.14.6 observations accept the `-0004-02-29Z` date/dateTime schema defaults and reject the `-0001-02-29Z` counterparts, consistent with the unshifted leap test.
|
|
49
|
+
|
|
50
|
+
The five copied fixtures retain their exact bytes and original [pinned manifest](https://github.com/TechSpokes/typescript-wsdl-client/blob/460f5b8379c68ffef79917284e445b5ab046429e/test/conformance/schema-assessment-manifest.json) provenance. The current [TypeScript reference suite](../test/conformance/reference/dt01-calendar-contract.test.ts) verifies their digests and records current primary observations beside selected contracts and historical answers. The historical document and observations are not rewritten; #179 must replace the incorrect sentence when updating its future accepted assessment evidence.
|
|
51
|
+
|
|
52
|
+
Agreement on four BCE schemas is no proof about month addition, day rollover, timezone normalization, 24:00, cross-zero duration anchors or exact equality. Both historical engines also accepted `duration-cross-year-zero.xsd`; this is schema-loading evidence, not proof that either supplies the required faithful ordering.
|
|
53
|
+
|
|
54
|
+
## Concrete contract alternatives
|
|
55
|
+
|
|
56
|
+
| Option | Lexical years and leap calculation | Rollover | Consequence |
|
|
57
|
+
|---|---|---|---|
|
|
58
|
+
| A, selected contract | Reject zero; leap test on lexical signed `y` | Continuous year/month coordinate skips zero | Preserves BCE observations; adds an explicit Appendix E repair |
|
|
59
|
+
| B, astronomical repair | Reject zero; use `a=y+1` for negative `y` | Ordinary Gregorian arithmetic on `a` | Makes `-0001` leap and `-0004` common; changes valid BCE schemas |
|
|
60
|
+
| C, literal Appendix E | Reject lexical zero; use arithmetic `y` | Ordinary integer addition, including zero | Produces values with forbidden year zero; not a complete closed contract |
|
|
61
|
+
| D, XSD 1.1 | Permit zero and reinterpret negative years | XSD 1.1 Gregorian coordinate | Changes the approved profile and is not authorized |
|
|
62
|
+
|
|
63
|
+
Candidate C cannot be completed merely by hiding zero as an internal year. A full internal zero year adds 366 days between `-0001` and `0001`, contradicting their described adjacency; folding zero into a neighbor changes month/day order or leap validity. Removing its days is candidate A's explicit repair; shifting negative year meanings is candidate B's explicit repair.
|
|
64
|
+
|
|
65
|
+
The alternatives record A's selected repairs and B's different compatibility consequences.
|
|
66
|
+
Production impacted schemas retain the existing `unsupported-capability` qualification until #179 implements and validates the accepted research contract; this is a temporary gate, not a permanent BCE exclusion.
|
|
67
|
+
Unaffected lexical, positive-year and duration-equality work continues.
|
|
68
|
+
|
|
69
|
+
Candidate B is fully specified by replacing A's leap/ordinal coordinate with `a(y)=y` for positive lexical years and `a(y)=y+1` for negative years. Apply the ordinary Gregorian leap test and `G(a)` ordinal, including internal astronomical zero; inverse conversion emits `y=a` when `a>0` and `y=a-1` otherwise. Month addition uses `12*(a-1)+(m-1)`, then all of A's exact clipping, fractions, timezone-presence, ordering and anchor procedures remain the same, including their separately stated second-60 and recurring-time choices.
|
|
70
|
+
|
|
71
|
+
## Shared scalar interface
|
|
72
|
+
|
|
73
|
+
### Inputs and retained context
|
|
74
|
+
|
|
75
|
+
Schema operand assessment takes the original resolved type identity, complete derivation/facet layers, original lexical text, source location, owner/operation path and QName namespace environment. It applies that type's XSD whitespace rule using only XML space characters, then validates its lexical/value space and every applicable facet. It retains both original text and the admitted normalized lexical witness.
|
|
76
|
+
|
|
77
|
+
List assessment retains per-item validated typed values in order. Union assessment tries members in declaration order under their original contexts and retains the selected member, including member-specific whitespace/facets. A union tag cannot claim an alternative history absent from the encoded lexical value; neither list nor union permits flattening away a context needed for equality or restrictions.
|
|
78
|
+
|
|
79
|
+
DT01 supplies the calendar/duration meaning used by the scalar owner; existing scalar contracts supply decimal, integer, QName and other primitive predicates. Exact decimal/integer values and expanded QName names remain exact. Fixed/default equivalence never compares raw spellings, invents an order relation, or uses a JavaScript coercion.
|
|
80
|
+
|
|
81
|
+
### Outputs and independent predicates
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
type OperandContext = Readonly<{
|
|
85
|
+
typeId: string; lexical: string; source: string;
|
|
86
|
+
namespaces: Readonly<Record<string, string>>;
|
|
87
|
+
}>;
|
|
88
|
+
type SameValueResult = "equal" | "distinct" | "unresolved" | "resource-limit";
|
|
89
|
+
type CalendarOrder = "less" | "equal" | "greater" | "indeterminate";
|
|
90
|
+
type CalendarFamily = "dateTime" | "date" | "time" | "gYearMonth"
|
|
91
|
+
| "gYear" | "gMonthDay" | "gDay" | "gMonth";
|
|
92
|
+
type ExactDecimal = Readonly<{coefficient: bigint; scale: number}>;
|
|
93
|
+
type CalendarValue = Readonly<{
|
|
94
|
+
family: CalendarFamily; timezoned: boolean;
|
|
95
|
+
representative: ExactDecimal; original: OperandContext;
|
|
96
|
+
}>;
|
|
97
|
+
type SemanticBudget = Readonly<{charge(work: number): void; admitNodes(count: number): void}>;
|
|
98
|
+
declare function assessCalendarOperand(
|
|
99
|
+
family: CalendarFamily, context: OperandContext, budget: SemanticBudget
|
|
100
|
+
): CalendarValue;
|
|
101
|
+
declare function sameValue(
|
|
102
|
+
a: OperandContext, b: OperandContext, budget: SemanticBudget
|
|
103
|
+
): SameValueResult;
|
|
104
|
+
declare function compareCalendarValue(
|
|
105
|
+
a: CalendarValue, b: CalendarValue, budget: SemanticBudget
|
|
106
|
+
): CalendarOrder;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
`sameValue` first assesses each operand against its own original type and context. Invalid schema operands retain their `invalid-schema` failure rather than becoming `distinct`. For compatible typed primitive values it uses that primitive's exact equality; lists compare corresponding item values and length, and unions preserve the selected member context before applying its value predicate.
|
|
110
|
+
|
|
111
|
+
The calendar output retains family, timezone presence, exact internal reference coordinate and original operand context. A reduced family's reference date supplies comparison fields only; it does not expose an invented date in the public scalar encoding. The research display makes its `zoned/local` timeline explicit and never uses its internal coordinate string as a replacement for the original lexical witness.
|
|
112
|
+
|
|
113
|
+
Calendar equality requires the same primitive calendar family and the same timezone-presence timeline, followed by exact normalized value equality. A date interval does not equal a dateTime instant merely because their starting instants coincide. Different timelines are distinct values even when their clock fields match; their ordering can remain indeterminate.
|
|
114
|
+
|
|
115
|
+
Duration equality compares exact signed total months and exact signed decimal seconds. `P1Y=P12M`, `P1D=PT24H`, `PT60.00S=PT1M`, and negative zero equals zero. `P1M` and `P30D` are distinct regardless of any particular anchor.
|
|
116
|
+
|
|
117
|
+
`compare` is a separate operation with `less/equal/greater/indeterminate`. An indeterminate comparison is a legitimate partial-order result, not failed parsing, resource exhaustion or equality. A facet whose primary rule requires a determinate inequality can reject a value after that result; an unresolved semantic qualification cannot be substituted for that rejection.
|
|
118
|
+
|
|
119
|
+
### Classification and normalization laws
|
|
120
|
+
|
|
121
|
+
`invalid-schema` means an independently established schema operand or facet constraint violation. `unsupported-capability` retains an open interpretation or an already excluded reachable scalar rule. `resource-limit` means the charge cannot be paid before work/allocation and returns no successful partial assessment table. Payload invalidity remains #184's later `invalid-value` responsibility.
|
|
122
|
+
|
|
123
|
+
Diagnostics retain operation, graph/type ID, expanded name, schema source and instance path where available, without copying operand values into messages. Semantic normalization returns fresh values, preserves timezone presence and never mutates caller data. Internal UTC coordinates do not authorize public UTC conversion or replacing the original pattern-admitted lexical witness; the [S02 normalization laws](decisions/003-content-model-contracts.md#equivalence-and-normalization-s02-d03) remain controlling.
|
|
124
|
+
|
|
125
|
+
For AU01/RE01, calendar equality uses selected A once its independent contract review passes; before that gate it returns `unresolved`.
|
|
126
|
+
Exact duration equality uses no reference calendar and can proceed independently.
|
|
127
|
+
Numeric/QName/string/list/union claims must invoke the established original-type predicates, not claim the entire scalar domain proved by this narrow calendar prototype.
|
|
128
|
+
|
|
129
|
+
## Selected candidate A arithmetic
|
|
130
|
+
|
|
131
|
+
### Lexical and value coordinates
|
|
132
|
+
|
|
133
|
+
A year is an exact signed integer `y`, written as at least four digits with optional minus, no plus, no zero and no extended leading zeros. Month/day fields are two digits and validated against the lexical-year leap test. All fractions are exact finite decimal rationals, represented by integer coefficient and decimal scale.
|
|
134
|
+
|
|
135
|
+
Define `floor(a/b)` mathematically, including negative operands; modulo is `a-floor(a/b)*b`. Define `leap(y)` as divisibility by 4 and either nondivisibility by 100 or divisibility by 400. The modulo test uses lexical `y`, not the contiguous month/year coordinate.
|
|
136
|
+
|
|
137
|
+
For month/year addition define `k(y)=y-1` for positive years and `k(y)=y` for negative years. Its inverse is `y(k)=k+1` when `k>=0`, otherwise `y(k)=k`. This maps adjacent years `-0001,0001` to adjacent coordinates `-1,0` while preserving lexical-year leap arithmetic.
|
|
138
|
+
|
|
139
|
+
Define the exact day ordinal with `0001-01-01` at zero:
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
G(y) = 365*(y-1) + floor((y-1)/4) - floor((y-1)/100) + floor((y-1)/400)
|
|
143
|
+
O(y,m,d) = G(y) + (366 if y<0 else 0) + daysBeforeMonth(y,m) + d - 1
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
The added 366 removes the astronomical year-zero interval from negative-year coordinates. `O(-1,12,31)=-1` and `O(1,1,1)=0`; the lexical-year leap test remains unchanged. `O` is strictly increasing over all valid dates in this candidate and has one valid inverse date for each integer ordinal.
|
|
147
|
+
|
|
148
|
+
For inverse conversion, replace negative ordinals `o` with `o-366`, then decompose the Gregorian count into 400-year cycles of 146,097 days, at most three 100-year blocks, 4-year blocks and at most three individual years. Resolve at most twelve month lengths afterward. This is exact and does not enumerate huge years, months or duration days.
|
|
149
|
+
|
|
150
|
+
### Addition and timezone conversion
|
|
151
|
+
|
|
152
|
+
Month/year addition computes `i=12*k(y)+(m-1)+totalMonths`, then `k'=floor(i/12)` and `m'=modulo(i,12)+1`. Recover `y'` through the inverse coordinate and clip the original day to the target month's maximum. Add exact seconds to the clipped day's ordinal/time, then invert the resulting ordinal and clock remainder.
|
|
153
|
+
|
|
154
|
+
This keeps Appendix E's operation order: months/years, day clipping, then days/hours/minutes/seconds. Addition is neither associative nor commutative in general; for example January 31 plus one month then one day differs from some reversed or regrouped additions. The repair changes only the year coordinate assignments and their cross-zero consequences, not the clipping rule.
|
|
155
|
+
|
|
156
|
+
Timezone lexical offsets are exact integral minutes from -14:00 through +14:00, with minute zero required at magnitude 14. `Z`, `+00:00` and `-00:00` denote the same explicit UTC zone; an omitted zone remains omitted. Convert zoned dateTime clock fields to UTC by subtracting the offset exactly, including day/month/year rollover; normalize legal 24:00 before returning the assessed value.
|
|
157
|
+
|
|
158
|
+
`addDuration` in the narrow probe accepts assessed dateTime values, whose zoned fields are UTC under 3.2.7. Thus `2001-03-01T00:00:00+14:00` and `2001-02-28T10:00:00Z` receive the same one-month value addition, `2001-03-28T10:00:00Z`. Raw local field-tuple addition preserving +14:00 would give March 31 at 10:00 UTC; that is a different operation and is not this semantic API.
|
|
159
|
+
|
|
160
|
+
Raw field-tuple timezone normalization remains a use of Appendix E's field arithmetic, before the literal becomes its UTC value. The retained lexical offset supplies provenance and an admitted wire witness; it does not cause subsequent value-level addition to depend on spelling.
|
|
161
|
+
|
|
162
|
+
### Selected second 60 interpretation
|
|
163
|
+
|
|
164
|
+
[Appendix D.1](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#isoformats) admits whole seconds 0 through 60 with arbitrary fractions and discusses rolling an inappropriate leap-second operand into the following minute. Appendix E explicitly treats second 60 as overflow and thereafter uses sixty seconds per minute. Both historically pinned engines reject `23:59:60Z`; their rejection does not erase this XSD 1.0 text.
|
|
165
|
+
|
|
166
|
+
Candidate A accepts `0<=second<61` and uses that stable overflow interpretation, including for explicit UTC operands. The probe consequently maps `2001-12-31T23:59:60.25Z` to `2002-01-01T00:00:00.25Z`. It imports no contemporary leap-second table or host clock behavior.
|
|
167
|
+
|
|
168
|
+
This selected alias is an explicit project interpretation: 3.2.7's canonical paragraph says literals are one-to-one except fractional zeros, 24:00 and timezone, without a second-60 exception, while its order algorithm applies timezone conversion only to non-Z operands. The selected contract does not claim that the alias follows unambiguously from those clauses. #179's draft `second>=60` invalidity check must be reconciled with the selected interpretation; #184 consumes this resolved contract rather than an engine's rejection.
|
|
169
|
+
|
|
170
|
+
### Related calendar families
|
|
171
|
+
|
|
172
|
+
All approved families retain a distinct primitive family tag and timezone-presence flag. For schema comparisons the candidate uses these explicit starting fields; absent fields do not become observable public properties. The chosen reference year 2000 is a leap year, and January has 31 days.
|
|
173
|
+
|
|
174
|
+
| Family | Exact comparison representative | Additional lexical rule |
|
|
175
|
+
|---|---|---|
|
|
176
|
+
| `dateTime` | Its assessed instant | Complete date and clock |
|
|
177
|
+
| `date` | Start of its top-open one-day interval | No clock fields |
|
|
178
|
+
| `time` | Normalize clock modulo 86,400; use reference date 2000-01-01 | Legal 24:00 becomes midnight |
|
|
179
|
+
| `gYearMonth` | Given year/month, day 1 at midnight | No day or clock fields |
|
|
180
|
+
| `gYear` | Given year, January 1 at midnight | No month/day or clock fields |
|
|
181
|
+
| `gMonthDay` | Given month/day in leap year 2000 at midnight | February 29 is legal |
|
|
182
|
+
| `gDay` | Given day in January 2000 at midnight | Day 1 through 31 |
|
|
183
|
+
| `gMonth` | Given month in year 2000, day 1 at midnight | Second-edition `--MM`, without trailing `--` |
|
|
184
|
+
|
|
185
|
+
Date equality compares interval starts on the same timeline. It does not truncate the UTC start to midnight: `0001-01-01+14:00` and `-0001-12-31-10:00` denote the same interval under A. For a canonical date spelling, derive the date portion from the interval's UTC midpoint and retain the recoverable offset in -11:59 through +12:00 as 3.2.9 specifies.
|
|
186
|
+
|
|
187
|
+
The reduced Gregorian families use their type-specific reference fields and retain the exact timezone shift of their starting instant during comparison. Periodic-family ordering is the stated arbitrary reference-period ordering, not a circular order or an inferred BCE host-calendar recurrence. The shared TypeScript schema kernel implements exact representatives, equality and ordering for all eight calendar families plus duration; #184's payload enforcement remains a later implementation.
|
|
188
|
+
|
|
189
|
+
The `time` modulo step is a third explicit candidate interpretation. [3.2.8](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#time) prescribes dateTime ordering with an arbitrary date while its canonical representation removes the date and uses UTC. Comparing `01:00:00+14:00` with `02:00:00Z` after normalization on a common arbitrary date gives previous-day 11:00 versus same-day 02:00, hence less; comparing their normalized modulo-day clocks gives 11:00 versus 02:00, hence greater.
|
|
190
|
+
|
|
191
|
+
A selects modulo-day value representatives consistently for equality and ordering, preserving canonical-alias substitutability. Zoned clocks are reduced modulo 86,400 seconds and rebased on 2000-01-01; unknown-zone clocks remain their unshifted clocks on that reference date. Legal 24:00 and selected second-60 overflow normalize to their midnight aliases on the same timeline.
|
|
192
|
+
|
|
193
|
+
The rejected date-lift alternative retains the shifted reference day and follows the literal arbitrary-date order, but cannot preserve `01:00:00+14:00 = 11:00:00Z` while assigning them different comparison days. The maintainer's recorded recurring-time choice resolves this project contract; it is not a new fourth circular-offset decision and it activates no production order here.
|
|
194
|
+
|
|
195
|
+
Same-family, same-timeline order compares exact representatives. For a known-zone representative `z` and unknown-zone representative `u`, known is less only when `z<u-50400`, greater only when `z>u+50400`, and otherwise indeterminate; reverse the direction when the unknown operand is first. At exactly either endpoint the result remains indeterminate.
|
|
196
|
+
|
|
197
|
+
The resulting time order is linear on the selected common reference date rather than circular. Thus `00:00:00Z < 23:00:00` and `23:00:00Z > 00:00:00`, while `23:00:00-14:00` becomes 13:00Z and is incomparable with unknown 23:00 because their representative difference is ten hours. These wrap consequences are intentional results of the selected model, not unresolved timezone inference.
|
|
198
|
+
|
|
199
|
+
### Duration equality and ordering
|
|
200
|
+
|
|
201
|
+
Parse duration fields into `months=sign*(12*years+months)` and `seconds=sign*(86400*days+3600*hours+60*minutes+seconds)`. Lexical fields are unsigned and only the leading sign applies; `P1M-1D` is invalid. Months and seconds may both be nonzero, but lexical duration syntax does not permit independently opposing component signs.
|
|
202
|
+
|
|
203
|
+
Equality is the exact ordered pair `(months,seconds)`. Ordering first checks that equality, then adds each operand independently to `1696-09-01`, `1697-02-01`, `1903-03-01` and `1903-07-01`, all at midnight Z, using the candidate's exact addition. Return strict less or strict greater only if every anchor gives that same strict result; otherwise return indeterminate.
|
|
204
|
+
|
|
205
|
+
An equality at one anchor mixed with strict comparisons at others is indeterminate. Even equality at every anchor does not prove exact pair equality: `P400Y` and `P146097D` produce identical positive-anchor additions but remain distinct duration values in this contract. Anchor additions that cross zero use the selected A coordinates and retain the production integration guard until #179 implements this contract.
|
|
206
|
+
|
|
207
|
+
## Independent truth tables
|
|
208
|
+
|
|
209
|
+
### Leap and rollover alternatives
|
|
210
|
+
|
|
211
|
+
| Operand | A, lexical leap and skip zero | B, astronomical BCE shift | C, literal arithmetic |
|
|
212
|
+
|---|---|---|---|
|
|
213
|
+
| `-0400-02-29` | Valid | Invalid | Valid |
|
|
214
|
+
| `-0100-02-29` | Invalid | Invalid | Invalid |
|
|
215
|
+
| `-0004-02-29` | Valid | Invalid | Valid |
|
|
216
|
+
| `-0001-02-29` | Invalid | Valid | Invalid |
|
|
217
|
+
| `0001-02-29` | Invalid | Invalid | Invalid |
|
|
218
|
+
| `0001-01-01 + (-P1D)` | `-0001-12-31` | `-0001-12-31` | Forbidden year `0000-12-31` |
|
|
219
|
+
| `-0001-12-31 + P1D` | `0001-01-01` | `0001-01-01` | Forbidden year `0000-01-01` |
|
|
220
|
+
| `0001-01-01 + (-P1Y)` | `-0001-01-01` | `-0001-01-01` | Forbidden year `0000-01-01` |
|
|
221
|
+
| `-0004-01-31 + P1M` | `-0004-02-29` | `-0004-02-28` | `-0004-02-29` |
|
|
222
|
+
|
|
223
|
+
### Candidate A comparisons and exact normalizations
|
|
224
|
+
|
|
225
|
+
| Inputs | Independent expected result | Status |
|
|
226
|
+
|---|---|---|
|
|
227
|
+
| `-0001-12-31T24:00:00Z` | `0001-01-01T00:00:00Z` | Candidate rollover |
|
|
228
|
+
| `0001-01-01T00:00:00+14:00` | `-0001-12-31T10:00:00Z` | Candidate cross-zero timezone |
|
|
229
|
+
| `-0001-12-31T23:59:59.999…-00:01` | `0001-01-01T00:00:59.999…Z` | Exact fraction and rollover |
|
|
230
|
+
| `0001-01-01T00:00:00` versus same clock Z | Distinct values; indeterminate order | Timezone presence retained |
|
|
231
|
+
| Known 14:00Z versus unknown midnight | Indeterminate | Inclusive uncertainty endpoint |
|
|
232
|
+
| Known 14:00Z plus 10^-30 seconds versus unknown midnight | Greater | Exact strict inequality |
|
|
233
|
+
| `P1Y` versus `P12M` | Equal | No calendar needed |
|
|
234
|
+
| `P1M` versus `P30D` | Distinct; indeterminate order | Four-anchor mixed outcomes |
|
|
235
|
+
| `P1Y` versus `P364D` / `P367D` | Greater / less | Useful determinate ordering |
|
|
236
|
+
| `-P1M` versus `-P27D` | Less | Negative duration ordering |
|
|
237
|
+
| `P1M1D` versus `P30D` | Distinct; indeterminate order | Mixed month/second components |
|
|
238
|
+
| `-P1700Y` versus `-P1600Y` | Less under A | Anchor additions cross zero |
|
|
239
|
+
| `P400Y` versus `P146097D` | Distinct; indeterminate order | Anchor agreement is not equality |
|
|
240
|
+
|
|
241
|
+
[Literal proposal cases](../test/research/dt01/dt01-cases.json) were authored independently of the prototype. They include invalid positive/negative zero, extended leading zero, plus year, XML-only whitespace, fractional boundary comparisons and illegal independently signed duration fields. Assertions read those literal expectations; neither production analysis nor prototype output manufactures them.
|
|
242
|
+
|
|
243
|
+
### Reduced-family exact value coverage
|
|
244
|
+
|
|
245
|
+
[Reduced-family expectations](../test/research/dt01/dt01-reduced-cases.json) are separately hand-authored under the recorded selection, including the independently checked leap-day and day-offset alias contrasts. Their [research tests](../test/research/dt01/reduced-calendar.test.ts) verify normalized internal representatives, retained lexical witnesses, exact equality, order reversal, alias substitution and refusal before work/copy budget exhaustion.
|
|
246
|
+
|
|
247
|
+
| Family/contrast | Independent selected result |
|
|
248
|
+
|---|---|
|
|
249
|
+
| `gYear 0001+14:00` | Zoned start `-0001-12-31T10:00:00` |
|
|
250
|
+
| `gYearMonth 0001-01+14:00` | Same coordinate, distinct family from `gYear` |
|
|
251
|
+
| `gYearMonth -0004-03+01:00` | Zoned start `-0004-02-29T23:00:00` |
|
|
252
|
+
| `gYearMonth -0001-03+01:00` | Zoned start `-0001-02-28T23:00:00` |
|
|
253
|
+
| `gMonthDay --02-29+14:00` versus `--02-28-10:00` | Equal at leap-year reference start |
|
|
254
|
+
| `gDay ---31+14:00` versus `---30-10:00` | Equal at January reference start |
|
|
255
|
+
| `gMonth --03+14:00` | Zoned start `2000-02-29T10:00:00` |
|
|
256
|
+
| `gMonthDay --01-01+14:00` versus `--12-31-10:00` | Less; shifted reference year remains significant |
|
|
257
|
+
| `time 01:00:00+14:00` versus `11:00:00Z` | Equal; both greater than `02:00:00Z` |
|
|
258
|
+
| `time 14:00:00Z` versus unknown midnight | Distinct values; indeterminate endpoint order |
|
|
259
|
+
| Known 14:00Z plus 10^-30 seconds versus unknown midnight | Greater by exact strict endpoint test |
|
|
260
|
+
| Known midnight versus unknown 14:00 plus 10^-30 seconds | Less by exact strict endpoint test |
|
|
261
|
+
|
|
262
|
+
The reduced fixture table contains 23 normalization cases, 29 equality/order pairs, four alias-substitution contrasts and ten invalid lexical operands. Its huge positive `gYear` and huge negative leap `gYearMonth` operands preserve years beyond Number precision exactly. Each pair also checks reverse ordering, and dedicated cases verify cross-family identity and the exact reduced-normalization work boundary.
|
|
263
|
+
|
|
264
|
+
These are executable evidence for every selected reduced-family rule, without claiming a separate payload implementation.
|
|
265
|
+
|
|
266
|
+
### Engine observations versus interpretation
|
|
267
|
+
|
|
268
|
+
| Fixture/payload comparison | Candidate A acceptance | XMLSchema 4.2.0 | libxml2 2.14.6 |
|
|
269
|
+
|---|---|---|---|
|
|
270
|
+
| BCE `-0004-02-29` schema defaults | Accept | Accept | Accept |
|
|
271
|
+
| BCE `-0001-02-29` schema defaults | Reject | Reject | Reject |
|
|
272
|
+
| Fixed `0001-01-01T00:00:00Z`, payload `-0001-12-31T24:00:00Z` | Accept | Reject | Reject |
|
|
273
|
+
| Fixed `-0001-12-31T10:00:00Z`, payload `0001-01-01T00:00:00+14:00` | Accept | Reject | Reject |
|
|
274
|
+
| Fixed BCE date interval, equivalent +14:00 CE interval | Accept | Reject | Reject |
|
|
275
|
+
| Fixed `P1Y`, payload `P12M` | Accept | Accept | Reject |
|
|
276
|
+
| Fixed `P1D`, payload `PT24H` | Accept | Accept | Reject |
|
|
277
|
+
| Fixed `P1M`, payload `P30D` | Reject | Reject | Reject |
|
|
278
|
+
| Fixed time midnight, payload `24:00:00Z` | Accept | Accept | Reject |
|
|
279
|
+
| Lexical time `23:59:60Z` | Admit under candidate second-60 rule | Reject | Reject |
|
|
280
|
+
|
|
281
|
+
The table preserves the original XMLSchema 4.2.0 and libxml2 2.14.6 observations.
|
|
282
|
+
The [calendar scalar fixture](../test/conformance/fixtures/xsd/research-dt01/calendar-scalars.xsd) tests instance lexical observations separately from [fixed-value equality observations](../test/conformance/fixtures/xsd/research-dt01/calendar-equivalence.xsd).
|
|
283
|
+
Validator disagreement or agreement is never relabeled schema invalidity or production assessment support; these contrasts explain compatibility consequences without making engine voting the decision authority.
|
|
284
|
+
|
|
285
|
+
### Current reference evidence
|
|
286
|
+
|
|
287
|
+
The accepted [NT-CONT-01 evidence policy](reference-validation.md) uses `libxml2-wasm@0.7.2` with libxml2 2.15.1 as the current primary and the existing exact-calendar prototype for scoped selected-contract assertions.
|
|
288
|
+
The TypeScript reference suite attempts all five copied schemas, validates all 28 lexical payloads and all seven fixed-value payloads, and verifies its literal tables against the hash-pinned [historical source snapshot](../test/conformance/reference/legacy-source-snapshot.json).
|
|
289
|
+
The current primary, selected candidate A, historical external answers and unqualified capabilities remain separately named.
|
|
290
|
+
|
|
291
|
+
The selected second-60 overflow assertion accepts the original time operand while the primary rejects it; selected fixed-value equality likewise remains distinct from the primary's seven rejections.
|
|
292
|
+
These finite checks preserve the accepted exact calendar domain without claiming general XSD datatype validity, full PSVI or a fresh second-engine construction/equality result.
|
|
293
|
+
|
|
294
|
+
## Bounded research procedure and measurements
|
|
295
|
+
|
|
296
|
+
The [shared exact calendar kernel](../src/compiler/schemaExactCalendar.ts) implements selected A's schema comparison rules for all eight calendar families and duration. The [research import path](../test/research/dt01/exact-calendar.ts) re-exports that source implementation, preserving independent expectations and historical measurements. It uses BigInt year/month/day counts and exact decimal coefficient/scale arithmetic, with no JavaScript Date, floating approximation or pinned-draft runtime dependency. The procedure terminates for every valid finite operand given sufficient resources: fixed lexical scans, constant calendar cycle decomposition, at most twelve month steps and exactly four duration comparison anchors.
|
|
297
|
+
|
|
298
|
+
The independent S06 defaults remain 100,000 input graph nodes and 1,000,000 work steps, inclusive. The prototype's graph admission method is a synthetic budget boundary test; it does not reimplement graph indexing, replace S03/S04 limits or claim the matcher/payload/output stages are implemented. Existing conservative cyclic-depth handling remains with its owning stage.
|
|
299
|
+
|
|
300
|
+
Charge lexical scans/copies before regex matching, whitespace normalization, capture allocation and BigInt conversion. Charge conservative `(digits+2)^2` arithmetic work before exact products, powers, scaling and ordinal operations; charge month/cycle bookkeeping and fractional trimming separately. Stored digit bounds come from the validated lexical input and conservative carry/scale bounds; low-level ordinal helpers take trusted internal bounds and are not an untrusted operand API.
|
|
301
|
+
|
|
302
|
+
The precharged arithmetic envelope covers the small fixed month-length array and repeated modulo operations used by a calendar conversion. Copy/output estimates include signs, carries and fractional scale. Failure occurs before the refused charge, does not exceed either configured counter, and throws without returning a scalar/equality result; exhaustion is not a proof of inequality or invalidity.
|
|
303
|
+
|
|
304
|
+
Reduced-family parsing additionally charges seven fixed regex/lookup objects before creation, the reference-tuple copy before allocation, three fields for a copied modulo-clock decimal record, and ten fixed fields for each returned representative record. Representative display charges its string copy and three-field result container before allocation. These request-specific charges leave the original date/dateTime/duration measurements unchanged.
|
|
305
|
+
|
|
306
|
+
The probe does not import #184's later 4,096-digit scalar limit. A 5,000-digit schema year completes when enough work is supplied and returns resource-limit at the normal budget before BigInt conversion. A finite budget can prevent a decision but cannot redefine the approved scalar domain.
|
|
307
|
+
|
|
308
|
+
Measurements from [the committed measurement entry point](../test/research/dt01/measure.ts), Node 24.19.0, October 10, 2026:
|
|
309
|
+
|
|
310
|
+
| Case | Configured work | Charged work | Outcome | Time ms |
|
|
311
|
+
|---|---|---|---|---|
|
|
312
|
+
| `P1Y=P12M`, exact boundary | 1,451 | 1,451 | Complete equality | 0.141 |
|
|
313
|
+
| Same computation, one step less | 1,450 | 1,226 | Resource-limit before next charge | 0.118 |
|
|
314
|
+
| 100,000 graph nodes | 1,000,000 | 100,000 | Admitted | 0.027 |
|
|
315
|
+
| 100,001 graph nodes | 1,000,000 | 0 | Resource-limit before indexing | 0.010 |
|
|
316
|
+
| 200-digit positive year and 100 fraction digits | 10,000,000 | 1,339,331 | Exact round trip | 0.589 |
|
|
317
|
+
| 200-digit negative year and 100 fraction digits | 10,000,000 | 1,345,158 | Exact round trip | 0.135 |
|
|
318
|
+
| 5,000-digit year | 1,000,000 | 20,036 | Resource-limit before conversion | 0.159 |
|
|
319
|
+
| 5,000-digit year | 2,000,000,000 | 125,821,674 | Exact assessment | 0.166 |
|
|
320
|
+
| Reduced wrapped time, exact boundary | 15,487 | 15,487 | Exact representative returned | 0.088 |
|
|
321
|
+
| Same reduced computation, one step less | 15,486 | 15,486 | Resource-limit before final output | 0.066 |
|
|
322
|
+
| Reduced `gYear` offset crossing BCE | 1,000,000 | 11,641 | Exact representative returned | 0.100 |
|
|
323
|
+
| Reduced time strict endpoint plus 10^-30 seconds | 1,000,000 | 103,931 | Greater | 0.141 |
|
|
324
|
+
|
|
325
|
+
Times are observations and will vary; counters/outcomes are deterministic. The large year plus fraction round trips use an explicit increased work budget, not an assertion that they fit the default. Separate tests pay the full default 1,000,000 steps and reject the next step, and independently admit/reject the node boundary.
|
|
326
|
+
|
|
327
|
+
## Shared source staging in architecture recovery
|
|
328
|
+
|
|
329
|
+
The [schema scalar facade](../src/compiler/schemaScalarKernel.ts) assesses usable declared schema datatypes in an authenticated prepared context and charges the same request budget as preparation, relations and consumers. Its private primitive evaluator also forms facet operands; that narrower step can parse NOTATION enumeration values before the derived datatype is formed. Direct declared NOTATION use remains invalid, while its original declaration and QName context are checked for schema-only operands.
|
|
330
|
+
|
|
331
|
+
Every checked facade result retains its outstanding construction obligations, including through equality, ordering and inherited simple-content descriptors. A mixed complex base can supply an explicit inline simple restriction whose scalar facts are checked immediately, but its original particle still requires the named mixed-and-emptiable obligation. The aggregate owner must discharge that obligation before accepting a complete construction.
|
|
332
|
+
|
|
333
|
+
Hypothetical helper types use explicit component properties, including complete effective scalar facet groups and ordered union members. Their diagnostic source context does not supply final defaults or XML constructors. Comparable nonfixed scalar facets have an explicit effective normal form; inherited pattern and enumeration groups have a sufficient structural correspondence check. Typed facet operands can retain an original datatype, owner and context and are privately reassessed there, so inherited values are not reinterpreted by a helper's whitespace or union-member selection. Supplied complex simple content retains its exact scalar identity and a derivation-validity obligation; unresolved scalar facet-property correspondence retains a separate obligation. These local facts cannot certify a complete candidate while those obligations remain open.
|
|
334
|
+
|
|
335
|
+
### Exact facet component evidence map
|
|
336
|
+
|
|
337
|
+
The `facetComponentSet` input is an additive exact set of abstract facet components. It leaves the existing `facetLayers` normal form intact. Each component carries its fixed value, typed operand and one complete annotation infoset payload or explicit absence. An omitted annotation is unresolved. Repeated distinct scalar tuples remain in the exact set; their restriction-validity obligation remains open until the #266 F policy is selected. Identical complete tuples have set semantics. Enumeration operands use typed value-set equality. Independently constructed multi-pattern expressions still require the #266 P policy.
|
|
338
|
+
|
|
339
|
+
Identical complete annotation payloads establish equality, and differences in aligned documentation or application-information content establish a difference. Wrapper metadata, namespace-map or child-order differences remain unresolved when the abstract annotation mapping has not been established. In particular, no XML child order is silently chosen as the order of XSD application-information and user-information properties.
|
|
340
|
+
|
|
341
|
+
| Rule or evidence | Function | Regression control |
|
|
342
|
+
|---|---|---|
|
|
343
|
+
| Input shape, source ownership and shared budget | `validateRawSimpleTypeShape`, `projectFacetAnnotation` | `schema-exact-facet-components-independent.test.ts` |
|
|
344
|
+
| Exact scalar, fixed and incomparable bound tuples | `readFacetProperties`, `compareFacetProperties` | `schema-exact-facet-components-independent.test.ts` |
|
|
345
|
+
| Typed enumeration sets and pattern uncertainty | `compareFacetProperties` | `schema-exact-facet-components-independent.test.ts` |
|
|
346
|
+
| Component annotation content and missing evidence | `compareFacetAnnotations`, `compareFacetAnnotation` | `schema-exact-facet-components-independent.test.ts` |
|
|
347
|
+
| Candidate and finite evidence integration | `compareSchemaFacetProperties`, `checkCandidateCorrespondence` | `schema-exact-facet-components-independent.test.ts` |
|
|
348
|
+
|
|
349
|
+
The named `raw-simple-facet-restriction-validity` obligation remains for distinct repeated scalar tuples. #234 still owns semantic transfer, universal coverage, complete negative answers and termination. #184 still owns runtime payload enforcement. The [S06 research handoff](content-model-s06-research-handoff.md) and [reference policy](reference-validation.md) retain their broader acceptance gates.
|
|
350
|
+
|
|
351
|
+
Original lexical operands, namespace bindings, selected union members and typed list items remain available alongside exact values. Primitive value spaces remain distinct, including identical octets assessed as hexBinary and base64Binary. The existing 139 DT01 controls now execute the shared algorithm; independent real-graph controls cover decimal exactness, QName aliases, ordered unions, inherited facets, calendar boundaries, source obligations and shared exhaustion.
|
|
352
|
+
|
|
353
|
+
This staging reconciles the obsolete negative-year and second-60 exclusions in the preserved #231 draft without merging its actual-only assessment architecture. The approved profile, persisted formats, public defaults and activation gates remain unchanged. Full #268 local acceptance and #232/#234 research acceptance require their own complete evidence and independent review.
|
|
354
|
+
|
|
355
|
+
## Reproduction and handoff
|
|
356
|
+
|
|
357
|
+
Use Node 24 as the supported floor and Node 26 for current-line qualification from a fresh delivery checkout.
|
|
358
|
+
The current [reference setup and evidence contract](reference-validation.md) uses normal `npm ci` and strict TypeScript discovery.
|
|
359
|
+
Five historical source fixtures remain byte-identical to the pinned draft's `test/conformance/fixtures/xsd/assessment/`; the reference suite verifies each exact SHA-256 and the original commit.
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
npm ci
|
|
363
|
+
npm run typecheck:research
|
|
364
|
+
npm run typecheck:reference
|
|
365
|
+
npx vitest run test/conformance/reference/dt01-calendar-contract.test.ts test/research/dt01
|
|
366
|
+
npx tsx test/research/dt01/measure.ts
|
|
367
|
+
npm run test:reference:full
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
The same commands apply on Linux and Windows. Normal installation supplies the pinned Node primary; the four-lane qualification record owns actual execution evidence for each OS/Node combination.
|
|
371
|
+
|
|
372
|
+
Both `test:reference` and `test:reference:full` now discover the current TypeScript reference suite and retain all three original method families.
|
|
373
|
+
The historical leaf checkpoint passed 139 Vitest tests in two files, scoped TypeScript 6.0.3 and three retired reference methods with 5 schema/10 engine checks, 28 lexical/56 engine checks and 7 equality/14 engine checks.
|
|
374
|
+
Its archived environment used XMLSchema 4.2.0, lxml 6.1.0/libxml2 2.14.6 and elementpath 5.0.4; the 68 reduced-family tests supplement the original 71 exact calendar/duration tests.
|
|
375
|
+
|
|
376
|
+
IDE inspection tools were unavailable; repository TypeScript, fixture parsing and documentation checks supply the portable verification. The epic integration record owns final `npm run ci`, `npm run test:reference:full`, `npm run test:conformance`, documentation/support-matrix checks, installed-consumer coverage and the final reviewed delivery revision. These leaf results do not substitute for that combined final content gate.
|
|
377
|
+
|
|
378
|
+
Inspecting the pinned historical `schemaDatatypeValues.ts` identified two DT01 guards: every negative year returned `S06-DT-01`, and duration ordering returned it when anchor month addition reached year<=0 or second addition reached a negative timeline count. The recovered shared source replaces those guards with the selected exact repaired operations, skips year zero, distinguishes value addition from lexical tuples, and applies selected second-60 and reduced-family rules. The pinned draft remains preserved; public activation remains with #179.
|
|
379
|
+
|
|
380
|
+
The pinned `scalarSchemaAssessment.ts` retains facet layers and typed contexts, `attributeSchemaAssessment.ts` uses scalar equivalence for use/declaration fixed values, and `ElementValuePlan`/`ScalarSupportPlan` assign runtime scalar enforcement to #184. Their future integration must preserve that single owner, invalid/unsupported/resource distinctions, QName contexts, default/fixed augmentation and lexical witnesses.
|
|
381
|
+
|
|
382
|
+
Shared ADR/enforcement-matrix, evidence manifest, registry/traceability, indexes and changelog edits remain serialized under the epic coordinator. The required correction is a new current evidence statement; it does not change the historical pinned manifest, production support claims, catalog format 2, `xsd10-faithful-v1`, legacy routing, D07/platform/S01/S05 qualifications or later production gates.
|
|
383
|
+
|
|
384
|
+
The recorded maintainer selection settles the three project interpretation choices while preserving the primary conflicts and alternatives as evidence. Independent review must verify the complete selected local contract, all-family examples, original-context handoff and bounded accounting rather than merely rerun the prototype. #236's research gate requires that complete review, final delivery checks and merged artifacts; the separate #232 joint handoff and #179/#153 production integration gates remain with their owners.
|
|
385
|
+
|
|
386
|
+
No additional maintainer calendar choice remains pending in this delivery. No production support claim, payload implementation, profile narrowing or persisted-contract change is made by the research probe.
|