Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Cargo build artifacts
/target/
# Nested target/ for out-of-workspace sub-crates (e.g. tools/synthetic-dwg).
# Nested target/ for out-of-workspace sub-crates (wasm/, fuzz/).
**/target/
# Separate CARGO_TARGET_DIR used to verify the MSRV without evicting the
# stable toolchain's incremental cache:
Expand Down
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ No library behaviour changes in this entry.
- **CI gates.** Perf benches the PR's merge-base and the PR in one job on one host, instead of comparing against a baseline cached from another runner, which had measured hardware and flagged PRs that touched no benchmarked code (#217). A Spec coverage job runs `tools/ci/spec_coverage.py`, so `docs/spec-coverage.md` keeps one row for every section of ODA spec v5.4.1 and never drifts from `docs/data/spec-coverage.tsv` (#219). The PII guard also refuses merge-conflict markers (#309), and the Spec coverage job refuses ARCHITECTURE.md sections that repeat or skip a letter (#334). The nightly fuzz run covers its whole budget and fails on a crash (#232). Every cargo workflow sets `CARGO_NET_RETRY=10` (#268), and the wasm-pack install retries up to five times on a transient download failure (#342). `main` requires Corpus and Spec coverage (#292); docs/maintaining.md describes the `main-protection` ruleset, with no bypass, as it is (#220). `tools/maintainer/clean_caches.py`, which `audit.py` already pointed to, removes the Actions caches of closed pull requests and the superseded ones per key family (#361), the cache having stood at 9.95 GB of its 10 GB. The five actionlint findings on `main` are cleared without changing what a workflow does (#269): the PII guard's backslash-ended patterns are double-quoted, the docs.rs docstring ratio counts with `awk` and quoted arrays, and `publish-pypi` in `release.yml` stays off through a condition that is never true rather than a literal `if: false`, which actionlint rejects.
- **Merge train.** `tools/maintainer/train/train.sh` lands queued decoder PRs one at a time, regenerating the generated files (`tools/corpus/baseline.tsv`, `docs/spec-coverage.md`, the spec-example fixtures) and renumbering colliding ARCHITECTURE.md sections instead of leaving every open PR stale after each merge (#298). It ratchets the DXF oracle baseline as well (#300), defers a PR whose build is refused a governor lease instead of dropping it from the queue (#304), resolves both-sides appends to CLEANROOM.md (#327), never leaves auto-merge on a PR it stops landing (#336), resets its worktree before each checkout (#338), ignores oracle rows the PR itself renamed (#344) and, after main carried three `7n` sections, numbers ARCHITECTURE.md's newer sections in landing order (#322).
- **Documentation.** CLAUDE.md for coding agents and contributor docs brought up to date, including the decoder registration steps and the rule that evidence is real-file, not unit tests (#218, #257); a 10-minute contributor quickstart at the top of CONTRIBUTING.md (#18); a CLEANROOM.md entry that a class layout the spec never prints is derived from AutoCAD's own DWG and its DXF export, accepted only when it closes every record's boundary on every release and every decoded value equals the twin's group (#321); AGENTS.md gives a reviewer the clean-room rule (#369).
- **Fixtures and benchmarks.** `examples/build_fixtures` writes the four canonical R2004-family fixtures, five entities each, byte-deterministically, so the coverage-smoke job has a corpus to run against instead of skipping, with a 95 % floor on the decoded ratio and a noise floor for the Criterion job (#19).
- **Fixtures and benchmarks.** `examples/build_fixtures` writes the four canonical R2004-family fixtures, five entities each, byte-deterministically, so the coverage-smoke job has a corpus to run against instead of skipping, with a 95 % floor on the decoded ratio and a noise floor for the Criterion job (#19). `tools/synthetic-dwg`, an out-of-workspace R14 generator that no CI job built, is removed (#20); `examples/build_fixtures` supersedes it, and the four byte-identical sample files it produced for the viewer stay, with their provenance recorded in `wasm/examples/samples/README.md`.
- **Dependencies.** thiserror 1.0.69 to 2.0.20 (#3) and 2.0.21 (#93), criterion 0.5.1 to 0.7.0 (#4), the cargo patch group (anyhow, clap, serde, serde_json) in #11 and #93, libfuzzer-sys 0.4.13 in `/fuzz` (#200), js-sys and serde in `/wasm` (#201); the Actions `upload-artifact` 7.0.1 (#5), `configure-pages` 6.0.0 (#6), `download-artifact` 8.0.1 (#7) and 8.0.2 (#202), `cache/save` 6.1.0 (#85), `softprops/action-gh-release` 3.0.3 (#86), `gitleaks-action` (#87, #92 to 3.0.0), `deploy-pages` 5.0.1 (#90), `checkout` 7.0.1 (#91) and `upload-pages-artifact` 5.0.0 (#203).
- **Direct commits before the PRs, 2026-04-20 to 2026-04-25.** Pre-alpha claims toned down across the public surfaces and the uniqueness framing removed (58753a1, 566711b, 7ec595b), HATCH path coverage documented (fc3ee5c), rustdoc intra-doc links fixed and two let-chains in `svg.rs` split so the crate compiles on the 1.85 MSRV (de37ead), wasm-opt run with bulk-memory enabled so `wasm-pack build` works (b0f49b9), and the wasm attestation (V-19) scoped to the Import section with Pages auto-enabled (be3a71d).

Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ python3 tools/streaming/verify.py target/debug/examples/stream_header target/deb

Features: `lz77-trace` (plus `DWG_LZ77_TRACE=1` at runtime) traces the LZ77 decoder; `dhat-heap` enables `examples/dhat_profile.rs`. Benches are Criterion (`cargo bench`); the Perf workflow fails a PR only when a bench is at least 20% and at least 5 µs slower than `main` and repeats on a re-run. Measure before touching `bitcursor.rs`, `bitwriter.rs` or `lz77*.rs`.

`wasm/` (`wasm-pack build --target web --release`), `fuzz/` (`cargo +nightly fuzz run <target>`, targets in `fuzz/fuzz_targets/`) and `tools/synthetic-dwg/` are separate crates, not workspace members. `python3 tools/maintainer/audit.py` runs the read-only GitHub housekeeping checks from `docs/maintaining.md` (needs `gh`).
`wasm/` (`wasm-pack build --target web --release`) and `fuzz/` (`cargo +nightly fuzz run <target>`, targets in `fuzz/fuzz_targets/`) are separate crates, not workspace members. `python3 tools/maintainer/audit.py` runs the read-only GitHub housekeeping checks from `docs/maintaining.md` (needs `gh`).

## Real-file corpus

Expand Down
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ exclude = [
"fuzz/",
# Developer-experience scaffolding. `templates/` contains a
# cargo-generate template for entity decoders (handlebars
# placeholders, not valid Rust); `tools/` contains auxiliary
# binaries like the synthetic-DWG fixture generator. Neither
# belongs in the published library crate.
# placeholders, not valid Rust); `tools/` contains the corpus,
# oracle, streaming and maintainer scripts. Neither belongs in the
# published library crate.
"templates/",
"tools/",
# Note: CHANGELOG.md, README.md, SECURITY.md, ARCHITECTURE.md, and
Expand Down
4 changes: 2 additions & 2 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -252,8 +252,8 @@ the current capability matrix.
- 11 launch posts (blog, HN, r/rust, r/cad, LinkedIn, Reddit,
Twitter, LibreCAD/FreeCAD/QCAD forums, ODA community).
- 11 DEV docs (CONTRIBUTING, CLEANROOM, THREAT_MODEL, EXTENDING_DECODERS,
entity-decoder cargo-generate template, synthetic DWG generator,
GitHub Discussions, issue + PR templates).
entity-decoder cargo-generate template, GitHub Discussions,
issue + PR templates).

### Security (SEC-series)
- `DecompressLimits` + LZ77 output cap (SEC-01, 02, 03, 04).
Expand Down
6 changes: 3 additions & 3 deletions tools/maintainer/audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@
# A research or Measure branch with no pull request is kept while its work is
# live; one whose last commit is older than this is stale (docs/maintaining.md).
BRANCH_STALE_DAYS = 14
# Directories with a lockfile that Dependabot deliberately does not update, and why
# (docs/maintaining.md says the same).
# The 1.0 release decision; every open issue under the 1.0.0 milestone serves one of
# its requirements (docs/maintaining.md, housekeeping item 8).
RELEASE_CRITERIA = ROOT / "docs" / "release-1.0-criteria.md"
UNWATCHED = {"/tools/synthetic-dwg": "superseded by examples/build_fixtures.rs; its removal is #20"}
# Directories with a lockfile that Dependabot deliberately does not update, mapped to
# why. None today.
UNWATCHED = {}
results = []


Expand Down
79 changes: 0 additions & 79 deletions tools/synthetic-dwg/Cargo.lock

This file was deleted.

8 changes: 0 additions & 8 deletions tools/synthetic-dwg/Cargo.toml

This file was deleted.

220 changes: 0 additions & 220 deletions tools/synthetic-dwg/src/main.rs

This file was deleted.

Loading
Loading