# Видение проекта: Pupoxide

## Общее описание

**Pupoxide** — это современная, высокопроизводительная и безопасная замена для систем управления конфигурациями (таких как Puppet), написанная на языке Rust. Проект нацелен на обеспечение максимальной скорости работы, безопасности памяти и легкости развертывания инфраструктуры "одной кнопкой".

## Технический стек

- **Язык программирования**: Rust (последняя стабильная версия)
- **Runtime**: Tokio (асинхронность по умолчанию)
- **База данных**: PostgreSQL (через SeaORM для типобезопасности)
- **Архитектура**: Модульный монолит / Чистая архитектура (Domain, Infrastructure, Application)

## Ключевые возможности

### 1. Декларативное управление конфигурациями
- Описание желаемого состояния системы через ресурсную модель.
- **Идемпотентность**: повторное применение конфигурации не изменяет систему, если она уже находится в нужном состоянии.
- Поддержка основных дистрибутивов Linux (Ubuntu, Debian, RHEL) "из коробки".

### 2. Динамический инвентарь (Facts & Inventory)
- Сбор фактов об узлах в реальном времени.
- Гибкая группировка узлов на основе тегов и системных атрибутов.
- Интеграция с внешними источниками данных через плагины.

### 3. Производительность и Безопасность
- Нулевая стоимость абстракций благодаря Rust.
- Отсутствие внешних зависимостей (Ruby, JVM, Python) на целевых узлах.
- Параллельное выполнение задач без риска состояния гонки (Data Race Safety).

## Технические особенности

- **Compiled Manifests**: Проверка корректности конфигурации на этапе компиляции или подготовки (dry-run).
- **Single Binary**: Все компоненты (сервер, агент, CLI) поставляются в одном бинарном файле.
- **TLS by Default**: Все коммуникации между узлами шифруются по умолчанию.

## Цели проекта

1. **Скорость**: Обработка манифестов и применение изменений в разы быстрее аналогов.
2. **Надежность**: Использование системы типов Rust для минимизации runtime-ошибок.
3. **Простота**: Легкий старт и интуитивно понятный CLI.

## Принципы разработки

### KISS & DRY
- Простота реализации важнее избыточной универсальности.
- Переиспользование логики через общие доменные модели.

### Fail Fast & Explicit Errors
- Ошибки должны обнаруживаться как можно раньше.
- Каждая ошибка должна иметь понятный контекст и предлагать путь решения.

### Static & Type Safe
- Максимальное использование типов Rust вместо строк и динамических структур.

