К документации
Руководство 00

Вики-движок — архива со схемой, викиссылки и синтез

Вики-движок даёт каждому архиву трёхуровневую модель инструкций: жёсткие правила, применяемые кодом, схемный prompt на архив (адвизорные редакционные руководства) и структурированные поля (persona, purpose, scope). Ментальная модель: schemaPrompt для вик…

3 мин чтения

Вики-движок даёт каждому архиву трёхуровневую модель инструкций: жёсткие правила, применяемые кодом, схемный 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.md F-WIKI-1.

Трёхуровневая модель

УровеньПриродаприменениеохват
Жёсткие правилапринуждение кодом, безусловноvalidateWritablePath + всегда внедряемый блок promptКаждый путь записи, связанный с архивом
schemaPromptредакционные руководства на архивТолько данные + prompt (никогда барьер)На архив, opt-in (пусто = выкл)
Структурированные поляpersona/purpose/scope из конфигурациисуществующее поведение synthesis/orchestratorНа архив, неизменно

Жёсткие правила (code-enforced)

Два безусловных механизма, независимых от любой конфигурации:

  1. Файловая стража. 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.
  2. Зеркало на уровне 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)

text
жёсткие правила (код) > schemaPrompt (advisory) > структурированные поля
  1. schemaPrompt никогда не может перекрыть жёсткие правила (prompt это декларирует; код это обеспечивает).
  2. В конфликте со структурированными полями побеждает schemaPrompt (On conflict with the structured fields (persona, purpose, scope), these guidelines take precedence over them.).
  3. Архив без 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-788advisory-блок путешествует на роли 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`).