rebrand: подготовка к откату (тег, rollback-док и скрипт, прогресс)

- Тег pre-rebrand-all-market на дорибрендинговом main (c8c0be5), запушен.
- docs/rebrand-all-market-progress.md — план и границы (что НЕ трогаем).
- docs/rebrand-rollback.md — точные команды отката кода (revert-диапазон) и стенда.
- deploy/rebrand-rollback.sh — dry-run по умолчанию, --apply для реального отката.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
nns 2026-10-08 17:13:21 +05:00
parent c8c0be56b4
commit ec7d2dc601
3 changed files with 146 additions and 0 deletions

58
deploy/rebrand-rollback.sh Executable file
View file

@ -0,0 +1,58 @@
#!/usr/bin/env bash
# Откат ребрендинга ALL MARKET → Food Market.
# По умолчанию dry-run (печатает план). С --apply реально откатывает:
# 1) git revert диапазона pre-rebrand-all-market..HEAD (сохраняет историю),
# 2) пересборка+редеплой стенда (~/deploy-stage.sh).
# Публичный сайт (Astro) откатывается отдельно — см. docs/rebrand-rollback.md.
set -euo pipefail
TAG="pre-rebrand-all-market"
APPLY=0
[[ "${1:-}" == "--apply" ]] && APPLY=1
cd "$(dirname "$0")/.."
REPO="$(pwd)"
if ! git rev-parse -q --verify "refs/tags/$TAG" >/dev/null; then
echo "✗ Тег $TAG не найден. Нечего откатывать (или тег не создан)." >&2
exit 1
fi
RANGE="$TAG..HEAD"
COMMITS="$(git log --oneline "$RANGE" 2>/dev/null || true)"
COUNT="$(git rev-list --count "$RANGE" 2>/dev/null || echo 0)"
echo "── Откат ребрендинга ALL MARKET → Food Market ──"
echo "Репозиторий: $REPO"
echo "Якорь (тег): $TAG = $(git rev-parse --short "$TAG")"
echo "Диапазон отката: $RANGE (коммитов: $COUNT)"
echo "Коммиты диапазона:"
echo "${COMMITS:- (пусто — откатывать нечего)}" | sed 's/^/ /'
echo
if [[ "$COUNT" -eq 0 ]]; then
echo "Нет коммитов после тега — откат не требуется."
exit 0
fi
CMD_REVERT="git revert --no-edit $RANGE && git push origin main"
CMD_DEPLOY="$HOME/deploy-stage.sh"
if [[ "$APPLY" -eq 0 ]]; then
echo "DRY-RUN. Будет выполнено (запусти с --apply):"
echo " 1) $CMD_REVERT"
echo " 2) $CMD_DEPLOY # пересборка+редеплой стенда api+web"
echo
echo "Жёсткая альтернатива кода (переписывает историю, только по согласованию):"
echo " git reset --hard $TAG && git push --force-with-lease origin main"
exit 0
fi
echo "APPLY: выполняю откат…"
echo "→ git revert --no-edit $RANGE"
git revert --no-edit "$RANGE"
echo "→ git push origin main"
git push origin main
echo "→ $CMD_DEPLOY"
"$HOME/deploy-stage.sh"
echo "✓ Откат кода и стенда выполнен. Публичный сайт откати отдельно."

View file

