Obsidian-first graph vault + corpus migration - #11
Merged
Conversation
Wikilink traceability in front-matter (aliases + [[REQ]] links), auto-generated requirement proxy + MOC hub notes via build-index, external resources split into graph nodes vs clickable URL properties. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Flip to proxy->case edges (requirements stay bare GitHub refs, URL derived), drop index normalization, and add Part B data-repair for the Elitea corpus (BOM fix, 169 duplicate-ID reassignment, aliases, enum reconcile). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Part A: _vault.py proxy/MOC generator (proxy->case edges, URL derivation), build-index wiring, docs, skill. Part B: _migrate.py corpus repair (BOM fix, duplicate-ID reassignment, aliases) + migrate-vault.sh, enum reconcile. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…utput) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A5 wrongly treated the existing references/test-case-format.md as missing and overwrote its full field table/body-sections/example. Restore that content and augment it with the Obsidian vault fields (aliases, plain-ref requirements, automation_url/doc_url, don't-hand-edit-generated-notes).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Document the migration mechanics (_migrate.py / migrate-vault.sh: dry-run, BOM fix, duplicate-ID reassignment, aliases, then build) and day-to-day vault usage after the TMS changes; index both from docs/README and the vault reference.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Makes a
tests/tree open as a complete, graph-connected Obsidian vault, and adds a tool to migrate/repair an existing corpus into that shape. Design + plan underdocs/superpowers/.The graph was empty in Obsidian because cases had no
[[wikilinks]]. Rather than wikilink case front-matter (requirements are GitHub issue refs likeOWNER/REPO#N, incompatible with[[…]]), the edge direction is flipped:requirementsstays bare (OQL-safe), and generated requirement proxy notes link back to their covering cases. Obsidian edges are undirected, so this clusters the graph with zero front-matter mangling.Part A — vault generator (generic)
onetest-tms/scripts/_vault.py, run bybuild-index.shafter_index.py, generatesid-less hub notes (invisible to index/OQL/coverage by construction):tests/_meta/requirements/<safe>.md— list[[<ID>]]covering cases + a derived clickable GitHub issue URL (OWNER/REPO#N→.../issues/N)._index.mdMOCs + root MOC for suite navigation.docs/reference/obsidian-vault.md;test-case-format.md+tests/README.md+ skill guidance updated (cases carryaliases: [<ID>], keeprequirementsbare).Part B — corpus repair (
_migrate.py+migrate-vault.sh, dry-run by default)max_seq+1; rename file, rewriteid:/duplicate_of:(quote-tolerant).aliases: [<ID>]insertion..onetest/fields.yml: canonicaltypeallow-list covering the corpus.Testing
python3 onetest-tms/test/test_vault.pyandpython3 onetest-tms/test/test_migrate.py— all pass, output pristine (stdlibunittest, no deps, Python 3.9)._index.py/OQL behavior preserved (no normalization added).Notes / follow-ups
.github/workflows/build-index.ymlis still a stub; wiring it to run + commit is a documented follow-up.id:regex inapply_reassign(low risk for test-case bodies); no-underscore slug fallback;safe_namecould collide for refs differing only by/↔-.🤖 Generated with Claude Code