Repository navigation
feat(types): edit mutable line strings and circular arcs - #49
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #49 +/- ##
============================================
+ Coverage 99.40% 99.42% +0.01%
- Complexity 703 801 +98
============================================
Files 132 153 +21
Lines 1525 1747 +222
============================================
+ Hits 1516 1737 +221
- Misses 9 10 +1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Alexandre-T
left a comment
There was a problem hiding this comment.
READY FOR MERGE
Independent review of commit 27ac6d4378223724d52e178ff1195e0f1c3a813a against Story #41, Epic #38, the shared contracts from #39/#40, repository rules and the applicable pre-merge Definition of Done.
The implementation covers mutable LineString and CircularString in XY, XYZ, XYM and XYZM, ordered point editing, complete coordinate replacement, strict zero-based addressing, structural arc operations, shared mutable-point identity and optional propagation for all three declared-context setters. Immutable points are rejected without conversion, applying the Product Owner/Technical Architect's explicit decision. Mutable paths expose neither copy operations nor dimension mutation.
The review finding concerning isLine() is resolved: exactly two points identify a line, while closure remains independently observable for longer paths. The added three-point regression covers both open and closed cases. The available ISO/IEC CD 13249-3:201x(E), clauses 4.2.5 and 4.2.6, was checked for the line definition and shared circular-arc endpoints. The approved distinction between representation and explicit geometric validation is preserved; no automatic repair, closure, transformation or dimension conversion is introduced.
Independent validation on the reviewed revision:
composer test-local: 787 tests, 7,261 assertions passed.composer quality: PHP CS Fixer, PHPStan level 9, PHPMD and PHP_CodeSniffer passed. Existing PHP 8.5 deprecation notices originate from PHPMD/PDepend dependencies; the aggregate exits successfully.git diff --check: clean; the working tree remains unchanged.- Required CI for this commit: PHP 8.4, PHP 8.5 and GitGuardian all successful.
The public documentation explains ownership, propagation and arc indexing. Dependencies #39/#40 are merged. No remaining blocking finding or unresolved gate was identified. The PR remains open; merge and final post-merge completion verification remain outside this review.
Closes #41.
Summary
Add mutable
LineStringandCircularStringin XY, XYZ, XYM and XYZM, with ordered point editing, coordinate replacement and circular-origin/arc operations that retain receiver and supplied-point identity.Declared SRID/reference/family setters propagate to contained points by default;
falseupdates only the path. Invalid addressing and rejected coordinate edits preserve membership and referenced points.Acceptance criteria
Validation
composer test-local: 787 tests, 7,261 assertions.composer quality: CS Fixer, PHPStan level 9, PHPMD and PHP_CodeSniffer passed.git diff --check.Tests:
MutableLineStringTest,MutableCircularStringTest,MutablePointSequenceContextTest.PHPMD/PDepend emit existing PHP 8.5 deprecation notices; the aggregate command succeeds.
Standards
Arc helpers enforce only sequence addressing. No automatic validation, repair, closing, transformation or dimension conversion is added.
Architecture
Mutable paths independently extend the read-only spatial base; internal storage and membership editing are shared. Factories remain unchanged.
Compatibility
Constructors reject immutable objects with
InvalidValueException; typed mutators reject them withTypeError, without conversion. Point getters exposeMutablePointInterface. Its inherited point-array return contract is redeclared explicitly to resolve inherited PHPDoc ambiguity, matchingPointInterface.Documentation
Developer handoff
Independent review concludes READY FOR MERGE on
27ac6d4378223724d52e178ff1195e0f1c3a813a. PHP 8.4, PHP 8.5 and GitGuardian checks are successful. The review finding onisLine()is resolved: exactly two points identify a line, independently of closure for longer paths. No blocking finding or unresolved gate remains. The PR is open and the Story remains In review; merge and final completion belong to the Product Owner workflow.