HermitCrab analysis can spin on simultaneous rewrites with incompatible environments

Aperta
#623 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@johnml1135 ci sta già lavorando.

Dal 9/11/2026.

  • #624 di @johnml1135 — aperta

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
58/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
csharp

Direzione di ricerca

Start with AnalysisRewriteRule.cs around the SelfOpaquing selection and reapplication loop, then inspect SimultaneousPhonologicalPatternRule.cs and its no-match behavior. Add regression cases for the three reduced shapes in the issue and check that reapplication stops when a simultaneous rule makes no change. The issue does not identify test file paths, so locate the existing analysis rewrite tests before adding cases; verify the cases terminate and produce the expected parses.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

HermitCrab’s C# analysis parser can hang indefinitely in a simultaneous rewrite when a replacement segment conflicts with an environment segment, consuming one CPU core; the pinned hc.dll reproduced all three reported shapes.

  • Minimal segment case: one-feature t → d / _ a, underlying ta, parse da.
  • Alpha-input case: input [nasal:+, α(place)], output m, environment _ p with p nasal−; parse prefixed mp.
  • Underlying realization case: one rule ʔ → - / _ V[+vocalic], underlying ʔa, parse -a.
  • Suspected source: AnalysisRewriteRule.Apply selects an unbounded SelfOpaquing loop when RHS and environment feature structures are incompatible; SimultaneousPhonologicalPatternRule.Apply returns a word even when it finds no matches.
  • Not known: whether synthesis has the same reapplication behavior.

Next: add regression cases for these reduced shapes and make self-opaquing reapplication stop when the simultaneous rule makes no change.

Reproduction and evidence

Replayed with the Release HermitCrab CLI from Machine commit 4d9b454d42a0da35e058641a65596339a79d115b using dotnet hc.dll -i <grammar.xml> -s <script>. The three original inputs each timed out at 45 seconds; all reduced shapes timed out at 10 seconds. Each timeout used a captured process PID and direct SIGTERM. Reduced runs sampled 107–112% CPU on one process. Compatible-output, no-environment, and feature-removal controls completed promptly.

At the pin, AnalysisRewriteRule.cs:47-69 selects SelfOpaquing after the RHS/environment FeatureStruct.IsUnifiable check fails; :166-173 has no progress or termination guard. SimultaneousPhonologicalPatternRule.cs:22-35 always returns the input word, including when Matcher.AllMatches produces no applicable match. The reduced alpha-input case also hangs after α is removed while retaining the feature-bearing input class, and the glottal case hangs with a single rule, so neither α nor the original rule chain is necessary to the loop.

The pin-matched driver was absent from the exact-pin worktree, so the Tool Release project was built from an exact-pin source archive (SHA-256 of resulting hc.dll: 9cd575be98ddb4e9e32e63114ee699c94d7a395af2074ad15f1557a272404964). The related loop files are unchanged in locally fetched Machine origin/master 9f284a3cc4d5e2c5896f885ba1103fb30594b1e8.

Found while comparing HC-Rust (PanGloss) with pinned hc.dll; PanGloss answers all three in about 1 ms.

Lingua principale
C#
Stelle
29
Fork
16
Merge medio
5g 11h
PR unite (30g)
15

Preparare l'ambiente

  • Nessun Dockerfile né file Docker Compose
  • Ha un modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di sillsdev/machine

Tutte le issue di sillsdev/machine

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.