architect/standards/arch-platform-policy.md

type: standard
layer: arch
object: platform
aspect: policy
form: text
title: "Политики платформы"
status: active
version: 1.0.0
date: 2026-04-11
knowledge_level: У1
parent: arch-filesystem-structure.md
deps:
- arch-filesystem-structure.md
- arch-document-system.md
- arch-component-structure.md


Политики платформы

Стандарт описывает обязательные правила платформы: конфиденциальность, разделение кода и данных, сервисы, git, ресурсы, агенты, блокировка контента. Нарушение политики — ошибка архитектуры.


1. НАЗНАЧЕНИЕ И СОСТАВ

Политики платформы — обязательные правила. Нарушение = ошибка архитектуры.

# Политика Суть
П1 КОНФИДЕНЦИАЛЬНОСТЬ Базовый класс — что никогда не передаётся наружу
П2 КОД / ДАННЫЕ Что в git, что в S3 — никогда не смешивать
П3 СЕРВИСЫ Только Docker Compose, не systemd напрямую
П4 GIT Ветки, коммиты, force push
П5 РЕСУРСЫ Диск, память — проверять перед деплоем
П6 АГЕНТЫ Границы полномочий AI
П7 БЛОКИРОВКА Locked-контент — только через @keeper.agent

Безопасность (credentials, ключи, секреты) →
arch-security-policy.md


2. П1: КОНФИДЕНЦИАЛЬНОСТЬ

Базовый класс всех политик. Определяет что никогда не передаётся наружу.
Все остальные политики наследуют и конкретизируют этот класс.

Что нельзя передавать наружу

Категория Примеры Куда нельзя
Секреты пароли, API-ключи, токены нигде, никогда
Код платформы AI.md, CLAUDE.md, стандарты внешним сервисам
Правила агентов системные промпты, протоколы в публичный чат
Структура workspace пути, архитектура, имена файлов наружу
Данные клиентов CSV, БД, персданные за пределы проекта
Инфраструктура IP, топология, конфиги серверов в открытый чат

Надзор

@sentinel.agent встроен в финал каждого агента.
Проверяет соответствие этой политике перед любым внешним действием.
Логирует нагрузку и отчитывается в system/monitor/.

Наследование в узлах

Каждый агент, компонент и проект объявляет в своём AI.md:

extends: PolicyConfidentiality

И конкретизирует что именно конфиденциально в его зоне.

Нарушение

Обнаружено нарушение → немедленная остановка → уведомление оператора.
Логируется в system/monitor/alerts/ с приоритетом CRITICAL.


3. П2: КОД / ДАННЫЕ

Два пространства — два назначения. Никогда не смешивать.

$WORKSPACE  (/opt/claude-workspace)   git-репозиторий
  → исходники: документы, код, конфиги

$DATASPACE  (/mnt/beget-s3)           S3-хранилище, без git
  → данные: CSV, изображения, медиа, бэкапы, бинарники
  → релизы: собранные артефакты для деплоя

Что куда

Тип Пространство Причина
.md, .py, .js, .yaml, .sh $WORKSPACE исходники — в git
.csv, .xlsx, .json с данными $DATASPACE данные растут, не для git
изображения, медиа $DATASPACE бинарники не в git
бинарные артефакты, дистрибутивы $DATASPACE релизы — не исходники
.env, секреты нигде в git → arch-security-policy.md
Docker volumes $DATASPACE или отдельный том данные контейнеров

Нарушения

❌ CSV с данными в $WORKSPACE/projects/     → перенести в $DATASPACE
❌ Бинарник в git                           → .gitignore + $DATASPACE
❌ .env в git                               → немедленно удалить из истории
❌ Код в $DATASPACE                         → перенести в $WORKSPACE

Ссылки из кода

DATASPACE = os.environ["DATASPACE"]  # /mnt/beget-s3
data_path = f"{DATASPACE}/projects/lideravto/CATALOG.csv"

Путь не хардкодить — только через переменную окружения.


4. П3: СЕРВИСЫ

Все сервисы платформы запускаются только через Docker Compose.

Правило

✅  docker compose up -d
❌  systemd service
❌  nohup python app.py &
❌  screen / tmux с процессом

Исключения

Исключение Причина
Nginx системный реверс-прокси, управляет портами
SSH системный демон
Docker daemon сам Docker

Структура сервиса

infra/@{имя}.service/
├── AI.md
├── CLAUDE.md
├── README.md
├── docker-compose.yml     ← точка входа
├── .env.example           ← переменные (без значений)
└── config/                ← конфиги сервиса

.env с реальными значениями — в $DATASPACE, не в git.

Cron

✅  system/scheduler/      ← только через планировщик платформы
❌  crontab -e напрямую

Проверка ресурсов перед запуском

bash /opt/scripts/check_resources.sh
# GREEN → запускай / YELLOW → cleanup / RED → СТОП

5. П4: GIT

Ветки

