Fixture and oracle design

Test Asset Layout

The tests/assets/projects tree contains redistributable Altium projects plus Altium-generated reference outputs used as command oracles. Tests should treat these assets as inputs and write all generated artifacts to temporary directories that mirror the project-local output/ layout, or to the project-local output/ folder for manual review.

Project Structure

Path Meaning
input/ Committed project source files: .PrjPcb, .SchDoc, .PcbDoc, and reference_gen.OutJob.
reference_output/ Outputs generated by opening the project in Altium and running input/reference_gen.OutJob.
output/ Local scratch output only. Tests and agents should put manual review artifacts here, grouped by command, variant, and output kind.

Variant Folders

reference_output/no_variant means Altium generated the output with no variant applied. Variant-specific outputs should live under a folder named for the variant, such as reference_output/B4. BOM, PnP, and JLC review artifacts should use the project-local output folder: tests/assets/projects/<project>/output/<command>/<variant>/....

BOM and PnP Oracles

XML-BOM and CSV-BOM are Altium oracle outputs. BOM tests use them to verify source component coverage, designator resolution, DNP behavior, and key fields such as value and description. The raw JSON output is the main machine-consumable checkpoint because it preserves normalized component data without losing Altium Monkey source detail.

PNP-METRIC contains Altium-generated pick-and-place CSV files. PnP tests use these files for placement designators, side, numeric center coordinates, and rotation checks. Coordinates should be compared with a small numeric tolerance because Altium emits fixed decimal text and the CLI stores floats.

Primary Cases

nxp-frdm-imx93 and ov-tech-pimx8 extend the opt-in toon/SVG performance corpus with larger boards and complex embedded STEP models. Their project-referenced sources retain original relative paths, and source manifests record byte hashes. They have no Altium output oracle and are excluded from fast unit-test workloads. bluetooth_sentinel_flex is the focused board-region and local-stack-thickness fixture; it contains only the PcbDoc required to distinguish two rigid regions from one flex region.

Project Purpose
node_test_array Primary BOM/PnP test. It exercises hierarchical channel designators and variant B4, where one channel has different DNP state from the other channels. It also contains standard No BOM component behavior.
loz-old-man High component-count BOM/PnP test. It exercises broad component-type coverage; variant A includes alternate component values such as R6.
cutouts Primary pcb-svg board cutout fixture. It contains four interior cutouts covering rectangular, circular arc, and rounded T-shaped geometry.
bluetooth_sentinel_flex Primary source-aware board-region fixture. Its two rigid regions resolve to 32.1455 mil and its flex region resolves to 3.3267 mil. Focused region-query tests may run normally; full Toon rendering remains opt-in.

Known Limitations

Altium Monkey does not currently process Altium .annotation files. Projects that rely on external annotation data can still have edge cases in designator resolution. Release notes should keep this limitation visible until annotation-file processing is implemented.