# Changelog

## 1.2.0 - 2026-09-05

- Added simple `every block`, `every spring`, and per-feature default hooks,
  with shared `every physics object` and `every physics connection` hooks.
- Added `rope` and native `to[over pulley=P]` connections. The compatibility
  command shares their implementation and respects surrounding route settings.
- Allowed zero-length spring leads; retained positive coil-size validation.
- Added left-to-right wedge contact families and per-node tangent/normal
  guides for all three wedge modes, retaining existing edge anchors.
- Added particle, disk and ring nodes; force, velocity, acceleration, torque
  and rod paths; named pin/roller support and pendulum pics.
- Reworked debug capture per named node: local false overrides and styling
  work without duplicate inherited emissions. Coincident anchors share labels.
- Added `show anchors`, `show keys`, explicit anchor/family/sample selection,
  movable legends, and `\physicshelp{feature}` / `\physicshelp{index}` cards.
- Generated complete reference cards, Markdown reference, and manual appendix
  from the feature declarations using `scripts/generate_reference.py`.
- Reorganised the README and manual around a first diagram, learning routes,
  defaults, complete systems, debugging, and a detailed feature reference.
- Retained legacy numeric percentage shortcuts and rectangular automatic
  borders on irregular shapes; documented explicit contact-anchor usage.
- Fixed prism centroid and face-midpoint anchors, exposed by checking every
  advertised anchor through the debug explorer.
- Added regression coverage and complete examples for the new APIs.


- Changed `spring` from a node into a path decoration used as
  `\draw[spring] (A) -- (B);`; the endpoints now determine its length and
  direction directly.
- Added concise public aliases for the remaining shape-specific controls,
  including `wall angle`, `strip width`, `pulley axle radius`, and
  `string route`. The `physics ...` forms remain collision-safe aliases.
- Added `platform-left-up` and `platform-right-up` presets, each composing the
  corresponding one-wall platform with `wall angle=90`.
- Changed the default wedge material pattern from diagonal hatching to dots.
- Reduced the default bent-platform `strip width` from `0.3cm` to `0.25cm`.
- Placed wedge-mounted pulley centres exactly at the wedge `top` anchor; the
  examples retain the default `1cm` pulley diameter and match the block height
  to retain surface-parallel tangency from the block's `east` anchor.
- Expanded percentage-anchor documentation with beginner syntax, family
  directions, shorthand rules, multi-part path behaviour, annotated diagrams,
  and a complete copy-paste example.
- Increased the curved ramp's default horizontal floor length from `2cm` to
  `2.5cm`.
- Documented native TikZ `|-` and `-|` coordinate projection for exact
  horizontal wall-to-block connections, with ramp and upward-platform examples.
- Corrected the complete pulley-system gallery to use the default `1cm`
  pulley size at natural scale. The bent-platform pulley centre now sits
  directly on `wall-outer-100`, with a matching `1cm` block height preserving
  exact surface-parallel tangency.
- Added per-node wedge geometry values through
  `\geometryvalue{W}{property}` and the collision-safe
  `\tikzphysicsgeometryvalue`. Named wedges expose their three interior
  angles, local edge directions, contact-surface rotations (including both
  faces of a top-right-angle wedge), resolved width and height, and
  right-angle vertex for reuse in rotations, calculations, and labels.

## 1.1.0 - 2026-08-15

- Added the dedicated `tikzphysics.ramps` library with `ramp` and
  `curved-ramp` node shapes. Each ramp is a single closed geometry with one
  continuous contact line; the straight floor-to-incline corner remains sharp.
- Added right- and left-facing ramp variants, angle- or rise-driven straight
  geometry, circular radius/sweep/back-extension controls, and detailed named
  structural anchors.
- Added `surface-0..100` plus `.0..100` shorthand on both ramps, with
  `tangent-before-T`, `tangent-after-T`, and `normal-T` orientation helpers at
  every integer sample.
- Added full straight- and curved-ramp systems, a variant gallery, regression
  coverage, quick-reference entries, and a detailed manual section explaining
  the uncommon geometry and block-placement method.
- Added `\physicsrampangle` for a labeled acute-angle mark at the sharp
  straight-ramp foot.
- Extended `curved-ramp` with a configurable horizontal floor before the arc.
  The full `surface-*` family follows floor plus curve, while `curve-*` and
  curve-specific tangent/normal helpers address the circular portion alone.
