Skip to content

Remove HermitCrab's analysis-cascade memo - #522

Open
johnml1135 wants to merge 3 commits into
masterfrom
hc/remove-analysis-memo
Open

johnml1135 wants to merge 3 commits into
masterfrom
hc/remove-analysis-memo

Conversation

@johnml1135

@johnml1135 johnml1135 commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

Quick summary

Removes HermitCrab's opt-in analysis-cascade memo; the sequential rule cascade
and MergeEquivalentAnalyses still work exactly as before. Measured as a
package (#490), it cost 28-32% and ~29 GB on Sena for no net speedup on FLEx's
parallel path. Pruning (#474 landed; #491/#494/#519 open) is untouched and is
where the real parse-time wins come from.

Where to look

  • AnalysisMergeKey (AnalysisStratumRule.cs L226-309) still distinguishes non-head count and
    per-rule unapplication counts -- pinned by AnalysisMergeKeyTests.cs and MergeEquivalentAnalysesTests.cs.
  • Memo plumbing is gone (AnalysisScope.cs, AnalysisStateKey.cs, MemoizedCombinationRuleCascade.cs
    deleted) -- maxDegreeOfParallelism and the sequential cascade are unchanged public API.
  • Review guidance dropped the memo-key re-audit language (docs/review/hermitcrab.md and others).

Validation

  • dotnet build (MSBUILDDISABLENODEREUSE=1) -- succeeded, 0 warnings, 0 errors.
  • dotnet test tests/SIL.Machine.Morphology.HermitCrab.Tests --no-build -- 89 passed, 0 failed.
  • dotnet csharpier check . -- 713 files checked, clean.
  • pwsh -NoProfile -File scripts/comment-hygiene.ps1 -BaseRef origin/master -- clean.
  • git diff origin/master..HEAD --stat -- 16 files, +196/-1520; production diff unchanged, only
    AnalysisMergeKeyTests.cs added.
  • ./local_check.sh was not run as such; the commands above cover its steps individually.

Reading this a year from now

The memo only ran when maxDegreeOfParallelism == 1 and tracing was off. FLEx uses
the default parallelism, so production never executed it. #490's ledger measured
the optimization round as a package: no net speedup, and cross-word memo sharing
was 28-32% slower on Sena and cost ~29 GB of memory. The gains keep coming from
search-space pruning that doesn't need a replay cache: #474 (landed), and #491,
#494, and #519 (open at the time of writing). Those shrink the work instead of
caching it, and they apply on the parallel path FLEx actually uses. The memo was
~1,400 lines of subtle code (ReplayOnto grafting, arrival-count bookkeeping)
whose correctness depended on an unenforced key invariant (#490, "narrowing that
key breaks correctness with no test failure").

What stays, and why
  • The public Morpher(..., maxDegreeOfParallelism) parameter and the sequential
    cascade. They are API and still useful without the memo.
  • Fix bug in MergeEquivalentAnalyses #493's MergeEquivalentAnalyses fix. It keyed on AnalysisStateKey; that key
    now lives as an internal AnalysisMergeKey in AnalysisStratumRule, covering the
    same dimensions (shape, stratum, syntactic and realizational feature structures,
    non-head count, per-rule unapplication counts).
Prior measurements (not reproduced by this review round)

These are earlier author measurements from the memo-removal work, not commands run
as part of this pass's validation, and no reproducible artifact for them is checked
into the tree:

  • Spot check on 5 real grammars (Sena, Amharic, Indonesian, Mbugwe, Aweti), 5 words
    each, all with at least one parse: analysis multisets (gloss, allomorph identity,
    root index, feature structures) were reported identical between master memo-off
    and this branch in both default and sequential modes, 25/25 match.
  • On the 14 words where master memo-on also completed, it was reported no faster
    than this branch's sequential mode (e.g. 3,286 ms memo-on vs 3,122 ms without it;
    412 vs 350 ms; the rest within noise).
  • Full-solution run reported as 1,003 passed / 3 skipped / 0 failed.

🤖 Generated with Claude Code


This change is Reviewable

@codecov-commenter

codecov-commenter commented Sep 25, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 21 lines in your changes missing coverage. Please review.
✅ Project coverage is 73.90%. Comparing base (7109531) to head (a84dc6f).

Files with missing lines Patch % Lines
...chine.Morphology.HermitCrab/AnalysisStratumRule.cs 74.69% 11 Missing and 10 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #522      +/-   ##
==========================================
- Coverage   74.07%   73.90%   -0.18%     
==========================================
  Files         456      453       -3     
  Lines       38164    38000     -164     
  Branches     5228     5206      -22     
==========================================
- Hits        28270    28083     -187     
- Misses       8734     8751      +17     
- Partials     1160     1166       +6     

☔ 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.

johnml1135 and others added 3 commits September 25, 2026 18:52
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds focused AnalysisMergeKey regressions covering non-head count and
per-rule unapplication counts, the two merge-key dimensions the deleted
memo tests exercised.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@johnml1135
johnml1135 force-pushed the hc/remove-analysis-memo branch from 4490f59 to a84dc6f Compare September 25, 2026 22:54
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.

2 participants