Skip to content

feat: environment modes gating (Stage 0)#66

Open
sonra44 wants to merge 8 commits into
masterfrom
feature/env-modes-gating-pr7
Open

feat: environment modes gating (Stage 0)#66
sonra44 wants to merge 8 commits into
masterfrom
feature/env-modes-gating-pr7

Conversation

@sonra44
Copy link
Copy Markdown
Owner

@sonra44 sonra44 commented Jan 8, 2026

Stage 0: implement gating logic for environment modes. This update adds gating to ensure the operator console displays N/A when data is unavailable, aligning sensor suite with canonical specs.

Summary by CodeRabbit

Примечания к выпуску

  • Новые функции

    • Система управления инцидентами с правилами на основе конфигурации и отслеживанием состояния
    • Чат-сервис QIKI с поддержкой фабричного и рабочего режимов
    • Управление режимом окружения (Factory/Mission) через оператор-консоль
    • Масштабируемая разметка интерфейса оператора для различных размеров экранов
  • Документация

    • Добавлена политика аббревиатур и спецификация дизайна консоли оператора
    • Подробные чек-листы валидации и планы интеграции QIKI
  • Улучшения

    • Двуязычная поддержка UI (EN/RU) с улучшенным форматированием текста
    • Переработан заголовок консоли оператора для лучшей читаемости

✏️ Tip: You can customize this high-level summary in your review settings.

Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @sonra44, your pull request is larger than the review limit of 150000 diff characters

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 8, 2026

Caution

Review failed

Failed to post review comments

📝 Walkthrough

Обзор

Данный PR вводит комплексную систему управления инцидентами, поддержку чата QIKI и режимов окружения (FACTORY/MISSION) для оператора ORION. Добавлены новые модули для загрузки и валидации правил инцидентов из YAML, хранилища инцидентов с обработкой событий, сервиса QIKI Chat через NATS, и обновлены существующие компоненты с новыми подписками и методами публикации. Расширена документация дизайна с описанием политик сокращений, макетов, протоколов и контрактов взаимодействия.

Изменения