- Added `spring` / `physicsspring` as a named mechanics node with exact
  attachment and coil-boundary anchors. Its total length uses native
  `minimum width`; the standard coil names `pre length`, `post length`,
  `amplitude`, `segment length`, and `aspect` work directly on the node, with
  collision-safe aliases also available. Amplitude and segment length both
  default to `4.5pt`.
- Restyled the user manual with Fourier typography and compact Dracula-themed
  `minted` listings, and documented the shell-escape requirement for building
  the manual (not for using the package).

- Extended `tikzphysics.optics` with symmetric `convex-lens` and
  `concave-lens` shapes, a rectangular `slab`, and an isosceles `prism`.
- Corrected the original curved element's classification: it is now exposed as
  `concave-mirror`, with a reflected `convex-mirror` variant and
  `surface-0..100` anchors.
- Added named and numeric optical-surface anchors, concise unit-aware keys,
  complete component and ray-composition examples, and debug registrations for
  every new optical shape.
- Added `.0` through `.100` primary-surface shorthand anchors and complete
  converging/diverging ray diagrams for both lens and mirror types.
- Corrected the lens ray examples so every non-axial ray refracts at both
  interfaces. The fixed $n=1.50$ panels use Snell-law-derived exit and focal
  coordinates; spherical-mirror panels are identified as paraxial diagrams.
- Kept slabs and prisms as transparent outlines, and placed the convex
  mirror's reflecting arc on its left boundary.
- Added concise public styles: `platform`, `platform-left`, `platform-right`,
  `platform-both`, `wedge`, `ground`, `ceiling`, `wall-left`, `wall-right`,
  `block`, `pulley`, `concave-mirror`, `convex-mirror`, `convex-lens`,
  `concave-lens`, `slab`, and `prism`.
- Kept the `physics...` style names as collision-safe alternatives for
  documents that already define generic TikZ styles.
- Added complete copy-paste documents for short-name platform/pulley and
  inclined-plane pulley compositions.
- Added a complete wedge document covering native and convenience width,
  angle- and height-driven geometry, and the `br`, `bl`, and `top` modes.
- Added concise wedge keys: `wedge width`, `wedge height`, `wedge angle`, and
  `wedge right angle at`; the `physics wedge ...` forms remain collision-safe
  aliases.

## 1.0.0 - 2026-08-12

First public release.

### Surface diagrams

- Added `physicsplatform-left`, `physicsplatform-right`, and `physicsplatform-both`.
- Platform floors and walls render as one closed patterned polygon, with exact
  sharp miters on the inner edge and no connection seam.
- Added independent `physics left wall angle` and `physics right wall angle` controls.
- Added `physicswedge` with bottom-left, bottom-right, and top right-angle modes.
- Added `physicsground`, `physicsceiling`, `physicswall-left`, and `physicswall-right`.
- Added named floor, wall, corner, wedge, and contact-surface anchors.

### Mechanics and optics

- Added configurable `physicsblock` and `physicspulley` styles.
- Added `\physicsstringoverpulley`, which joins its endpoint coordinates to a
  pulley through exact tangent segments and a circular contact arc.
- Added a default `surface-right` string route and named `over`, `under`, and
  `shortest` presets, plus complete flat-plane, inclined-plane, bent-platform,
  and hanging-mass examples. Surface examples place the pulley so the
  block-side string is exactly parallel to its supporting surface and passes
  over the upper pulley rim; pulley supports are kept compact.
- Added `physicslens`, with front/back surface anchors and parametric arc anchors.

### Shared facilities

- Bare size values are interpreted as centimetres; explicit TeX units are
  preserved.
- Invalid non-positive lengths and degenerate wedge/lens angles produce package
  errors close to the originating key.
- Straight edges and lens arcs expose integer parametric anchors from 0 to 100.
- Added `physics debug/anchors`, `physics debug/keys`, and `physics debug/all` overlays.
- Debug key panels prefer native TikZ sizing names while package-specific keys
  and all unit-aware convenience aliases remain available.
- Added an `l3build` regression suite and reproducible CTAN packaging.

### Public API

- Package-specific configuration keys use a consistent `physics ...` prefix;
  native TikZ sizing keys are also supported directly.
- The project intentionally makes no compatibility promise for pre-release
  prototypes distributed before version 1.0.0.
