architect/prospective/format-content.md

type: standard
title: "Форматы контента"
status: active
version: 1.0.0
date: 2026-04-10
knowledge_level: У1


Форматы контента

Объединённый стандарт: типы файлов, форматирование кода и данных, документация проектов, глоссарий, уведомления, вопросы.


1. ТИПЫ ФАЙЛОВ ПЛАТФОРМЫ

Три зоны хранения

export WORKSPACE=/opt/claude-workspace    # КОД (git)
export DATASPACE=/mnt/beget-s3            # ДАННЫЕ (S3)
export MEDIASPACE=$DATASPACE/media        # МЕДИА (S3)
Зона Что Git
WORKSPACE Код, документация, конфиги Да
DATASPACE Таблицы, БД, JSON >1MB, бэкапы Нет
MEDIASPACE Изображения, видео, аудио, PDF Нет

11 классов файлов

Класс Типы Где Git
CODE .py .js .ts .php .go .sh WORKSPACE Да
DOCUMENTATION .md .ai.md .txt .rst WORKSPACE Да
CONFIGURATION .yaml .json .toml .ini WORKSPACE Да
DATA .csv <100KB WORKSPACE Да
DATA .csv >100KB, .xlsx, .xls DATASPACE Нет
IMAGES .svg (любой), .png <50KB, .ico <20KB WORKSPACE Да
IMAGES .jpg, .png >50KB, .gif, .webp MEDIASPACE Нет
VIDEO .mp4 .avi .mov .webm MEDIASPACE Нет
AUDIO .mp3 .wav MEDIASPACE Нет
DOCUMENTS .pdf .docx .doc .rtf MEDIASPACE Нет
WEB .html .css .less .scss .woff2 .ttf WORKSPACE Да
TEMPLATES .twig .tpl .j2 WORKSPACE Да
DATABASES .sql (схемы) WORKSPACE Да
DATABASES .db .sqlite DATASPACE Нет

Жёсткие правила по изображениям

.jpg  ТОЛЬКО $MEDIASPACE (NO EXCEPTIONS)
.png  $WORKSPACE если < 50KB, иначе $MEDIASPACE
.svg  ТОЛЬКО $WORKSPACE (векторная графика)

Правила по размерам

Размер Где
< 50 KB WORKSPACE (git)
50 KB - 1 MB Только если критично важно
> 1 MB DATASPACE или MEDIASPACE. Запрещено в git

Типы модулей платформы

Суффикс Где Назначение
.module project/, infra/ процессный модуль управления
.domain domains/ диспетчер домена исполнения
.coder domains/@it.domain/ IT-стек с базой знаний
.maker domains/@production.domain/ производственная специализация
.flow domains/@business.domain/ бизнес-процессная специализация
.service services/, system/ платформенный сервис
.connector system/connectors/ интеграция с внешней системой

Правило: модуль @{имя}.{тип}/ содержит хотя бы AI.md.

Служебные файлы платформы

Файл Для кого Назначение
CLAUDE.md Claude Code CLI Навигатор папки
AI.md Любой AI-агент Служебный контекст для AI
README.md Люди / GitHub Публичное описание
INDEX.md AI + люди Оглавление с аннотациями
{имя}.ai.md Claude Code Определение агента
{имя}.fx.md pre-commit Защищённый документ

Белый список (разрешено в git)

CODE:   .py .js .ts .tsx .jsx .php .go .c .cpp .h .sh .bat .ps1
DOCS:   .md .ai.md .txt .rst
CONFIG: .yaml .yml .json .toml .ini .conf .xml .env.example
WEB:    .html .css .less .scss .svg .woff2 .ttf
TPL:    .twig .tpl .j2
SQL:    .sql
IMAGES: .svg (любой), .png (<50KB), .ico (<20KB)
MISC:   .gitignore .gitkeep .editorconfig Dockerfile Makefile LICENSE

Чёрный список (запрещено в git)

