sync-debug — скилл для Claude Code: диагностика синхронизаций
Скилл разбирает сбои синхронизации по логам и коду, а затем предлагает исправление и проверку. Пригодится, когда запуск завершился ошибкой или вернул неверные данные.
npx skills add makenotion/notion-cookbook --skill sync-debug -a claude-codeЧто делает sync-debug
Скилл проверяет состояние синхронизаций и последние запуски через ntn workers, получает логи и сопоставляет ошибки с кодом в src/index.ts и импортируемых модулях. Он помогает разбирать ошибки авторизации и лимитов запросов, проблемы состояния и схемы, пустые результаты, тайм-ауты и зацикливание.
После диагностики скилл может внести правку в код, предложить проверить типы командой npm run check, а затем проверить синхронизацию через preview или повторный запуск. Для работы нужны команда ntn и доступ к проекту с кодом синхронизации. Сброс состояния запускает полную повторную загрузку данных, поэтому перед ним проверьте, что это допустимо для проекта.
Какие задачи решает
- найти причину сбоя по логам запуска
- сопоставить ошибку API с кодом синхронизации
- разобраться, почему синхронизация возвращает пустой результат
- проверить, почему курсор не продвигается
- подготовить исправление и проверить типы
Примеры запросов агенту
- Разбери последний неудачный запуск синхронизации и найди причину ошибки.
- Проверь, почему синхронизация возвращает пустые данные, и сопоставь логи с кодом.
- Найди причину зацикливания синхронизации и предложи исправление с проверкой.
Как установить sync-debug
1Через Skills CLI (Vercel)
npx skills add makenotion/notion-cookbook --skill sync-debug -a claude-code2Вручную: положить файлы
~/.claude/skills/sync-debug/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/sync-debug/
1Через Skills CLI (Vercel)
npx skills add makenotion/notion-cookbook --skill sync-debug -a codex2Вручную: положить файлы
.agents/skills/sync-debug/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add makenotion/notion-cookbook --skill sync-debug -a cursor2Вручную: положить файлы
.cursor/skills/sync-debug/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install makenotion/notion-cookbook sync-debug2Вручную: положить файлы
.github/skills/sync-debug/SKILL.md1Через Skills CLI (Vercel)
npx skills add makenotion/notion-cookbook --skill sync-debug -a gemini-cli2Командой платформы
gemini skills install https://github.com/makenotion/notion-cookbook --path workers/agents/skills/sync-debugВручную: положить файлы
.devin/skills/sync-debug/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add makenotion/notion-cookbook --skill sync-debug -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о sync-debug
Как установить sync-debug в Claude Code?
Выполните npx skills add makenotion/notion-cookbook --skill sync-debug -a claude-code. Файл скилла находится по пути ~/.claude/skills/sync-debug/SKILL.md.
Что делает sync-debug?
Он получает состояние запусков и логи, сопоставляет ошибки с кодом синхронизации и помогает подготовить исправление и проверить его.
Что нужно для работы sync-debug?
Нужны команда ntn и доступ к коду синхронизации, включая src/index.ts и используемые модули.
Исходный текст
SKILL.md · MIT
---
name: sync-debug
description: Diagnose a failing or misbehaving sync — fetch run logs, identify errors, cross-reference with code, and suggest fixes
user-invocable: true
disable-model-invocation: true
allowed-tools: ["Read", "Bash", "Glob", "Grep", "Edit", "Write"]
---
## Instructions
Help the user figure out why their sync is failing or producing wrong results. Work through the steps below systematically.
### Step 1: Get Current State
Run these commands to understand the situation:
```shell
ntn workers sync status
```
Note which syncs are listed, their status, last run time, and next scheduled run. Look for syncs that are stuck, failing, or haven't run recently.
### Step 2: Fetch Recent Runs
```shell
ntn workers runs list
```
Look for runs with non-zero exit codes (shown in red in table output). Note the run IDs for failed runs.
### Step 3: Get Logs
For the most recent run (any capability):
```shell
ntn workers runs list --plain | head -n1 | cut -f1 | xargs -I{} ntn workers runs logs {}
```
For the most recent run of a specific sync:
```shell
ntn workers runs list --plain | grep <syncKey> | head -n1 | cut -f1 | xargs -I{} ntn workers runs logs {}
```
Read the full log output. Look for error messages, stack traces, and any `console.log` output from the sync code.
### Step 4: Read the Sync Code
Read `src/index.ts` (and any imported modules) to understand the sync's logic. Cross-reference the error from the logs with the code.
### Step 5: Diagnose
Common failure patterns and their fixes:
**API Authentication Errors (401/403)**
- Check if OAuth is configured: `ntn workers oauth token <oauthKey>`
- Check environment variables: `ntn workers env list`
- If env vars are missing remotely: `ntn workers env push`
- If OAuth token expired: `ntn workers oauth start <key>` to re-authenticate
**Rate Limiting (429)**
- Reduce batch size in the sync code
- Add delays between API calls if needed
- Check if the API has documented rate limits
**Timeout / Long Execution**
- The execute function is taking too long per call
- Reduce batch size (fewer records per page)
- Simplify per-record processing (defer heavy transforms)
**Cursor / State Errors**
- TypeError on state access: probably a first-run issue (state is undefined)
- State shape changed after a code update: the persisted state from the previous run has the old shape
- Fix: `ntn workers sync state reset <key>` to clear state and re-backfill from scratch
**Schema Mismatch**
- Properties in `changes` don't match the `schema.properties` definition
- Check that every key in the `properties` object of each change matches a key in the schema
- Check that `Builder.title()` is used for `Schema.title()` properties, `Builder.richText()` for `Schema.richText()`, etc.
**Infinite Loop (sync never completes)**
- `hasMore` is always `true` — the cursor isn't advancing
- Check that `nextState` changes between iterations
- Check the termination condition: is it reachable?
**Empty Results**
- API returning no data: test the API call directly (curl or local exec)
- Wrong endpoint or query parameters
- Auth working but insufficient permissions/scopes
**Network / Transient Errors**
- Single occurrence: may be transient — check if subsequent runs succeeded
- Repeated: check the API endpoint URL, DNS, connectivity
- Force a retry: `ntn workers sync trigger <key>`
### Step 6: Fix and Verify
After identifying the issue:
1. Apply the fix to the code
2. Run `npm run check` to verify types
3. If the state shape changed, warn the user they may need `ntn workers sync state reset <key>` (this triggers a full re-backfill)
4. Deploy and preview to verify: suggest `/sync-preview` or run `ntn workers deploy && ntn workers sync trigger <key> --preview`
5. When the fix is verified, `ntn workers sync trigger <key>` to resume
© makenotion · MIT · makenotion/notion-cookbook