sillsdev / sillsdev/languageforge-lexbox
Expose allomorphs (IMoForm) so interlinearizer AllomorphRef can resolve
Nobody has claimed this yet.
- Dominant language
- C#
- Stars
- 9
- Forks
- 8
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 49
Description
Split out from sillsdev/interlinearizer-extension#26 (see the triage comment and the follow-up). Sibling issue: #2559 (MSA / GrammarRef).
Problem
The interlinearizer's interlinear model references allomorphs by GUID via AllomorphRef (src/types/interlinearizer.d.ts):
export interface AllomorphRef {
/** `IMoForm.id` (GUID). */
allomorphId: string;
projectId?: string;
}
Nothing in the lexicon stack can resolve that GUID today:
- MiniLcm has no allomorph model.
Entrycarries aLexemeForm(MultiString) and aMorphType(MorphTypeKind), but individualIMoFormobjects — the lexeme form and the alternate forms hanging off an entry — are not represented. The only placeIMoFormappears isbackend/FwLite/FwDataMiniLcmBridge/Api/LcmHelpers.cs, where it is created internally and immediately collapsed intoEntry.LexemeForm. Allomorph identity (the GUID) is lost. - The Platform.Bible lexicon extension exposes nothing for it.
platform.bible-extension/src/types/lexicon.d.tsdoes not export an allomorph type, andIEntryServicehas no allomorph methods. Consumers can only infer detail indirectly fromIEntry.lexemeFormandIEntry.components.
#2249 closed the analogous gaps for entries and senses by adding getEntry / getSense. This is the same shape of request for allomorphs, except that it also requires new model surface, not just a new lookup.
Ask
- Add an allomorph model to MiniLcm (stable
Id, form as aMultiString,MorphTypeKind, owning entry id, and whether it is the entry's lexeme form vs. an alternate form). - Read/write it in the FwData bridge (
IMoForm⇄ MiniLcm) and in the CRDT/Harmony bridge, and surface it on the FwLiteWeb routes. - Export the type from
platform.bible-extension/src/types/lexicon.d.tsand add a by-id lookup onIEntryService—getAllomorph(projectId, allomorphId)or equivalent — soAllomorphRefresolves without walking entries.
Scope note
Point 1 fans out further than the interlinearizer JSDoc suggests: adding a MiniLcm model means touching the FwData bridge, the CRDT bridge, sync, and the FwLiteWeb API surface, not just re-exporting an existing type. Worth sizing before committing — it may be worth splitting the MiniLcm/backend work from the extension-surface work.
Blocks
- sillsdev/interlinearizer-extension#189 — Analysis Catalog: morpheme rows
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading backend/FwLite/FwDataMiniLcmBridge/Api/LcmHelpers.cs, then inspect the CRDT/Harmony bridge and FwLiteWeb routes to map how existing lexicon models are read, written, synced, and exposed. Compare the requested model with platform.bible-extension/src/types/lexicon.d.ts and IEntryService; done means an allomorph can round-trip through the bridges and resolve by ID through the extension API.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, typescript
- Domain
- api, backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100