IMAGES:  .jpg .jpeg .gif .webp .png (>50KB)
MEDIA:   .mp4 .avi .mov .mp3 .wav
DOCS:    .pdf .docx .doc .rtf
DATA:    .xlsx .xls .ods .csv (>100KB)
DB:      .db .sqlite
CREDS:   .env .key .pem (приватные)
TEMP:    .pyc .log .tmp .cache
DEPS:    venv/ node_modules/ __pycache__/ .so .exe

.gitignore шаблон

# Зависимости
venv/
node_modules/
__pycache__/

# Компиляция
*.pyc
*.pyo
*.so
*.exe

# Базы данных
*.db
*.sqlite
*.sqlite3

# Credentials
.env
*.key
*.pem
.credentials.md

# Временные
*.log
*.tmp
*.cache
.DS_Store

# Изображения (массовые)
*.jpg
*.jpeg
*.gif
*.webp

# Данные
*.xlsx
*.xls
*.ods

# Медиа
*.mp4
*.avi
*.mov
*.mp3
*.wav

# Документы
*.pdf
*.docx
*.doc

# Архивы данных
*.zip
*.tar.gz

# IDE
.idea/
.vscode/
*.swp

# Исключения
!*.svg
!favicon.png
!logo.png

Аудит git репозитория

# Найти запрещенные файлы
git ls-files | grep -E '\.(jpg|jpeg|xlsx|mp4|db)$'

# Найти файлы > 1MB
git ls-files | while read file; do
  size=$(git cat-file -s $(git ls-tree HEAD "$file" | awk '{print $3}') 2>/dev/null)
  if [ $size -gt 1048576 ]; then
    echo "$file: $size bytes"
  fi
done

Именование файлов

Категория Формат Примеры
Документы UPPERCASE README.md, CLAUDE.md, PROJECT.md
Агенты {name}.ai.md architect.ai.md, pim.ai.md
Credentials скрытые .credentials.md, .env
Конфиги lowercase schedule.yaml, config.json
Код snake_case backup.sh, sessions.py

2. ФОРМАТИРОВАНИЕ КОДА

Общие принципы

Python (PEP 8)

Базовые правила:
- Отступы: 4 пробела
- Длина строки: 88 символов (Black)
- Кавычки: двойные "
- 2 пустые строки между функциями/классами

Именование:

Элемент Стиль Пример
Переменные, функции snake_case user_name, get_user_by_id()
Классы PascalCase UserManager, OrderProcessor
Константы UPPER_SNAKE_CASE MAX_RETRIES, API_TIMEOUT
Приватные префикс _ self._password, _hash_password()

Импорты (порядок):

# 1. Стандартная библиотека
import os
import sys

# 2. Сторонние библиотеки
import requests
from flask import Flask

# 3. Локальные модули
from library.connectors.api.ozon import OzonClient

Типизация (обязательно для всех функций):

from typing import List, Dict, Optional

def get_users(limit: int = 10) -> List[Dict[str, str]]:
    """Получить список пользователей."""
    return []

Docstrings (Google Style):

def sync_orders(api_key: str, date_from: str, limit: int = 100) -> Dict[str, int]:
    """
    Синхронизировать заказы из OZON API.

    Args:
        api_key: API ключ OZON
        date_from: Дата начала в формате YYYY-MM-DD
        limit: Максимальное количество заказов

    Returns:
        Словарь со статистикой синхронизации

    Raises:
        OrderSyncError: При ошибке синхронизации
    """

Инструменты:

Инструмент Назначение Команда
black Форматирование black .
ruff Линтер + автофикс ruff check --fix .
mypy Проверка типов mypy .
isort Сортировка импортов isort .

JavaScript / TypeScript

Базовые правила:
- Отступы: 2 пробела
- Длина строки: 100 символов
- Точка с запятой: обязательна
- Кавычки: одинарные '

Именование:

Элемент Стиль
Переменные, функции camelCase
Классы PascalCase
Константы UPPER_SNAKE_CASE
Приватные поля префикс #

Современный синтаксис (использовать):
- const/let (не var)
- Arrow functions
- Template strings
- Destructuring
- Optional chaining ?.
- Nullish coalescing ??

