F-16: lessons/ + decisions/ structure validated + sync script
Outcome
Foundation Week 4 завершён закладкой полной meta-структуры для process artifacts:
lessons/TEMPLATE.md— обновлён под канонический format (title/date/type/category/related/status), согласован с f02..f14 уже накопленными lessonsdecisions/README.md+TEMPLATE.md— ADR pattern с P10 (минимум 3 альтернативы), Trade-offs, Reversal cost (обязательные секции)decisions/ADR-001-razmakh-vps-isolation.md— sample local stub ADR сstatus: supersededуказывающим на canonical вnetnik-state/decisions/scripts/sync-lessons.sh— bash, idempotent, dry-run support, content-aware (cmp -s before copy), optional —commit для netnik-state autostage
Verification: dry-run reports 0 copied/would-copy, 19 unchanged, 2 skipped — sync converged, double-storage (P16) maintained.
Что случилось (root cause)
P16 (Feedback capture & lessons) и P10 (минимум 3 альтернативы) — два из четырёх “процессных” принципов (с P14 / P24). До F-16 lessons писались ad-hoc, без enforced TEMPLATE; decisions жили только в netnik-state/decisions/ без local mirror; sync был manual cp + git.
Risk: при ускорении (Phase 1 → 1.5 → 2) — process artifacts деградируют первыми, что превращает P16 в lip-service. F-16 closure фиксирует convention BEFORE Phase 1 ships, когда правки структуры still cheap.
Fix applied
1. TEMPLATE.md канонизация
Старый TEMPLATE использовал phase/topic/tags/recorded_by frontmatter — но f02..f14 уже писали title/date/type/category/related/status. Расхождение между TEMPLATE и actual practice — anti-pattern.
Решение: обновил TEMPLATE под actual practice (frontmatter f02..f14 style). Добавил optional поля severity, tags для backwards compat. Body sections: Outcome / Root cause / Fix applied / What changes in process / Action items / Tracking (estimates-recalibration template) / Sources.
2. decisions/ structure
Convention zur Trennung major / local решений:
- Major (stack choice, security, cross-tenant rules) →
netnik-state/decisions/razmakh-<topic>-<date>.md(cross-project visibility для Netnik knowledge base) - Local (per-block tactical decisions) →
razmakh/decisions/ADR-XXX-<topic>.md(sequential numbering, fast iteration)
Если local решение superseded by major из netnik-state — оставляем local stub с status: superseded + superseded_by: pointer. Example: ADR-001-razmakh-vps-isolation.md указывает на canonical netnik-state/decisions/razmakh-deployment-isolation-2026-05-17.md.
TEMPLATE требует:
- P10: минимум 3 alternatives с pros/cons/verdict
- Trade-offs: что теряем принимая решение
- Reversal cost: матрица “когда (6 мес/1 год/2 года) → cost (low/medium/high) → why”
- Point-of-no-return triggers: события после которых reversal становится prohibitive
3. sync script
scripts/sync-lessons.sh:
cmp -scontent check (rsync —dry-run output parsing был flaky — заменил pre-check)--dry-runmode для preview--commitmode — git commit в netnik-state БЕЗ push (manual push когда готов)- Skip TEMPLATE.md / README.md / TAGS.md (infrastructure files)
- Manual для Phase 1; cron entry комментарий для Phase 1.5
What changes in process going forward
- Каждый новый lesson —
cp lessons/TEMPLATE.md lessons/<topic>-YYYY-MM-DD.mdзатем./scripts/sync-lessons.sh(P16 двойное хранение enforced). - Каждое новое решение — сначала classify (major → netnik-state vs local → razmakh/decisions), затем
cp decisions/TEMPLATE.md. Убедиться что минимум 3 alternatives (P10) рассмотрены до acceptance. - При supersession — старый ADR НЕ удаляем; меняем
status: superseded+superseded_by:ссылка. Audit trail must быть intact. - Cross-link convention: lessons/decisions/research linked through
[[name]]syntax + frontmatterrelated:array. Один lesson → 1+ decision references; один decision → 1+ research references.
Action items
- TEMPLATE.md updated под канонический format
- decisions/README.md + TEMPLATE.md + ADR-001 sample
- scripts/sync-lessons.sh с dry-run / —commit support
- F-15 + F-16 inline ✅ DONE в plan/active/00-foundation.md
- Sync run выполнен (19 unchanged — все existing lessons уже синканы)
- Phase 1.5: добавить cron entry
*/15 * * * * scripts/sync-lessons.sh --commit+ lefthook pre-commit lessons validation (frontmatter required fields check) - Phase 1.5: написать
TAGS.mdпосле ~20 lessons (стандартизировать tags vocabulary) - Phase 1.5: lefthook pre-commit hook — block commit если новый
lessons/*.mdне имеетrelated:field (минимум 1 link required)
Tracking
| Metric | Planned | Actual | Variance |
|---|---|---|---|
| F-16 plan | 0.5 дня (4 h) | ~1.5 h | -62% |
| TEMPLATE.md update | 15 min | 10 min | -33% |
| decisions/ structure | 30 min | 25 min | -16% |
| sync-lessons.sh | 30 min | 40 min (rsync detection bug fix) | +33% |
| Lessons writing (f15 + f16) | 30 min | 25 min | -16% |
Pattern from estimates-recalibration-2026-05-17.md holds — actual ~1.5h vs plan 4h ≈ divide by 2.5-3 for process tasks (less aggressive чем 6-8x для feature tasks, потому что process требует более careful crafting).
Sources
plan/active/00-foundation.mdF-16 section (post-update)lessons/TEMPLATE.md(new canonical version)decisions/README.md(convention documented)decisions/TEMPLATE.md(ADR format)decisions/ADR-001-razmakh-vps-isolation.md(sample local stub)scripts/sync-lessons.sh(idempotent sync utility)- Canonical reference for f02..f14 frontmatter style:
lessons/f06-real-data-success-2026-05-17.md