Skip to content

docs(mandates): нормативний контракт M6 фаза 0 — Дельта - #67

Merged
vitaliytv merged 1 commit into
mainfrom
claude/delta-contract-m6
Aug 9, 2026
Merged

docs(mandates): нормативний контракт M6 фаза 0 — Дельта#67
vitaliytv merged 1 commit into
mainfrom
claude/delta-contract-m6

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що змінено

Додано в docs/architecture/mandates.md секцію «## Нормативний контракт (M6 фаза 0)» (перед «## Місце в roadmap») з чотирма нормативними підрозділами:

  • Схема .mt/mandates.yaml — повна таблиця полів (generation, mandates[].owner/kind/scope/thresholds/escalates_to): тип, обов'язковість, дефолт, хто має право змінювати.
  • Формат квіз-файлівrefs/mt/runs/{run-id}/decisions/NNNN-quiz.md поруч із NNNN-decision-request.md; frontmatter (type, decision_ref, depth, generated_by, time_to_understanding_sec, iterations), тіло (питання + мікроурок, teach-back-переказ), принцип «фейл ≠ покарання» (немає поля passed/failed).
  • Розширення ApprovalResponse — поле quiz_ref поруч із chosen_option; інваріант валідності підпису на decision-request-гейті.
  • napi-API поверхня mandate-crate — сигнатури parse_mandates, effective_owner, validate_mandate_change, validate_approval (спека, не код); crate живе в mt-rust, delta мокає до готовності.

Оновлено таблицю «Зміни в існуючих механізмах»: уточнено рядок ApprovalResponse (явно назвав поле quiz_ref), додано рядок для нового поля decision-request.recommended_by, розширено рядки mandates.yaml і Run branches. Додано recommended_by у приклад decision-request-фронтматеру для консистентності. Додано change-файл (.changes/260809-1614.md, patch/Added) і нові українські слова в .cspell.json.

Навіщо

Контракт-перший: розблоковує паралельну реалізацію застосунку delta (репо task) і crate мандатів (репо mt-rust) без розбіжностей у схемах.

Ревʼюеру

  • Ключові рішення схем, яких не було в явному ТЗ (варто звірити):
    • generationfile-level скаляр (не поле кожного запису mandates[]), семантично узгоджено з mandate_generation: 17 у прикладі decision-request.
    • Дефолти thresholds: відсутнє поле = без обмеження по цій осі (як у кореневого мандата thresholds: {}); виняток — irreversible, дефолт false (консервативно, узгоджено з інваріантом reversible), audacity дефолт low.
    • audacity на kind: person — явно неприпустиме поле (validate error), а не просто ігнорується.
    • Додано нове поле decision-request.recommended_by (agent id) — потрібне, щоб quiz.generated_by ≠ recommended_by було машинно перевірюваним; у наявній схемі decision-request такого ідентифікатора раніше не було.
    • depth квізу — детермінована мапа з leverage_facets; додав середню сходинку standard (кілька контрольних питань без переказу) між one-tap і teach-back — у mandates.md явно названо лише крайні випадки.
    • Зміна escalates_to підписується новим цільовим власником (він приймає роль ескалаційної точки), не власником рівня вище — окреме рішення, вартує обговорення.
  • Відкриті питання/ризики стикування: точна назва crate/пакета в mt-rust (crates/mt-mandates чи інша) не зафіксована — залишив за патерном crates/mt-napi, але не називав конкретно, щоб не блокувати рішення команди mt-rust.
  • Статус лінту: npx @7n/rules lint — чистий вихід (exit 0); автофікс cspell додав відсутні українські слова в .cspell.json (алфавітний порядок).

🤖 Generated with Claude Code

@vitaliytv
vitaliytv merged commit 428644d into main Aug 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant