Releases: EffortlessMetrics/copybook-rs
copybook-rs 0.4.3
What's Changed
- chore: sanitize placeholder token and clean up deny.toml by @EffortlessSteven in #287
- fix: make workspace build and test cleanly on fresh Windows clone by @EffortlessSteven in #288
- fix: detect Windows temp directories with backslash in bench-report by @EffortlessSteven in #289
- feat: add copybook-arrow crate and implement BDD smoke tests by @EffortlessSteven in #290
- refactor: Extract 14 focused microcrates from monolithic crates by @EffortlessSteven in #293
- fix: add backticks to FieldKind and RecordBatch in doc comments by @EffortlessSteven in #318
- feat: workspace restructure, microcrate architecture, and comprehensive test build-out by @EffortlessSteven in #295
- build(deps)(deps): bump the actions-updates group across 1 directory with 7 updates by @dependabot[bot] in #320
- fix(ci): skip perf-validation when receipt file is absent by @EffortlessSteven in #321
- ci: make codecov status checks informational by @EffortlessSteven in #322
- fix(test): guard sign_separate proptest for feature flag disabled state by @EffortlessSteven in #323
- fix(ci): fix perf-validation jq boolean check and stray numbers scope by @EffortlessSteven in #324
- build(deps)(deps): bump the routine-minor-patch group across 1 directory with 2 updates by @dependabot[bot] in #319
- fix(test): relax flaky perf thresholds for CI runner variance by @EffortlessSteven in #325
- fix(ci): exclude copybook-bdd from coverage and test commands by @EffortlessSteven in #326
- docs: reality pass — update test counts, feature status, CI mode by @EffortlessSteven in #327
- fix(ci): exclude copybook-e2e and copybook-proptest from tarpaulin coverage by @EffortlessSteven in #328
- fix(e2e): use cargo_bin for portable binary resolution by @EffortlessSteven in #329
- fix(ci): format e2e tests, suppress deprecated lint, re-include e2e in llvm-cov by @EffortlessSteven in #331
- fix: align justfile targets with CI parity by @EffortlessSteven in #332
- fix: expand mutation testing to 12 crates by @EffortlessSteven in #335
- fix(ci): exclude copybook-bdd from nextest in perf and pr-insights workflows by @EffortlessSteven in #337
- fix(ci): remove paths-ignore so docs-only PRs get testExpected check by @EffortlessSteven in #336
- fix: compute lrecl_fixed for ODO schemas using max_count allocation by @EffortlessSteven in #333
- docs: ROADMAP reality pass — remove CI-off references, update stale items by @EffortlessSteven in #334
- fix(ci): add paths filter to coverage workflow, make coverage-diff non-blocking by @EffortlessSteven in #338
- docs: update test counts — 10,000+ passing (9 ignored) by @EffortlessSteven in #339
- docs: update CLAUDE.md workspace structure — 36 crates, 95+ deps by @EffortlessSteven in #342
- fix(ci): add workflow_dispatch trigger to CI Quick and Feature Flags by @EffortlessSteven in #340
- fix: deny unwrap/expect in production code for all publishable crates by @EffortlessSteven in #341
- docs: ROADMAP timeline fix — Phase 1 complete, update dates by @EffortlessSteven in #343
- fix: consistent nextest exclusions in justfile by @EffortlessSteven in #344
- fix: remove dead_code in ReportSectionFile (audit.rs) by @EffortlessSteven in #345
- fix: add dbg_macro lint to workspace-wide clippy config by @EffortlessSteven in #346
- fix: harden security.sh SHA validation logic by @EffortlessSteven in #347
- test: add e2e tests for support CLI subcommand by @EffortlessSteven in #348
- docs: update README test count — 15 ignored by @EffortlessSteven in #349
- fix: format e2e_cli_support.rs (cargo fmt) by @EffortlessSteven in #350
- fix: align justfile lint recipe with CI Quick by @EffortlessSteven in #351
- docs: update CHANGELOG unreleased with wave 1-4 changes by @EffortlessSteven in #352
- fix: replace allow(dead_code) with cfg(test) in copybook-overpunch by @EffortlessSteven in #353
- fix: add missing SPDX license headers to 7 source files by @EffortlessSteven in #354
- test: add e2e tests for inspect CLI flags by @EffortlessSteven in #355
- docs: update CONTRIBUTING.md prerequisites and test count by @EffortlessSteven in #356
- fix: remove unnecessary duplicate skip entries in deny.toml by @EffortlessSteven in #357
- fix: add doc comment for numeric module, update ignored test count by @EffortlessSteven in #358
- fix: resolve 14 broken intra-doc links in numeric module by @EffortlessSteven in #361
- test: add e2e tests for --strict-comments and --emit-filler flags by @EffortlessSteven in #359
- test: add e2e tests for --emit-meta, --emit-raw, --on-decode-unmappable flags by @EffortlessSteven in #360
- docs: update CHANGELOG unreleased with wave 5 changes by @EffortlessSteven in #362
- fix: harden fuzz scripts with set -euo pipefail and portable shebang by @EffortlessSteven in #363
- docs: add doc comments for 10 undocumented pub mod declarations by @EffortlessSteven in #364
- ci: add doc link validation to PR quick gate by @EffortlessSteven in #365
- test: add e2e tests for advanced CLI flags (float, bwz, use-raw, zoned) by @EffortlessSteven in #366
- docs: fix stale claims in CLAUDE.md (error codes, deps, workspace) by @EffortlessSteven in #367
- test: add e2e tests for CLI feature flag management (17 tests) by @EffortlessSteven in #368
- docs: update error taxonomy count and list all 10 families by @EffortlessSteven in #374
- test: add comprehensive e2e tests for verify subcommand (34 tests) by @EffortlessSteven in #373
- test: add e2e tests for encode CLI across codepages (21 tests) by @EffortlessSteven in #375
- fix: respect JsonNumberMode::Native in lib_api decode path by @EffortlessSteven in #378
- test: add e2e tests for determinism CLI subcommand (24 tests) by @EffortlessSteven in #376
- test: add e2e tests for decode CLI option interactions (19 tests) by @EffortlessSteven in #377
- fix: wire coerce_numbers through encode numeric paths by @EffortlessSteven in #379
- fix: wire bwz_encode through lib_api encode path by @EffortlessSteven in #380
- fix: wire RawMode::Field through lib_api decode path by @EffortlessSteven in #381
- docs: update quality metrics to match current state by @EffortlessSteven in #382
- docs: add examples to codec public API functions by @EffortlessSteven in #383
- docs: fix stale performance numbers in bench fixtures README by @EffortlessSteven in #384
- docs: add examples to core public API functions by @EffortlessSteven in https://github.com/Eff...
v0.3.2 - Level-88 VALUE clause enhancements + CI improvements
Highlights
COBOL Compliance: Level-88 VALUE lists now accept comma-separated literals alongside space-separated lists (ANSI COBOL-85 §4.1.2.4.3, IBM Enterprise COBOL).
CI Hardening: Nextest pinned with checksum validation, bench tests isolated from blocking jobs, nightly soaks protected from cancellation, coverage uploads non-blocking, and comprehensive guards prevent future drift.
Why It Matters
For COBOL Users: Unblocks real-world copybooks using commas in VALUE clauses — a common pattern in IBM Enterprise COBOL and compliant with ANSI COBOL-85.
For Contributors: CI remains green with stable gates; wasted compute eliminated through smart concurrency; perf tests isolated in dedicated lanes.
For Maintainers: Comprehensive test coverage (626 tests passing) with zero regressions; automated guards prevent accidental re-introduction of flaky patterns.
Changes
🔧 COBOL Parsing & Tests
Lexer Enhancement
- Comma token priority elevated above
EditedPicto correctly parse Level-88VALUElists containing commas - Implementation:
#[token(",", priority = 4)] CommaoutranksEditedPicwithout breaking genuine edited PIC patterns (e.g.,Z,ZZZ.99) - Inline documentation explains priority rationale to prevent future regression
Test Coverage (~520 lines, 11 new tests)
- ✅ Comma-separated lists:
VALUE "A", "B", "C" - ✅ Mixed separators:
VALUE "A", "R" THRU "W" - ✅ Comma-inside-string guard:
"A,B"does not tokenize comma - ✅ Edited PIC preservation: commas inside PIC clauses remain intact
- ✅ Enterprise scenarios: banking, healthcare, insurance, manufacturing
Documentation Updates
- Support Matrix documents both space-separated and comma-separated
VALUEsyntax - References ANSI COBOL-85 §4.1.2.4.3 compliance
- Test evidence: 6 lexer tests + 5 integration tests
🛡️ CI Hardening
Nextest Stability
- Pinned via
taiki-e/install-action@v2with SHA-256 checksum verification - Semver guard ensures explicit version pins (no floating tags)
- Compatible with nextest v0.9.11+ configuration format
Bench Test Isolation
- All blocking test commands include
--exclude copybook-bench - Dedicated perf workflows run with
--features perfflag - Automated guards validate bench exclusion policy in CI
Concurrency Control
- Concurrency keys include
${{ github.event_name }}to prevent push events from cancelling scheduled nightly soaks - Pattern:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} - Applied to CI Quick and main CI workflows
Coverage Improvements
- Codecov upload now non-blocking (avoids false failures on service hiccups)
- Quick gate script (
scripts/ci/quick.sh) aligned with CI exclusion policy - POSIX-safe, locale-consistent guard patterns
Compatibility & Migration
No Breaking Changes: Existing space-separated Level-88 lists continue to work; comma syntax is additive.
Local Development
Run perf tests:
cargo test -p copybook-bench --features perfReproduce CI quick gates:
cargo nextest run --workspace --exclude copybook-bench --failure-output=immediateCI Integration
New blocking test steps must include --exclude copybook-bench or automated guards will fail the job.
Technical Notes
Lexer Disambiguation: EditedPic vs. Comma
- Standalone commas: Tokenized as
Token::Commafor Level-88VALUElists - EditedPic commas: Remain embedded in
EditedPictoken (e.g.,PIC Z,ZZZ.99) - String literals: Commas inside quoted strings (
"A,B") are not tokenized - Priority mechanism: Lexer token priority (4) ensures correct precedence
Test Results
626 tests passing (615 existing + 11 new)
- Lexer: 11/11 passing
- Level-88 integration: 10/10 passing
- Full workspace: zero regressions
- Clippy pedantic: clean
Pull Requests Included
- #140 — Harden Test Suite (nextest pin + bench exclusion guards)
- #141 — nextest config compatibility (v0.9.11+)
- #142 — CI concurrency isolation + README CI overview + quick.sh alignment
- #143 — Level-88
VALUEcomma support + comprehensive tests - #144 — CI Quick concurrency + Support Matrix documentation
Issues Closed: #86 (Level-88 comma support), #122 (CI foundation)
Contributors
Thanks to all contributors who reported issues, reviewed PRs, and helped improve copybook-rs!
Compare: v0.3.1...v0.3.2
Upgrade Instructions
-
Update dependency:
[dependencies] copybook-core = "0.3.2" copybook-codec = "0.3.2" copybook-cli = "0.3.2"
-
No code changes required — this is a fully backward-compatible release.
-
CI users: If adding new test commands, ensure they include
--exclude copybook-benchfor blocking jobs.
What's Next
See ROADMAP.md for upcoming features:
- v0.5.0: Dialect features (COMP-1/2, edited PIC, SIGN directives)
- v1.0.0: Production stability, comprehensive dialect coverage
- Ongoing: Performance optimization, benchmark CI integration, Support Matrix CLI
Project Status: Engineering Preview — suitable for teams that validate copybooks against supported features. See docs/REPORT.md for detailed readiness assessment.