main / master   — стабильная, только после явного "мержим"
feature/*       — новая функциональность
fix/*           — исправление бага
rebuild/*       — пересборка документов/структуры

Большие изменения (L2+, новая фича, пересборка) — в ветке.

Коммиты

Формат: {тип}({область}): {что сделано}

Тип Когда
feat новая функциональность
fix исправление
docs документация
refactor рефакторинг без изменения поведения
standard новый/обновлённый стандарт платформы
chore обслуживание, зависимости

Всегда добавлять:

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Запреты

❌  git push --force main/master     — предупредить, не делать
❌  git commit --no-verify           — не обходить хуки
❌  git add -A / git add .           — только конкретные файлы
❌  amend опубликованных коммитов    — новый коммит вместо
❌  секреты в коммите               — немедленно удалить из истории

Бэкап перед опасными операциями

git stash        # или
git branch backup/{дата}

6. П5: РЕСУРСЫ

Перед любой ресурсоёмкой операцией — проверка.

Обязательная проверка

bash /opt/scripts/check_resources.sh
Результат Действие
GREEN продолжай
YELLOW cleanup → продолжай
RED СТОП — не запускать

Когда проверять

docker compose up         → перед запуском
npm install / pip install → перед установкой
импорт данных (>100MB)    → перед импортом
деплой в prod             → перед деплоем

Пороги

Ресурс YELLOW RED
Диск $WORKSPACE >80% >90%
Диск $DATASPACE >85% >95%
RAM >75% >90%
CPU (средняя 5 мин) >70% >90%

Cleanup при YELLOW

docker system prune -f
docker volume prune -f
journalctl --vacuum-time=7d

7. П6: АГЕНТЫ

Уровни операций

Уровень Операции Требование
L0 Чтение: Grep, Read, Glob, статус Без подтверждения
L1 Документы (.md, .yaml) план → ок
L2 Код (.py, .js, .ts и др.) план + откат → ок
L3 Сервер (nginx, docker, /etc/) план + откат → ок
L4 Опасные (prod, rm -rf, DROP) бэкап + явное "да"

Запреты для всех агентов

  Изменять locked-файлы           только @keeper.agent
  Передавать credentials в чат    СТОП
  Force push main/master           предупредить, не делать
  Выполнять не то что согласовано  строго согласованное
  Молча игнорировать ошибки       показать лог, остановиться

Правило остановки

3 ошибки подряд           СТОП  показать лог  спросить
повтор действия > 3 раз   другой подход
> 15 мин без прогресса    спросить продолжать?

Делегирование

Задача Агент
Архитектура, стандарты Opus
Новый код, рефакторинг Sonnet
Поиск по коду, анализ Haiku
Locked-контент @keeper.agent

Работа с веб

  library/components/parser (Playwright/Chromium)  для любых веб-страниц
  WebFetch  не работает с JS-сайтами, часто 403/redirect

Проверка готовности парсера:

cd /opt/claude-workspace && python3 -m library.components.parser probe

Использование:

from playwright.async_api import async_playwright
async with async_playwright() as p:
    browser = await p.chromium.launch(headless=True)
    page = await browser.new_page()
    await page.goto(url)
    text = await page.inner_text('body')

8. П7: БЛОКИРОВКА

Заблокированный контент защищён от изменений AI-агентами.

Три уровня

Уровень Маркер Защита
Файл целиком .fx.md суффикс + locked: true pre-commit хук (техническая)
Раздел файла <!-- LOCKED: причина --> ... <!-- /LOCKED --> поведенческая
Строка {locked}текст{/locked} поведенческая

Максимальная надёжность — .fx.md + pre-commit хук.

Единственный исполнитель

Только @keeper.agent имеет право изменять locked-контент.
Все остальные агенты при попытке изменить → обязаны отказать и направить к @keeper.agent.

Процедура разблокировки

1. Оператор явно: "разблокирую [файл/раздел] потому что [причина]"
2. @keeper.agent анализирует зависимости  что может сломаться
3. @keeper.agent готовит вопросы оператору  получает все ответы
4. Изменение вносится строго в согласованном объёме
5. Фиксация в JOURNAL.md: кто, когда, зачем, что изменено
6. Повторная блокировка  только после явного "да" оператора

Реестр блокировок

system/@keeper.agent/registry.yaml:

locked:
  - path: architect/theory/SYSTEMS.md
    reason: У0 LOCKED — фундамент платформы
    locked_at: 2026-04-10
    unlock_requires: operator_explicit

9. СТАНДАРТЫ КОДА

Стиль

Язык Стандарт Инструмент
Python PEP 8 + Black black, ruff
JavaScript Airbnb Style Guide prettier, eslint
TypeScript Google TS Style prettier, tslint
Bash Google Shell Style shellcheck, shfmt

Форматтер — обязательно перед каждым коммитом.

Размеры файлов

Метрика Допустимо Требует разбиения
Файл кода < 200 строк > 500 строк
Функция < 20 строк > 50 строк

Типизация и ошибки

Тестирование

Тип Инструмент Минимальное покрытие
Unit pytest, jest 80%
Integration pytest, supertest по критическим flow
E2E playwright, cypress по критическим flow

Git

Формат коммитов: type(scope): short description
Типы: feat, fix, refactor, docs, test, chore

Ветки:

main      — продакшн
dev       — разработка
feature/* — фичи
fix/*     — багфиксы

Минимальные версии

Язык Минимум Целевая
Python 3.10 3.12
Node.js 20 LTS 22 LTS
TypeScript 5.0 5.4+
Bash 5.0 5.1+

10. СВЯЗАННЫЕ ДОКУМЕНТЫ

Родитель:
- arch-filesystem-structure.md — файловая система, два пространства

Прямые потомки (child):
- arch-security-policy.md — С1 CREDENTIALS, С2 BACKUP, С3 ROLLBACK
- arch-deployment-operation.md — операция ДЕПЛОЙ

Связанные:
- arch-component-structure.md — структура компонентов