Вики-движок — архива со схемой, викиссылки и синтез
Вики-движок даёт каждому архиву трёхуровневую модель инструкций: жёсткие правила, применяемые кодом, схемный prompt на архив (адвизорные редакционные руководства) и структурированные поля (persona, purpose, scope). Ментальная модель: schemaPrompt для вик…
Вики-движок даёт каждому архиву трёхуровневую модель инструкций: жёсткие правила, применяемые кодом, схемный prompt на архив (адвизорные редакционные руководства) и структурированные поля (persona, purpose, scope). Ментальная модель: schemaPrompt для вики — то же, что CLAUDE.md для кода репозитория.
Функция Community. Операторский справочник для Wiki Schema Layer (Phase 187, аудит на барьере v0.25 — WIKS-01/02, проверено на живом коде). Источник:docs/WIKI_SCHEMA_LAYER.md(v0.28.1). Строоки происхождения:FACT-CENSUS.mdF-WIKI-1.
Трёхуровневая модель
| Уровень | Природа | применение | охват |
|---|---|---|---|
| Жёсткие правила | принуждение кодом, безусловно | validateWritablePath + всегда внедряемый блок prompt | Каждый путь записи, связанный с архивом |
| schemaPrompt | редакционные руководства на архив | Только данные + prompt (никогда барьер) | На архив, opt-in (пусто = выкл) |
| Структурированные поля | persona/purpose/scope из конфигурации | существующее поведение synthesis/orchestrator | На архив, неизменно |
Жёсткие правила (code-enforced)
Два безусловных механизма, независимых от любой конфигурации:
- Файловая стража.
validateWritablePath(packages/server/src/utils/archivePath.ts:39-54) отвергает любую цель записи вне<archiveBase>/wiki/: сначала анти-traversal проверка (validateArchivePath), затем проверка префиксаwiki/— цель внеwiki/выбрасываетWrite target outside wiki/ directory: <path>. raw_sources/ is immutable.ИcreatePage, иupdatePageвызывают её перед каждымfs.writeFile. Ни один endpoint API не пишет подraw_sources/— он неизменяем по design. - Зеркало на уровне prompt.
HARD_RULE_RAW_SOURCES(archiveConfigService.ts:52-53) — всегда активный блок, добавляемый к каждому prompt, связанные с архивом: его формулировка отражает стражу (raw_sources/ is immutable), так что модель даже не пытается выйти изwiki/— а если попытается, код гарантирует, что ничего не приземлится.
schemaPrompt (advisory)
Свободное текстовое поле, хранимое в JSON конфигурации архива:
- Схема:
schemaPrompt: z.string().max(10000).optional()наarchiveConfigSchema— аддитивный ключ, ноль миграций. 10000 символов ≈ ~2500 токенов. - Валидация: Zod при каждой записи (
PUT /api/archives/:id/config); payload сверх потолка →400 { error: "Invalid config", details.schemaPrompt }. - Контракт чтения:
GET /api/archives/:id/configдля архива без сохранённой строки →200с конфигом по умолчанию ({ rawSourcesImmutable: true }): это путь гидрации первого сохранения; архивы со строкой возвращают сохранённый blob как есть. - Потолок при внедрении: legacy-blob свыше 10000 символов усекаются при внедрении с пометкой
(truncated at 10000 characters)— legacy-строки никогда не перевалидируются при чтении. - Advisory по design: блок входит как ДАННЫЕ с явной advisory-этикеткой, никогда как привилегия из system prompt. Никакой санитизации сверх потолка длины; противоречивые инструкции = принятый риск качества, смягчённый подсказками и шаблонами UI.
Преимущество (precedence)
жёсткие правила (код) > schemaPrompt (advisory) > структурированные поля- schemaPrompt никогда не может перекрыть жёсткие правила (prompt это декларирует; код это обеспечивает).
- В конфликте со структурированными полями побеждает schemaPrompt (
On conflict with the structured fields (persona, purpose, scope), these guidelines take precedence over them.). - Архив без schemaPrompt ведёт себя как baseline + жёсткое правило — ноль улучшения, ноль деградации (никаких пустых секций-заполнителей в prompt).
Куда блок приземляется в prompt
| Шов | Где | Примечания |
|---|---|---|
| Chat orchestrator (non-streaming) | orchestrator.ts:295-302 (runAgent) | жёсткое правило ВСЕГДА + advisory-блок при наличии |
| Chat orchestrator (streaming) | orchestrator.ts:805-812 (runAgentStreaming) | стриминговый близнец, тот же порядок |
| Synthesis Pass 4 (decision) | synthesisStages.ts:784-788 | advisory-блок путешествует на роли SYSTEM; Pass 1/2 и суд противоречий остаются undefined |
Внутри system prompt: после блока MANDATORY SEARCH RULE, перед тернарником systemPrompt.
wiki_query и wiki_write
Встроенные wiki_query и wiki_write — skills, чьи пути execute() никогда не обращаются к LLM: запись генерирует детерминированные previews (wikiWriteService.ts содержит ноль LLM-вызовов) — внедрение на skill не достигает никакой модели; единственная поверхность к LLM — system prompt orchestrator.
rawSourcesImmutable
rawSourcesImmutable: boolean (по умолчанию true) на archiveConfigSchema — флаг документации, никогда переключатель принуждения: правило неизменяемости действует независимо от флага (стража validateWritablePath + всегда активный блок гарантируют его).
Это руководство описывает операционную поверхность вики-движка; техническая глубина живёт в статье-близнеце:
Provenance
| Раздел | Источник |
|---|---|
| Трёхуровневая модель / жёсткие правила | docs/WIKI_SCHEMA_LAYER.md (§ The 3-layer model, § Layer 1) — F-WIKI-1 |
| schemaPrompt / преимущество / швы | docs/WIKI_SCHEMA_LAYER.md (§ Layer 2, § Precedence chain, § Injection seams) |
| Аудит | Phase 187 commits; завершено на барьере v0.25 (WIKS-01/02, Phase 194) |
---
Справочник оператора — Simmetric Chat v0.28.1 (документы обновлены 2026-10-02, SHA переписи `aca5b8ff`).