КП ЧЕТСТролейбусЧеркаси — найкраще місто

📦 Архів сайту

Тут зберігаються резервні копії сайту, включно з повним deep-архівом для нового бота/оператора.

Резервне дзеркало і аварійний доступ

Якщо основний Vercel-сайт тимчасово не відкривається, використовуйте резервну статичну копію на GitHub Pages.

Відкрити резервне дзеркало Аварійна інструкція

Основне резервне дзеркало Cloudflare Pages уже працює для перегляду графіків. GitHub Pages-дубль також підготовлений у гілці gh-pages, але може потребувати одноразового ввімкнення в Settings → Pages. Публікація змін через редактор працює на основному Vercel-сайті; офлайн-зміни можна зберегти пакетом JSON.

Правило архівів:
1 головний відновлювальний архів з поточним стабільним станом; 1 тижневий архів оновлюється приблизно раз на 7 днів; 1 щоденний архів перезаписується щодня. Старі датовані архіви автоматично прибираються.
0. Повний deep-архів для відновлення роботи

Найповніший ZIP: сайт, дані, скрипти, MACHINE_OPERATING_MANUAL, RESTORE_HANDOFF, LAST_KNOWN_STATE і agent-knowledge з алгоритмами. Потрібен, якщо зміниться бот/оператор або треба почати з цього місця заново.

Стан: 28.08.2026 15:10, 4.0 МБ

⬇️ Скачати повний deep-архів
1. Головний відновлювальний архів

Основна резервна копія поточного стабільного сайту для швидкого відновлення.

Стан: 08.09.2026 19:20, 5.2 МБ

⬇️ Скачати головний архів
2. Тижневий архів

Оновлюється не частіше ніж раз на тиждень.

Стан: 09.09.2026 12:26, 12.6 МБ

⬇️ Скачати тижневий архів
3. Щоденний архів

Перезаписується щодня автоматично.

Стан: 09.09.2026 12:26, 12.6 МБ

⬇️ Скачати щоденний архів

🤖 Мануал для десктопного Hermes-агента

Як працювати, щоб не затирати дані крону. Обов'язковий до виконання контракт між серверним Hermes (Linux) і десктопним Hermes (Windows).

⚡ ГОЛОВНЕ ПРАВИЛО: Vercel — правда. GitHub main — її дзеркало. Локальна копія — твій чорновик. Завжди звіряй з Vercel, потім додавай своє.

1. Архітектура (хто що пише — не перетинай)

