translation-novel
translation-novel
Layer 2-5 owner for novel chapters / long-form fiction in translation-toolkit. Reads an intake-spec from translation-intake (Layer 1), splits the chapter into scenes via scripts/lib/scene_chunker.py, runs the shared DRAFT / REFLECT / IMPROVE core loop with a scene-window prompt (prev_scene_v2 + current scene + next_scene_source) instead of the whole-doc <TRANSLATE_THIS> windowing used by translation-doc, and concatenates the per-scene v2s back into the chapter target.
The scene-window prompt collapses cost from O(N²) to O(N) over a chapter (~17× reduction for a 30-scene chapter) while voice continuity is anchored to the target translation of the previous scene rather than its source. (Decision 1 of the v0.2.0 plan: this is a new skill, not a flag on translation-doc — chunking, prompts, and gate weights diverge enough to warrant separation.)
Inputs
- chapter — single Markdown file (
.md) per chapter. Recommended preprocessor:tsundoku:book-extract, which produces NCX-driven chapter.mdfiles from an EPUB. - intake-spec — from
translation-intake. If invoked directly without one, run intake first (--intakeflag) before continuing. Novel-relevant intake hints includeregister(literary / colloquial / mixed),mode(faithful / transcreation), and whether to run a protect-pass at all (default off for prose-only novels — see Layer 2). - project_glossary_path (strongly recommended) — repo-local glossary listing character names, place names, and recurring terms in the canonical target form. Defaults to
<caller_repo>/docs/i18n/glossary-{target_locale}.md; missing → fall through to L2 bundled glossary inglossary/. M2 enforces compliance per term; without a project glossary character names drift across scenes. - book_manifest (strongly recommended for novels with >1 chapter, v0.3.0) — directory of chapter
.mdfiles in name-order, OR an explicit ordered list of chapter paths. Enables the whole-book pre-pass (Layer 1.5) which produces<repo>/.translations/characters.json+<repo>/.translations/world-glossary.json. If absent, the skill runs in single-chapter mode — the pre-pass treats the one input chapter as the whole "book" (degenerate but valid; cost-ceiling assertion may not hold — seechecklists/prepass-cost-ceiling.md). - model (optional, v0.3.0) —
str(uniform model for all roles, v0.2.0 default) ORdictwith mandatorydefaultkey plus optional per-role overrides (writer,critic,reviser,back_translator,judge,extractor). Cheap-model split is the typical use: pin a cheap model (e.g. haiku-class) onextractorso the whole-book pre-pass amortizes cost, while the per-scene core loop runs on the standard model. Resolution is per-call viascripts/lib/model_routing.resolve_model_for_role(model, role). Seereferences/orthogonal-axes.md§Model routing for the full key set.
Service-interface contract (the four shared fields plus web_search) is defined in the design spec §Service Interface; no per-skill duplication here.