# πŸ“‘ PRODUCT REQUIREMENTS DOCUMENT (PRD)## 1. Π¦Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° - Основная Ρ†Π΅Π»ΡŒ: Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡƒΡŽ CLI-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ Π½Π° Rust для Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ дСплоя Ρ…ΠΎΠ±Π±ΠΈ-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² (Node.js, Rust) с локального ПК Π½Π° ΡΠ»Π°Π±ΡƒΡŽ VPS ΠΏΠΎ SSH. - Π—Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ: Π˜Π·Π±Π΅ΠΆΠ°Ρ‚ΡŒ дублирования скриптов дСплоя Π² рСпозиториях, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ CPU слабой VPS (сборка Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ПК) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ΅Ρ‚-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ## 2. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Scope) - Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³: ВсС настройки всСх ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² хранятся Π² ΠΎΠ΄Π½ΠΎΠΌ локальном Ρ„Π°ΠΉΠ»Π΅ (deploy.toml). - Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Запуск ΠΊΠΎΠΌΠ°Π½Π΄ сборки, тСстов ΠΈΠ»ΠΈ Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠ² Π½Π° машинС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. - Бинхронизация Ρ„Π°ΠΉΠ»ΠΎΠ²: ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° скомпилированных Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ² (ΠΏΠ°ΠΏΠΎΠΊ dist, Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ²) Π½Π° VPS. - Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Запуск ΠΊΠΎΠΌΠ°Π½Π΄ управлСния сСрвисами (pm2 restart, systemctl restart) Π½Π° VPS Ρ‡Π΅Ρ€Π΅Π· SSH. - Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ИспользованиС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ SSH-Π°Π³Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° (~/.ssh/id_rsa), Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°Ρ…. - Аварийная остановка (Fail-Fast): Если любой шаг (Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ) ΠΏΠ°Π΄Π°Π΅Ρ‚ с ошибкой, Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ прСкращаСтся. ## 3. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ сцСнарий (UX) 1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ находится Π² любой ΠΏΠ°ΠΏΠΊΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. 2. Π’Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: xboctploy my-node-app. 3. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° красиво (с Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠΌ) ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ прогрСсс: - 🟒 [Local] running: npm run build... Success! - πŸ”΅ [SFTP] transferring dist/ to /var/www/node-app... Done! - 🟑 [Remote] running: pm2 restart node-app... Success! - πŸŽ‰ Deploy successful! ### Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΈΡ‰Π΅Ρ‚ deploy.toml ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅: сначала `./deploy.toml` Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅, Ссли Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ β€” Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ `~/.config/xboctploy/deploy.toml`. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π΅Π½ для простоты тСстирования Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. --- ## πŸ—οΈ ARCHITECTURE DECISION RECORD (ADR)## ADR-001: Π’Ρ‹Π±ΠΎΡ€ языка ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ - РСшСниС: Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Rust, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ β€” TOML. - ОбоснованиС: Rust обСспСчиваСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запуска CLI ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. TOML Π²Ρ‹Π±Ρ€Π°Π½ ΠΊΠ°ΠΊ Β«Ρ€ΠΎΠ΄Π½ΠΎΠΉΒ» для экосистСмы Rust Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Cargo.toml), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‰Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‡Π΅ΠΌ YAML, ΠΈ ΠΎΠ½ строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ JSON. ## ADR-002: Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями (ΠšΡ€Π΅ΠΉΡ‚Ρ‹) Для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΈ сохранСния лСгковСсности утвСрТдаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ стСк Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ: - clap (с feature-Ρ„Π»Π°Π³ΠΎΠΌ derive) β€” для парсинга Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. - serde + toml β€” для парсинга Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² структуры Rust. - ssh2-config + ssh2 (ΠΈΠ»ΠΈ async-ssh2-lite, Ссли потрСбуСтся Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ) β€” для чтСния систСмных настроСк SSH (~/.ssh/config) ΠΈ создания SSH/SFTP сСссий. - anyhow β€” для простой ΠΈ понятной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок Π±Π΅Π· написания кастомных пСрСчислСний (enums). ## ADR-003: МодСль выполнСния (Бинхронная vs Асинхронная) - РСшСниС: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ (Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ) модСль выполнСния. - ОбоснованиС: Π”Π΅ΠΏΠ»ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° происходит строго ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (Π¨Π°Π³ 1 -> Π¨Π°Π³ 2 -> Π¨Π°Π³ 3). ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ (tokio) услоТнит ΠΊΠΎΠ΄, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ° ΠΈ Π½Π΅ даст прСимущСств, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ шагов Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ дСплоя Π½Π΅ трСбуСтся. ## ADR-004: ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² - РСшСниС: ИспользованиС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° SFTP/SCP Ρ‡Π΅Ρ€Π΅Π· встроСнныС возмоТности ΠΊΡ€Π΅ΠΉΡ‚Π° ssh2. - ОбоснованиС: ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° систСмного rsync Ρ‡Π΅Ρ€Π΅Π· std::process::Command Π΄Π΅Π»Π°Π΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ самодостаточной ΠΈ нСзависимой ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, установлСн Π»ΠΈ rsync Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ОБ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Windows ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΊΠ°ΠΊ Π½Π° Linux). ## ADR-005: БтратСгия ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок ΠΈ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ - РСшСниС: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Fail-Fast с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ stderr ΡƒΠΏΠ°Π²ΡˆΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π˜Π΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ (ΠΊΠ°ΠΊ Π² Ansible) Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Π½Π΅ рСализуСтся. - ОбоснованиС: Для Ρ…ΠΎΠ±Π±ΠΈ-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° состояния систСмы ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ шагом (ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ) ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Π° ΠΈ сильно услоТнит Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. Если ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡƒΠΏΠ°Π»Π°, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ просто фиксит ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ запускаСт Π΄Π΅ΠΏΠ»ΠΎΠΉ Π·Π°Π½ΠΎΠ²ΠΎ. --- ## πŸ“ˆ План развития ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Roadmap) - MVP: ΠŸΠ°Ρ€ΡΠΈΠ½Π³ TOML, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… std::process::Command, SSH-ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, запуск ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄. - Files: РСализация копирования ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ рСкурсивного копирования ΠΏΠ°ΠΏΠΎΠΊ ΠΏΠΎ SFTP. - UX: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ красивого Π²Ρ‹Π²ΠΎΠ΄Π° (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° indicatif для progress-bar ΠΈΠ»ΠΈ colored для Ρ†Π²Π΅Ρ‚Π½Ρ‹Ρ… Π»ΠΎΠ³ΠΎΠ²). - Advanced: ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния (.env), интСграция с систСмным ssh-agent.