Dashboard Data Sources

Source-of-truth for every placeholder, query, chart spec, and Bases panel on the Dashboard. If you fork a chart spec under Wiki/Charts/, also update this doc. If a Bases panel breaks because the schema changes, swap it for the documented Dataview fallback below.

Plugin dependencies

PluginRequired forInstall
Bases (built-in, Obsidian 2025+)Wiki/Bases/*.base panels and the Dashboard’s three Bases calloutsShips with Obsidian; nothing to install.
Dataview (community)Recent edits panel, every fallback for the Bases panels, ad-hoc TABLE / LIST queriesCommunity plugin Browse “Dataview” Install Enable.
Charts (community, by Johannes Theiner)Every chart fenced block on the DashboardCommunity plugin Browse “Charts” Install Enable.
Excalidraw (community)Wiki/Architecture Canvas.excalidraw (still a stub)Community plugin Browse “Excalidraw” Install Enable.
Mermaid (built-in)pipeline-flow and system-c4 diagramsBuilt into Obsidian. Nothing to install.

Refresh cadence per panel

PanelCadenceMechanism
KPI counts (NOTE_COUNT, ADR_COUNT, BUG_COUNT, ORPHAN_COUNT, LAST_UPDATED)Manual on every dashboard edit; live where the plugin allowsMost rendered as static text from the values in the table below. Dataview can render the count live where noted.
Pipeline mermaidManual when Wiki/Mermaid/pipeline-flow.md changesInlined into Dashboard from the canonical mermaid source.
Coverage chartsManual when underlying source notes changeCharts plugin renders YAML inside ```chart fence; spec stored in Wiki/Charts/*.json for editability.
Recent editsLive (every render)Dataview query against Wiki/ notes, sorted by updated.
ADR / Verified bugs / All notes BasesLive (every render)Bases query, with documented Dataview fallback below.
Compliance snapshotManualStatic counts plus callout-type heuristic (see “Compliance snapshot” below).
Today’s commitsManual on dashboard editgit log --since="<today> 00:00" --oneline on master in the repo.

Verified counts as of 2026-05-02

These are the counts that were true when this dashboard was built. A future reader can use them as a baseline and re-run the source command in the right column to see drift.

PlaceholderValue (2026-05-02)How to re-derive
NOTE_COUNT~85 catalogued in Wiki/Index.md (true file count requires find content/ -name "*.md" | wc -l — the data agent’s environment had no shell, so this is the count from Index.md plus the meta notes Index, Dashboard, Dashboard Layout Spec, Dashboard Data Sources, Wiki Conventions, Vault Style Guide, Lint Checklist, Memory Rules, Maps of Content ~93. Run the find for the authoritative number.)find content/ -name "*.md" | wc -l
ADR_COUNT9find ./docs/adr -name "*.md" | grep -v README | wc -l (ADRs 0001-0009 enumerated in docs/adr/README.md)
BUG_COUNT6 verified bugs in Wiki/Known Issues.md (P0 reklamspärr, P0 Article 14 trigger, P0 random validation layers, P1 false-positive name validation, P1 Playwright concurrency, P2 pg/ioredis, P2 no circuit breaker — that’s 7 if you split the two P2s, 6 if you collapse “P2 still using legacy clients” with “P2 no circuit breaker” as one tech-debt item)grep -rE '^> \[!warning\]|^> \[!danger\]' content/ | grep -iE 'bug|broken|false claim|hardcoded' | wc -l
ORPHAN_COUNTUnknown — requires walking every Wiki/*.md and checking inbound [[wikilink]] count. The vault designer agent’s report (if it exists) supplies this.Dataview: dv.pages('"Wiki"').where(p => dv.pages('"Wiki"').file.outlinks.flat().filter(l => l.path === p.file.path).length === 0)
LAST_UPDATED2026-05-02 (this Dashboard build)grep -rh '^updated:' content/ | sort -u | tail -1
TEST_FILES27Documented in Test Strategy line 8. Re-derive: find . -name "*.test.ts" | wc -l
TEST_LINES6538Documented in Test Strategy line 8. Re-derive: find . -name "*.test.ts" -exec wc -l {} + | tail -1
COMMITS_TODAYUnknown without shell access; placeholder 0git -C . log --since="2026-05-02 00:00" --oneline | wc -l
Coverage by categorySee Wiki/Charts/coverage-by-category.jsonCount bullets per H2 in Wiki/Index.md
OPT_OUT_HASH_COUNTUnknown without DB querypsql -h localhost -p 5433 -U user -d enrichnodedb -c 'SELECT COUNT(*) FROM "OptOut_Hashes"'
ROPA_TODAYUnknown without DB querypsql ... -c "SELECT COUNT(*) FROM \"RoPA_Log\" WHERE created_at >= CURRENT_DATE"
ART14_PENDINGUnknown without DB / queue introspectionBullMQ: count waiting jobs in Art14_Job queue
REKLAMSPARR_7DUnknown without DB querypsql ... -c "SELECT COUNT(*) FROM \"RoPA_Log\" WHERE action='SKIP' AND reason LIKE '%reklamspärr%' AND created_at > NOW() - INTERVAL '7 days'"

Bases vs Dataview decisions

The Bases plugin is built-in and authoritative for filterable tabular views. It is also young (released 2025) and the YAML schema has shifted between point releases. For every Bases panel the Dashboard renders, this doc commits a Dataview equivalent so the dashboard never goes blank.

Panel: All ADRs

  • Bases file: Wiki/Bases/adrs.base
  • Dashboard callout: “All ADRs”
  • Dataview fallback (drop into a dataview fence inside the same callout):
TABLE WITHOUT ID
  file.link AS "ADR",
  status,
  date,
  default(decision_title, file.name) AS "Decision",
  file.mtime AS "Modified"
FROM "Wiki"
WHERE contains(file.tags, "#adr") OR startswith(file.name, "ADR-")
SORT file.name DESC

Panel: Verified bugs across the vault

  • Bases file: Wiki/Bases/verified-bugs.base
  • Dashboard callout: “Verified bugs across the vault”
  • Dataview fallback:
TABLE WITHOUT ID
  file.link AS "Note",
  default(severity, "Unknown") AS "Severity",
  choice(contains(file.tags, "#frontend"), "Frontend",
    choice(contains(file.tags, "#kb"), "KB",
      choice(contains(file.tags, "#test"), "Tests",
        choice(contains(file.tags, "#enrichment") OR contains(file.tags, "#pipeline"), "Pipeline",
          choice(contains(file.tags, "#compliance"), "Compliance", "Other"))))) AS "Area",
  default(first_seen, file.ctime) AS "First seen"
FROM #bug-verified OR #bug
SORT severity ASC, file.mtime DESC

Panel: All notes by tag

  • Bases file: Wiki/Bases/notes.base
  • Dashboard callout: “All notes by tag”
  • Dataview fallback:
TABLE WITHOUT ID
  file.link AS "Note",
  file.tags AS "Tags",
  updated AS "Updated"
FROM "Wiki"
GROUP BY default(file.tags[0], "untagged") AS "Tag"
SORT file.name ASC

Panel: Recent edits

  • No Bases version (Bases sort by mtime is the same query, but the recent-edits panel was specced as Dataview from day one in the layout spec).
  • Canonical query (already in Dashboard.md):
TABLE WITHOUT ID
  file.link AS "Note",
  updated,
  file.tags AS "Tags"
FROM "Wiki"
WHERE updated
SORT updated DESC
LIMIT 10

Note: the layout-agent draft uses TABLE updated, file.tags AS tags — that emits file.link as the first column under the default header “File”. Both render; the form above is more explicit.

Chart specs

All chart JSON lives under Wiki/Charts/. The Charts plugin expects YAML inside a ```chart fence, so the layout agent (or whoever maintains the Dashboard) translates each JSON spec into the plugin’s YAML at paste time. The JSON form keeps the spec diff-friendly and lets multiple charts share the same labels file later.

SpecFileSource dataRefresh trigger
Coverage by categoryWiki/Charts/coverage-by-category.jsonWiki/Index.md H2 sectionsWhen Index.md adds or removes a bullet
Test coverage gapWiki/Charts/test-coverage-gap.jsonWiki/Test Coverage Gaps.mdWhen the Test Coverage Gaps note is edited
Open bugs by areaWiki/Charts/open-bugs-by-area.jsonWiki/Known Issues.md plus warning callouts in Wiki/Pipeline.md, Wiki/EnrichV7.mdWhen a bug is opened or closed
Vault growth timelineWiki/Charts/vault-growth-timeline.jsonFrontmatter updated: across Wiki/*.md (eventually file mtime via shell walker)Weekly, ideally automated

Vault growth chart is illustrative

The vault is not a git repo (it lives at this repository). The data agent had no shell access, so the per-week note counts in vault-growth-timeline.json are derived from the updated: dates I read in front-matter and are NOT a true commit-level series. Replace with find -newermt counts in a future automation pass.

Mermaid sources

SourceUsed by
Wiki/Mermaid/pipeline-flow.md”Pipeline at a glance” mermaid block on Dashboard
Wiki/Mermaid/system-c4.md”Architecture” mermaid block on Dashboard

The Dashboard inlines the diagram body (the part inside the ```mermaid fence) from each canonical source. Edit the source files; do not edit the inlined copy on the Dashboard directly.

Compliance snapshot heuristic

The “Compliance snapshot” callout on the Dashboard switches type based on state:

StateCallout typeTrigger
All four metrics within budgetsuccessOPT_OUT_HASH_COUNT > 0, ROPA_TODAY > 0, ART14_PENDING == 0, REKLAMSPARR_7D recorded
Pending Article 14 backlog OR opt-out match in last 24hwarningART14_PENDING > 0 OR REKLAMSPARR_7D > 0 in last 24h
RoPA log entry missing for an enrichment that ran todayfailureenrichments_today > 0 AND ROPA_TODAY < enrichments_today

Today (2026-05-02) the four metrics are unknown to this agent (no DB access), so the layout agent should default the callout to warning and fill the value placeholders with the SQL one-liners in the “Verified counts” table above.

Maintenance rules

  1. If you fork a chart spec under Wiki/Charts/, update the matching row in this doc. The chart plugin and the doc must agree on the source-of-truth note.
  2. If a Bases panel stops rendering after an Obsidian update, swap it for the documented Dataview fallback in this doc, and file a Wiki issue noting the schema drift so future maintainers know what changed.
  3. Re-run the count commands quarterly. Drift in NOTE_COUNT or ADR_COUNT is fine; drift in BUG_COUNT going up without a matching [[Known Issues]] entry is a documentation bug.
  4. Do not embed mermaid sources inline twice. The mermaid lives at Wiki/Mermaid/*.md. The Dashboard copies the fenced block. If they drift, the source-file version wins.

See also

Dashboard, Dashboard Layout Spec, Index, Wiki Conventions, Test Strategy, Test Coverage Gaps, Known Issues.