--- /dev/null
+<ol>
+<li>Makefile ������ ��� ����������� �����.</li>
+<li>��� ������ � scripts/*.sh.</li>
+<li>������� ����� � ��������: set -euo pipefail.</li>
+<li>������ ��������: .env/config.mk.</li>
+<li>���� � ����������� � ����� ����� (������� notify).</li>
+<li>������� ����� � ��������������, ���� ����� 3 ������ ����� ����������.</li>
+</ol>
+<p>������:</p>
+<ul>
+<li>Makefile -> scripts/check_repo.sh</li>
+<li>scripts/check_repo.sh -> git/telegram/exit-����</li>
+</ul>
+<p>���� ������, � ��������� ��������� ��� ���� ����������� ��������� ������ �� 3 ������, ������� �� ������ �������� �� ����.</p>
+<p>���� ������� )</p>
+<p>�������. ��� ����������� ������ �� ����.</p>
+<p>Makefile</p>
+<p>SHELL := /bin/bash
+ .ONESHELL:
+ .DEFAULT_GOAL := run</p>
+<p>include config.mk</p>
+<p>.PHONY: run check notify test</p>
+<p>run: check
+ @echo "[run] start main flow"
+ @# ��� ���� ��������
+ @echo "[run] done"</p>
+<p>check:
+ @bash scripts/check_repo.sh</p>
+<p>notify:
+ @bash scripts/notify_telegram.sh "manual notify from make"</p>
+<p>test:
+ @bash -n scripts/check_repo.sh
+ @bash -n scripts/notify_telegram.sh
+ @echo "syntax ok"</p>
+<p>config.mk</p>
+<p># �� ������� �������. ����� ������� �� ���������/CI.
+ export BOT_TOKEN ?=
+ export CHAT_ID ?=
+ export REPO_DIR ?= .
+ export DRY_RUN ?= 0</p>
+<p>scripts/notify_telegram.sh</p>
+<p>#!/usr/bin/env bash
+ msg="${1:-no message}"</p>
+<p>if [[ "${DRY_RUN:-0}" == "1" ]]; then
+ echo "[notify][dry-run] $msg"
+ exit 0
+ if [[ -z "${BOT_TOKEN:-}" || -z "${CHAT_ID:-}" ]]; then
+ echo "[notify] BOT_TOKEN/CHAT_ID not set, skip"
+ exit 0
+ fi</p>
+<p>curl -fsS --connect-timeout 5 --max-time 10 \
+ -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
+ -d "chat_id=${CHAT_ID}" \
+ --data-urlencode "text=${msg}" >/dev/null || true</p>
+<p>scripts/check_repo.sh</p>
+<p>cd "${REPO_DIR:-.}"</p>
+<p>dirty="$(git status --porcelain || true)"
+ if [[ -n "$dirty" ]]; then
+ echo "[check] repo dirty, stop"
+ bash scripts/notify_telegram.sh "STOP: repo dirty in $(pwd)"
+ exit 1
+ echo "[check] repo clean"</p>
+<p>������:</p>
+<ol>
+<li>chmod +x scripts/*.sh</li>
+<li>BOT_TOKEN=... CHAT_ID=... make run</li>
+<li>��� ���������� �������� ��� ��������: DRY_RUN=1 make run</li>
+</ol>
+<p>���� ������, ��������� ����� ������� ����� ����� exit 0 ����� ��������� ��� ��������� �����.</p>
+<p>��� ����,</p>
+<p>����.
+ ��� ������ ������: ���������, exit-������, ��� Telegram-�����������?</p>
+<p>��� ��� ������� ��� � ���������, � ����� ���� ��������� ���� ������ )))</p>
+<p>��, ��� ��� ��� ������� ������� ���������: ����� �������� � �������� ����� � ��������.</p>
+<p>����� �� ��������, ������ ���:</p>
+<ol>
+<li>������ docs/ops-notes.md.</li>
+<li>���� ��������� ������� ������� (make/git/cron/alerts).</li>
+<li>����� ����� scripts/ � �������� �������� ������.</li>
+</ol>
+<p>��� ����� ����� ���������� ���� ���� � �ӣ ��� �����.</p>
+<p>��� ���� ������ � �� �������� ))</p>
+<p>��. ������ ������ �� ��������: ����� ����������� � ����.</p>
+<p>�������:</p>
+<ol>
+<li>docs/runbook.md ��� ������ ��� ����.</li>
+<li>make help ������ ����� � �������� ���������.</li>
+<li>scripts/ ������ ����������� ������, ��� ����� � ����.</li>
+</ol>
+<p>����� ������ �� �����, �ӣ ����� � �������.</p>
+<p>�� ����� ros.vados.ru � � ����� ������ ���� ������� � �������� ��� ��������</p>
+<p>�������� ���. ��� ��� ��� ���������� ���� ��� ������: ���� runbook + ���� �������������.</p>
+<p>����� ��������� �� �����������, ���������� �������:</p>
+<ol>
+<li>docs/runbook.md</li>
+<li>docs/decisions.md (������ ������� ������ ���)</li>
+<li>scripts/ (��� ������)</li>
+<li>Makefile (������ ������ �����)</li>
+<li>configs/ (������� MikroTik)</li>
+</ol>
\ No newline at end of file
--- /dev/null
+ 1. Makefile ������ ��� ����������� �����.
+ 2. ��� ������ � scripts/*.sh.
+ 3. ������� ����� � ��������: set -euo pipefail.
+ 4. ������ ��������: .env/config.mk.
+ 5. ���� � ����������� � ����� ����� (������� notify).
+ 6. ������� ����� � ��������������, ���� ����� 3 ������ ����� ����������.
+
+ ������:
+
+ - Makefile -> scripts/check_repo.sh
+ - scripts/check_repo.sh -> git/telegram/exit-����
+
+ ���� ������, � ��������� ��������� ��� ���� ����������� ��������� ������ �� 3 ������, ������� �� ������ �������� �� ����.
+
+
+ ���� ������� )
+
+
+ �������. ��� ����������� ������ �� ����.
+
+ Makefile
+
+ SHELL := /bin/bash
+ .ONESHELL:
+ .DEFAULT_GOAL := run
+
+ include config.mk
+
+ .PHONY: run check notify test
+
+ run: check
+ @echo "[run] start main flow"
+ @# ��� ���� ��������
+ @echo "[run] done"
+
+ check:
+ @bash scripts/check_repo.sh
+
+ notify:
+ @bash scripts/notify_telegram.sh "manual notify from make"
+
+ test:
+ @bash -n scripts/check_repo.sh
+ @bash -n scripts/notify_telegram.sh
+ @echo "syntax ok"
+
+ config.mk
+
+ # �� ������� �������. ����� ������� �� ���������/CI.
+ export BOT_TOKEN ?=
+ export CHAT_ID ?=
+ export REPO_DIR ?= .
+ export DRY_RUN ?= 0
+
+ scripts/notify_telegram.sh
+
+ #!/usr/bin/env bash
+ msg="${1:-no message}"
+
+ if [[ "${DRY_RUN:-0}" == "1" ]]; then
+ echo "[notify][dry-run] $msg"
+ exit 0
+ if [[ -z "${BOT_TOKEN:-}" || -z "${CHAT_ID:-}" ]]; then
+ echo "[notify] BOT_TOKEN/CHAT_ID not set, skip"
+ exit 0
+ fi
+
+ curl -fsS --connect-timeout 5 --max-time 10 \
+ -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
+ -d "chat_id=${CHAT_ID}" \
+ --data-urlencode "text=${msg}" >/dev/null || true
+
+ scripts/check_repo.sh
+
+
+ cd "${REPO_DIR:-.}"
+
+ dirty="$(git status --porcelain || true)"
+ if [[ -n "$dirty" ]]; then
+ echo "[check] repo dirty, stop"
+ bash scripts/notify_telegram.sh "STOP: repo dirty in $(pwd)"
+ exit 1
+ echo "[check] repo clean"
+
+ ������:
+
+ 1. chmod +x scripts/*.sh
+ 2. BOT_TOKEN=... CHAT_ID=... make run
+ 3. ��� ���������� �������� ��� ��������: DRY_RUN=1 make run
+
+ ���� ������, ��������� ����� ������� ����� ����� exit 0 ����� ��������� ��� ��������� �����.
+
+
+ ��� ����,
+
+
+ ����.
+ ��� ������ ������: ���������, exit-������, ��� Telegram-�����������?
+
+
+ ��� ��� ������� ��� � ���������, � ����� ���� ��������� ���� ������ )))
+
+
+ ��, ��� ��� ��� ������� ������� ���������: ����� �������� � �������� ����� � ��������.
+
+ ����� �� ��������, ������ ���:
+
+ 1. ������ docs/ops-notes.md.
+ 2. ���� ��������� ������� ������� (make/git/cron/alerts).
+ 3. ����� ����� scripts/ � �������� �������� ������.
+
+ ��� ����� ����� ���������� ���� ���� � �ӣ ��� �����.
+
+
+ ��� ���� ������ � �� �������� ))
+
+
+ ��. ������ ������ �� ��������: ����� ����������� � ����.
+
+ �������:
+
+ 1. docs/runbook.md ��� ������ ��� ����.
+ 2. make help ������ ����� � �������� ���������.
+ 3. scripts/ ������ ����������� ������, ��� ����� � ����.
+
+ ����� ������ �� �����, �ӣ ����� � �������.
+
+
+ �� ����� ros.vados.ru � � ����� ������ ���� ������� � �������� ��� ��������
+
+
+ �������� ���. ��� ��� ��� ���������� ���� ��� ������: ���� runbook + ���� �������������.
+
+ ����� ��������� �� �����������, ���������� �������:
+
+ 1. docs/runbook.md
+ 2. docs/decisions.md (������ ������� ������ ���)
+ 3. scripts/ (��� ������)
+ 4. Makefile (������ ������ �����)
+ 5. configs/ (������� MikroTik)