sillsdev / sillsdev/interlinearizer-extension
Wire the output project (back-translation / adaptation) into export, not creation
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 2
- Forks
- 0
- Avg merge
- 1d 17h
- Merged PRs (30d)
- 55
Description
Follow-up to #94 — resolving the second and third model gaps (interlinearMode and the targetProjectId semantic question): model the interlinear output (a back-translation project or an adaptation/daughter project, PT9 Options 3 & 4) as a deferred, attach-when-you-export concern — not a mode chosen at project creation.
Design principles this follows
- Simplify project creation — you don't declare "this is a back-translation project" up front. A project starts as just gloss a source; an output target is chosen later, only if and when you produce output.
- Generalize the interlinearizer — a project isn't locked to one output kind or destination. An output target is attached, changed, or dropped at will, and the same analysis can serve gloss-only use or feed an export.
- First-contact discoverable — the output picker and its intent (BT vs adaptation) surface intuitively at export time, and aren't worried about before then.
Reframe
#94's original framing made the output a creation-time mode (PT9 Option 3 = back translation, Option 4 = adaptation/revision), each locking the project into producing a second project. This issue defers that:
- The output target (a second Platform.Bible project glosses/adapted text are written to) is attached at export time via the project metadata modal, not at creation.
- An output-intent discriminator distinguishes back-translation from adaptation, driving export behavior and UI wording — set alongside the output target, when it's chosen.
- No creation-time mode picker.
Model additions
InterlinearProject.interlinearMode?: 'back-translation' | 'adaptation'(the #94 gap #2 proposal). Absent for gloss-only projects (PT9 Options 1 & 2) and for BT-Extension alignment imports; present only when the analysis is being exported to an output project. Consider naming itoutputModeto reflect the reframe — see Open questions.- Resolve the
targetProjectIdoverload (#94 gap #3).targetProjectIdcurrently means "alignment target for a BT-Extension import" — an input whoseAlignmentLink.targetEndpointsresolve to a second text (InterlinearProject.targetProjectId). The PT9 output project plays a structurally similar role (a second project + cross-side links) but the relationship is one-directional export, not two-way alignment. Recommendation: reusetargetProjectIdfor the output destination and letinterlinearModecarry the intent that disambiguates the two uses. Update the field's JSDoc to document both meanings — includingsrc/types/interlinearizer.d.ts:291, which currently documentstargetProjectIdas "absent for analysis-only projects (LCM, PT9)"; reuse makes it present on an imported PT9 project that has an export target.
The distinct cases the model must represent:
| Case | targetProjectId |
interlinearMode |
Notes |
|---|---|---|---|
| Gloss only (Options 1 & 2) | absent | absent | source-only analysis |
| BT-Extension alignment import | present | absent | existing bilateral-alignment use |
| Back translation (Option 3) | present (output) | 'back-translation' |
glosses exported to a BT project |
| Adaptation / revision (Option 4) | present (output) | 'adaptation' |
adapted text written to a daughter project |
Where this gets consumed
- Export/output feature (largely future work) reads
targetProjectId+interlinearModeto decide what to write and where. This issue is about modeling the output so it's deferred and attach-later; the actual write-back to the output project can be built on top. - UI wording keys off
interlinearMode(e.g. "Export back translation" vs "Update adaptation"). - The metadata modal /
interlinearizer.updateProjectMetadataalready accepttargetProjectId?; addinterlinearMode?there (and mirror onDraftProjectastargetProjectIdis mirrored, so it survives Save As).
Companion issue
The model-text suggestion source is the sibling gap, tracked in #148: it defers the suggestion input the same way this defers the output. PT9 import shipped in #150; attaching an imported project's output/BT project is #215, which consumes this issue.
Out of scope
- Building the actual export/write-back pipeline to the output project (separate feature work).
- Model-text suggestions (companion issue #148).
- Any project-creation UI changes.
Open questions
- Field name: keep
interlinearMode(traceable to #94) or rename tooutputMode(clearer under the reframe)? - Reuse vs. separate field: reuse
targetProjectIdfor both alignment-import and export-output (recommended, disambiguated byinterlinearMode), or add a dedicatedoutputProjectIdto keep the two roles physically separate? - Should this go to
user-questions.mdfor review outside the dev team, given it decides project-output UX? (per AGENTS.md UX-decisions guidance)
Size: S–M (model fields + metadata-modal wiring; the export pipeline itself is separate)
Priority: P2 — unblocks a coherent output/export design; not blocking gloss-only use
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
Read src/types/interlinearizer.d.ts, especially the targetProjectId documentation at line 291, then trace updateProjectMetadata, the metadata modal, and DraftProject. Resolve the field naming and targetProjectId reuse questions, wire optional interlinearMode through metadata updates and Save As, and ensure the model documents both alignment and export meanings without changing project creation or implementing write-back.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend-api-design, frontend
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100