108 lines
8.5 KiB
Text
108 lines
8.5 KiB
Text
@startuml components
|
||
title TextMachine — компоненты бэкенда (2026-07-25, синхронизировано с 05-decisions-log D1–D39.25, пост-пак-16)\nПометки: [OK] = построено · [FLAG] = построено за enabled:false · [Ф2]/[Ф3] = планово
|
||
skinparam componentStyle rectangle
|
||
skinparam wrapWidth 220
|
||
|
||
actor "Владелец\n(запуск; подпись майнинг-дельты (exit 3);\nрешение о включении repair-петли по замеру остатка (D39.24);\nподтверждение терминов; чтение отчётов/паспортов;\nарбитр слепых чтений)" as HUMAN
|
||
|
||
package "CLI cmd/tmctl [OK]" {
|
||
component "translate / report / status /\nexport (--pairs) / redrive / seed-lint\nexit-контракт: 0 чисто · 1 инфра ·\n2 completed-with-flags · 3 майнинг-подпись" as CLI
|
||
}
|
||
|
||
package "internal/pipeline — композит-корень (драйвер) [OK]" {
|
||
component "Runner [OK]: конфиг-стек fail-fast\n(book+pair+pipeline+models, строгий KnownFields-декод),\nlangpack+книжный overlay, промпт-конвенция,\nCheckRunnable (C2/C3/judge отвергнуты в Ф0)" as RUNNER
|
||
component "Волновой исполнитель [OK] (D39.17):\nдрафт ∥ → майнинг-стоп → редактура ∥ (по edit-единицам);\nредактор НИКОГДА не пере-рендерит драфт;\nc-lite: флагнутый member выбрасывается (D39.18)" as WAVES
|
||
component "runStage [OK]: reserve → вызов → settle+чекпойнт\nОДНОЙ tx; RequestHash tm-request-v2; $0-резюм по чекпойнту\n(rerun2: доказан ×3 арма); classify ПОСЛЕ денег;\nbilled-decode кап (пак-12)" as STAGERUN
|
||
component "Снапшоты per-wave [OK]:\ndraft = BASE-банк · edit = ENRICHED-банк\n(«переоплата ОДНА», D30.9/D39.12);\nlangpack Version() и промпт-SHA фолдятся;\nstale → громкий стоп без --resnapshot" as SNAP
|
||
component "Эскалация single-hop + ре-гейт [OK] (D12);\nescalation.chains = конфиг-декларация,\nмульти-хоп по цепочке лейбла [Ф2/пак-17]" as ESC
|
||
component "Майнинг-стоп [OK]: MineBank → signature map →\nexit 3 → подпись владельца → mined_delta / mined_rejects;\nре-ран: драфт $0-резюм, пустая дельта = авто-континью" as MINING
|
||
component "Банкнота ⟦TM-BANK-v1⟧ [FLAG]\n(срез с RAW-драфта до classify; derived-чекпойнт)" as BANKNOTE
|
||
component "Repair-петля [FLAG] (пак-16, D39.24):\nсуб-шаг финальной стадии; таргет-вызовы по span,\nпромпт per-класс; 6 гардов + позитивный ре-гейт\n+ анти-удаление; derived tm-repair-v1;\nвключение = решение владельца по замеру остатка" as REPAIR
|
||
component "Вердикты disposition [OK]: intrinsic classify всегда\n(refusal причино-агностичен — детектим ФАКТ, D12/D39.25;\nэхо/loop/length/empty); flag+skip+continue (D2)" as DISP
|
||
component "$0 read-модели [OK]: status · export\n(манифест-ре-чанк, ExportNormalize) · quality-report\n(+ residual-скан RepairCandidates = замер остатка)" as READMODELS
|
||
}
|
||
|
||
package "Подсистемы (сплит пака-15, D39.23) [OK]" {
|
||
component "internal/chunk: ingest txt/epub\n(GB18030, ruby-захват) + чанкер по output-бюджету\n(SegBudget пары), edit-единицы" as P_CHUNK
|
||
component "internal/checks: санитайзер D30.3 ·\ncheap-гейты v4 · DC-чекеры (пар-агностичные, данные) ·\ncoverage · regression guard · RepairCandidates ·\nExportNormalize; пакет сообщает ФАКТЫ,\nдиспозицию назначает драйвер" as P_CHECKS
|
||
component "internal/miner: $0 банк-майнер\n(порт exp16 V-C, паритет EXACT) →\nсид-дельта YAML на подпись" as P_MINER
|
||
component "internal/membank: Aho-Corasick Select ·\ntrust-gate (терм-дрейф закрыт, D39.2) · спойлер-окна ·\nsticky · post-check E1 · Version/BaseVersion" as P_MEMBANK
|
||
component "internal/text: версионированный\nнормализационный субстрат (NFKC/trad2simp);\ninternal/seed: схема сид-YAML" as P_TEXT
|
||
component "internal/lang: языковые ДАННЫЕ без поведения\n(langpack пары + embedded); Version() → снапшот" as P_LANG
|
||
component "internal/config: book/pair/pipeline/models\nстрогий декод; CheckAdultChannel-линт" as P_CONFIG
|
||
component "internal/llm: адаптеры openai/anthropic/local;\nтранспорт-ретраи/failover (пак-12);\ncapability-резолв в wire-форму" as P_LLM
|
||
component "internal/store: SQLite на книгу\n(леджер reserve/settle BEGIN IMMEDIATE, чекпойнты,\nchunk_status, jobs, request_log, glossary, ruby)" as P_STORE
|
||
}
|
||
|
||
package "Конфиг-слои (ДАННЫЕ — движок общий, §0/D39.25)" {
|
||
component "book.yaml: бриф+BriefHash;\nAdult bool = интерим до generic content-labels\n(D39.25, пак-17); langpack_extend (книжный overlay);\nmined_delta / mined_rejects" as C_BOOK
|
||
component "configs/pairs/<пара>.yaml:\nфертильность, output-бюджеты, len_ratio" as C_PAIR
|
||
component "configs/langpacks/<пара|язык>/:\nморфология источника, Палладий,\ndc-checkers, heading" as C_LP
|
||
component "prompts/<пара>/<роль>.md +\nrepair/<класс>.md (конвенция, fail-loud)" as C_PROMPTS
|
||
component "models.yaml: провайдеры/цены/capability\n(permissive = ТИП-изоляция канала B, эхо-гейт DeepSeek,\nфлоры min_max_tokens, rate_limit)" as C_MODELS
|
||
component "pipeline-*.yaml: стадии/гейты/\nэскалация/волны/майнинг; строгий декод" as C_PIPE
|
||
}
|
||
|
||
cloud "LLM-провайдеры" {
|
||
component "DeepSeek V4: -flash = draft (thinking ON — эхо-мина) ·\n-pro = РЕДАКТОР-ИНТЕРИМ (D39.22) + эскалация-хоп;\nadult-контент НЕ отправлять (ToS → capability-данные)" as P_DS
|
||
component "GLM glm-5: редактор-РЕЗЕРВ (D39.22);\nMistral: переводчик adult-контента (D19);\nкак несущий редактор ИСКЛЮЧЁН (D39.20)" as P_GLM
|
||
component "xAI grok-4.3: permissive, adult-цепочка,\nсудья 18+ фолбэк; ключ data-sharing, off перед продом (D27)" as P_XA
|
||
component "gemini-3.1-pro-preview: апекс/премиум-эскалация;\nnative-судья [Ф2]; mandatory thinking, additive_total" as P_GM
|
||
component "OpenAI gpt-5-mini · local/ollama (permissive)" as P_OTH
|
||
}
|
||
|
||
component "Ф2/Ф3 (планово): голос/состояние D21 ·\nnative-Gemini судья · C2/C3-селекция ·\ngeneric content-labels × provider-capabilities (пак-17, D39.25) ·\nja→ru §B5 (тест общности) · HTTP API (IDE) [Ф3]" as FUTURE
|
||
|
||
HUMAN --> CLI : запуск / подпись / решения
|
||
CLI --> RUNNER
|
||
RUNNER --> WAVES
|
||
WAVES --> STAGERUN
|
||
WAVES --> MINING
|
||
STAGERUN --> SNAP
|
||
STAGERUN --> ESC
|
||
STAGERUN --> BANKNOTE
|
||
STAGERUN --> REPAIR
|
||
STAGERUN --> DISP
|
||
CLI --> READMODELS
|
||
|
||
RUNNER --> P_CONFIG
|
||
RUNNER --> P_LANG
|
||
WAVES --> P_CHUNK
|
||
STAGERUN --> P_LLM
|
||
STAGERUN --> P_STORE
|
||
DISP --> P_CHECKS
|
||
REPAIR --> P_CHECKS
|
||
MINING --> P_MINER
|
||
WAVES --> P_MEMBANK
|
||
P_MINER --> P_TEXT
|
||
P_MEMBANK --> P_TEXT
|
||
P_CHECKS --> P_LANG
|
||
P_MINER --> P_LANG
|
||
READMODELS --> P_STORE
|
||
READMODELS --> P_CHECKS
|
||
|
||
P_CONFIG --> C_BOOK
|
||
P_CONFIG --> C_PAIR
|
||
P_CONFIG --> C_MODELS
|
||
P_CONFIG --> C_PIPE
|
||
P_LANG --> C_LP
|
||
RUNNER --> C_PROMPTS
|
||
C_BOOK ..> C_LP : langpack_extend (overlay)
|
||
|
||
P_LLM --> P_DS
|
||
P_LLM --> P_GLM
|
||
P_LLM --> P_XA
|
||
P_LLM --> P_GM
|
||
P_LLM --> P_OTH
|
||
|
||
HUMAN <-- READMODELS : отчёты / паспорт / замер остатка
|
||
HUMAN <-- MINING : signature map (exit 3)
|
||
FUTURE -[hidden]-> P_OTH
|
||
|
||
note bottom of HUMAN
|
||
Петля человека — несущая опора safety:
|
||
все защиты кончаются флагом (D2);
|
||
майнинг-дельта и включение платного
|
||
repair-пути — только за подписью.
|
||
end note
|
||
@enduml
|