TypeScript — обязательно для всех функций:

function getUsers(limit: number = 10): User[] {
  return [];
}

// Интерфейсы вместо типов (где возможно)
interface User {
  id: number;
  name: string;
}

// type — только для union/intersection
type Status = 'pending' | 'active' | 'completed';

Инструменты:

Инструмент Назначение Команда
prettier Форматирование prettier --write .
eslint Линтер eslint --fix .
tsc Проверка типов tsc --noEmit

Bash

Базовые правила:
- Отступы: 2 пробела
- Длина строки: 80 символов
- Shebang: #!/bin/bash

Именование:
- Переменные: snake_case
- Константы: readonly UPPER_SNAKE_CASE
- Функции: snake_case

Обязательные практики:

set -euo pipefail  # остановиться при ошибке, неопред. переменной, pipefail

# Всегда кавычки для переменных
echo "User: $user_name"
cp "$source_file" "$dest_file"

# [[ ]] вместо [ ]
if [[ -f "$file" ]]; then
  echo "File exists"
fi

# local в функциях
function backup_database() {
  local db_name=$1
  local backup_dir=$2
  # ...
}

Заголовок скрипта:

#!/bin/bash
#
# backup.sh -- резервное копирование базы данных
#
# Использование:
#   ./backup.sh DATABASE_NAME BACKUP_DIR

Инструменты:

Инструмент Назначение Команда
shellcheck Линтер shellcheck script.sh
shfmt Форматирование shfmt -w script.sh

Pre-commit hooks

#!/bin/bash
set -e
echo "Running code checks..."

black --check .
ruff check .
prettier --check .
eslint .
find . -name "*.sh" -exec shellcheck {} \;

echo "All checks passed"

3. ФОРМАТИРОВАНИЕ ДАННЫХ

Матрица применения

Формат Когда использовать Когда НЕ использовать
YAML Конфиги, метаданные, <100 записей Большие данные (>10K)
JSON API, логи, 100-10K записей Конфиги (читабельность)
CSV Табличные данные, 1K-100K записей Вложенные структуры
Excel Обмен с бизнесом, отчёты Автоматизация, версионирование
SQLite >10K записей, реляционные данные Конфиги, метаданные

YAML

Правила:
- Отступы: 2 пробела
- Ключи: snake_case
- Строки без кавычек если нет спецсимволов
- Двойные кавычки "text" если есть :, #, -, @

defaults: &defaults
  timeout: 30
  retries: 3

production:
  <<: *defaults
  host: prod.example.com

Валидация:

python3 -c "import yaml; yaml.safe_load(open('file.yaml'))"

JSON

Правила:
- Отступы: 2 пробела
- Кавычки: только двойные "
- Trailing comma: ЗАПРЕЩЕНА
- Ключи: snake_case (внутри платформы), camelCase (внешние API)

Валидация:

jq empty file.json
python3 -m json.tool file.json

CSV

Правила:
- Первая строка: обязательно заголовки (snake_case)
- Разделитель: запятая ,
- Кодировка: UTF-8 (UTF-8 with BOM для Excel)
- Кавычки: двойные " если значение содержит запятую или перенос

import csv