Файл / папкаХто пишеКоли
tickets/*.html, tickets/YYYY-MM.htmlСерверний cron06:00 + 30-хв fetch
stt/*.htmlСерверний cron06:00 + 30-хв fetch
assets/data/controller-tickets.jsonСерверний cron06:00
assets/stt-reports/*Серверний cron30-хв fetch
assets/archives/*.zip, archive-manifest.txtСерверний cron18:00 + нд 18:10
index.html, daily.html, daily/DD.MM.YY.htmlДесктопний (ти)будь-коли
districts.html, districts/YYYY-MM.html, months/YYYY-MM.htmlДесктопний (ти)будь-коли
problems.html, vacations.html, tab.html, tab/Десктопний (ти)будь-коли
service-worker.js (бамп CACHE_NAME)Десктопний (ти)при кожному push

2. Головне правило: звірка з Vercel перед правкою

Це правило вирішує ВСІ конфлікти раз і назавжди. Воно усуває race-condition: серверний крон о 06:00 пушить нові tickets/ та stt/ в main, а якщо десктоп зробить git pull між 06:00 і 09:00, його локальна копія старіша за main, і rebase виглядає ніби крон затирає desktop-зміни, хоча насправді це desktop затирає дані крону.

✅ Роби перед кожною правкою (5 секунд):
curl https://chets-schedule.vercel.app/service-worker.js | Select-String "CACHE_NAME"
# Запам'ятай: v756 — це поточна версія на Vercel

Ця команда показує, що зараз на production-сайті. Vercel бере з main. master — це legacy, туди не пушимо.

3. Повний workflow (8 кроків — робити КОЖЕН раз)

0
Звірка з Vercel. Відкрий головну і подивись, чи все на місці. Запам'ятай версію service-worker.
1
Pull з main.
cd C:\Users\St_Lv\hermes-server\vercel-project
git checkout main
git pull origin main

Якщо в консолі CONFLICT (...) in tickets/... або in stt/...:

git checkout --theirs tickets/ stt/
git add tickets/ stt/
git rebase --continue
2
Подвійна перевірка. Подивись, що саме змінив pull:
git status
🛑 Якщо тут M tickets/... або M stt/... — НЕ редагуй ці файли! Це означає, що крон оновив їх поки ти не працював, і rebase прийняв твою старішу версію. Відкоти:
git checkout -- tickets/ stt/
3
Звірка того файлу, який збираєшся редагувати. Наприклад для index.html:
$vercelIndex = (Invoke-WebRequest "https://chets-schedule.vercel.app/index.html" -UseBasicParsing).Content
git diff .vercel-baseline-index.html index.html
# Якщо diff порожній — у тебе та сама версія що й на Vercel, можна редагувати
4
Редагуй файли. Тільки ті, які в таблиці позначені як "Десктопний (ти)": index.html, daily/, districts/, months/, problems.html, vacations.html, tab.html, service-worker.js.
5
Перед commit — ЗАВЖДИ bump CACHE_NAME. Відкрий service-worker.js, збільш число на 1:
const CACHE_NAME = 'chets-schedule-v757';  // було 756
⚠️ Без бампа service-worker кешує старий HTML, і користувачі не побачать твої зміни!
6
Подвійна перевірка перед commit:
git status
✅ Має бути ТІЛЬКИ твої файли:
M index.html, M daily.html, M service-worker.js, ...
❌ НЕ має бути:
M tickets/..., M stt/..., M assets/data/..., M assets/archives/... — це зона крону!

Якщо побачив заборонені — негайно git checkout -- tickets/ stt/ assets/data/ assets/archives/

7
Commit + push ТІЛЬКИ в main.
git add -A
git commit -m "Короткий опис зміни"
git push origin main
8
Перевірка Vercel (ОБОВ'ЯЗКОВО, ніколи не кажи "готово" без цього).
Start-Sleep -Seconds 45
curl https://chets-schedule.vercel.app/service-worker.js | Select-String "CACHE_NAME"

Має показати нову версію (на 1 більше). Якщо ні — .\vercel-deploy.ps1

4. Заборонено

❌ ЗАБОРОНЕНО редагувати ці файли/папки (це зона серверного крону):
  • tickets/ (вся папка) — пише серверний cron
  • stt/ (вся папка) — пише серверний cron
  • assets/data/controller-tickets.json
  • assets/stt-reports/
  • assets/archives/*.zip
  • assets/archives/archive-manifest.txt

Якщо тобі треба побачити дані крону — просто читай з Vercel через curl або в браузері.

❌ ЗАБОРОНЕНО пушити в master:
git push origin master  # ЗАБОРОНЕНО

master — це legacy гілка. Vercel бере тільки main. (Серверний Hermes на цій машині іноді тригерить deploy на main, але master не має жодних deploy hooks.)

❌ ЗАБОРОНЕНО git push --force без дозволу:
git push origin main --force  # ЗАБОРОНЕНО

Force-push стирає всі комміти включно з тими, що поклав крон.

❌ ЗАБОРОНЕНО редагувати файли в D:\ВЕРСЕЛ ЧЕТС АРХИВ\:
Там немає git. Наступний push з GitHub перезатре твої зміни.
❌ ЗАБОРОНЕНО кажи "готово" без перевірки Vercel. Завжди роби крок 8.

5. Типові задачі

Оновити щоденний графік (daily)

cd C:\Users\St_Lv\hermes-server\vercel-project
git checkout main
git pull origin main
notepad daily\10.09.26.html
# Відкрий service-worker.js, v756 → v757
git add -A
git commit -m "daily 10.09: додав пару 4 Битко+Ніколіч"
git push origin main
# Зачекай 45 сек, перевір Vercel

Оновити головну (index.html)

cd C:\Users\St_Lv\hermes-server\vercel-project
git checkout main
git pull origin main
notepad index.html
# Відкрий service-worker.js, v756 → v757
git add -A
git commit -m "index: додав ДН-кнопку"
git push origin main
# Зачекай 45 сек, перевір Vercel

Оновити дільниці (districts)

cd C:\Users\St_Lv\hermes-server\vercel-project
git checkout main
git pull origin main
notepad districts\2026-09.html
# Відкрий service-worker.js, v756 → v757
git add -A
git commit -m "districts 09: додав Іваненко"
git push origin main
# Зачекай 45 сек, перевір Vercel

Один файл — одна правка — один commit

Не змішуй правки в одному коміті:

Чому: якщо один коміт зламає сайт, можна git revert тільки його, не зачіпаючи інше.

6. Як працювати з sync-desktop.ps1

sync-desktop.ps1 — це спрощений скрипт для рутинних комітів. Він має параметр -CheckVercel:

✅ Повна звірка (рекомендовано):
.\sync-desktop.ps1 -CheckVercel "daily 10.09: додав пару 4"

Що робить скрипт з -CheckVercel:

  1. Curl Vercel → зберігає еталон SW і index.html в .vercel-baseline-*.html
  2. Git pull origin main
  3. Якщо конфлікт на tickets/stt → автоматично --theirs
  4. Перевіряє git status — якщо в M з'явились tickets/stt/assets → автоматично відкочує
  5. git add -A → якщо -A додало заборонені → автоматично прибирає і зупиняється
  6. git commit + git push origin main
  7. Через 30 сек — перевіряє Vercel і порівнює з локальним SW

Скрипт фізично не може затерти дані крону — навіть якщо правило забуте.

⚠️ Без -CheckVercel — це спрощений режим. Використовуй тільки коли точно знаєш, що в tickets/stt нічого нового немає (наприклад, щойно пушив і нікуди не відходив).

7. Коли щось зламалось

"Я бачу старі дані на Vercel після мого push"

# 1. Перевір чи push дійсно був
git log --oneline -3

# 2. Зачекай 60 сек (Vercel іноді тупить)
Start-Sleep -Seconds 60

# 3. Перевір знову
curl https://chets-schedule.vercel.app/service-worker.js | Select-String "CACHE_NAME"

# 4. Якщо все ще старий — backup deploy
.\vercel-deploy.ps1

"Git конфлікт на tickets/ або stt/"

Це крон оновив файли поки ти працював. Завжди бери THEIR:

git checkout --theirs tickets/ stt/
git add tickets/ stt/
git rebase --continue
# Якщо rebase каже "nothing to commit":
git rebase --skip

"Я випадково запушив tickets/ або stt/ — дані крону зникли на Vercel"

Не панікуй. GitHub зберігає історію. Знайди останній коміт крону і відкоти:

# Знайди коміт крону (шукай в історії 'tickets+STT sync' або 'stt/')
git log --all --oneline | Select-String "tickets"
# Наприклад знайшов: 35a1a9c tickets/09.09.2026

# Відкоти файли з того коміту:
git checkout 35a1a9c -- tickets/ stt/

# Закоміть як відновлення:
git add tickets/ stt/
git commit -m "RESTORE: повернув дані крону з 35a1a9c після випадкового затирання"
git push origin main

Або швидко: напиши в Telegram серверному Hermes: "я затер tickets/stt, відкоти".

"Vercel каже 404 на мій новий файл"

Vercel деплоїть тільки ті файли, що закомічені в main. Перевір:

git ls-files | Select-String "11.09"
# Має показати daily/11.09.26.html якщо ти його додав

8. Структура проєкту

C:\Users\St_Lv\hermes-server\vercel-project\
├── index.html              # ГОЛОВНА (вересень 2026) — ТВІЙ
├── daily.html, districts.html, problems.html, stt.html
├── vacations.html, tab.html, needs.html, editor.html
├── months/2026-XX.html     # місячні графіки — ТВІЙ
├── daily/DD.MM.YY.html     # щоденні графіки — ТВІЙ
├── districts/YYYY-MM.html  # дільниці — ТВІЙ
├── tickets/                # ⚠️ КРОНУ, не редагуй
├── stt/                    # ⚠️ КРОНУ, не редагуй
├── tab/                    # табель — ТВІЙ
├── assets/
│   ├── month-redirect.js   # авто-підсвічування місяця
│   ├── problems-auto-month.js
│   ├── vacations-auto-month.js
│   ├── data/               # ⚠️ КРОНУ (controller-tickets.json)
│   ├── stt-reports/        # ⚠️ КРОНУ
│   └── archives/           # ⚠️ КРОНУ
├── service-worker.js       # CACHE_NAME — ЗАВЖДИ бампати
├── sync-desktop.ps1        # pull+commit+push+verify
├── vercel-deploy.ps1       # backup deploy
├── backup-hermes.ps1       # backup to D:\
├── restore-hermes.ps1      # restore from backup
├── install-scheduled-task.ps1
├── MACHINE_OPERATING_MANUAL_LOCAL.md
├── SURVIVAL_GUIDE.md
└── INSTALL_SYNC.md

📞 Контакти

🎓 ЗОЛОТЕ ПРАВИЛО: Vercel — правда. GitHub main — її дзеркало. Локально — твій чорновик.