# Fix Notebook

> ノートブックのエラーを、そのノートブック自体の修正（セル内容・JSONスキーマ）またはソースコードの修正により解決する

- Skill: `majiayu000/fix-notebook` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/fix-notebook`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/fix-notebook/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/fix-notebook

---


# Fix Notebook Errors

This skill handles fixing errors encountered during notebook execution, ranging from Python code bugs to Jupyter JSON schema violations.

## Instructions

1. **Analyze the Failure**:
    * Examine the traceback to determine if the error is in the notebook cell's logic, a JSON schema violation, or the underlying library.

2. **Strategy A: Fix Code Cell (Local)**:
    * If the usage is wrong, imports are missing, or data paths are incorrect, edit the `.ipynb` cells.
    * Modify the `"source"` field of the failing code cell in the notebook JSON.
    * **Unit-Safe Assignment**: When updating `astropy.units` objects, prefer `series.value[:] = new_data` to keep metadata.

3. **Strategy B: Fix JSON Schema**:
    * If `nbconvert` or validators fail with "Additional properties are not allowed ('id' was unexpected)":
    * **Remove Cell IDs**: Delete the `"id"` key from all cells in the JSON.
    * **Normalize nbformat_minor**: Set `nbformat_minor` to `4` (if `nbformat` is 4) to prevent auto-adding IDs.

4. **Strategy C: Fix Library Source Code**:
    * If the bug is in the `gwexpy/` package, trace it to the source file and apply the fix.

5. **Verification**:
    * Re-run the notebook using `jupyter nbconvert --execute` or `test_notebooks` to confirm it passes.

```python
# Utility for Strategy B
import json
def fix_nb_schema(path):
    with open(path, 'r') as f:
        data = json.load(f)
    for cell in data.get('cells', []):
        cell.pop('id', None)
    if data.get('nbformat') == 4 and data.get('nbformat_minor', 0) >= 5:
        data['nbformat_minor'] = 4
    with open(path, 'w') as f:
        json.dump(data, f, indent=1)
```