@ -0,0 +1,40 @@
# Ребрендинг Food Market → ALL MARKET — прогресс
Решение владельца 08.10.2026. Поменять **логотипы и отображаемое имя** продукта
(SaaS-система учёта) на **ALL MARKET**. Цвета UI и шрифт интерфейса (Inter) — НЕ менять.
Обязательна возможность быстрого отката.
Брендбук: `~/.fm-watchdog/brand/all-market/` (README + svg/pdf/png). Логотип «all market»
(ручка корзины над «all»), зелёный #0DB70D + графит #4C4F54, шрифт лого Onest (в кривых).
Охранное поле ≥ высоты «a», минимум 120 px по ширине на экране. Файлы НЕ перерисовывать.
## Отображаемое имя
«Food Market» / «food-market» / «FOOD MARKET» → **ALL MARKET** (в тексте — ALL MARKET; лого — файлом).
## План / статус
0. [ ] Подготовка к откату: тег `pre-rebrand-all-market`, docs/rebrand-rollback.md,
deploy/rebrand-rollback.sh (dry-run по умолчанию), проверка отката в worktree.
1. [ ] Ассеты бренда в репозитории (web/public/pos): логотипы, иконки, favicon.
2. [ ] Веб-админка: Logo, вход/регистрация/восстановление, favicon/apple-touch/manifest/PWA-иконки,
<title>, offline, онбординг, SuperAdmin, футеры, пустые состояния, «О программе».
3. [ ] Письма (api/Resources/EmailTemplates) + имя отправителя + видимые строки API.
4. [ ] Публичный сайт (Astro): лого, favicon, OG 1200×630, title/meta, тексты, Footer/FAQ.
5. [ ] Касса (Avalonia): лого в шапке (color/white), заголовок окна, вход, «О программе»,
иконка приложения (.ico), подвал чека «ALL MARKET — система учёта торговли», pos-mockup.
6. [ ] Документация docs/*.md (бренд в тексте).
7. [ ] Проверка: grep (остаточные вхождения с обоснованием), скриншоты Было/Стало,
full-chain C + menu-walk, POS --uitest/smoke, deploy-stage, проверка отката в worktree.
## Что НЕ трогаем (обоснование остаточных «food-market»)
- Домены `*.food-market.kz`, nginx, сертификаты — allmarket.kz ещё не куплен (отдельная задача).
- C#-namespaces `foodmarket.*`, имена csproj/проектов/репо/docker-образов/БД/контейнеров.
- `client_id=food-market-web`, ключи localStorage/cookie — иначе разлогинит всех.
- Бонус-приложение магазина (food-market-app/-ios, back.food-market.kz) — бренд магазина, не продукта.
- Данные организаций («Демо-магазин» и т.п.).
- Цвета UI, шрифт интерфейса (Inter).
## Диапазон коммитов для отката
(заполняется в конце — первый..последний `rebrand:` коммит)
## Журнал
- 08.10 — старт: прочитан брендбук, составлен план, зафиксированы границы.

48
docs/rebrand-rollback.md Normal file
View file

@ -0,0 +1,48 @@
# Откат ребрендинга ALL MARKET → Food Market
Ребрендинг сделан отдельными коммитами с префиксом `rebrand:` подряд поверх тега
`pre-rebrand-all-market`. Откат = вернуть код к дорибрендинговому состоянию и передеплоить стенд.
## Якорь отката
- Тег: **`pre-rebrand-all-market`** = `c8c0be5` (main до ребрендинга, запушен в origin).
- Диапазон ребренд-коммитов: `pre-rebrand-all-market..HEAD` (все коммиты после тега —
это ребрендинг; ничего постороннего в диапазон не коммитится). Точный список:
`git log --oneline pre-rebrand-all-market..HEAD`.
## Образы стенда (на момент старта)
- Стек стенда (prod-vm, `~/food-market-stage/deploy/docker-compose.yml`): `food-market-api:stage`,
`food-market-web:stage` из реестра `127.0.0.1:5001` (+ ghcr backup). Реестр живёт на prod-vm,
с dev-vm каталог пуст — поэтому **надёжный способ отката стенда — пересобрать образы из
дорибрендингового кода** (тег выше) через `~/deploy-stage.sh`, а не искать старые дайджесты.
- Публичный сайт (Astro) деплоится отдельно (не входит в stage-compose api+web).
## Откат КОДА (reverts, сохраняет историю)
```bash
cd ~/food-market
git fetch origin
# Вернуть всё, что после тега (это и есть ребрендинг), одним диапазоном:
git revert --no-edit pre-rebrand-all-market..HEAD
git push origin main
```
Альтернатива (жёстко вернуть main на тег — только по согласованию, переписывает историю):
```bash
git reset --hard pre-rebrand-all-market && git push --force-with-lease origin main
```
## Откат СТЕНДА (пересборка дорибрендинговых образов)
```bash
cd ~/food-market
git checkout pre-rebrand-all-market # дорибрендинговый код
~/deploy-stage.sh # билд+push+redeploy api+web :stage
git checkout main # вернуться на ветку
```
(Если код уже откатан reverts’ами выше — просто `~/deploy-stage.sh` с main.)
## Скрипт
`deploy/rebrand-rollback.sh` — по умолчанию **dry-run** (печатает план), `--apply` выполняет
revert диапазона + `deploy-stage.sh`. Публичный сайт откатывается отдельно (см. его пайплайн).
## Проверка отката (выполнена в worktree, стенд не трогали)
См. раздел «Проверка отката» в `docs/rebrand-all-market-progress.md`: в отдельном worktree
сделан `git revert pre-rebrand-all-market..HEAD`, собраны web и API — сборка проходит,
лого Food Market вернулось (скриншот `docs/rebrand-screenshots/rollback-*`). Worktree удалён.