altium-toolkit 1.4.15 → 1.4.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -57,6 +57,10 @@ extension graphs retain their proven ownership instead of repeating defensive
57
57
  binary classification. See the
58
58
  [1.4.2 release notes](docs/release-notes-v1.4.2.md).
59
59
 
60
+ Version 1.4.16 preserves validated authored STEP anchors during late geometric
61
+ owner recovery and keeps board-space component yaw unchanged. See the
62
+ [1.4.16 release notes](docs/release-notes-v1.4.16.md).
63
+
60
64
  Default `extensions: 'canonical'` keeps compact Altium summary metadata.
61
65
  Request the complete native read model with `extensions: 'full'`,
62
66
  `preserveRaw: true`, or `extensions: ['altium.native-model']`. Project batches
@@ -224,6 +228,7 @@ const legacyCircuitJson = AltiumParser.parseArrayBuffer(file.name, arrayBuffer)
224
228
  - [API](docs/api.md)
225
229
  - [Capabilities](docs/capabilities.md)
226
230
  - [Migration from 1.1.41](docs/migration.md)
231
+ - [1.4.16 release notes](docs/release-notes-v1.4.16.md)
227
232
  - [1.4.2 release notes](docs/release-notes-v1.4.2.md)
228
233
  - [1.4.1 release notes](docs/release-notes-v1.4.1.md)
229
234
  - [1.4.0 release notes](docs/release-notes-v1.4.0.md)
