Repository navigation
Fix directional annotation tie boundaries - #556
johnml1135 wants to merge 2 commits 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.05%
==========================================
Files 453 453
Lines 38342 38353 +11
Branches 5284 5286 +2
==========================================
+ Hits 28593 28622 +29
+ Misses 8583 8568 -15
+ Partials 1166 1163 -3 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This comment has been minimized.
This comment has been minimized.
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
…the #18 waivers are gone (#184) * Align truncation morph attribution with corrected C# semantics Replay copied annotation transfers before the zero-width last-node claim. Preserve current node ownership, genuine descendant grouping and repeated allomorph suppression using existing flat morph records and shared decoded ranges. Keep compound descendant transfer non-recursive, matching C#. Reuse the #480 identity, subsumption and copy-U fixtures with complete occurrence and application histories. Add the root-boundary regression and stage the existing #553 partial-root corpus with separate prune counters. References: sillsdev/machine#500, sillsdev/machine#506, sillsdev/machine#556, sillsdev/machine#480, sillsdev/machine#553. * test: register new parser modules in harness inventory * Match the pinned oracle on truncation identities and remove obsolete waivers. Drop graduated fixture copies and remove the five-word and shell-runner exceptions. Ratchet measured faithfulness failures from 24 to 11 and expose the corrected ground truth's tuned-surface proposal gap in the scoreboard. Co-Authored-By: Codex GPT-6.1 Sol <noreply@openai.com> * Restore pruning coverage and document truncation proposal identities. Count both template skip mechanisms in the clitic-state guard. Pin a Floating annotation's later anchor-copy transition with real synthesis. Explain the HC-Rust dependency of scoreboard ground truth and composite FST proposal tags using before/after gau identities. Co-Authored-By: Codex GPT-6.1 Sol <noreply@openai.com> --------- Co-authored-by: Codex GPT-6.1 Sol <noreply@openai.com>
Check the starting node before descending from its skip-list predecessor, which can expose an earlier tie or miss result.
| using NUnit.Framework; | ||
| using SIL.Machine.DataStructures; | ||
|
|
||
| namespace SIL.Machine.Tests.DataStructures; |
There was a problem hiding this comment.
FYI: F2. This namespace breaks the test project convention: SIL.Machine.Tests.DataStructures is the only SIL.Machine.Tests.* namespace under tests/. Every other file uses the namespace of the code under test, as AnnotationTieTests in this PR does with SIL.Machine.Annotations. Use namespace SIL.Machine.DataStructures;.
Public API / TFM / package / machine.py parity: the signatures did not change, but Findings: F1 addressed (731385e), F2 new. Reviewed at 731385e |
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 → #615.
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; it now belongs to the conformance suite (Add a conformance suite for HermitCrab, with its adequacy argument #480 is closed).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