---
phase: 03-claude-md-hub-and-spoke-network-audit-create-missing-spokes-update-root-hub
plan: 04
type: execute
wave: 2
depends_on: [03-01, 03-02, 03-03]
files_modified:
  - CLAUDE.md
autonomous: true
requirements: [HUB-UPDATE, NETWORK-VERIFY]

must_haves:
  truths:
    - "Root CLAUDE.md hub table lists all ~23 CLAUDE.md files (13 existing + 10 new)"
    - "Every CLAUDE.md in the project appears in the hub table"
    - "Hub table maintains existing ordering: root, crates group, python group (alphabetical), deploy group, scripts group, src"
    - "No orphan CLAUDE.md files exist (in project but not in hub table)"
  artifacts:
    - path: "CLAUDE.md"
      provides: "Updated hub with complete spoke table"
      contains: "sidecar/CLAUDE.md"
  key_links:
    - from: "CLAUDE.md"
      to: "all spoke CLAUDE.md files"
      via: "Hub-and-Spoke table"
      pattern: "CLAUDE\\.md Network"
---

<objective>
Update the root CLAUDE.md hub-and-spoke table to include all 10 newly created spoke files, and verify the complete network has no orphans.

Purpose: The hub table is the navigation index for AI agents. Without updating it, the new spokes are invisible to agents that start from the root. This is the final step that makes the entire network complete and discoverable.
Output: Updated root CLAUDE.md with ~23-entry hub table.
</objective>

<execution_context>
@$HOME/.claude/get-shit-done/workflows/execute-plan.md
@$HOME/.claude/get-shit-done/templates/summary.md
</execution_context>

<context>
@.planning/PROJECT.md
@.planning/ROADMAP.md
@.planning/STATE.md
@.planning/phases/03-claude-md-hub-and-spoke-network-audit-create-missing-spokes-update-root-hub/03-RESEARCH.md

@CLAUDE.md
</context>

<tasks>

<task type="auto">
  <name>Task 1: Update root CLAUDE.md hub table with all new spokes</name>
  <files>CLAUDE.md</files>
  <read_first>
    CLAUDE.md
    src/CLAUDE.md
    python/opendeviationbar/sidecar/CLAUDE.md
    python/opendeviationbar/kintsugi/CLAUDE.md
    python/opendeviationbar/checkpoint/CLAUDE.md
    python/opendeviationbar/validation/CLAUDE.md
    python/opendeviationbar/processors/CLAUDE.md
    python/opendeviationbar/compat/CLAUDE.md
    python/opendeviationbar/notify/CLAUDE.md
    python/opendeviationbar/ratelimit/CLAUDE.md
    scripts/heartbeat/CLAUDE.md
    scripts/heartbeat/checks/CLAUDE.md
  </read_first>
  <action>
    Update the `## CLAUDE.md Network (Hub-and-Spoke)` table in the root CLAUDE.md (currently lines 284-303).

    Add 10 new rows to the existing 13-row table, maintaining the grouping order:
    1. `/` (root -- existing)
    2. `/crates/` group (existing 2 rows)
    3. `/python/opendeviationbar/` group -- insert new spokes alphabetically among existing:
       - `/python/opendeviationbar/` (existing)
       - `/python/opendeviationbar/checkpoint/` (NEW)
       - `/python/opendeviationbar/clickhouse/` (existing)
       - `/python/opendeviationbar/compat/` (NEW)
       - `/python/opendeviationbar/config/` (existing)
       - `/python/opendeviationbar/kintsugi/` (NEW)
       - `/python/opendeviationbar/notify/` (NEW)
       - `/python/opendeviationbar/orchestration/` (existing)
       - `/python/opendeviationbar/plugins/` (existing)
       - `/python/opendeviationbar/processors/` (NEW)
       - `/python/opendeviationbar/ratelimit/` (NEW)
       - `/python/opendeviationbar/sidecar/` (NEW)
       - `/python/opendeviationbar/storage/` (existing)
       - `/python/opendeviationbar/validation/` (NEW)
       - `/python/opendeviationbar/validation/day_mode/` (existing)
    4. `/deploy/` group (existing)
    5. `/scripts/` group -- insert new spokes:
       - `/scripts/` (existing)
       - `/scripts/heartbeat/` (NEW)
       - `/scripts/heartbeat/checks/` (NEW)
       - `/scripts/systemd/` (existing)
    6. `/src/` (NEW -- after scripts group)

    For each new row, read the spoke's CLAUDE.md first line/description to get the accurate SSoT summary.

    Format each row as:
    ```
    | `/directory/` | [spoke/CLAUDE.md](/path/to/CLAUDE.md) | SSoT description |
    ```

    ONLY modify the hub table section. Do NOT change any other part of the root CLAUDE.md.

  </action>
  <verify>
    <automated>grep -c 'CLAUDE.md' CLAUDE.md | head -1</automated>
  </verify>
  <acceptance_criteria>
    - Hub table contains rows for all 10 new spokes: src, sidecar, kintsugi, checkpoint, validation, processors, compat, notify, ratelimit, heartbeat, heartbeat/checks
    - Hub table maintains alphabetical ordering within each group
    - Existing 13 rows are preserved (not removed or reworded)
    - No other sections of root CLAUDE.md are modified
    - Total hub table rows: ~23 (13 existing + 10 new)
  </acceptance_criteria>
  <done>Root CLAUDE.md hub table updated from 13 to ~23 entries, all new spokes discoverable, zero orphan CLAUDE.md files in the project.</done>
