v7.0.0
v7.0.0 (2026-05-23)
Breaking
- feat!: DNP column in BOM; remove --include-dnp/excluded/all flags
Closes #294
Breaking changes
--include-dnp,--include-excluded, and--include-allremoved from
jbom bom,jbom parts, andjbom pos. Each command now has fixed,
contract-correct behavior:- bom/parts: DNP rows always included, marked in new
DNPcolumn - pos: DNP rows always excluded (P&P contract)
- bom/parts: DNP rows always included, marked in new
POSRequest.include_dnpfield removed
Added
DNPcolumn in all four fabricator default BOM presets (generic, jlc,
pcbway, seeed). Value is"DNP"for DNP components,""for populated.- DNP-aware aggregation: populated and DNP variants of same value+footprint
are kept as separate rows (qty never inflated by merging DNP/non-DNP). dnpcomputed BOM field available via-f "...,dnp,...".dnpattribute propagated fromComponent.dnpintoBOMEntry.attributes
andPartsListEntry.attributesfor uniform field access.
Parts list behavior
Parts list (jbom parts) enumerates all design components including DNP.
No dedicated dnp column in default output; attribute available via -f dnp.
Docs / tests
docs/README.man1.md: new "Component Attribute Handling" section.docs/README.man4.md: plugin component attribute handling section.docs/CHANGELOG.md: migration note for removed flags.features/bom/filtering.feature: replaced with 6 new contract scenarios.features/parts/filtering.feature: rewritten to match new contract.- Unit and integration tests updated/added for new DNP contract.
Co-Authored-By: Oz oz-agent@warp.dev (4c0a7d7)
Bug Fixes
- fix: update header regression tests to include new DNP column
Features/bom/field_system_regression.feature had exact-match CSV header
assertions that broke when the DNP column was added to all fabricator
default presets in issue #294. Update the four affected assertions to
include the trailing DNP column. (0830655)
Unknown
-
Fix: use correct step definition syntax in designator case scenario (
6649752) -
Docs: add designator case preservation policy documentation
Issue #292: Document that jBOM preserves mixed-case designators from .kicad_pcb
files, contrasting with tools like Fabrication-Toolkit that uppercase on read.
Changes:
- Add "BOM Designator Case Policy" section to docs/README.man1.md
- Explains that KiCad allows mixed-case designators (e.g., License1, Prop1)
- Clarifies jBOM preserves case as-written (no normalization)
- Shows post-processing example if user needs uppercase output
- Contrasts with other tools' uppercase-on-read behavior
- Add functional test in features/bom/core.feature
- Scenario: "BOM preserves mixed-case designators from KiCad"
- Uses realistic mixed-case refs (License1, Prop1, R1)
- Asserts refs survive unchanged to output (not uppercased)
No code changes — documentation and test only.
Fixes #292
Co-Authored-By: Oz oz-agent@warp.dev (de88a8d)
- Fix: remove dead CLI code from issue #291
Under the PCB-first contract (PR #289), the CLI-level footprint enforcement
helpers are no longer invoked in the live execution path. The service-level
equivalent (enforce_bom_device_footprints) remains exported for downstream tooling.
Changes:
- Delete _enforce_bom_device_footprints() from cli/bom.py (and helpers)
- _resolve_entry_device_footprint()
- _is_concrete_footprint()
- _entry_has_namespaced_field()
- Remove import of enforce_bom_device_footprints from cli/bom.py
- Delete 5 unit tests in test_bom_cli_field_resolution.py that directly
tested the deleted CLI wrapper (functional contract is covered by
behave/gherkin tests)
Test results:
- 1393 unit tests pass (5 fewer, as expected)
- BOM generation works correctly on real projects
- No regressions in field resolution or projection logic
Fixes #291
Co-Authored-By: Oz oz-agent@warp.dev (f46457a)