feat(geometry): add TVector2D.Rotate for 1.10.0 - #29
Merged
Conversation
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.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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): TVector2DinGeometryLib.Geometry— the manifest's single new public declaration. An O(1), allocation-free value operation: rotates counter-clockwise byAngleradians, 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 withPerpendicular;Rotate(-a)invertsRotate(a).Tests & evidence
tests/TestGeometryLib.pas(orientation, angle conventions,Perpendicularagreement, magnitude preservation, source immutability, zero-vector, non-finite) + public-API smoke coverage.-O2, runtime-checked, heap-traced): 939 tests, 0 errors, 0 failures; heap-traced run reports 0 unfreed blocks (allocation-free).examples/12_geometry.pas(8 contracts verified).Docs & records
docs/public-api-1.9.json+docs/API_REFERENCE_1.9.md(singleTVector2D.Rotateaddition).docs/GeometryLib.mdrotation contract docs;CHANGELOG.md[Unreleased]entry.docs/RELEASE_NOTES_1.10.0.md,docs/QUALIFICATION_1.10.0.md.Note on version metadata
Per
RELEASING.md, the version materialization (bumpingrelease/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.