</task>

<task type="auto">
  <name>Task 2: Verify complete network integrity</name>
  <files></files>
  <read_first>
    CLAUDE.md
  </read_first>
  <action>
    Run verification commands to confirm the entire CLAUDE.md network is complete and consistent:

    1. Find all CLAUDE.md files in the project (excluding .claude/, target/, .git/, worktrees)
    2. Count entries in the root hub table
    3. Verify every CLAUDE.md file appears in the hub table
    4. Verify every CLAUDE.md (except root) has a `**Parent**:` header
    5. Verify every Parent link points to an existing file
    6. Verify day_mode/CLAUDE.md parent points to validation/CLAUDE.md (not grandparent)

    If any check fails, fix the issue immediately.

    Print a summary table showing: total CLAUDE.md files found, total hub table entries, orphan count (should be 0), broken parent links (should be 0).

  </action>
  <verify>
    <automated>find . -name "CLAUDE.md" -not -path "*/.claude/*" -not -path "*/target/*" -not -path "*/.git/*" -not -path "*worktrees*" | wc -l | tr -d ' '</automated>
  </verify>
  <acceptance_criteria>
    - Total CLAUDE.md count is 23 (13 existing + 10 new)
    - Every CLAUDE.md appears in root hub table (0 orphans)
    - Every non-root CLAUDE.md has `**Parent**:` header
    - validation/day_mode/CLAUDE.md Parent references validation/CLAUDE.md
    - No broken parent links
  </acceptance_criteria>
  <done>Complete CLAUDE.md network verified: 23 files, 0 orphans, 0 broken links, bidirectional navigation working.</done>
</task>

</tasks>

<verification>
Complete network integrity:
1. `find . -name "CLAUDE.md" -not -path "*/.claude/*" -not -path "*/target/*" -not -path "*/.git/*" | wc -l` = 23
2. Root hub table row count matches file count
3. Zero orphan CLAUDE.md files
4. All parent links resolve to existing files
</verification>

<success_criteria>
Root CLAUDE.md hub table expanded from 13 to ~23 entries. Full network integrity verified: every spoke in hub table, every spoke has valid Parent link, no orphans, bidirectional navigation complete.
</success_criteria>

<output>
After completion, create `.planning/phases/03-claude-md-hub-and-spoke-network-audit-create-missing-spokes-update-root-hub/03-04-SUMMARY.md`
</output>
