← ClaudeAtlas

project-card-repairlisted

Repair broken card links in Heptabase project + project/progress cards — the dead plain-text `[[card:UUID]]` literals left by a `hb` bridge append (remote cluster) or a bare CLI append, which the heptabase CLI never renders into a real, clickable card-mention. Seals three header/timeline shapes back into live mentions: a log/progress card's `專案:[[card:…]]` back-ref to its project, a project card's `📎 date [[card:…]]` timeline line to a log, and a continuation child's `母卡:[[card:…]]` back-ref to its entry. Given card id(s) it repairs just those; given nothing it sweeps every project + progress card. Use when the user says 修卡片 link / 卡片連結斷了 / log 卡指回 project 斷了 / timeline 連結壞掉 / repair/seal project card links / 專案回指 變成純文字 / 掃全部修卡片連結. Mac-only (local heptabase CLI). Sentinels (▶續卡 chain edges) are left to project-card-log/repair_chain.py --seal unless --include-sentinel is passed.
SungFeng-Huang/research-cards · ★ 3 · AI & Automation · score 77
Install: claude install-skill SungFeng-Huang/research-cards
# Project Card Repair — seal text-form card links into real mentions ## What breaks, and why A card link should be a clickable **card-mention node**. But an append that did NOT go through the local heptabase CLI's renderer writes it as the literal text `[[card:<uuid>]]` — dead text in the UI, invisible to PM-level parsers. This happens on the **`hb` bridge** (remote cluster over SSH, append-only) and on bare CLI/Mac spills. Three shapes carry it: | shape | where | direction | |---|---|---| | `專案:[[card:<project>]] 環境:…` | log/progress card header | log → project | | `📎 <date> [[card:<log>]] <summary>` | project card timeline line | project → log | | `…母卡:[[card:<entry>]]。…` | continuation child header | chain child → entry | Obsidian `.md` cards use `[[wikilink]]` and never hit this — **heptabase-only**. ## Usage ```bash cd ${CLAUDE_PLUGIN_ROOT:-$HOME/.claude/skills/research-cards}/skills/project-card-repair python3 repair.py --card <id> [--card <id> …] # pinpoint: repair only these python3 repair.py # sweep: every project + progress card python3 repair.py --dry-run # preview; save nothing python3 repair.py --include-sentinel # also seal ▶續卡 (see below) ``` Output is one JSON object: `mode`, `scanned`, `cards_changed`, and a lean `results` list (only cards that sealed something or errored, each with `by_kind`: how many loglink / backref / sentinel paragraphs were sealed). Idempotent — a second run reports