Skip to content

feat(geometry): add TVector2D.Rotate for 1.10.0 - #29

Merged
ikelaiah merged 3 commits into
mainfrom
release/v1.10.0
Aug 19, 2026
Merged

feat(geometry): add TVector2D.Rotate for 1.10.0#29
ikelaiah merged 3 commits into
mainfrom
release/v1.10.0

Conversation

@ikelaiah

Copy link
Copy Markdown
Owner

Summary

Implement the closed v1.10.0 capability manifest
(docs/CAPABILITY_MANIFEST_1.10.0.md, closed by 1.9.9) — the backward-compatible minor release that finalizes the approved API before the 2.0 freeze.

What's added

  • TVector2D.Rotate(const Angle: Double): TVector2D in GeometryLib.Geometry — the manifest's single new public declaration. An O(1), allocation-free value operation: rotates counter-clockwise by Angle radians, preserves magnitude within a ~1e-15 relative tolerance for finite inputs, leaves the source unmodified (V := V.Rotate(a) is value-safe), returns the exact zero vector for the zero vector, and follows the documented IEEE-754 non-finite contract. Rotate(Pi/2) agrees with Perpendicular; Rotate(-a) inverts Rotate(a).
  • Deprecation-marking closure: no declaration is deprecated, removed, or moved; all aliases and compatibility paths are retained. Full 1.x source compatibility is preserved.

Tests & evidence

  • Focused regression suite in tests/TestGeometryLib.pas (orientation, angle conventions, Perpendicular agreement, magnitude preservation, source immutability, zero-vector, non-finite) + public-API smoke coverage.
  • All four standard builds (normal, -O2, runtime-checked, heap-traced): 939 tests, 0 errors, 0 failures; heap-traced run reports 0 unfreed blocks (allocation-free).
  • Output-gated rotation workflow in examples/12_geometry.pas (8 contracts verified).

Docs & records

  • Regenerated docs/public-api-1.9.json + docs/API_REFERENCE_1.9.md (single TVector2D.Rotate addition).
  • docs/GeometryLib.md rotation contract docs; CHANGELOG.md [Unreleased] entry.
  • New docs/RELEASE_NOTES_1.10.0.md, docs/QUALIFICATION_1.10.0.md.
  • Updated 2.0-candidate decision/diff to record the decided 2-D rotation contract; 3-D rotation remains deferred beyond 2.0.
  • Full gate suite passes locally: API-decision, convergence, docs, numerical/performance/portability/workflow/migration evidence, doc-example compilation, and example-output checks.

Note on version metadata

Per RELEASING.md, the version materialization (bumping release/lpk/README badge/CI docs-site to 1.10.0 and dating the [Unreleased] entry) is the release step taken after merge, not part of the implementation PR, so the release-versioned checks (check_docs/check_convergence) stay on 1.9.9 and remain green for this branch.

Implement the closed 1.10.0 capability manifest's single public addition: TVector2D.Rotate(Angle) as an allocation-free value operation that rotates counter-clockwise by radians, preserves magnitude within ~1e-15 relative, leaves the source unmodified, and follows the documented zero-vector and non-finite contract.

Includes focused regression tests (orientation, angle conventions, Perpendicular agreement, magnitude, source immutability, zero-vector, non-finite), public-API smoke coverage, regenerated API snapshot/reference, GeometryLib docs, an output-gated rotation example, 1.10.0 release/qualification notes, and the decided 2-D rotation record in the 2.0 candidate decision. Deprecation marking closes as no-deprecation; full 1.x compatibility is retained.
Example 12 now has an output contract, so the 'Test typed solve from a checksummed source archive' step must also compile and run it from the extracted archive, or check_example_output fails on the missing binary. Windows CI has no archive step, which is why it passed while Linux failed.
@ikelaiah ikelaiah self-assigned this Aug 19, 2026
@ikelaiah ikelaiah added the enhancement New feature or request label Aug 19, 2026
Preserve all 1.9.x convergence/API evidence immutable: public-api-1.9.json and API_REFERENCE_1.9.md are restored to the frozen baseline (previously wrongly regenerated with Rotate) and pinned by SHA-256 in check_docs; api-snapshot-final-1.9.9 and the closed capability manifest keep their release/target/status fields.

Introduce a 1.10.0 current snapshot/reference (public-api-1.10.0.json, API_REFERENCE_1.10.0.md) recording the single TVector2D.Rotate addition with an explicit 1.9.9-to-1.10.0 diff, instead of mutating historical 1.9 evidence.

Advance release gates: check_docs CURRENT_RELEASE=1.10.0 and NEXT_RELEASE=2.0.0 with live-interface checks targeting the 1.10.0 snapshot; the convergence gate is decoupled from live Previous/Next headings; add a small separate 2.0 promotion/release-state check (check_promotion_2_0.py).

Correct ROADMAP.md against the closed manifest (1.10.0 marks no declaration deprecated), record 1.10.0 as completed/previous and 2.0.0 as next, and bump all publication metadata (README, dated CHANGELOG, Lazarus lpk, SECURITY/SUPPORT, capabilities.json/versions.json, ci/documentation/release-qualification workflows, release/PR/qualification notes). Soften the TVector2D.Rotate magnitude claim to the covered tested ranges.

All local gates pass. Tagging and GitHub release follow after the branch is merged.
@ikelaiah
ikelaiah merged commit f959edf into main Aug 19, 2026
5 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant