# Slepok Oformleniya Google Tablitsy

> «Зафиксируй формат вкладки Google Sheets в репозитории», «обнови YAML по живой вкладке без данных», «сверь сохранённое представление», «не уплыло ли оформление вкладки».

- Skill: `kir-kopylov/slepok-oformleniya-google-tablitsy` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add kir-kopylov/slepok-oformleniya-google-tablitsy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kir-kopylov/slepok-oformleniya-google-tablitsy/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kir-kopylov (https://skillmd.com/u/kir-kopylov)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/kir-kopylov/slepok-oformleniya-google-tablitsy

---


# Версионирование представления Google Sheets

## Запуск Навыка

При явном вызове или однозначном смысловом совпадении применяйте навык сразу. Перед первым шагом покажите ровно одну короткую контекстную строку (не более 30 слов) и продолжайте работу в том же ответе, не ожидая реакции:

Применяю **«Версионирование представления Google Sheets»**: <кратко назовите конкретную дополнительную процедуру или проверяемый результат для текущего запроса>; продолжаю без ожидания.

Не включайте в строку `author_github`, внутреннее имя папки или пересказ всего запроса. Не спрашивайте, применять ли навык.

Не завершайте первый ответ уведомлением или планом. Сразу самостоятельно проверьте доступный контекст Google Sheets, коннекторы или браузер и read-only состояние репозитория, не читая строки рабочих данных. Если целевую таблицу и вкладку нельзя однозначно определить, в том же ответе задайте один ближайший вопрос о ссылке, названии или идентификаторе вкладки; к пути YAML переходите только после определения источника.

Если одновременно подходят совместимые навыки, выберите минимальный набор и покажите одну общую строку. Если подходы ведут к несовместимым результатам и запрос не позволяет выбрать, спросите только о желаемом результате, не о разрешении применить навык.

Запуск навыка не расширяет полномочия. Выполните всю безопасную и уже разрешённую часть; запросите подтверждение только непосредственно перед ещё не разрешённым внешним или изменяющим действием. Не запрашивайте повторно уже данное разрешение и не дублируйте системное окно подтверждения.

## Назначение

Skill переносит в репозиторий не содержимое Google Sheets, а узкий и проверяемый контракт её представления. Он нужен для двух операций:

1. создать или обновить один YAML по свежему чтению существующей вкладки;
2. сверить уже объявленные в YAML свойства с той же живой вкладкой.

Это односторонний снимок и аудит. Skill не восстанавливает вкладку из YAML, не синхронизирует две стороны и не превращает YAML в новый источник бизнес-данных.

## Естественные Входы

- «Зафиксируй формат этой вкладки Google Sheets в репозитории».
- «Обнови YAML-шаблон по живой вкладке, данные не копируй».
- «Сверь сохранённое представление с Google Sheets».
- «Проверь, не уплыло ли оформление вкладки относительно репозитория».

## Обязательные Входы

До чтения установите из запроса или доступного контекста:

- конкретную Google-таблицу и вкладку;
- режим: `capture` или `compare`;
- точный путь к одному целевому YAML в репозитории.
- для `capture` — точный небольшой список ячеек формул представления; допустим явно пустой список, если таких формул нет.

Не просите пользователя пересказывать то, что можно безопасно прочитать доступным коннектором, API, браузером или файлами. Если таблица, вкладка либо путь остаются неоднозначными после самостоятельной проверки, запросите только одно ближайшее уточнение, меняющее действие.

## Контракт Артефакта

Целевой YAML содержит ровно две управляемые skill части:

```yaml
provenance:
  spreadsheet_title: "Имя книги"
  sheet_title: "Имя вкладки"
  captured_at: "RFC3339 timestamp"
view_contract:
  tab_name: "Имя вкладки"
  frozen_rows: 1
  columns:
    - header: "Действие"
      column: "A"
      width_px: 120
      data_format:
        range: "A2:A"
        number_format: "TEXT"
        wrap_strategy: "WRAP"
        horizontal_alignment: "LEFT"
  formulas:
    - cell: "A2"
      formula: "=..."
  header_format:
    range: "A1:H1"
    background_color: "#1F2937"
    text_color: "#FFFFFF"
    bold: true
```

`provenance` объясняет происхождение и время снимка, но не участвует в результате сравнения. `view_contract` содержит только свойства, которые были прочитаны и которые обязаны совпадать.

Минимальный `view_contract`:

- имя вкладки;
- порядок заголовков;
- число закреплённых строк;
- ширины колонок;
- основные числовые форматы, перенос и горизонтальное выравнивание в одном явно объявленном диапазоне;
- формулы только из заранее установленного списка ячеек представления;
- существенное оформление заголовка.

Не добавляйте свойство, если живое чтение его не подтвердило. Общий `data_format.range` допустим только тогда, когда числовой формат, перенос и выравнивание относятся к одному диапазону и единообразны внутри него; иначе верните `BLOCKED`, а не дробите контракт автоматически. Не сохраняйте строки рабочих данных, вычисленные значения формул, комментарии, историю изменений, идентификатор или URL таблицы. Если текст формулы содержит приватный локатор или секрет, верните `BLOCKED`: редактированная формула уже не позволила бы честное сравнение. Явно запрошенное дополнительное свойство допустимо только после подтверждения, что доступный инструмент читает его устойчиво.

## Процесс

### 1. Предпроверка

1. Найдите корень репозитория и проверьте состояние только целевого пути.
2. Если существующий YAML имеет незакоммиченные изменения, сделанные до текущего запуска, не перезаписывайте его: верните `BLOCKED` и назовите конфликтующий путь.
3. Прочитайте `known-exceptions.yaml` и примените подходящий `do_next_time`.

Не расширяйте эту проверку до общего аудита репозитория, если соседние изменения не пересекаются с целевым файлом.

### 2. Чтение Живой Вкладки

1. Используйте доступный Google Sheets connector или другой разрешённый read-only способ.
2. Сначала прочитайте метаданные вкладки, формулы и форматирование.
3. Значения ячеек читайте только в пределах строки заголовков; для заранее установленного списка ячеек формул читайте текст формулы, но не её вычисленный результат.
4. Если инструмент возвращает лишь видимый текст без требуемых метаданных, не выводите формат по изображению и не заполняйте пробелы догадками.

Skill никогда не изменяет Google-таблицу.

### 3. Режим `capture`

1. Соберите `provenance` из фактически прочитанных названий и текущего времени.
2. Соберите `view_contract` только из подтверждённых полей минимального контракта.
3. Если точный небольшой список формульных ячеек нельзя установить из запроса или доступного контекста, верните `BLOCKED`; не сканируйте и не сохраняйте все построчные формулы.
4. Создайте новый YAML либо точечно замените в существующем YAML только `provenance` и `view_contract`; другие верхнеуровневые ключи сохраните без изменений.
5. Повторно прочитайте живую вкладку.
6. Сравните повторное чтение с записанным `view_contract`.

### 4. Режим `compare`

1. Прочитайте существующий YAML.
2. Проверьте схему двух управляемых частей.
3. Повторно прочитайте живую вкладку.
4. Сравните только поля, уже объявленные в `view_contract`.
5. Не добавляйте отсутствующие свойства автоматически.

### 5. Результат

Верните один статус:

- `MATCH` — каждое объявленное поле `view_contract` подтверждено свежим чтением и совпало;
- `DRIFT` — чтение удалось, но есть различия; перечислите только путь поля, ожидаемое и наблюдаемое значение;
- `BLOCKED` — нельзя надёжно выбрать источник, прочитать обязательное поле или безопасно записать целевой YAML.

Для `capture` признак завершения: существует один целевой YAML, строки данных в него не попали, а каждое поле `view_contract` совпало при повторном чтении. Для `compare` признак завершения: возвращён `MATCH` либо точный `DRIFT`.

`MATCH` доказывает совпадение только с источником, явно выбранным в текущем запуске. Названия книги и вкладки в `provenance` описательны и не доказывают, что это тот же физический файл, по которому когда-то создавался снимок.

## Границы

- Не изменяйте Google-таблицу.
- Не применяйте YAML обратно к вкладке и не обещайте восстановление.
- Не создавайте installer, exporter, миграцию, двустороннюю синхронизацию или второй версионируемый артефакт представления. Приватные служебные журналы обратной связи и сбоев к артефакту представления не относятся.
- Не сохраняйте рабочие строки, идентификаторы и URL таблицы.
- Не выводите отдельные предметные статусы и бизнес-правила из текста формул; в контракт входит только сама подтверждённая формула и её ячейка.
- Не расширяйте allowlist свойств «на всякий случай».
- Не коммитьте, не выполняйте push и не создавайте PR: публикация — отдельное поручение.
- Не объявляйте `MATCH`, если после записи не было свежего повторного чтения.

## Опрос После Использования

Задайте опрос один раз после финального `MATCH`, `DRIFT`, `BLOCKED` или явного стопа, не посреди рабочего цикла. Если пользователь уже ответил «пропустить» в этой сессии, не переспрашивайте.

```text
Опрос по навыку:
1. Что в работе этого навыка было полезно?
2. Что стоит доработать в процедуре или формате ответа?
Можно ответить коротко или написать "пропустить".
```

Если пользователь ответил, сохраните санированную карточку в `~/.codex/skill-runs/slepok-oformleniya-google-tablitsy/usage-feedback.jsonl` — лучше через bundled script:

```bash
python3 scripts/log_usage_feedback.py --liked "..." --improve "..." --outcome "..."
```

Script перед записью редактирует приватные пути, контакты и token-like строки и сохраняет в JSONL `redaction_applied` и `redaction_types`. Если запись невозможна из-за sandbox, прав или отсутствия tools, не делайте вид, что лог сохранён: скажите об этом и покажите короткую JSONL-карточку для ручного сохранения. Raw-ответы, контакты, пути и секреты не коммитить.

## Логирование Сбоев

Перед выполнением прочитайте локальный `known-exceptions.yaml` как список уже известных случаев и применяйте подходящее `do_next_time` без нового поиска.

Если пользователь поправил skill, tool/API/browser упал, нарушен режим работы, пришлось искать workaround или skill сделал ложное предположение, запишите приватную карточку в `~/.codex/skill-runs/slepok-oformleniya-google-tablitsy/exception-log.jsonl`.

Пишите факты: что skill хотел сделать, что сделал, где сломался, какая предпосылка была ложной и что сделать в следующий раз. Если поле неизвестно, пишите `unknown`. Raw logs не коммитить.