with open('data.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['name'], row['price'])

Excel (XLSX)

Использовать для обмена с бизнесом. НЕ для хранения данных и версионирования.

import pandas as pd

df = pd.read_excel('data.xlsx', sheet_name=0)
df.to_csv('output.csv', index=False, encoding='utf-8')

Даты и время

Формат: ISO 8601: YYYY-MM-DDTHH:MM:SSZ

created_at: 2026-02-19T10:30:00Z          # UTC
updated_at: 2026-02-19T13:30:00+03:00     # Moscow time

НЕ использовать: 19.02.2026, 19/02/26, Unix timestamp

Конвертация

# YAML -> JSON
python3 -c "import yaml,json; json.dump(yaml.safe_load(open('f.yaml')),open('f.json','w'),indent=2,ensure_ascii=False)"

# CSV -> JSON
python3 -c "import csv,json; json.dump(list(csv.DictReader(open('f.csv'))),open('f.json','w'),indent=2,ensure_ascii=False)"

# Excel -> CSV
python3 -c "import pandas as pd; pd.read_excel('f.xlsx').to_csv('f.csv', index=False)"

4. ДОКУМЕНТАЦИЯ БИЗНЕС-ПРОЕКТОВ

Обязательные документы

project-name/
├── INDEX.md              ← Оглавление
├── CONCEPT.md            ← 1. Концепция и идея
├── ANALYSIS.md           ← 2. Анализ рынка
├── BUSINESS_MODEL.md     ← 3. Бизнес-модель
├── IMPLEMENTATION.md     ← 4. План реализации
├── PROJECT.md            ← Полное описание (сводка)
└── CLAUDE.md             ← Контекст для Claude

CONCEPT.md -- структура

ANALYSIS.md -- структура

BUSINESS_MODEL.md -- структура

IMPLEMENTATION.md -- структура

Последовательность создания

  1. Исследование -> ANALYSIS.md
  2. Концепция -> CONCEPT.md
  3. Бизнес-модель -> BUSINESS_MODEL.md
  4. Реализация -> IMPLEMENTATION.md
  5. Сборка -> PROJECT.md + INDEX.md + CLAUDE.md

Чеклист полноты


5. ДОКУМЕНТАЦИЯ ПРОЕКТОВ (стандарт)

Принципы

Принцип Описание
Изоляция Проект видит только свои документы
Навигация Двусторонняя INDEX <-> документ
Относительные ссылки Внутри проекта только относительные пути
Единая структура Все проекты следуют одному шаблону

Минимальная структура

project-name/
├── INDEX.md           ← Оглавление проекта (обязательно)
├── PROJECT.md         ← Полное описание
├── CLAUDE.md          ← Контекст для Claude
└── README.md          ← Для пользователей (опционально)

INDEX.md -- обязательные элементы

# Project Name -- Оглавление

**Тип:** {business|saas|infrastructure}
**Статус:** {design|development|production}

[<- Назад к Parent Project](../INDEX.md)

## ОСНОВНЫЕ ДОКУМЕНТЫ

| Документ | Описание |
|----------|----------|
| [PROJECT.md](PROJECT.md) | Полное описание |

## О ПРОЕКТЕ

{1-2 абзаца}

## СВЯЗИ

- **Родительский:** [Parent](../INDEX.md)

[<- Назад к Parent Project](../INDEX.md)

Правила навигации

Уровень Формат
Внутри проекта [doc](file.md)
Родительский [Parent](../INDEX.md)
Соседний проект [Proj](../proj/INDEX.md)
Внешний ресурс [Docs](http://...)

Изоляция

Проект НЕ ДОЛЖЕН ссылаться напрямую на документы других проектов своего уровня -- только на их INDEX.md. Исключение: родительские проекты могут ссылаться на любые документы дочерних.

URL для docs.0kt.ru

http://docs.0kt.ru/projects/{parent}/{sub}/INDEX.md

Проверка

test -f INDEX.md && echo "INDEX.md OK" || echo "INDEX.md missing"
test -f PROJECT.md && echo "PROJECT.md OK" || echo "PROJECT.md missing"
test -f CLAUDE.md && echo "CLAUDE.md OK" || echo "CLAUDE.md missing"
grep -q "Назад" INDEX.md && echo "Navigation OK" || echo "No navigation"

6. ГЛОССАРИЙ (правила ведения)

Назначение

Каждый проект имеет GLOSSARY_STANDARD.md -- единый справочник терминов, кодов и синонимов.

Когда добавлять термин

Ситуация Действие
Создание проекта Изучить тему -> предложить термины -> подтвердить -> записать
Новый термин в диалоге Предложить определение -> после "ок" -> добавить
Уточнение существующего Обновить запись
Платформенный термин Добавить в глоссарий платформы

Протокол "новый термин"

1. Предложить: "Предлагаю добавить в глоссарий: [термин] -- [определение]. Ок?"
2. После подтверждения -- добавить в GLOSSARY_STANDARD.md
3. Если платформенный -- также обновить глоссарий платформы

Формат записи

### [Термин]
**Canonical:** единственное эталонное название
**Code:** машинный код в файлах/системах
**Synonyms:** варианты, SEO-формы, разговорные названия
**Docs:** ссылки на документы
**Note:** уточнение, контекст, примеры

Обязательная ссылка в CLAUDE.md проекта

**Глоссарий:** [GLOSSARY_STANDARD.md](GLOSSARY_STANDARD.md)

Платформенные термины

Термин Определение
Bootstrap Процедура создания нового проекта с нуля по чеклисту
Санация Оздоровление существующего проекта (rebootstrap)
Canonical Эталонный, основной вариант из множества синонимов

7. УВЕДОМЛЕНИЯ

Формат

[ТИП]: [краткое описание]

[детали если нужны]

[действие если нужно]

Типы

Тип Кому Когда
NEW_PROJECT PM Завершён INTAKE
NEW_TASK Исполнитель Назначена задача
TASK_DONE PM Задача выполнена
QUESTION PM Вопрос от исполнителя
CLIENT_MESSAGE AM Клиент написал
NEED_HUMAN AM Клиент просит человека
CLARIFY_RESPONSE PM Клиент ответил на вопрос
REVIEW_RESPONSE PM Клиент дал обратную связь

Примеры

NEW_PROJECT: Интернет-магазин пиротехники

Клиент: Иван Петров
Бюджет: 150 000 руб
Срок: 2 месяца

/accept -- принять
TASK_DONE: PROJ-005 Сверстать главную

Исполнитель: @designer
Результат: [ссылка]

/review -- проверить

8. ВОПРОСЫ И ИНТЕРВЬЮ

Принцип

ВСЕ вопросы в системе задаются ТОЛЬКО с номерованными вариантами.

Формат вопроса

<Вопрос>?
  1) <Вариант 1>
  2) <Вариант 2>
  3) <Вариант 3>
  0) Отмена / Выход

