chore(release): stamp 0.4.8 from main and repoint to codeberg.org/Mihaela

The earlier release/0.4.8 branch stamped the changelog but the tag was
never cut, and main moved 60 commits past it. Fold the accumulated
unreleased entries into the still-unpublished 0.4.8 section, redate it,
repoint every remaining github.com/mihaelamj reference (badges, support
links, roadmap, the XSLT vendor-url system property), and track the
shared-rules baseline v1.1.2.
This commit is contained in:
Mihaela Mihaljevic 2026-07-05 05:31:16 +02:00
parent c7ef8abfd9
commit fa4ac43d2d
8 changed files with 25 additions and 21 deletions

View File

@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Questions and ideas
url: https://github.com/mihaelamj/PureXML/discussions
url: https://codeberg.org/Mihaela/PureXML/discussions
about: Ask questions, float ideas, or discuss design in Discussions.
- name: Security issue
url: https://github.com/mihaelamj/PureXML/blob/main/SECURITY.md
url: https://codeberg.org/Mihaela/PureXML/blob/main/SECURITY.md
about: Do not file security issues publicly. Follow the security policy instead.

1
.rules-version Normal file
View File

@ -0,0 +1 @@
1.1.2

View File

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
Nothing yet.
## [0.4.8] - 2026-07-05
### Changed
- A generated-value facet differential against libxml2 (`FacetValidationDifferentialTests`, opt-in via `FACET_DIFF` and `xmllint`) exercises the datatype and facet value space, the largest correctness surface the determinism and instance-content differentials do not touch: for each generated simple type restricting a built-in (`xs:int`, `decimal`, `double`, `string`, `token`, `boolean`, `date`, `dateTime`, `nonNegativeInteger`) by a subset of its facets (min/maxInclusive/Exclusive, length/min/maxLength, totalDigits/fractionDigits, pattern, enumeration, whiteSpace), it validates a pool of values chosen at and around the facet boundaries with PureXML and with libxml2 and flags every disagreement, asserting the cardinal rule (zero values PureXML rejects that libxml2 accepts). Over about ten thousand values it found one false positive, the `NaN` enumeration fixed below, and otherwise zero; the residual false negatives are contested datatype readings (whitespace collapse, `NaN` against a range facet) where PureXML matches the XSD spec and this libxml2 build is stricter. Test-only.
@ -53,7 +57,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- XSTS invalid-schemas-accepted (#145): a particle restriction whose restricting element has a union-typed base element now applies Type Derivation OK (Simple) (`cos-st-derived-ok`) rather than structural member subsetting. The NameAndTypeOK type clause (§3.9.6) requires the restricting element's type to be validly derived from the base element's type; PureXML accepted a *separately declared* union whenever its member types were a subset of the base union's members, which is not the spec's derivation relation. The restricting type is now valid over a union base only if it is the base type, derives from it through a declared restriction chain, or (clause 2.2.4) validly derives from one of the union's member types. Catches particlesIk011 (a fresh `union(integer)` is not a restriction of `union(integer, string)`): invalid-schemas-accepted 9 to 8, with valid-schemas-rejected held at 0 (verified over the full XSTS; the change is scoped to the element-restriction path, so no attribute or simple-type derivation check moved). Disclosed divergence: particlesIk025/Ik027, where the restricting type derives from a union *member*, are accepted per `cos-st-derived-ok` clause 2.2.4, a contested reading their XSTS `invalid` expectation does not share.
## [0.4.8] - 2026-06-27
### Removed

View File

@ -1,11 +1,11 @@
# PureXML
[![Style and namespacing](https://github.com/mihaelamj/PureXML/actions/workflows/style.yml/badge.svg)](https://github.com/mihaelamj/PureXML/actions/workflows/style.yml)
[![Swift macOS](https://github.com/mihaelamj/PureXML/actions/workflows/swift-macos.yml/badge.svg)](https://github.com/mihaelamj/PureXML/actions/workflows/swift-macos.yml)
[![Swift Linux](https://github.com/mihaelamj/PureXML/actions/workflows/swift-linux.yml/badge.svg)](https://github.com/mihaelamj/PureXML/actions/workflows/swift-linux.yml)
[![Swift Windows](https://github.com/mihaelamj/PureXML/actions/workflows/swift-windows.yml/badge.svg)](https://github.com/mihaelamj/PureXML/actions/workflows/swift-windows.yml)
[![Swift WASM](https://github.com/mihaelamj/PureXML/actions/workflows/swift-wasm.yml/badge.svg)](https://github.com/mihaelamj/PureXML/actions/workflows/swift-wasm.yml)
[![XSTS conformance](https://github.com/mihaelamj/PureXML/actions/workflows/swift-xsts.yml/badge.svg)](https://github.com/mihaelamj/PureXML/actions/workflows/swift-xsts.yml)
[![Style and namespacing](https://codeberg.org/Mihaela/PureXML/actions/workflows/style.yml/badge.svg?branch=main)](https://codeberg.org/Mihaela/PureXML/actions?workflow=style.yml)
[![Swift macOS](https://codeberg.org/Mihaela/PureXML/actions/workflows/swift-macos.yml/badge.svg?branch=main)](https://codeberg.org/Mihaela/PureXML/actions?workflow=swift-macos.yml)
[![Swift Linux](https://codeberg.org/Mihaela/PureXML/actions/workflows/swift-linux.yml/badge.svg?branch=main)](https://codeberg.org/Mihaela/PureXML/actions?workflow=swift-linux.yml)
[![Swift Windows](https://codeberg.org/Mihaela/PureXML/actions/workflows/swift-windows.yml/badge.svg?branch=main)](https://codeberg.org/Mihaela/PureXML/actions?workflow=swift-windows.yml)
[![Swift WASM](https://codeberg.org/Mihaela/PureXML/actions/workflows/swift-wasm.yml/badge.svg?branch=main)](https://codeberg.org/Mihaela/PureXML/actions?workflow=swift-wasm.yml)
[![XSTS conformance](https://codeberg.org/Mihaela/PureXML/actions/workflows/swift-xsts.yml/badge.svg?branch=main)](https://codeberg.org/Mihaela/PureXML/actions?workflow=swift-xsts.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
PureXML is a dependency-free XML package written entirely in Swift.
@ -20,7 +20,7 @@ intentionally strict about portability:
- root Swift package layout
- macOS, Linux, Windows, and WASI build gates
It is a sibling project to [PureYAML](https://github.com/mihaelamj/PureYAML) and
It is a sibling project to [PureYAML](https://codeberg.org/Mihaela/PureYAML) and
follows the same structure, rules, and verification gates.
## Roadmap
@ -142,7 +142,7 @@ flowchart TB
## Status
**Current focus:** production readiness for IDE use ([#167](https://github.com/mihaelamj/PureXML/issues/167)). XSTS settled baselines (valid schemas rejected / invalid schemas accepted / valid instances rejected / invalid instances accepted), enforced in `Tests/XSTSSuiteTests.swift`: **0 / 39 / 0 / 26**. See [`docs/roadmap.md`](docs/roadmap.md) for milestones and open tasks.
**Current focus:** production readiness for IDE use ([#167](https://codeberg.org/Mihaela/PureXML/issues/167)). XSTS settled baselines (valid schemas rejected / invalid schemas accepted / valid instances rejected / invalid instances accepted), enforced in `Tests/XSTSSuiteTests.swift`: **0 / 39 / 0 / 26**. See [`docs/roadmap.md`](docs/roadmap.md) for milestones and open tasks.
PureXML is a working, dependency-free XML library today: parse, emit, validate,
query, and stream documents on macOS, Linux, Windows, and WASM. The test suite

View File

@ -2,8 +2,8 @@
Need help with PureXML? Here is where to go.
- **Questions and ideas**: open a [Discussion](https://github.com/mihaelamj/PureXML/discussions).
- **Bug reports**: open an [issue](https://github.com/mihaelamj/PureXML/issues/new/choose)
- **Questions and ideas**: open a [Discussion](https://codeberg.org/Mihaela/PureXML/discussions).
- **Bug reports**: open an [issue](https://codeberg.org/Mihaela/PureXML/issues/new/choose)
using the bug form.
- **Feature requests**: open an issue using the feature form.
- **Security issues**: do not open a public issue. See [SECURITY.md](SECURITY.md).

View File

@ -322,7 +322,7 @@ extension PureXML.XSLT {
switch localPart(name) {
case "version": .number(1.0)
case "vendor": .string("PureXML")
case "vendor-url": .string("https://github.com/mihaelamj/PureXML")
case "vendor-url": .string("https://codeberg.org/Mihaela/PureXML")
default: .string("")
}
}

View File

@ -1,6 +1,6 @@
# Roadmap
Living index of open work. **Pin [#167](https://github.com/mihaelamj/PureXML/issues/167)** on GitHub for the checklist view. Released **v0.2.0** (2026-06-16); pre-1.0 until the production-readiness gates in `docs/production-readiness.md` are earned.
Living index of open work. **Pin [#167](https://codeberg.org/Mihaela/PureXML/issues/167)** on GitHub 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.
## Current focus (priority order)
@ -9,7 +9,7 @@ Living index of open work. **Pin [#167](https://github.com/mihaelamj/PureXML/iss
3. **#169**: located schema diagnostics (line/column).
4. **#172–#174**: instance-validation cluster tasks.
Parallel: **#130** (XSLT suite), **#139** (performance epic; tasks [#175](https://github.com/mihaelamj/PureXML/issues/175)–[#178](https://github.com/mihaelamj/PureXML/issues/178)).
Parallel: **#130** (XSLT suite), **#139** (performance epic; tasks [#175](https://codeberg.org/Mihaela/PureXML/issues/175)–[#178](https://codeberg.org/Mihaela/PureXML/issues/178)).
**M1 done:** #171 schema differential harness (closed; opt-in; 231 XSTS oracle disagreements pinned) + generative fuzz + validation framework (#92).
@ -19,10 +19,10 @@ These mirror the ratchet asserted in `Tests/XSTSSuiteTests.swift`; update both t
| Gate | Now | Issue |
|---|---|---|
| Valid schemas rejected | 0 | [#148](https://github.com/mihaelamj/PureXML/issues/148) |
| Invalid schemas accepted | 43 | [#145](https://github.com/mihaelamj/PureXML/issues/145) |
| Valid instances rejected | 0 | [#146](https://github.com/mihaelamj/PureXML/issues/146) |
| Invalid instances accepted | 31 | [#147](https://github.com/mihaelamj/PureXML/issues/147) |
| Valid schemas rejected | 0 | [#148](https://codeberg.org/Mihaela/PureXML/issues/148) |
| Invalid schemas accepted | 43 | [#145](https://codeberg.org/Mihaela/PureXML/issues/145) |
| Valid instances rejected | 0 | [#146](https://codeberg.org/Mihaela/PureXML/issues/146) |
| Invalid instances accepted | 31 | [#147](https://codeberg.org/Mihaela/PureXML/issues/147) |
Gates are **metric trackers**, not implementation tasks. Pick up **task** issues; ratchet baselines in `Tests/XSTSSuiteTests.swift` when counts fall.

View File

@ -3,7 +3,7 @@
Date: 2026-06-30
This audit checks PureXML against the Swift rule set at
<https://github.com/mihaelamj/rules-swift>. It separates mechanical proof from
<https://codeberg.org/Mihaela/rules-swift>. It separates mechanical proof from
architecture findings. Fill every row before claiming conformance. A row left at
`Gap` or `Partial` keeps `scripts/check-rules-swift.sh` red, which is the
intended behavior until the repo actually conforms.