UE5 Obsidian Vault — Full Pipeline
Vault location: ~/Documents/Unreal-Engine-Obsidian/
GitHub repo: <your-github-username>/Unreal-Engine-Obsidian
Skill: unreal-obsidian-vault-update
When to use
Adding new tutorial content, architecture docs, or making structural changes to the vault.
Pipeline (5 phases)
Phase 1: Research
- Identify topic gaps — scan existing tags/folders to find what's missing
- Search YouTube for quality tutorials on those topics
- Verify UE5 version relevance (target 5.6/5.7, reject older deprecated content)
- Compile a candidate video list with URLs, titles, channels, durations
Phase 2: Extract
- For each video, try
youtube-transcript-api first for raw transcripts
- Fall back to
web_extract on YouTube URL
- Fall back to
web_search for companion written content
- Save each file to the appropriate folder with frontmatter
Critical pitfall: Subagent write_file writes to sandbox, NOT the real filesystem. Files appear to succeed but don't persist. Fix: Use terminal() for file writes from subagents, or do writes from the main session directly.
Phase 3: Format
For each new folder:
- Add consistent YAML frontmatter to all files:
---
title: "Video Title"
source: "https://www.youtube.com/watch?v=VIDEO_ID"
video_id: "VIDEO_ID"
type: "youtube-summary"
series: "Series Name"
episode: N
tags: [ue5, topic1, topic2]
---
- Add
## Related section with wikilinks:
← Previous: [[filename]]
→ Next: [[filename]]
📚 Series: [[_MOC_FolderName]]
- Create
_MOC_FolderName.md index file linking all files in the folder
Phase 4: Review (3-reviewer gate)
MANDATORY before any push. Three independent reviews:
- Self review — file-by-file sweep checking for duplicates, content quality, format consistency
- Profile review 1 (e.g., Architect) — independent verification of duplicates, content quality, UE5 version compatibility
- Profile review 2 (e.g., Secretary) — wikilink validation, MOC completeness, review doc accuracy
Fix all issues found before proceeding. If any reviewer flags a FAIL, resolve and re-review.
Phase 5: Release
- Update
README.md — ensure the folder tables, file counts, and version links match current vault state
- Update
CHANGELOG.md with new version section at the TOP:## [vX.Y.Z] — YYYY-MM-DD
### Added
- Description of new files/folders
### Fixed
- Description of fixes
- Commit:
git add -A && git commit -m "vX.Y.Z — brief description"
- Pull and push:
git pull origin main --rebase && git push
- Create GitHub release:
gh release create vX.Y.Z --title "vX.Y.Z — Short Title" --notes "## What's New
Human-readable summary of changes.
**Vault total: N files across M folders**"
Version numbering
- Major (X): Major restructure, breaking changes
- Minor (Y): New topic folders or significant new content
- Patch (Z): Fixes, small additions, formatting
Workflow B: Merge external PR + apply errata fixes
When a community contributor submits a PR that also flags issues in existing vault content:
- Review the PR — check
gh pr view <N> --json body,files,additions,deletions,mergeable
- Check for errata — read the errata/alignment file from the PR branch (use
gh api on the fork's branch ref)
- Merge the PR —
gh pr merge <N> --repo <repo> --merge then git pull
- Apply ALL fixes from the errata — do NOT stop after merging. The PR documents issues but does NOT fix them in your files. You must apply each fix yourself.
- Update README.md — add new folders/files to the appropriate tables
- Update CHANGELOG.md — new version entry with both "Added" (PR content) and "Fixed" (errata corrections) sections
- Also update any stale references in prior CHANGELOG entries — e.g., if the errata replaces "INI setup" with "module registration", the v1.3.0 entry that says "INI setup" should be updated too
- Commit, push, and create GitHub release (Phase 5 steps)
Critical: Merging a PR and fixing the issues it flags are TWO SEPARATE STEPS. Never assume the PR fixes its own findings.
Pitfalls
- Always
git pull --rebase before push — remote may have changes from other sessions
- Update CHANGELOG.md BEFORE committing
- Release notes should be human-readable — explain what's useful, not commit messages
- Credential helper:
gh auth git-credential is global default. No keychain prompts.
- Subagent file writes — see Phase 2 pitfall above
stat -f '%z' fails with # in filenames — use os.path.getsize() in Python
- Forgetting README + CHANGELOG after content changes — any merge, fix, or content addition that changes the vault structure MUST update both. The user will call it out. Make it automatic: after every
git pull that adds folders, immediately update README tables + CHANGELOG entry before committing.
- GitHub Release is part of the workflow — user preference is versioned releases (CHANGELOG + GitHub Release). Don't skip the
gh release create step.
- Verify the vault path before trusting this skill's hardcoded value. The REAL git clone is
~/Documents/Unreal-Engine-Obsidian (has .git, 250+ notes, primary working copy). ~/Unreal-Engine-Obsidian is an EMPTY shell (.obsidian/ only, no .git) — editing there writes into a void. Always cd/stat the actual path first; do not assume the documented path is right, and update this skill if it drifts again.
- Obsidian app points at the wrong (empty) vault? Repoint, don't symlink. If
~/Unreal-Engine-Obsidian opens empty in Obsidian while the real clone is at ~/Documents/Unreal-Engine-Obsidian, fix the app's vault registration, not the filesystem: back up then edit ~/Library/Application Support/obsidian/obsidian.json, finding the vault entry whose path is the empty folder and rewriting path to the real one. Both vaults are usually already registered (different IDs) — you only need to repoint one. Non-destructive; the empty folder becomes orphaned and safe to delete. Verify with python3 -c "import json;json.load(open(...))['vaults']" after editing.
- Never let a release task run from a duplicate/orphan chain. When driving the pipeline through Kanban, a stray duplicate task (e.g. from a re-run create) can reach a
release: step and push a premature tag/commit before the real chain finishes. Gate every release task behind its true parent, and before running it confirm no orphan already pushed the version tag (git tag -l vX.Y.Z, gh release list). If a premature release exists, delete the tag + GitHub release and reconcile before the real release runs.
1---2name: unreal-obsidian-vault-update3description: Update and release the UE5 Obsidian vault (Unreal-Engine-Obsidian) — research, extract, format, review, changelog, version tag, GitHub release.4---5
6# UE5 Obsidian Vault — Full Pipeline
7
8Vault location: `~/Documents/Unreal-Engine-Obsidian/`
9GitHub repo: `<your-github-username>/Unreal-Engine-Obsidian`
10Skill: `unreal-obsidian-vault-update`
11
12## When to use
13
14Adding new tutorial content, architecture docs, or making structural changes to the vault.
15
16## Pipeline (5 phases)
17
18### Phase 1: Research
19
201. Identify topic gaps — scan existing tags/folders to find what's missing
212. Search YouTube for quality tutorials on those topics
223. Verify UE5 version relevance (target 5.6/5.7, reject older deprecated content)
234. Compile a candidate video list with URLs, titles, channels, durations
24
25### Phase 2: Extract
26
271. For each video, try `youtube-transcript-api` first for raw transcripts
282. Fall back to `web_extract` on YouTube URL
293. Fall back to `web_search` for companion written content
304. Save each file to the appropriate folder with frontmatter
31
32**Critical pitfall:** Subagent `write_file` writes to sandbox, NOT the real filesystem. Files appear to succeed but don't persist. **Fix:** Use `terminal()` for file writes from subagents, or do writes from the main session directly.
33
34### Phase 3: Format
35
36For each new folder:
371. Add consistent YAML frontmatter to all files:
38 ```yaml
39 ---
40 title: "Video Title"
41 source: "https://www.youtube.com/watch?v=VIDEO_ID"
42 video_id: "VIDEO_ID"
43 type: "youtube-summary"
44 series: "Series Name"
45 episode: N
46 tags: [ue5, topic1, topic2]
47 ---
48 ```
492. Add `## Related` section with wikilinks:
50 - `← Previous: [[filename]]`
51 - `→ Next: [[filename]]`
52 - `📚 Series: [[_MOC_FolderName]]`
533. Create `_MOC_FolderName.md` index file linking all files in the folder
54
55### Phase 4: Review (3-reviewer gate)
56
57**MANDATORY before any push.** Three independent reviews:
58
591. **Self review** — file-by-file sweep checking for duplicates, content quality, format consistency
602. **Profile review 1** (e.g., Architect) — independent verification of duplicates, content quality, UE5 version compatibility
613. **Profile review 2** (e.g., Secretary) — wikilink validation, MOC completeness, review doc accuracy
62
63Fix all issues found before proceeding. If any reviewer flags a FAIL, resolve and re-review.
64
65### Phase 5: Release
66
671. Update `README.md` — ensure the folder tables, file counts, and version links match current vault state
682. Update `CHANGELOG.md` with new version section at the TOP:
69 ```markdown
70 ## [vX.Y.Z] — YYYY-MM-DD
71
72 ### Added
73 - Description of new files/folders
74
75 ### Fixed
76 - Description of fixes
77 ```
782. Commit: `git add -A && git commit -m "vX.Y.Z — brief description"`
793. Pull and push: `git pull origin main --rebase && git push`
804. Create GitHub release:
81 ```bash
82 gh release create vX.Y.Z --title "vX.Y.Z — Short Title" --notes "## What's New
83
84 Human-readable summary of changes.
85
86 **Vault total: N files across M folders**"
87 ```
88
89## Version numbering
90
91- **Major (X)**: Major restructure, breaking changes
92- **Minor (Y)**: New topic folders or significant new content
93- **Patch (Z)**: Fixes, small additions, formatting
94
95## Workflow B: Merge external PR + apply errata fixes
96
97When a community contributor submits a PR that also flags issues in existing vault content:
98
991. **Review the PR** — check `gh pr view <N> --json body,files,additions,deletions,mergeable`
1002. **Check for errata** — read the errata/alignment file from the PR branch (use `gh api` on the fork's branch ref)
1013. **Merge the PR** — `gh pr merge <N> --repo <repo> --merge` then `git pull`
1024. **Apply ALL fixes from the errata** — do NOT stop after merging. The PR documents issues but does NOT fix them in your files. You must apply each fix yourself.
1035. **Update README.md** — add new folders/files to the appropriate tables
1046. **Update CHANGELOG.md** — new version entry with both "Added" (PR content) and "Fixed" (errata corrections) sections
1057. **Also update any stale references in prior CHANGELOG entries** — e.g., if the errata replaces "INI setup" with "module registration", the v1.3.0 entry that says "INI setup" should be updated too
1068. **Commit, push, and create GitHub release** (Phase 5 steps)
107
108**Critical:** Merging a PR and fixing the issues it flags are TWO SEPARATE STEPS. Never assume the PR fixes its own findings.
109
110## Pitfalls
111
112- **Always `git pull --rebase` before push** — remote may have changes from other sessions
113- **Update CHANGELOG.md BEFORE committing**
114- **Release notes should be human-readable** — explain what's useful, not commit messages
115- **Credential helper**: `gh auth git-credential` is global default. No keychain prompts.
116- **Subagent file writes** — see Phase 2 pitfall above
117- **`stat -f '%z'` fails with `#` in filenames** — use `os.path.getsize()` in Python
118- **Forgetting README + CHANGELOG after content changes** — any merge, fix, or content addition that changes the vault structure MUST update both. The user will call it out. Make it automatic: after every `git pull` that adds folders, immediately update README tables + CHANGELOG entry before committing.
119- **GitHub Release is part of the workflow** — user preference is versioned releases (CHANGELOG + GitHub Release). Don't skip the `gh release create` step.
120- **Verify the vault path before trusting this skill's hardcoded value.** The REAL git clone is `~/Documents/Unreal-Engine-Obsidian` (has `.git`, 250+ notes, primary working copy). `~/Unreal-Engine-Obsidian` is an EMPTY shell (`.obsidian/` only, no `.git`) — editing there writes into a void. Always `cd`/stat the actual path first; do not assume the documented path is right, and update this skill if it drifts again.
121- **Obsidian app points at the wrong (empty) vault? Repoint, don't symlink.** If `~/Unreal-Engine-Obsidian` opens empty in Obsidian while the real clone is at `~/Documents/Unreal-Engine-Obsidian`, fix the app's vault registration, not the filesystem: back up then edit `~/Library/Application Support/obsidian/obsidian.json`, finding the vault entry whose `path` is the empty folder and rewriting `path` to the real one. Both vaults are usually already registered (different IDs) — you only need to repoint one. Non-destructive; the empty folder becomes orphaned and safe to delete. Verify with `python3 -c "import json;json.load(open(...))['vaults']"` after editing.
122- **Never let a release task run from a duplicate/orphan chain.** When driving the pipeline through Kanban, a stray duplicate task (e.g. from a re-run create) can reach a `release:` step and push a premature tag/commit before the real chain finishes. Gate every release task behind its true parent, and before running it confirm no orphan already pushed the version tag (`git tag -l vX.Y.Z`, `gh release list`). If a premature release exists, delete the tag + GitHub release and reconcile before the real release runs.