bug(obsidian): project-scoped export rewrites shared topic hubs from the scoped project's refs only
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 73/100
Research direction
Start in internal/obsidian/exporter.go and trace how addHubRef builds topicObsRefs during a project-scoped export. Read internal/obsidian/hub.go for ShouldCreateTopicHub and inspect the hub generation and write path. Reproduce with observations from two projects sharing a topic prefix; done means exporting one project preserves the other project's links in the shared hub.
Written by the indexing model from the issue text.
Description
Existing Issue Search
- I searched existing issues and will add evidence to a canonical tracker when applicable.
📝 Observed Consequence
A project-scoped Obsidian export rewrites shared topic hub notes so they lose the links to other projects' observations until the next full export.
🔄 Steps to Reproduce
- Store observations in two projects (
alpha,beta) sharing a topic prefix (e.g.topic/arch), at least two per project. - Run a full export (no project filter): the shared
_topics/topic--arch.mdhub links notes from both projects. - Run a project-scoped export for
alphaonly. - Open
_topics/topic--arch.md: it now lists onlyalphanotes;betalinks are gone. - Run a full export again: the hub recovers
betalinks.
✅ Expected Behavior
A project-scoped export must not narrow a shared topic hub. It should leave the existing hub untouched (same guard spirit as the scoped-retirement fix in #1151) or reconcile it without dropping foreign-project references.
❌ Actual Behavior
The scoped run regenerates the hub from the scoped project's references alone and overwrites the file, so other projects' links silently disappear until the next full export. No error is reported.
Operating System
Linux (Ubuntu/Debian)
Release Version (Report Context)
3.5.1
Agent / Client
Other
📋 Relevant Logs
No response
💡 Additional Context
Verified pre-existing on main while reviewing #1151 (2026-10-21): that PR fixed the retirement side (never prune shared hubs on a scoped export) but regeneration still narrows.
Mechanism on main:
internal/obsidian/exporter.go:addHubRefpopulatestopicObsRefsonly from observations that pass the project filter, so a scoped run builds the prefix map from one project's refs.- Topic hub generation then calls
TopicHubMarkdown(prefix, refs)andos.WriteFileon the shared path whenever the scoped count alone satisfiesShouldCreateTopicHub(internal/obsidian/hub.go:19,count >= 2), unconditionally replacing the shared content.
- Dominant language
- Go
- Stars
- 7.1k
- Forks
- 729
- Avg merge
- 8h 48m
- Merged PRs (30d)
- 340
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Gentleman-Programming/engram
-
priority:medium status:needs-review type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
Gentleman-Programming/engram#863 · 1 comment ·
Maintainers usually reply within 1 day
-
feat(ci): prepare dormant required-job queue interlockPossibly taken @dnlrsls claimed this today. Openstatus:approved type:feature
Gentleman-Programming/engram#2031 · 1 assignee ·
Maintainers usually reply within 1 day
-
feat(ci): wire dormant native and legacy proof boundariesPossibly taken @dnlrsls claimed this today. Openstatus:approved type:feature
Gentleman-Programming/engram#2030 · 1 assignee ·
Maintainers usually reply within 1 day
-
feat(ci): add dormant proof release contractPossibly taken @dnlrsls claimed this today. Openstatus:approved type:feature
Gentleman-Programming/engram#2029 · 1 assignee ·
Maintainers usually reply within 1 day
-
feat(ci): add dormant hosted verification controls for legacy retirementPossibly taken @dnlrsls claimed this today. Openstatus:approved type:feature
Gentleman-Programming/engram#2026 · 1 assignee ·
Maintainers usually reply within 1 day
All issues in Gentleman-Programming/engram
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
kind/engineering pulumi/pulumi-terraform Task Workflow Failure
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
pulumi/pulumi-terraform#1261 ·
Maintainers usually reply within 1 day
-
Controllers integration tests fail when port 8080 is in usePossibly taken @noahnut claimed this today. Openarea/cluster-autoscaler kind/bug needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
kubernetes-sigs/cluster-autoscaler#236 · 1 comment ·
Maintainers usually reply within 1 day
-
MCP: `tasks_bulk_update` always fails with "Need at least one field" — the `fields` projection argument is stripped from non-read tools tooPossibly taken @tink-bot claimed this today. Openagent-processed area/api-v2 integration/inbound
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
go-vikunja/vikunja#4235 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
google/osv-scalibr#2503 ·
Maintainers usually reply within 1 day