package/docs/api.md CHANGED
@@ -552,8 +552,18 @@ ids, layer roles, cutouts, and pad/via drill render state (`open`, `covered`,
552
552
  `PcbSvgRenderer.renderLayerSvgs()` uses the same semantic sidecar shape with
553
553
  `view.kind: 'layer'` and a layer-specific `layerSet`.
554
554
 
555
+ Native PCB layer summaries collect source layer keys without constructing hit-test
556
+ geometry. Interaction indexes resolve component ownership once per build, and
557
+ hit tests normalize visibility filters once per query. These preparations are
558
+ scoped to each invocation so edits to documents and filters remain visible.
559
+
555
560
  ## 3D Scene Data
556
561
 
562
+ Copper scene detail excludes numeric non-copper region kinds (`KIND=1` polygon
563
+ cutouts, outlines, and cavities) as well as explicit clearance flags. Authored
564
+ region arcs carry a signed `sweepAngle` in normalized coordinates, preserving
565
+ angle wrapping, major arcs, and traversal from either endpoint.
566
+
557
567
  ```js
558
568
  import {
559
569
  PcbScene3dBuilder,
@@ -582,6 +592,13 @@ import {
582
592
  The library intentionally does not create Three.js objects, canvases, controls,
583
593
  or event listeners.
584
594
 
595
+ Native Altium scene construction indexes pad ownership once per build and
596
+ prepares drilled-pad anchor candidates only when owner recovery needs them.
597
+ Placement repair searches nearby authored-body positions before comparing
598
+ identity metadata. These indexes preserve mounted-surface pad preference and
599
+ source-order ties, and are rebuilt for every invocation so later document
600
+ edits are visible.
601
+
585
602
  ## Read-only CLI Examples
586
603
 
587
604
  The `examples/` directory includes small Node.js scripts for common
package/docs/migration.md CHANGED
@@ -6,9 +6,19 @@ SPDX-License-Identifier: CC-BY-SA-4.0
6
6
  # Migration from 1.1.41 to 1.2.0
7
7
 
8
8
  Version 1.2.0 adds the canonical ECAD toolkit API. Existing Altium
9
- exports are retained under `altium-toolkit/extensions`; the native
10
- `src/core` and `src/ui` implementations remain byte-identical to the
11
- pinned 1.1.41 source tree.
9
+ exports are retained under `altium-toolkit/extensions`.
10
+
11
+ Starting with 1.4.17, native implementations and assets are maintained:
12
+ reviewed bug fixes and performance improvements may change their source and
13
+ corrected behavior. Historical export signatures and public asset
14
+ entrypoints and targets remain checked. The immutable 1.1.41 source tree and manifest
15
+ remain provenance evidence, not a claim of current byte equality.
16
+
17
+ The release gate retains every historical implementation path and
18
+ compares every packed source file against a snapshot of the tested
19
+ checkout, including new helpers and workers. Public contract and
20
+ synthetic regression tests validate maintained behavior. See
21
+ [testing](testing.md) for the complete release checks.
12
22
 
13
23
  The paged appendix maps every frozen export, static member, prototype
14
24
  member, public asset, and the native implementation tree:
@@ -0,0 +1,27 @@
1
+ # altium-toolkit 1.4.16
2
+
3
+ Version 1.4.16 preserves authored STEP anchors during late geometric owner
4
+ recovery and leaves model-local orientation normalization to the 3D runtime.
5
+
6
+ ## 3D placement fidelity
7
+
8
+ - Near-centroid surface-mount bodies retain their authored positions when the
9
+ recovered owner is geometrically unambiguous.
10
+ - Height-backed owner recovery marks valid source anchors explicitly instead
11
+ of converting them into component-center offsets.
12
+ - Geometric owner recovery preserves the component's authored board-space yaw;
13
+ it no longer infers package-specific half-turns from labels or pad topology.
14
+
15
+ ## Compatibility
16
+
17
+ - Placement recovery remains based on generic body, pad, and footprint
18
+ geometry without project names, filenames, designators, or library strings.
19
+ - Existing schematic colors, canvas borders, and public renderer signatures
20
+ remain unchanged.
21
+
22
+ ## Verification
23
+
24
+ - Repository-owned synthetic tests cover near-centroid connectors,
25
+ height-backed authored anchors, and preserved switch yaw.
26
+ - The complete package suite, formatting check, and npm package dry run are
27
+ required for release.
package/docs/testing.md CHANGED
@@ -11,7 +11,8 @@ streams. Do not add native customer files or provider-derived raw fixtures.
11
11
  When exercising source lookup, inject a fake fetcher/client and assert emitted
12
12
  entries, progress events, checkpoints, diagnostics, and OLE round trips.
13
13
 
14
- Run the complete suite:
14
+ Run the complete suite from a Git checkout containing the historical release
15
+ tags (`git fetch --tags` if needed):
15
16
 
16
17
  ```bash
17
18
  npm test
@@ -31,12 +32,23 @@ The strict feature check creates an isolated packed install and packs the
31
32
  currently installed CircuitJSON dependency beside the Altium candidate. This
32
33
  keeps the isolated contract gate aligned with the dependency declared by the
33
34
  active release instead of a stale version-specific fixture. It verifies all
34
- historical native source and extension contracts, checks the exact
35
- package/subpath layout, and runs the shared observable toolkit contract against
36
- the packed package.
35
+ historical baseline provenance, extension signatures, and public asset paths.
36
+ Native implementations and assets may evolve through tested fixes starting with 1.4.17; historical
37
+ source and asset hashes are never rewritten to approve a candidate. The gate requires
38
+ every historical implementation path, captures all current `src/` files before
39
+ packing, and compares exact file inventories and bytes before importing the
40
+ packed candidate. It rejects changed, missing, additional, or symlinked source,
41
+ including new helpers. It also checks the exact package/subpath layout and runs
42
+ the shared observable toolkit contract against the packed package. A final
43
+ source comparison catches changes made during validation.
37
44
 
38
45
  The performance check is bound to the immutable 1.1.41 commit, source tree,
39
- and native-source manifest. It measures legacy and canonical projections of
46
+ and native-source manifest. It verifies the complete local dependency graph of
47
+ the measured historical parser and schematic renderer, checking each module's
48
+ bytes before following its imports and re-exports. Computed dynamic imports
49
+ are rejected because their full dependency graph cannot be verified statically.
50
+ Source outside that baseline graph can evolve without changing the historical
51
+ manifest. It measures legacy and canonical projections of
40
52
  the same synthetic inputs. Default canonical parsing must stay inside both a
41
53
  relative budget and a small envelope-construction allowance scaled by actual
42
54
  project document count. Direct async execution, metadata/full asset modes, and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "altium-toolkit",
3
- "version": "1.4.15",
3
+ "version": "1.4.17",
4
4
  "description": "Altium document parsing and non-interactive rendering utilities",
5
5
  "keywords": [
6
6
  "altium",
@@ -67,7 +67,7 @@
67
67
  "check:features": "node scripts/check-feature-preservation.mjs"
68
68
  },
69
69
  "dependencies": {
70
- "circuitjson-toolkit": "^1.4.2",
70
+ "circuitjson-toolkit": "^1.4.3",
71
71
  "fflate": "^0.8.2"
72
72
  },
73
73
  "devDependencies": {
@@ -18,23 +18,23 @@ vendor names, or library identifiers.
18
18
  span.
19
19
  - Use component height agreement only as supporting evidence for nearby
20
20
  package ownership; height alone is insufficient.
21
- - Preserve a pad-centroid body position because it is already a valid authored
22
- package center.
21
+ - Preserve pad-centroid and nearby height-backed body positions because they
22
+ are valid authored source anchors, and mark height-backed anchors so the
23
+ runtime does not apply a second source-origin adjustment.
23
24
  - Center proven corner-origin and row-origin bodies on the component owner and
24
25
  retain the source offset as transform diagnostics.
25
26
  - Recompute component side and authored vertical standoff after late owner
26
27
  recovery.
27
- - Correct the half-turn of a four-pad tactile-switch model when its exact owner,
28
- footprint topology, and tilted source frame jointly establish that package
29
- class.
28
+ - Preserve authored component yaw; model-local axis normalization belongs to
29
+ the runtime that has access to the imported mesh envelope.
30
30
  - Decline ambiguous matches.
31
31
 
32
32
  ## Verification
33
33
 
34
- - Focused synthetic tests use obfuscated package identities and cover pad
35
- centroid, corner origin, row origin, late standoff, ambiguity rejection, and
36
- tactile-switch yaw.
34
+ - Focused synthetic tests use obfuscated package identities and cover exact and
35
+ near pad centroids, corner origin, row origin, authored source anchors, late
36
+ standoff, ambiguity rejection, and preserved component yaw.
37
37
  - The full toolkit test suite and formatting check pass.
38
38
  - A read-only probe of the supplied PCB must show real component designators
39
- for the affected placements, owner-centered corner/row models, recovered
40
- top-side standoff, and corrected switch yaw.
39
+ for the affected placements, owner-centered corner/row models, preserved
40
+ authored anchors, recovered top-side standoff, and source-authored yaw.