Когорта / Файл(ы) Резюме изменений
Конфигурация и игнорирование
.gitignore, config/incident_rules.yaml
Добавлено правило игнорирования для config/*.history.jsonl в разделе логов; введён новый файл конфигурации YAML с тремя правилами инцидентов (TEMP_CORE_SPIKE, RADAR_SIGNAL_LOSS, POWER_BUS_OVERLOAD), включая пороги, холодные периоды и метаданные тяжести.
Документация: основная система ORION
AGENTS.md, docs/design/operator_console/ORION_OS_SYSTEM.md, docs/design/operator_console/ORION_OS_TODO.md
Обновлены рекомендации по сокращениям и отсутствующим данным (заменено на "Not available/Нет данных"), уточнены описания свежести телеметрии (Fresh/Свежо, Stale/Устарело), добавлены переменные окружения для масштабирования UI, уточнены назначения клавиш (Ctrl+Y для переключения событий) и добавлен индикатор текущего режима.
Документация: политики и спецификации дизайна
docs/design/operator_console/ABBREVIATIONS_POLICY.md, docs/design/operator_console/CANONICAL_SPEC_ORION_QIKI.md, docs/design/operator_console/MFD_SCALABLE_LAYOUT.md, docs/design/operator_console/ORION_HEADER_REDESIGN_PLAN.md, docs/design/operator_console/ORION_QIKI_ENV_MODES_PR7.md, docs/design/operator_console/ORION_QIKI_PR1_PR7_REPORT.md, docs/design/оценка.MD
Введены новые документы дизайна: политика сокращений EN/RU с допустимыми зонами, каноническая спецификация контракта ORION↔QIKI с NATS субъектами и структурами данных, масштабируемый макет MFD на основе плотности, переработка заголовка ORION с двухстрочной сеткой и подсказками, описание режимов Factory/Mission и планы интеграции PR1–PR7.
Документация: валидация и логи рабочей сессии
docs/design/operator_console/ORION_OS_SYSTEM_MAP.md, docs/design/operator_console/ORION_OS_VALIDATION_CHECKLIST.md, docs/design/operator_console/ORION_OS_VALIDATION_RUN_2026-01-02.md, docs/design/operator_console/ORION_OS_WORKLOG_2025-12-31.md
Добавлены документы: карта системы ORION (слои, потоки данных, UI зоны), контрольный список валидации UI для повторяемых проверок оператором, отчёт о валидационном прогоне от 2026-01-02, и логи рабочей сессии от 2025-12-31 с описанием восстановления контекста, исправлений тестов, улучшений UI и доработок обработки событий.
Документация: интеграция QIKI
docs/design/operator_console/QIKI_INTEGRATION_PLAN.md
Обновлена ссылка на каноническую спецификацию, уточнены рекомендации MVP по использованию единого входящего пункта запроса/ответа qiki.chat.v1, обновлены предложения с билингвальными полями (en/ru), добавлено требование подтверждения оператора перед генерацией команд исполнения.
Ядро ORION: управление инцидентами
src/qiki/services/operator_console/core/incident_rules.py, src/qiki/services/operator_console/core/incidents.py
Введены модели данных IncidentRuleMatch, IncidentRuleThreshold, IncidentRule, IncidentRulesConfig; реализована репозиторная архитектура с FileRulesRepository для загрузки, валидации и сохранения правил в YAML; введено хеширование SHA-256, логирование истории изменений и методы toggle включения/отключения. Реализовано хранилище IncidentStore с обработкой событий, соответствием правилам, отслеживанием нескольких ключей, управлением периодом охлаждения и поддержкой ack/clear операций.
Клиент NATS оператора ORION
src/qiki/services/operator_console/clients/nats_client.py
Добавлены методы: subscribe_qiki_proposals, subscribe_qiki_environment, publish_environment_set; импортированы новые NATS субъекты QIKI_PROPOSALS_V1, QIKI_ENVIRONMENT_V1, QIKI_ENVIRONMENT_SET_V1 для поддержки подписок и публикации режимов окружения.
Интернационализация ORION
src/qiki/services/operator_console/ui/i18n.py
Обновлены константы локализации: NA/INVALID заменены на полные фразы ("Not available/Нет данных", "Invalid/Некорректно"), обновлены термины online_offline и stale; добавлена новая константа UNKNOWN и функция fmt_age_compact для компактного форматирования длительностей с EN/RU разделением (например, "12.3sec/12.3с").
Dockerfile оператора
src/qiki/services/operator_console/Dockerfile
Обновлена команда по умолчанию с main.py на main_orion.py для изменения входящего пункта сервиса оператора.
Тесты ORION: инциденты и правила
src/qiki/services/operator_console/tests/test_incident_rules.py, src/qiki/services/operator_console/tests/test_incidents_store.py, src/qiki/services/operator_console/tests/test_events_pause_unread.py, src/qiki/services/operator_console/tests/test_rules_toggle_in_app.py
Добавлены юнит-тесты для FileRulesRepository (загрузка, перезагрузка, toggle через UI), IncidentStore (группировка событий, ack/clear флоу, min_duration_s), pause/resume событий с отслеживанием непрочитанных, и toggle правил в приложении с сохранением в историю.
Тесты ORION: QIKI маршрутизация и предложения
src/qiki/services/operator_console/tests/test_qiki_routing.py, src/qiki/services/operator_console/tests/test_qiki_proposals_display.py, src/qiki/services/operator_console/tests/test_environment_mode.py
Добавлены тесты: парсинг QIKI интентов с префиксами "q: " и "// ", публикация IntentV1 на QIKI_INTENT_V1, отображение предложений с обновлением хранилища _proposals_by_key, публикация режимов окружения на QIKI_ENVIRONMENT_SET_V1.
Сервис Q_Core Agent: мост интентов
src/qiki/services/q_core_agent/intent_bridge.py, src/qiki/services/q_core_agent/main.py, src/qiki/services/q_core_agent/tests/test_intent_bridge.py
Введена новая архитектура моста интентов с функциями build_stub_proposals и build_invalid_intent_proposals для создания предложений на основе окружения, serve_intents для NATS слушателя с подпиской на QIKI_ENVIRONMENT_SET_V1 и QIKI_INTENT_V1, и start_intent_bridge_in_thread для фонового запуска. Обновлена main.py для условного запуска моста при QCORE_ENABLE_INTENT_BRIDGE. Добавлены тесты валидации моделей и поведения.
Сервис QIKI Chat: обработка и главная программа
src/qiki/services/qiki_chat/__init__.py, src/qiki/services/qiki_chat/handler.py, src/qiki/services/qiki_chat/main.py, src/qiki/services/qiki_chat/tests/test_handler.py
Введены новые модули: пакет qiki_chat, обработчик handle_chat_request с детерминированным прототипом ответа и build_invalid_request_response для ошибок, main.py с NATS слушателем на CHAT_SUBJECT для обработки запросов и отправки ответов, и тесты для проверки статуса ok=True и структуры ответа.
Общие модели: протоколы и NATS субъекты
src/qiki/shared/models/orion_qiki_protocol.py, src/qiki/shared/models/qiki_chat.py, src/qiki/shared/nats_subjects.py
Добавлены новые модели Pydantic: интенты (IntentV1, SelectionV1), предложения (ProposalV1, ProposalsBatchV1), окружение (EnvironmentSnapshotV1, EnvironmentSetV1) с енумами LangHint и EnvironmentMode; модели чата QIKI с билингвальными текстами, контекстами UI и системы, запросы/ответы и ошибки; расширены NATS субъекты с QIKI_INTENT_V1, QIKI_PROPOSALS_V1, QIKI_ENVIRONMENT_V1, QIKI_ENVIRONMENT_SET_V1.
Утилиты и инструменты
src/qiki/tools/__init__.py, src/qiki/tools/qiki_ask.py
Добавлены пакет tools и утилита qiki_ask.py для отправки QIKI чат-запросов через NATS с парсингом текста, опциональным URL NATS и таймаутом.
Тесты: валидация протоколов
tests/unit/test_orion_qiki_protocol_v1.py, tests/shared/test_bot_spec_validator.py
Добавлены юнит-тесты для моделей Orion Qiki протокола v1 (IntentV1, ProposalV1, ProposalsBatchV1, EnvironmentSnapshotV1, EnvironmentSetV1) с проверкой roundtrip, валидации полей, версионирования и строгой валидации экстра-полей. Обновлена проверка в test_load_default_bot_spec с ослаблением условия с точного совпадения на включение подмножества компонентов.

Диаграмма последовательности

sequenceDiagram
    participant Operator as Оператор<br/>(ORION UI)
    participant NATS as NATS<br/>Message Bus
    participant QCore as Q_Core Agent<br/>(Intent Bridge)
    participant QChat as QIKI Chat<br/>Service
    
    Operator->>NATS: Публикует окружение<br/>(EnvironmentSetV1)<br/>qiki.environment.v1.set
    activate QCore
    NATS->>QCore: Новое окружение
    QCore->>QCore: Обновляет режим (FACTORY/MISSION)
    QCore->>NATS: Публикует снимок<br/>(EnvironmentSnapshotV1)<br/>qiki.environment.v1
    NATS->>Operator: Получает текущий режим
    deactivate QCore
    
    Operator->>NATS: Отправляет интент<br/>(IntentV1)<br/>qiki.intent.v1
    activate QCore
    NATS->>QCore: Получает интент
    QCore->>QCore: Создаёт stub предложения<br/>на основе режима
    QCore->>NATS: Публикует предложения<br/>(ProposalsBatchV1)<br/>qiki.proposals.v1
    NATS->>Operator: Отображает предложения<br/>в UI
    deactivate QCore
    
    Operator->>NATS: Отправляет QIKI чат<br/>(QikiChatRequestV1)<br/>qiki.chat.v1
    activate QChat
    NATS->>QChat: Получает чат-запрос
    QChat->>QChat: Обрабатывает запрос<br/>build deterministic ответ
    QChat->>NATS: Отправляет ответ<br/>(QikiChatResponseV1)<br/>reply
    NATS->>Operator: Получает ответ,<br/>отображает в UI
    deactivate QChat
Loading
sequenceDiagram
    participant UI as ORION<br/>Operator Console
    participant Store as Incident<br/>Store
    participant Rules as Rules<br/>Repository
    participant YAML as incident_rules.yaml
    
    Note over Rules: На старте приложения
    Rules->>YAML: Загружает правила
    YAML-->>Rules: Возвращает конфиг
    Rules->>Store: Инициализирует хранилище<br/>с IncidentRulesConfig
    Store->>Store: Готово к обработке событий
    
    Note over Store: При поступлении события
    UI->>Store: Вызывает ingest(event)
    Store->>Store: Итерирует enabled правила<br/>проверяет совпадение
    alt Событие совпадает с правилом
        Store->>Store: Применяет правило<br/>обновляет pending/cooldown
        Store->>Store: Создаёт или обновляет<br/>Incident запись
        Store-->>UI: Возвращает список<br/>созданных инцидентов
    else Событие не совпадает
        Store-->>UI: Возвращает пустой список
    end
    
    Note over UI: Операции над инцидентами
    UI->>Store: ack(incident_id)
    UI->>Store: clear(incident_id)
    UI->>Store: refresh() для auto_clear
    Store->>Store: Обновляет состояние,<br/>применяет cooldown
    Store-->>UI: Отображает обновлённый<br/>список инцидентов
Loading

Оценка усилий при рецензировании

🎯 4 (Сложный) | ⏱️ ~60 минут

Поэма

🐰 Вот правила прибыли, предложенья летят,
Окружение меняет режим подряд,
QIKI чатит с ORION в сети NATS,
Инциденты танцуют в хранилище (вот класс!),
Билингвальный фронтир, всё гладко как мёд —
Оператор консоли в системе поёт! 🌙✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок PR четко и точно описывает основное изменение: добавление логики управления режимами окружения на этапе 0.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonra44 sonra44 changed the base branch from main to master January 8, 2026 16:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant