The attribute-value scanner ran the entity decoder on every value, and the decoder re-scanned the whole value for '&' before doing nothing when none was present. The byte-run scanner already visits every value byte, so it now notes any '&' and an ampersand-free value (the common case) returns its normalized run directly. Measured against a same-machine-state baseline, every run came in below every baseline run, ~4% faster parse on the 20k-item generated corpus. Move the bulk byte-run scanners (contentRunBytes, attributeRunBytes) into ReaderByteRuns.swift and centralize their cursor mutation through a single advanceByteRun method, so Reader's position fields stay write-encapsulated in Reader.swift while both files stay under the length cap. The byte and Character paths are held to identical decoded values by the differential oracle, extended with ampersand-free, entity, and character-reference attribute cases. No spec behavior changed. |
||
|---|---|---|
| .. | ||
| design | ||
| plans | ||
| rules | ||
| benchmarks.md | ||
| onboarding-antigravity.md | ||
| production-readiness.md | ||
| release-hurdles.md | ||
| roadmap.md | ||
| schema-validity-burndown.md | ||
| validation-coverage-registry.txt | ||
| validation-field-registry.txt | ||
| xsts-deviations.md | ||