Выбор [номер]:

Обязательные элементы

Элемент Требование
Вопрос Короткий, понятный, со знаком ?
Варианты Минимум 2, максимум 9
Нумерация 1, 2, 3... (НЕ a, b, c)
Отмена Всегда есть 0)
Промпт Выбор [номер]: или Выбор:

Запрещённые форматы

Пример правильного меню

echo "Что восстановить?"
echo ""
echo "  1) Полное восстановление"
echo "  2) Только workspace"
echo "  3) Только критические данные"
echo "  0) Отмена"
echo ""
read -p "Выбор: " choice

case $choice in
    1) restore_full ;;
    2) restore_workspace ;;
    3) restore_critical ;;
    0) exit 0 ;;
    *) echo "Неверный выбор" ;;
esac

Дополнительные требования

  1. Контекст перед вопросом -- показать ЧТО будет сделано
  2. Валидация ввода -- проверять через case с *)
  3. Значение по умолчанию -- read -p "Выбор [1]: " choice; choice=${choice:-1}

Где применяется

НЕ применяется к: параметрам командной строки (--flag), API, конфигам, логам.

Миграция существующих скриптов

# Найти все y/n вопросы
grep -r "read -p.*y/n" --include="*.sh"

# Найти все read без case
grep -A5 "read -p" *.sh | grep -v "case"

Чеклист для review


Источники

Объединены из:
- format-file-types.md -- типы файлов и размещения (11 классов)
- format-code.md -- стандарт стиля кода (Python, JS/TS, Bash)
- format-data.md -- форматы данных (YAML, JSON, CSV, Excel)
- format-business-projects.md -- документация бизнес-проектов
- format-project-documentation.md -- стандарт документации проектов
- format-glossary-standard.md -- стандарт глоссария
- format-notifications.md -- стандарт уведомлений
- format-questions.md -- стандарт вопросов