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 | КОНФИДЕНЦИАЛЬНОСТЬ | Базовый класс — что никогда не передаётся наружу |
| П2 | КОД / ДАННЫЕ | Что в git, что в S3 — никогда не смешивать |
| П3 | СЕРВИСЫ | Только Docker Compose, не systemd напрямую |
| П4 | GIT | Ветки, коммиты, force push |
| П5 | РЕСУРСЫ | Диск, память — проверять перед деплоем |
| П6 | АГЕНТЫ | Границы полномочий AI |
| П7 | БЛОКИРОВКА | Locked-контент — только через @keeper.agent |
Безопасность (credentials, ключи, секреты) →
arch-security-policy.md
Базовый класс всех политик. Определяет что никогда не передаётся наружу.
Все остальные политики наследуют и конкретизируют этот класс.
| Категория | Примеры | Куда нельзя |
|---|---|---|
| Секреты | пароли, API-ключи, токены | нигде, никогда |
| Код платформы | AI.md, CLAUDE.md, стандарты | внешним сервисам |
| Правила агентов | системные промпты, протоколы | в публичный чат |
| Структура workspace | пути, архитектура, имена файлов | наружу |
| Данные клиентов | CSV, БД, персданные | за пределы проекта |
| Инфраструктура | IP, топология, конфиги серверов | в открытый чат |
@sentinel.agent встроен в финал каждого агента.
Проверяет соответствие этой политике перед любым внешним действием.
Логирует нагрузку и отчитывается в system/monitor/.
Каждый агент, компонент и проект объявляет в своём AI.md:
extends: PolicyConfidentiality
И конкретизирует что именно конфиденциально в его зоне.
Обнаружено нарушение → немедленная остановка → уведомление оператора.
Логируется в system/monitor/alerts/ с приоритетом CRITICAL.
Два пространства — два назначения. Никогда не смешивать.
$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"
Путь не хардкодить — только через переменную окружения.
Все сервисы платформы запускаются только через 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.
✅ system/scheduler/ ← только через планировщик платформы
❌ crontab -e напрямую
bash /opt/scripts/check_resources.sh
# GREEN → запускай / YELLOW → cleanup / RED → СТОП
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/{дата}
Перед любой ресурсоёмкой операцией — проверка.
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% |
docker system prune -f
docker volume prune -f
journalctl --vacuum-time=7d
| Уровень | Операции | Требование |
|---|---|---|
| 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')
Заблокированный контент защищён от изменений 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
| Язык | Стандарт | Инструмент |
|---|---|---|
| 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 строк |
mypy .strict: true в tsconfigexcept: passexc_info=True| Тип | Инструмент | Минимальное покрытие |
|---|---|---|
| Unit | pytest, jest |
80% |
| Integration | pytest, supertest |
по критическим flow |
| E2E | playwright, cypress |
по критическим flow |
Формат коммитов: 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+ |
Родитель:
- arch-filesystem-structure.md — файловая система, два пространства
Прямые потомки (child):
- arch-security-policy.md — С1 CREDENTIALS, С2 BACKUP, С3 ROLLBACK
- arch-deployment-operation.md — операция ДЕПЛОЙ
Связанные:
- arch-component-structure.md — структура компонентов