12 KiB
rules-swift Audit
Date: 2026-06-30
This audit checks PureXML against the Swift rule set at
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.
Current Verdict
| Area | Status | Evidence |
|---|---|---|
| Codified mechanical rules | Pass | scripts/check-rules-swift.sh wires leak, corpus-coverage, namespacing, validation-coverage, target pairing, and anti-pattern greps |
| Local mechanical gates | Pass | scripts/check-local-gate.sh runs the rules gate, style gate, build, and tests |
| Hook installation | Pass | .githooks/commit-msg and .githooks/pre-commit present; scripts/install-hooks.sh verifies rejection |
| Formatting and linting | Pass | .swiftformat and .swiftlint.yml committed; SwiftFormat runs before SwiftLint |
| Tests | Pass | Tests/ and PublicAPITests/ carry the parser, emitter, schema, and conformance suites |
| Validation coverage gate | Pass | scripts/check-validation-coverage.sh over docs/validation-coverage-registry.txt |
| Public CI backstop | Pass | .github/workflows/rules-swift.yml plus existing style and per-OS build workflows |
| Pre-UI layer | Not applicable | Headless library; no UI target |
| DocC documentation | Gap | DocC coverage not yet audited against documentation.md |
| Multi-renderer UI proof | Not applicable | No UI or renderer layer in this package |
Public Corpus Coverage
Rules corpus last read: 2026-06-30 (pinned snapshot 97dc70f).
Rules corpus file count: 88.
Rules corpus refreshed to rules-swift v2.14.0 (e624c8c) on 2026-11-02. New since v1.1.2: 21 rule files, listed in the tables below as NOT yet audited against this repository (a refresh of the pinned copy, not a conformance claim). The acceptance commands of both rules were run on Sources (372 Swift files searched) on 2026-11-02 and printed nothing. The rules' app-level tests (every pose, the fold on the simulator, the pane UI test) belong to an app and are not run and not claimed here. Changed since v1.1.2: .github/pull_request_template.md, CHANGELOG.md, README.md, code-style.md, concurrency.md, core/README.md, core/brainstorming.md, core/file-naming.md, core/folder-grouping.md, core/writing-plans.md, cross-platform.md, dependency-injection.md, documentation.md, exp/README.md, exp/app-target.md, exp/build-performance.md, exp/common-mistakes.md, exp/critical-rules.md, exp/dependency-management.md, exp/implementation-patterns.md, exp/migration.md, exp/package-swift.md, exp/testing.md, exp/verification.md, exp/when-to-create.md, framework-policy.md, linux-server.md, namespacing.md, package-architecture.md, package-import-contract.md, package-structure.md, parsing-rules.md, scripts/check-namespacing.sh, scripts/leak-gate.sh, shared-protocols.md, testing.md, ui/appkit-views.md, ui/components.md, ui/flowspec.md, ui/pom.md, ui/swiftui-views.md, ui/uikit-views.md, ui/view-models.md (see the canon's CHANGELOG); none adds or alters an acceptance command this repository runs. The files new since the last full read are listed and not yet audited against this repository.
The local gate verifies that every Markdown or shell file in the public
rules-swift checkout selected by RULES_SWIFT_DIR is named in this section and
that the pinned snapshot digest matches docs/rules-swift-corpus.sha256. That
does not mean every rule is fully satisfied; it means no public rule source can
be silently omitted.
| Public rule source | Coverage |
|---|---|
.github/pull_request_template.md |
Vendored, pinned |
business-rules-and-constraints.md |
Vendored, pinned |
CHANGELOG.md |
Vendored, pinned |
code-style.md |
Vendored, pinned |
concurrency.md |
Vendored, pinned |
CONTRIBUTING.md |
Vendored, pinned |
CONVENTIONS.md |
Vendored, pinned |
core/brainstorming.md |
Vendored, pinned |
core/commits.md |
Vendored, pinned |
core/file-naming.md |
Vendored, pinned |
core/first-principles-analysis.md |
Vendored, pinned |
core/folder-grouping.md |
Vendored, pinned |
core/git-discipline.md |
Vendored, pinned |
core/no-shortcuts-first-principles.md |
Vendored, pinned |
core/oracle-first.md |
Vendored, pinned |
core/proof-discipline.md |
Vendored, pinned |
core/README.md |
Vendored, pinned |
core/round-trip-transformation.md |
Vendored, pinned |
core/rules.md |
Vendored, pinned |
core/self-improve.md |
Vendored, pinned |
core/systematic-debugging.md |
Vendored, pinned |
core/testing-discipline.md |
Vendored, pinned |
core/verification.md |
Vendored, pinned |
core/writing-plans.md |
Vendored, pinned |
cross-platform.md |
Vendored, pinned |
dependency-injection.md |
Vendored, pinned |
documentation-search.md |
Vendored, pinned |
documentation.md |
Vendored, pinned |
domain-first.md |
Vendored, pinned |
exp/app-target.md |
Vendored, pinned |
exp/build-performance.md |
Vendored, pinned |
exp/common-mistakes.md |
Vendored, pinned |
exp/critical-rules.md |
Vendored, pinned |
exp/dependency-management.md |
Vendored, pinned |
exp/implementation-patterns.md |
Vendored, pinned |
exp/migration.md |
Vendored, pinned |
exp/package-swift.md |
Vendored, pinned |
exp/README.md |
Vendored, pinned |
exp/testing.md |
Vendored, pinned |
exp/verification.md |
Vendored, pinned |
exp/when-to-create.md |
Vendored, pinned |
formatting-and-linting.md |
Vendored, pinned |
framework-policy.md |
Vendored, pinned |
linux-server.md |
Vendored, pinned |
namespacing.md |
Vendored, pinned |
openapi-generated.md |
Vendored, pinned |
package-architecture.md |
Vendored, pinned |
package-import-contract.md |
Vendored, pinned |
package-structure.md |
Vendored, pinned |
parsing-rules.md |
Vendored, pinned |
README.md |
Vendored, pinned |
scripts/check-namespacing.sh |
Vendored, pinned |
scripts/leak-gate.sh |
Vendored, pinned |
shared-protocols.md |
Vendored, pinned |
testing.md |
Vendored, pinned |
ui/appkit-views.md |
Vendored, pinned |
ui/colors.md |
Vendored, pinned |
ui/components.md |
Vendored, pinned |
ui/flowspec.md |
Vendored, pinned |
ui/fonts.md |
Vendored, pinned |
ui/native-per-platform.md |
Vendored, pinned |
ui/pom.md |
Vendored, pinned |
ui/pre-ui-layer.md |
Vendored, pinned |
ui/swiftui-views.md |
Vendored, pinned |
ui/three-renderers.md |
Vendored, pinned |
ui/uikit-views.md |
Vendored, pinned |
ui/view-models.md |
Vendored, pinned |
validation-rules.md |
Vendored, pinned |
accessibility.md |
Listed (new since v1.1.2; NOT yet audited against this repository) |
app-intents.md |
Listed (new since v1.1.2; NOT yet audited against this repository) |
app-logging.md |
Listed (new since v1.1.2; NOT yet audited against this repository) |
conventions.md |
Listed (new since v1.1.2; NOT yet audited against this repository) |
crash-and-state-reporting.md |
Listed (new since v1.1.2; NOT yet audited against this repository) |
help.md |
Listed (new since v1.1.2; NOT yet audited against this repository) |
iphone-duo.md |
Listed (acceptance commands run on Sources, all empty; app-level tests not run, no app here) |
scripts/check-changelog-touched.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/check-core-sync.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/check-file-names.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/check-issue-body-staleness.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/check-links.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/check-repo.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/check-rule-structure.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/check-version-bumped.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/sync-priority-label.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/sync-rules.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
scripts/test-gates.sh |
Tracked; canon self-audit tooling, not applicable to this consumer repo. |
ui/appuikit.md |
Listed (new since v1.1.2; NOT yet audited against this repository) |
ui/pane-layout.md |
Listed (acceptance commands run on Sources, all empty; app-level tests not run, no app here) |
versioning.md |
Listed (new since v1.1.2; NOT yet audited against this repository) |
Rule Matrix
| Rule file | Applies | Status | Evidence or gap |
|---|---|---|---|
core/no-shortcuts-first-principles.md |
yes | Pass | scripts/check-rules-swift.sh greps Sources/ and Tests/ for shortcut patterns |
namespacing.md |
yes | Pass | scripts/check-namespacing.sh: one public type per file under PureXML |
package-architecture.md |
yes | Pass | target/test-target pairing enforced in scripts/check-rules-swift.sh |
package-structure.md |
yes | Pass | root Package.swift, root Sources/, root Tests/ |
cross-platform.md |
yes | Pass | macOS, Linux, Windows, WASI build workflows under .github/workflows/ |
validation-rules.md |
yes | Pass | scripts/check-validation-coverage.sh over the coverage registry |
framework-policy.md |
yes | Pass | banned-stack octal scan in scripts/check-rules-swift.sh |
testing.md |
yes | Pass | parser, emitter, schema, and W3C conformance suites under Tests/ |
documentation.md |
yes | Gap | DocC coverage not yet audited |
ui/* |
no | Not applicable | headless library, no UI layer |
exp/package-swift.md |
no | Not applicable | single-target package, no exp closure manifest |
Required Remediation
- Audit DocC coverage against
documentation.mdand resolve thedocumentationrow. - The public leak gate (
scripts/leak-gate.sh) flags the repo's pre-existing Antigravity onboarding content (GEMINI.md,docs/onboarding-antigravity.md, and the Antigravity references inAGENTS.md). These are owner-managed and out of scope for this additive adoption; resolve with the maintainer whether to whitelist them in the gate or relocate the content. - Repoint the two remaining
docs/rules/links indocs/onboarding-antigravity.md(owner-managed) tothird_party/rules-swift/anddocs/research-first.md.
Until those items are complete, state the honest status: PureXML has strict rule
enforcement wired in, and that enforcement correctly fails while the repo does
not yet fully conform to the entire rules-swift corpus.