Files
microdao-daarion/docs/release/release_check.md
Apple 67225a39fa docs(platform): add policy configs, runbooks, ops scripts and platform documentation
Config policies (16 files): alert_routing, architecture_pressure, backlog,
cost_weights, data_governance, incident_escalation, incident_intelligence,
network_allowlist, nodes_registry, observability_sources, rbac_tools_matrix,
release_gate, risk_attribution, risk_policy, slo_policy, tool_limits, tools_rollout

Ops (22 files): Caddyfile, calendar compose, grafana voice dashboard,
deployments/incidents logs, runbooks for alerts/audit/backlog/incidents/sofiia/voice,
cron jobs, scripts (alert_triage, audit_cleanup, migrate_*, governance, schedule),
task_registry, voice alerts/ha/latency/policy

Docs (30+ files): HUMANIZED_STEPAN v2.7-v3 changelogs and runbooks,
NODA1/NODA2 status and setup, audit index and traces, backlog, incident,
supervisor, tools, voice, opencode, release, risk, aistalk, spacebot

Made-with: Cursor
2026-03-03 07:14:53 -08:00

7.2 KiB
Raw Permalink Blame History

release_check — Release Gate

Єдиний оркестрований job для перевірки готовності до релізу
Нода: NODE2 (dev) + NODA1 (production)


Що це?

release_check — internal task у Job Orchestrator, який послідовно запускає всі release gates і повертає єдиний структурований verdict pass/fail.

Замінює ручне запускання кожного gate окремо.


Gates (послідовно)

# Gate Tool Умова блокування
1 PR Review pr_reviewer_tool (mode=blocking_only) blocking_count > 0
2 Config Lint config_linter_tool (strict=true) blocking_count > 0
3 Contract Diff contract_tool (fail_on_breaking=true) breaking_count > 0
4 Threat Model threatmodel_tool (risk_profile) unmitigated_high > 0
5 Smoke (optional) job_orchestrator_toolsmoke_gateway job fail
6 Drift (optional) job_orchestrator_tooldrift_check_node1 job fail

Gates 14 завжди виконуються (якщо є вхідні дані).
Gates 56 виконуються тільки при run_smoke=true / run_drift=true.


Як запустити

Через job_orchestrator_tool (рекомендовано)

{
  "action": "start_task",
  "agent_id": "sofiia",
  "params": {
    "task_id": "release_check",
    "inputs": {
      "service_name": "router",
      "diff_text": "<unified diff>",
      "openapi_base": "<base OpenAPI spec>",
      "openapi_head": "<head OpenAPI spec>",
      "risk_profile": "agentic_tools",
      "fail_fast": false,
      "run_smoke": true,
      "run_drift": false
    }
  }
}

Через Sofiia (OpenCode/Telegram)

"Запусти release_check для сервісу router з цим diff: ..."
"Зроби release gate перевірку"

Dry run (тільки валідація)

{
  "action": "start_task",
  "params": {
    "task_id": "release_check",
    "dry_run": true,
    "inputs": {"service_name": "router"}
  }
}

Вхідні параметри (inputs_schema)

Параметр Тип Обов'язковий Опис
service_name string Назва сервісу
diff_text string Unified diff (git diff)
openapi_base string OpenAPI base spec (text)
openapi_head string OpenAPI head spec (text)
risk_profile enum default / agentic_tools / public_api (default: default)
fail_fast boolean Зупинитись на першому fail (default: false)
run_smoke boolean Запустити smoke tests (default: false)
run_drift boolean Запустити drift check (default: false)

Вихідний формат

{
  "pass": true,
  "gates": [
    {
      "name": "pr_review",
      "status": "pass",
      "blocking_count": 0,
      "summary": "No blocking issues found",
      "score": 95
    },
    {
      "name": "config_lint",
      "status": "pass",
      "blocking_count": 0,
      "total_findings": 2
    },
    {
      "name": "contract_diff",
      "status": "skipped",
      "reason": "openapi_base or openapi_head not provided"
    },
    {
      "name": "threat_model",
      "status": "pass",
      "unmitigated_high": 0,
      "risk_profile": "default"
    }
  ],
  "recommendations": [],
  "summary": "✅ RELEASE CHECK PASSED in 1234ms. Gates: ['pr_review', 'config_lint', 'threat_model'].",
  "elapsed_ms": 1234.5
}

Gate statuses

Status Значення
pass Gate пройшов
fail Gate не пройшов (блокує реліз)
skipped Вхідних даних не було (не блокує)
error Внутрішня помилка gate

Інтерпретація результату

pass: true

Всі mandatory gates пройшли → можна випускати реліз.

pass: false

Хоча б один gate має status: failреліз заблоковано.
Дивись gates[].status == "fail" та recommendations для деталей.

status: error

Gate не зміг виконатись (internal error). Не є fail, але потребує уваги.


Risk Profiles для Threat Model

Профіль Коли використовувати
default Звичайний внутрішній сервіс
agentic_tools Сервіс з tool-викликами, prompt injection ризики
public_api Публічний API (rate limiting, WAF, auth hardening)

Необхідні Entitlements

Для запуску release_check агент повинен мати:

  • tools.pr_review.gate
  • tools.contract.gate
  • tools.config_lint.gate
  • tools.threatmodel.gate

Тільки агенти з роллю agent_cto (sofiia, yaromir) мають ці entitlements.


Приклади сценаріїв

Швидка перевірка PR (без openapi, без smoke)

{
  "service_name": "gateway-bot",
  "diff_text": "...",
  "fail_fast": true
}

Повний release pipeline для публічного API

{
  "service_name": "router",
  "diff_text": "...",
  "openapi_base": "...",
  "openapi_head": "...",
  "risk_profile": "public_api",
  "run_smoke": true,
  "run_drift": true
}

Тільки threat model (без diff)

{
  "service_name": "auth-service",
  "risk_profile": "agentic_tools"
}

Внутрішня архітектура

job_orchestrator_tool.start_task("release_check")
  → _job_orchestrator_tool() виявляє runner="internal"
  → release_check_runner.run_release_check(tool_manager, inputs, agent_id)
    → Gate 1: _run_pr_review()
    → Gate 2: _run_config_lint()
    → Gate 3: _run_dependency_scan()
    → Gate 4: _run_contract_diff()
    → Gate 5: _run_threat_model()
    → [Gate 6: _run_smoke()]
    → [Gate 7: _run_drift()]
    → Gate 8: _run_followup_watch()  (policy: off/warn/strict)
    → Gate 9: _run_privacy_watch()   (policy: off/warn/strict)
    → Gate 10: _run_cost_watch()     (always warn)
    → _build_report()
  → ToolResult(success=True, result=report)

Кожен gate викликає відповідний tool через tool_manager.execute_tool().
Governance middleware (RBAC, limits, audit) застосовується до кожного gate-виклику.


Файли

Файл Призначення
ops/task_registry.yml Реєстрація release_check task
services/router/release_check_runner.py Internal runner (gates logic)
config/release_gate_policy.yml Gate strictness profiles (dev/staging/prod)
config/slo_policy.yml SLO thresholds per service
tests/test_tool_governance.py Тести (включно з release_check fixtures)
tests/test_release_check_followup_watch.py Follow-up watch gate tests