# E003: 無効な識別子

## 概要

YAML で指定されたノード名やモジュール名が Python の識別子として無効な場合に発生します。

## エラーメッセージ

```
Error [E003]: 無効な識別子

'my-node' は Python の識別子として使用できません。

Hint:
  'my_node' に変更してください。
```

## 原因

Python の識別子（変数名・関数名・モジュール名）にはルールがあり、以下の文字は使用できません:

- ハイフン (`-`)
- スペース
- 数字で始まる名前
- Python の予約語（`class`, `if`, `for` など）

```yaml
# NG: ハイフンを含む
nodes:
  check-status:    # ← Python の識別子として無効
    description: "ステータスチェック"

# NG: 数字で始まる
nodes:
  1st_check:       # ← Python の識別子として無効
    description: "最初のチェック"
```

## 解決方法

ハイフンをアンダースコアに、その他の無効な文字を修正してください。

```yaml
# OK: アンダースコアを使用
nodes:
  check_status:
    description: "ステータスチェック"

# OK: 数字で始まらない
nodes:
  first_check:
    description: "最初のチェック"
```

### 命名規則

| 要素 | 規則 | 例 |
|------|------|-----|
| ノード名 | `snake_case` | `check_status`, `fetch_data` |
| モジュール名 | `snake_case` | `nodes.my_workflow.check_status` |
| 関数名 | `snake_case` | `check_status` |

## 発生箇所

- `railway sync transition` 実行時

## 関連

- [docs/transition_graph_reference.md](../transition_graph_reference.md) - YAML の nodes セクション
