Repository navigation
Fix directional annotation tie boundaries - #556
johnml1135 wants to merge 1 commit into
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #556 +/- ##
==========================================
+ Coverage 74.57% 74.62% +0.04%
==========================================
Files 453 453
Lines 38314 38317 +3
Branches 5280 5281 +1
==========================================
+ Hits 28573 28594 +21
+ Misses 8576 8561 -15
+ Partials 1165 1162 -3 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
| return true; | ||
| } | ||
|
|
||
| break; |
There was a problem hiding this comment.
FYI: F1. The public Find(start, example, dir) overload can now return a tie that comes before start, and which tie it returns depends on random node levels. Example: start S ties example with Levels == 2, and tie T (level 1) sits between S.GetPrev(1) and S. Before this change the call returned S; now it drops to level 0 and returns T. If S has Levels == 1, it still returns S. Nothing in src/ calls this overload (searched for Find( in src/), so the visible effect is limited to outside callers. Unverified: I reasoned this through but did not reproduce it.
Public API / TFM / package / machine.py parity: the return-value behavior of the public Findings: F1 new, unverified. Reviewed at d98d12a |
Pin full parse multiplicity and application histories from combined Machine #500 and #556 in three derivatives of the #480 truncation grammar. Update fixture-derived coverage, interaction ledgers and their audit pins. The original grammar is unchanged. The complete expectations intentionally remain red on the conformance branch until both engine fixes are applied.
d98d12a to
579b2ef
Compare
Pin full parse multiplicity and application histories from combined Machine #500 and #556 in three derivatives of the #480 truncation grammar. Update fixture-derived coverage, interaction ledgers and their audit pins. The original grammar is unchanged. The complete expectations intentionally remain red on the conformance branch until both engine fixes are applied.
579b2ef to
41f319f
Compare
Start here:
src/SIL.Machine/DataStructures/BidirList.cs,Find: the whole source change is a 9-line edit there.Status: first of a stack — merge in order #556 → #500 → #480 → #578.
Ready for review. CI has no red checks (the
claude-reviewjob was skipped).BidirList.Findnow descends to level zero before returning an equal node, so it selects the first match in the requested search direction. Before, an equal node found on a higher skip-list level was returned at once, so word copying and segment deletion could land on the wrong member of a tied annotation group. The fix is in the shared lookup, and the tests are deterministic fixed layouts.Reviewers arrive asking how a change to a shared data-structure lookup is pinned. Every case in
AnnotationTieTestsruns over 200 seeds (skip-list shapes), and reverting only the lookup change breaks most of them. The question worth your time: does returning the first tie in the search direction match what callers ofFindexpect when they pass an offset that starts or ends a tie?Where to look:
BidirList.Find: both directions must reach the correct edge of an equal-range group. Pinned byFind_ReturnsFirstMatchingAnnotationInSearchDirectionandGetNodes_ReturnsAnnotationsAtBothTiedBoundaries.CopyAndClone_PreserveMappedAnnotationRangesAndPayloads.RemoveNode_PreservesExactUnaffectedAnnotations,RemoveStartEndpoint_ShrinksMultiNodeOwnerAndRemovesEveryTieandRemoveEndEndpoint_ShrinksMultiNodeOwnerAndRemovesEveryTie.Not here:
a/gaconformance fixture update, prepared separately for Add a conformance suite for HermitCrab, with its adequacy argument #480 (open).Verification (run on the earlier commit
d98d12a5; the head differs only bysrc/AssemblyInfo.propsfrom a rebase onto master):./local_check.sh --agent-strictpassed; focusedAnnotationTieTestspassed with 0 failed, 0 skipped. Not run: this branch combined with #557. Details in the accordions.Next: approve, or say which
Findcaller needs a test for the new boundary.Reading this a year from now -- start here
Addresses #506's directional tie-boundary mechanism (#506 is an open issue). Related: #500, #480, #554, #555. The reasoning and evidence scope live here because the PR description is the only record.
Evidence
./local_check.sh --agent-strict: passed with one-node WSL settings and the existing native CI build output restored; all normal stages ran.AnnotationTieTests: six test methods, each over 200 seeds, so 1,200 cases at the head (recounted). Earlier run ond98d12a5: 1,200 passed, 0 failed, 0 skipped, independently rerun.git diff --check origin/master...HEAD: passed. An independent source and test review passed.aand fivegaidentity multisets, including application order, morph order, allomorph index and features.Native prerequisite and evidence scope
Base
259920414132bdd5a85542722d9af5509aed8943, candidated98d12a5d514ce589d7495c71d055830e061a418.The WSL environment lacks CMake. The existing
sp4c-linux-x64output from the successful exact-base CI run was restored after verifying the native wrapper's source inputs were unchanged. Its required tcmalloc runtime was downloaded, hash-checked and extracted under task-private/tmp; no system package was installed and no product dependency changed. The strict gate used a command-scopedLD_LIBRARY_PATHfor that runtime.The full local script does not collect CI-equivalent coverage. The finite identity checks and deterministic layouts establish the exercised cases; #554 and #555 remain separate findings.
Generated with OpenAI Codex.
This change is