# Changelog

## Unreleased

## 1.6.0 - 2026-09-27

- Added integer percentage anchor families to all native fluid nodes, block
  boundaries, and pulley, particle, disk, and ring rims. Private mechanics
  shapes retain native sizing and tangent routing without modifying TikZ's
  standard rectangle or circle shapes.
- Corrected cylinder surface endpoints and pressure-element face centres;
  made the U-tube primary surface select its left arm.
- Drew debug overlays above fills, separated crowded marker labels with
  leader lines, clustered coincident formula results by distance, and placed
  reference cards above geometry and markers.
- Added a complete fluid/mechanics anchor gallery, direction tables, and
  numerical and transformed-coordinate regressions.

- Added the node form of `spring` alongside its existing two-point path form,
  with shared coil settings, exact attachment and coil-lead anchors,
  `axis-0..100`, and native `show anchors` / `show keys` overlays.
- Fixed spring lead lengths changing when subsequent coil-size keys reused
  an internal dimension register.
- Added dual-form spring documentation, a rendered gallery, regression tests,
  and the implementation in the generated single-file Overleaf bundle.

## 1.5.0 - 2026-09-26

- Audited the manual and guides against the current node, path, and pic APIs;
  added a cross-module debug-overlay guide and a rendered seven-page
  `show anchors` / `show keys` feature tour.
- Enabled `show anchors` and `show keys` on all eight native fluid nodes;
  their debug cards now resolve correctly when a node name is reused.
- Covered every straight and curved ramp boundary with percentage anchors,
  corrected the straight-ramp bounding-box centre for a tall wall, and added
  a twelve-page rendered `show anchors` guide with geometry regressions.
- Increased the curved ramp's default horizontal floor by 50%, from 2.5 cm
  to 3.75 cm, while retaining the `curved ramp floor length` override.
- Aligned wedge `right-mid`, `slope-mid`, and `slope-right-mid` with their
  corresponding percentage contact or boundary anchors in all right-angle
  modes, including pulley-edge wedges.
- Made `centroid` and `mid` follow the filled four-point pulley-edge body.
  Added coordinate regressions and a ten-page rendered `show anchors` guide.

## 1.4.0 - 2026-09-25

- Simplified platform, ground, ceiling, and freestanding-wall anchors:
  `surface-0..100` now covers each usable contact face; the remaining
  boundaries have consistently directed percentage families. Removed their
  redundant corner and edge-midpoint aliases, updated the in-picture anchor
  tables and examples, and added a thirteen-page `show anchors` coverage gallery.
- Documented every platform, ground, ceiling, and wall edge family with
  copy-ready `show anchors` examples and a rendered visual reference.
- Rejected inward/downward transitions on upward platform walls, whose outline
  could cross the floor; verified clean left and right upward corners.
- Made `show anchors` and `show keys` work on unnamed nodes, replaced piled-up
  anchor numbers with one marker per location and a complete anchor table, and
  positioned the table below the displayed geometry.
- Added a separate fluid-mechanics module with eight native TikZ nodes and fourteen teaching pics, named coordinates, scoped geometry keys, collision-safe aliases, configurable labels, native patterned liquid fills, and geometry validation.
- Removed forced element label sizes; preserved per-node fonts, made dimension tips and padding font-relative, and separated angular annotations from radius labels.
- Corrected element dimension-label capture so per-node aliases such as
  `rectangular strip` retain `b` and `dx`, including arbitrary LaTeX labels.
- Drew projected rear circle edges with the configurable dashed
  `every solid hidden edge` style; corrected cone-slice lower projection and
  semantic slice centre; rejected sphere and cylinder slices that cross their
  body boundary.
- Added fluid reference scenes, font checks, API documentation, and the module to the generated single-file Overleaf package.

- Extended `tikzphysics.elements` with `spherical shell`, `hollow sphere`,
  `rectangular element`, `rectangular strip`, and `rectangular sheet` nodes.
- Added named sphere-shell, sphere-slice, hollow-sphere, cylinder-shell,
  cylinder-slice, cone-slice, and sheet-element teaching pics with formula
  labels, component nodes, structural coordinates, and projection controls.
- Added validation, geometry regressions, debug/reference cards, a rendered
  solid-elements gallery, and detailed shell-versus-slice documentation.
- Added the separate `tikzphysics.elements` module with `polar element`,
  `differential sector`, `differential ring`, and `unwrapped ring` nodes plus
  the `differential ring diagram` pic.
- Added configurable circular-element radii, angular extent, plain-LaTeX
  `d\!r` dimension labels, named and numeric boundary anchors, resolved
  geometry values, debug cards, regression coverage, and a rendered example.
- Mirrored the default hatch on `platform-right` so the pattern crosses the
  tapered pulley edge and reads as an inward, solid platform corner.
- Extended `pulley edge` to wedges with a 0.5 cm top inset and 1 cm top
  drop while preserving the original tip as `pulley-center`.
- Added `wedge top inset` and `wedge top drop`, mirrored support for
  bottom-left right-angle wedges, and wall-root plus transition anchors.
- Updated the complete wedge mechanics example to use a taller grounded wedge,
  a shorter hanging string, and the full default 1 cm hanging block.

## 1.3.0 - 2026-09-13

- Added continuous tapered pulley edges to `platform-left`, `platform-right`,
  and `platform`/`platform-both`. The `pulley edge`, `left pulley edge`,
  `right pulley edge`, and `pulley edges` presets use a 0.5 cm inset and drop.
- Added shared and side-specific `wall inset` and `wall drop` keys while
  preserving the original geometry at their zero defaults.
- Added pulley-centre, wall-root, transition-mid, and numeric transition
  anchors, including left/right variants on two-wall platforms.
- Added coordinate regression coverage and a complete horizontal/inclined
  visual example for the new platform geometry.
- Added a reproducible single-file Overleaf bundle generator and isolated
  compile check so direct upload includes every current runtime module.
- Reduced the default pulley axle-dot radius from 2 pt to 1.5 pt for a cleaner
  centre mark at the default 1 cm pulley diameter.

## 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.
