Версионирование представления Google Sheets
Запуск Навыка
При явном вызове или однозначном смысловом совпадении применяйте навык сразу. Перед первым шагом покажите ровно одну короткую контекстную строку (не более 30 слов) и продолжайте работу в том же ответе, не ожидая реакции:
Применяю «Версионирование представления Google Sheets»: <кратко назовите конкретную дополнительную процедуру или проверяемый результат для текущего запроса>; продолжаю без ожидания.
Не включайте в строку author_github, внутреннее имя папки или пересказ всего запроса. Не спрашивайте, применять ли навык.
Не завершайте первый ответ уведомлением или планом. Сразу самостоятельно проверьте доступный контекст Google Sheets, коннекторы или браузер и read-only состояние репозитория, не читая строки рабочих данных. Если целевую таблицу и вкладку нельзя однозначно определить, в том же ответе задайте один ближайший вопрос о ссылке, названии или идентификаторе вкладки; к пути YAML переходите только после определения источника.
Если одновременно подходят совместимые навыки, выберите минимальный набор и покажите одну общую строку. Если подходы ведут к несовместимым результатам и запрос не позволяет выбрать, спросите только о желаемом результате, не о разрешении применить навык.
Запуск навыка не расширяет полномочия. Выполните всю безопасную и уже разрешённую часть; запросите подтверждение только непосредственно перед ещё не разрешённым внешним или изменяющим действием. Не запрашивайте повторно уже данное разрешение и не дублируйте системное окно подтверждения.
Назначение
Skill переносит в репозиторий не содержимое Google Sheets, а узкий и проверяемый контракт её представления. Он нужен для двух операций:
- создать или обновить один YAML по свежему чтению существующей вкладки;
- сверить уже объявленные в YAML свойства с той же живой вкладкой.
Это односторонний снимок и аудит. Skill не восстанавливает вкладку из YAML, не синхронизирует две стороны и не превращает YAML в новый источник бизнес-данных.
Естественные Входы
- «Зафиксируй формат этой вкладки Google Sheets в репозитории».
- «Обнови YAML-шаблон по живой вкладке, данные не копируй».
- «Сверь сохранённое представление с Google Sheets».
- «Проверь, не уплыло ли оформление вкладки относительно репозитория».
Обязательные Входы
До чтения установите из запроса или доступного контекста:
- конкретную Google-таблицу и вкладку;
- режим:
captureилиcompare; - точный путь к одному целевому YAML в репозитории.
- для
capture— точный небольшой список ячеек формул представления; допустим явно пустой список, если таких формул нет.
Не просите пользователя пересказывать то, что можно безопасно прочитать доступным коннектором, API, браузером или файлами. Если таблица, вкладка либо путь остаются неоднозначными после самостоятельной проверки, запросите только одно ближайшее уточнение, меняющее действие.
Контракт Артефакта
Целевой YAML содержит ровно две управляемые skill части:
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. Предпроверка
- Найдите корень репозитория и проверьте состояние только целевого пути.
- Если существующий YAML имеет незакоммиченные изменения, сделанные до текущего запуска, не перезаписывайте его: верните
BLOCKEDи назовите конфликтующий путь. - Прочитайте
known-exceptions.yamlи примените подходящийdo_next_time.
Не расширяйте эту проверку до общего аудита репозитория, если соседние изменения не пересекаются с целевым файлом.
2. Чтение Живой Вкладки
- Используйте доступный Google Sheets connector или другой разрешённый read-only способ.
- Сначала прочитайте метаданные вкладки, формулы и форматирование.
- Значения ячеек читайте только в пределах строки заголовков; для заранее установленного списка ячеек формул читайте текст формулы, но не её вычисленный результат.
- Если инструмент возвращает лишь видимый текст без требуемых метаданных, не выводите формат по изображению и не заполняйте пробелы догадками.
Skill никогда не изменяет Google-таблицу.
3. Режим capture
- Соберите
provenanceиз фактически прочитанных названий и текущего времени. - Соберите
view_contractтолько из подтверждённых полей минимального контракта. - Если точный небольшой список формульных ячеек нельзя установить из запроса или доступного контекста, верните
BLOCKED; не сканируйте и не сохраняйте все построчные формулы. - Создайте новый YAML либо точечно замените в существующем YAML только
provenanceиview_contract; другие верхнеуровневые ключи сохраните без изменений. - Повторно прочитайте живую вкладку.
- Сравните повторное чтение с записанным
view_contract.
4. Режим compare
- Прочитайте существующий YAML.
- Проверьте схему двух управляемых частей.
- Повторно прочитайте живую вкладку.
- Сравните только поля, уже объявленные в
view_contract. - Не добавляйте отсутствующие свойства автоматически.
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 или явного стопа, не посреди рабочего цикла. Если пользователь уже ответил «пропустить» в этой сессии, не переспрашивайте.
Опрос по навыку:
1. Что в работе этого навыка было полезно?
2. Что стоит доработать в процедуре или формате ответа?
Можно ответить коротко или написать "пропустить".
Если пользователь ответил, сохраните санированную карточку в ~/.codex/skill-runs/slepok-oformleniya-google-tablitsy/usage-feedback.jsonl — лучше через bundled script:
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 не коммитить.