Skip to content

feat(types): edit mutable compound curves in place - #50

Merged
Alexandre-T merged 1 commit into
mainfrom
42-story-edit-compound-curves-in-place
Oct 29, 2026
Merged

Alexandre-T merged 1 commit into
mainfrom
42-story-edit-compound-curves-in-place

Conversation

@Alexandre-T

Copy link
Copy Markdown
Contributor

Pull Request

Closes #42

Summary

Add mutable CompoundCurve classes in all four coordinate layouts. Consumers can append, insert, replace and remove mutable line-string and circular-string components while retaining component identity and interpolation.

Acceptance criteria

  • Ordered component editing, strict zero-based indices and atomic rejection of unsupported inputs.
  • Shared component and point identity, incomplete coordinates and EMPTY sequences.
  • Chainable context setters with recursive propagation by default and local-only updates on request.
  • Mutable interface contracts, fixed type/layout and no copy methods.

Validation

  • composer test-local: 816 tests, 7485 assertions (PHP 8.5.11 with PCOV).
  • composer quality: passed (exit code 0); PHP CS Fixer, PHPStan level 9, PHPMD and PHP_CodeSniffer.
  • git diff --check: passed.
  • New tests: tests/Unit/Types/MutableCompoundCurveTest.php.

Standards

ISO/IEC CD 13249-3:201x(E), clause 7.4.1, limits compound components to line strings and circular strings. The implementation enforces these technical member types. Continuity and other functional geometry validity remain explicit consumer validation concerns under the approved #38/#42 contract.

Architecture and compatibility

Follows Epic #38 and Stories #39–#41. Mutable classes reside directly under the dimension namespace; Geometry/Geography is instance metadata. Supplied components retain their own context on insertion. Context propagation updates existing shared instances and never transforms coordinates.

This adds the approved mutable API without changing immutable concrete behavior or dependencies. Mutable indices are strict and do not use the legacy immutable wrapping convention. Coordinate tuples and nested compound components are rejected.

Documentation

Updated the constructor/API reference, class hierarchy, ownership rules and spatial-reference propagation documentation. Examples show shared ownership and recursive versus local-only updates.

Developer handoff

Independent local review is favorable, with no blocking code findings. The published revision will receive independent PR review and remote CI verification. Third-party PHPMD/PDepend emits PHP 8.5 deprecation notices; no quality rule was weakened.

@Alexandre-T Alexandre-T linked an issue Oct 29, 2026 that may be closed by this pull request
19 tasks
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.45%. Comparing base (d0d711d) to head (b865d14).
⚠️ Report is 9 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff              @@
##               main      #50      +/-   ##
============================================
+ Coverage     99.40%   99.45%   +0.04%     
- Complexity      703      840     +137     
============================================
  Files           132      158      +26     
  Lines          1525     1823     +298     
============================================
+ Hits           1516     1813     +297     
- Misses            9       10       +1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Alexandre-T Alexandre-T left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

READY FOR MERGE

Independent review of b865d14 against Story #42 and Epic #38: no blocking findings or unresolved technical gates.

Verified all four coordinate layouts; mutable line-string/circular-string component typing; ordered, zero-based editing and atomic rejection; shared component/point identity; recursive and local-only behavior of all three context setters; fixed spatial type/layout; chainable mutation contracts; and updated English documentation. Immutable behavior and dependencies remain unchanged.

Normative source checked: ISO/IEC CD 13249-3:201x(E), clause 7.4.1. Component types follow that source; geometric continuity remains an explicit validation concern under the approved representation contract.

Validation: independently reran the focused suite (29 tests, 214 assertions) and git diff --check. Inspected the full local test report (816 tests, 7,485 assertions) and successful quality report. GitHub Actions run 40904435138 passed PHP 8.4 tests and quality checks, and PHP 8.5 tests, for this revision. GitGuardian also passed.

The PR remains open; merge and final Done verification require the maintainer's decision.

Published as a COMMENT review because GitHub prevents APPROVE submissions through the same account that authored the PR. The reviewing agent is independent from the implementing agent.

@Alexandre-T
Alexandre-T merged commit 85f752f into main Oct 29, 2026
3 checks passed
@Alexandre-T
Alexandre-T deleted the 42-story-edit-compound-curves-in-place branch October 29, 2026 16:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Story: Edit compound curves in place

2 participants