An element restricting a base choice was always checked by the
effective-total-range approximation, which exists for one reason: the
literal section 3.9.6 pairing has no allowance for occurrence counts
accumulated across the choice's own repetitions and over-rejects
W3C-read-valid schemas (particlesZ001, whose manifest calls the rule
ambiguous). That ambiguity is impossible when the choice cannot repeat:
at {max occurs} = 1 every accepted child comes from one traversal of one
branch, so the literal rule governs. elementRestrictsChoice now applies
the literal pairing (the derived element, with its own occurrence range,
must validly restrict some non-pointless branch) when base maxOccurs is
1, and keeps the effective-range reading only for repeating choices.
Closes XSTS particlesHa161 (a derived a{0,1} is not a pointwise
NameAndTypeOK restriction of a required branch a{1,1}) and particlesM034
(a derived d1+ cannot map into the branch (d1*, d2+): the required d2 is
unmapped and not emptiable). The settled-valid neighbors that pin the
boundary from the other side all still pass: Ha160, M002, M003, M035,
and the Z001 shape, each now a regression test in
XSDParticleChoiceRestrictionTests. invalid-schemas-accepted 6 -> 4.
particlesIg004 is reclassified as spec-divergent (4 -> 3): section 3.3.2
maps block="#all" and the explicit substitution/extension/restriction
list to the SAME {disallowed substitutions} set, so NameAndTypeOK clause
5's superset requirement holds and the invalid expectation has no spec
path; it is jointly unsatisfiable with the settled Ig001/002/003 (equal
sets, valid) and Ig005 (#all covers the triple, valid).
The remaining three schema deviations are documented divergences, not
open bugs: Ik025/Ik027 (cos-st-derived-ok 2.2.4 reading) and schN12,
newly adjudicated in docs/xsts-deviations.md: its chameleon redefine
fails src-redefine 6.2.2 on NameAndTypeOK clause 1 (no-namespace locals
vs qualified locals), but 6.2.2 cannot be enforced uniformly because
mgO013's settled-VALID schema also violates it; any uniform enforcement
trades a false negative for a valid-schema-rejected false positive.
Also corrects the stale deviations-doc row that listed the already-closed
particlesIk011 and omitted schN12; the failures file is the authority.
Gates: full XSTS release suite green at 0/3/0/4 (valid buckets unchanged
at zero), libxml2 differential green at 244 pinned entries (Ha161 and
M034 newly pinned, both compile under libxml2), full local gate green.
3.0 KiB
Roadmap
Living index of open work. Pin #3
(production readiness for IDE use) for the checklist view. Released v0.4.8
(2026-07-05); pre-1.0 until the production-readiness gates in
docs/production-readiness.md are earned.
The tracker was rebuilt on Codeberg after the original issue history was lost with the GitHub repository; pre-migration issue numbers cited in older changelog entries and commit messages refer to that lost tracker.
Current focus (priority order)
- #4: invalid schemas
accepted is at 3, and every remaining case is a documented divergence, not
an open bug: Ik025/Ik027 (cos-st-derived-ok 2.2.4 reading) and schN12
(src-redefine 6.2.2 cannot be enforced uniformly without rejecting
mgO013's settled-valid schema). See
docs/xsts-deviations.md. - #5: drive invalid
instances accepted from 4 to 0 (contested-spec and policy-dependent tail,
docs/xsts-deviations.md). - Proven (not capped) interactive resource bounds beyond the content matcher
(
docs/release-hurdles.md, Part 2; the graph-structured-stack matcher's linear bound is already count-asserted).
Parallel: #7 (Xalan XSLT
suite burn-down, 26 pinned failures),
#6 (performance epic,
live table in docs/benchmarks.md).
XSTS gates (current enforced baselines)
These mirror the ratchet asserted in Tests/XSTSSuiteTests.swift; update both
together.
| Gate | Now | Issue |
|---|---|---|
| Valid schemas rejected | 0 | at floor, enforced by the ratchet |
| Invalid schemas accepted | 3 | #4 |
| Valid instances rejected | 0 | at floor, enforced by the ratchet |
| Invalid instances accepted | 4 | #5 |
Gates are metric trackers, not implementation tasks. Ratchet baselines in
Tests/XSTSSuiteTests.swift when counts fall; a rising count is a regression.
Milestones
| Milestone | Exit criteria | Key issues |
|---|---|---|
| M1: Trust the oracle | Reference differentials + fuzz | done (schema determinism, facet-value, and instance differentials all land opt-in) |
| M2: Schema compiles correctly | #4 to 0 | #4 |
| M3: Instances validate correctly | #5 to 0 | #5 |
| M4: IDE-ready diagnostics | Located errors, proven bounds | located diagnostics done; bounds under #3 |
| M5: 1.0 | All gates at 0 | #3, #6, #7 |
Labels
| Label | Meaning |
|---|---|
epic |
Grouping issue |
gate |
XSTS outcome metric |
task |
Implementation work |
area-schema / area-instance / area-infra / area-xslt / area-perf |
Subsystem |
priority-P0 / P1 / P2 |
Critical path vs parallel |
Related docs
docs/production-readiness.md: the bar for IDE authoritydocs/schema-validity-burndown.md: schema-side burn-down protocoldocs/xsts-deviations.md: deviation taxonomy and documented floors