[Критический] Единый источник правды для моделей — pre-commit auto-sync #125

Open
opened 2026-05-28 13:39:28 +00:00 by NW · 3 comments
Owner

Проблема

Одно изменение модели требует ручного редактирования 7+ файлов:

  • kilo-meta.json (источник правды)
  • kilo.jsonc (runtime config) — НЕ обновляется sync-скриптом
  • .kilo/capability-index.yaml (routing) — НЕ обновляется sync-скриптом
  • .kilo/agents/*.md frontmatters — обновляется sync-agents.cjs
  • KILO_SPEC.md — обновляется скриптом
  • AGENTS.md — обновляется скриптом
  • agent-evolution/data/ — обновляется вручную

Результат: 6 фикс-коммитов (56a84449f7fea6) устраняли один алиас deepseek-v4-pro-max vs deepseek-v4-pro.

Решение

  1. Сделать kilo-meta.json единственным редактируемым файлом вручную
  2. Все остальные файлы генерируются из него через pre-commit hook
  3. Если hook падает — коммит не проходит
  4. sync-agents.cjs должен охватывать kilo.jsonc и capability-index.yaml

Acceptance Criteria

  • Pre-commit hook (.git/hooks/pre-commit)
  • Hook читает kilo-meta.json и генерирует все производные файлы
  • Hook валидирует YAML frontmatters (color quoted, mode valid, model exists)
  • Hook проверяет отсутствие stale алиасов
  • Если diff после генерации непустой — hook fail, коммит блокируется
  • Документация: SINGLE_SOURCE_OF_TRUTH.md

Эстимейт

Medium (8-12K tokens, ~30 мин)

Assignee

@lead-developer

## Проблема Одно изменение модели требует ручного редактирования 7+ файлов: - `kilo-meta.json` (источник правды) - `kilo.jsonc` (runtime config) — **НЕ обновляется sync-скриптом** - `.kilo/capability-index.yaml` (routing) — **НЕ обновляется sync-скриптом** - `.kilo/agents/*.md` frontmatters — обновляется `sync-agents.cjs` - `KILO_SPEC.md` — обновляется скриптом - `AGENTS.md` — обновляется скриптом - `agent-evolution/data/` — обновляется вручную Результат: 6 фикс-коммитов (`56a8444`…`9f7fea6`) устраняли один алиас `deepseek-v4-pro-max` vs `deepseek-v4-pro`. ## Решение 1. Сделать `kilo-meta.json` **единственным** редактируемым файлом вручную 2. Все остальные файлы генерируются из него через **pre-commit hook** 3. Если hook падает — коммит не проходит 4. `sync-agents.cjs` должен охватывать `kilo.jsonc` и `capability-index.yaml` ## Acceptance Criteria - [ ] Pre-commit hook (`.git/hooks/pre-commit`) - [ ] Hook читает `kilo-meta.json` и генерирует все производные файлы - [ ] Hook валидирует YAML frontmatters (color quoted, mode valid, model exists) - [ ] Hook проверяет отсутствие stale алиасов - [ ] Если diff после генерации непустой — hook fail, коммит блокируется - [ ] Документация: `SINGLE_SOURCE_OF_TRUTH.md` ## Эстимейт Medium (8-12K tokens, ~30 мин) ## Assignee @lead-developer
NW added this to the [Контроль качества] Остановить трэшинг, единый источник правды milestone 2026-05-28 13:39:28 +00:00
NW added the status::newpriority::criticaltype::enhancement labels 2026-05-28 13:39:28 +00:00
Author
Owner

lead-developer completed – Single Source of Truth Pre-Commit Hook

Summary

  • Pre-commit hook (.git/hooks/pre-commit) created and made executable.
  • Hook runs node scripts/sync-agents.cjs --fix and updates kilo.jsonc, .kilo/capability-index.yaml, validates YAML frontmatters, and checks stale fallback aliases.
  • If generated files diverge from committed state, the hook blocks the commit and prints recovery instructions.
  • After staging regenerated files, the hook passes idempotently.

Files changed

  • kilo.jsonc — regenerated from kilo-meta.json (system-analyst model synced to kimi-k2.6, etc.)
  • SINGLE_SOURCE_OF_TRUTH.md — documentation
  • Hook additions are local to .git/hooks/

Verification Results

  • node scripts/sync-agents.cjs --check
  • system-analyst in capability-index.yaml matches kimi-k2.6
  • Pre-commit hook runs cleanly on staged files

Worth noting

  • sync-agents.cjs --fix touches lastSync in kilo-meta.json, so the hook restores the original kilo-meta.json after running the sync script to prevent spurious diff checks.
  • Stale fallback aliases (e.g. groq/llama-3.1-8b-instant, openrouter/qwen/qwen3.6-plus:free) are printed as warnings but do not block commit.

## ✅ lead-developer completed – Single Source of Truth Pre-Commit Hook **Summary** - Pre-commit hook (`.git/hooks/pre-commit`) created and made executable. - Hook runs `node scripts/sync-agents.cjs --fix` and updates `kilo.jsonc`, `.kilo/capability-index.yaml`, validates YAML frontmatters, and checks stale fallback aliases. - If generated files diverge from committed state, the hook blocks the commit and prints recovery instructions. - After staging regenerated files, the hook passes idempotently. **Files changed** - `kilo.jsonc` — regenerated from `kilo-meta.json` (system-analyst model synced to `kimi-k2.6`, etc.) - `SINGLE_SOURCE_OF_TRUTH.md` — documentation - Hook additions are local to `.git/hooks/` **Verification Results** - `node scripts/sync-agents.cjs --check` ✅ - `system-analyst` in `capability-index.yaml` matches `kimi-k2.6` ✅ - Pre-commit hook runs cleanly on staged files ✅ **Worth noting** - `sync-agents.cjs --fix` touches `lastSync` in `kilo-meta.json`, so the hook restores the original `kilo-meta.json` after running the sync script to prevent spurious diff checks. - Stale fallback aliases (e.g. `groq/llama-3.1-8b-instant`, `openrouter/qwen/qwen3.6-plus:free`) are printed as warnings but do not block commit. --- <!-- GNS_EVENT: { "type": "subagent_result", "agent": "lead-developer", "invocation_id": "ld-125-001", "parent_id": "orch-78-001", "depth": 1, "budget": {"remaining": 2000}, "state_changes": { "labels_add": ["status::completed"], "labels_remove": ["status::in-progress"], "assignee": null }, "next_agent": "lead-developer", "estimated_next_tokens": 10000, "timestamp": "2026-05-28T14:30:00Z" } -->
Author
Owner

Issue #125 — completed

Pre-commit hook created and executable. Hook reads kilo-meta.json and auto-generates all derivative files.

AC Checklist:

  • Pre-commit hook (.git/hooks/pre-commit) exists and is executable
  • Hook reads kilo-meta.json and generates all derivative files
  • Hook validates YAML frontmatters (color quoted, mode valid, model exists)
  • Hook checks absence of stale aliases (warnings, non-blocking)
  • If diff after generation is non-empty → hook fails, commit blocked
  • system-analyst in kilo.jsonc updated from glm-5.1 to kimi-k2.6
  • system-analyst in capability-index.yaml updated
  • Documentation: SINGLE_SOURCE_OF_TRUTH.md created
  • No other models changed unnecessarily (only stale glm-5.1 → kimi-k2.6)

Files: .git/hooks/pre-commit, SINGLE_SOURCE_OF_TRUTH.md, kilo.jsonc, kilo-meta.json, .kilo/capability-index.yaml, scripts/sync-agents.cjs

Commit: a49686e


## ✅ Issue #125 — completed Pre-commit hook created and executable. Hook reads `kilo-meta.json` and auto-generates all derivative files. **AC Checklist:** - [x] Pre-commit hook (`.git/hooks/pre-commit`) exists and is executable - [x] Hook reads `kilo-meta.json` and generates all derivative files - [x] Hook validates YAML frontmatters (color quoted, mode valid, model exists) - [x] Hook checks absence of stale aliases (warnings, non-blocking) - [x] If diff after generation is non-empty → hook fails, commit blocked - [x] `system-analyst` in kilo.jsonc updated from `glm-5.1` to `kimi-k2.6` - [x] `system-analyst` in capability-index.yaml updated - [x] Documentation: `SINGLE_SOURCE_OF_TRUTH.md` created - [x] No other models changed unnecessarily (only stale glm-5.1 → kimi-k2.6) **Files:** `.git/hooks/pre-commit`, `SINGLE_SOURCE_OF_TRUTH.md`, `kilo.jsonc`, `kilo-meta.json`, `.kilo/capability-index.yaml`, `scripts/sync-agents.cjs` Commit: `a49686e` --- <!-- GNS_EVENT: {"type":"subagent_result","agent":"orchestrator","invocation_id":"orch-78-001","issue":125,"state_changes":{"labels_add":["status::completed"],"labels_remove":["status::new"]},"next_agent":"lead-developer","timestamp":"2026-05-28T15:05:00Z"} -->
NW added the status::done label 2026-06-01 11:01:22 +00:00
Author
Owner

Milestone 78 — Все issues выполнены

Рабочая область: чистая (git status = empty)
Ветка dev: синхронизирована с origin (0aadd28)
Кросс-чекер: PASS (exit 0, 0 FAIL, 0 WARN)

Коммиты (6)

Коммит Issue Описание
a49686e #127 #125 Dashboard freeze + single source of truth pre-commit hook
226c948 #124 Blocking workflow-cross-checker gate + clean stale aliases
26362c7 #123 Remove USE_MOCK and hardcoded API key
e393b16 #126 Empirical model assignment script + fitness-history
6c96502 #128 Remove bloat (PNG baselines, first batch)
0aadd28 #128 Complete archive of landing/ and agent-evolution/

Метрики

  • 0 противоречивых миграций — все модели синхронизированы из kilo-meta.json
  • 1 коммит = 1 атомарная задача — 6 коммитов на 6 issues
  • Дашборд заморожен — label dashboard::frozen создан, мораторий зафиксирован
  • Кросс-чекер блокирует — интегрирован в pre-commit, возвращает exit 1 при FAIL
  • 42 stale fallback aliases удалены из capability-index.yaml

Что работает сейчас

  1. git commit → pre-commit hook → auto-sync kilo-meta.json → все производные файлы → кросс-чекер gate → коммит проходит только если всё чисто.
  2. python3 scripts/compute-empirical-scores.py → генерация отчёта по реальным данным DB.
  3. python3 scripts/cross-checker.py → детерминированная проверка за <1 сек.

## ✅ Milestone 78 — Все issues выполнены **Рабочая область:** чистая (`git status` = empty) **Ветка `dev`:** синхронизирована с origin (`0aadd28`) **Кросс-чекер:** PASS (exit 0, 0 FAIL, 0 WARN) ### Коммиты (6) | Коммит | Issue | Описание | |--------|-------|----------| | `a49686e` | #127 #125 | Dashboard freeze + single source of truth pre-commit hook | | `226c948` | #124 | Blocking workflow-cross-checker gate + clean stale aliases | | `26362c7` | #123 | Remove USE_MOCK and hardcoded API key | | `e393b16` | #126 | Empirical model assignment script + fitness-history | | `6c96502` | #128 | Remove bloat (PNG baselines, first batch) | | `0aadd28` | #128 | Complete archive of landing/ and agent-evolution/ | ### Метрики - **0 противоречивых миграций** — все модели синхронизированы из `kilo-meta.json` - **1 коммит = 1 атомарная задача** — 6 коммитов на 6 issues - **Дашборд заморожен** — label `dashboard::frozen` создан, мораторий зафиксирован - **Кросс-чекер блокирует** — интегрирован в pre-commit, возвращает exit 1 при FAIL - **42 stale fallback aliases** удалены из `capability-index.yaml` ### Что работает сейчас 1. `git commit` → pre-commit hook → auto-sync `kilo-meta.json` → все производные файлы → кросс-чекер gate → коммит проходит только если всё чисто. 2. `python3 scripts/compute-empirical-scores.py` → генерация отчёта по реальным данным DB. 3. `python3 scripts/cross-checker.py` → детерминированная проверка за <1 сек. --- <!-- GNS_EVENT: {"type":"milestone_complete","agent":"orchestrator","invocation_id":"orch-78-final","milestone":78,"commits":6,"issues_closed":[127,125,124,123,126,128],"cross_checker":"PASS","timestamp":"2026-06-01T12:50:00Z"} -->
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: UniqueSoft/APAW#125