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
| Plugin | Required for | Install |
|---|---|---|
| Bases (built-in, Obsidian 2025+) | Wiki/Bases/*.base panels and the Dashboard’s three Bases callouts | Ships with Obsidian; nothing to install. |
| Dataview (community) | Recent edits panel, every fallback for the Bases panels, ad-hoc TABLE / LIST queries | Community plugin → Browse → “Dataview” → Install → Enable. |
| Charts (community, by Johannes Theiner) | Every chart fenced block on the Dashboard | Community 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 diagrams | Built into Obsidian. Nothing to install. |
Refresh cadence per panel
| Panel | Cadence | Mechanism |
|---|---|---|
| KPI counts (NOTE_COUNT, ADR_COUNT, BUG_COUNT, ORPHAN_COUNT, LAST_UPDATED) | Manual on every dashboard edit; live where the plugin allows | Most rendered as static text from the values in the table below. Dataview can render the count live where noted. |
| Pipeline mermaid | Manual when Wiki/Mermaid/pipeline-flow.md changes | Inlined into Dashboard from the canonical mermaid source. |
| Coverage charts | Manual when underlying source notes change | Charts plugin renders YAML inside ```chart fence; spec stored in Wiki/Charts/*.json for editability. |
| Recent edits | Live (every render) | Dataview query against Wiki/ notes, sorted by updated. |
| ADR / Verified bugs / All notes Bases | Live (every render) | Bases query, with documented Dataview fallback below. |
| Compliance snapshot | Manual | Static counts plus callout-type heuristic (see “Compliance snapshot” below). |
| Today’s commits | Manual on dashboard edit | git 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.
| Placeholder | Value (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_COUNT | 9 | find ./docs/adr -name "*.md" | grep -v README | wc -l (ADRs 0001-0009 enumerated in docs/adr/README.md) |
| BUG_COUNT | 6 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_COUNT | Unknown — 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_UPDATED | 2026-05-02 (this Dashboard build) | grep -rh '^updated:' content/ | sort -u | tail -1 |
| TEST_FILES | 27 | Documented in Test Strategy line 8. Re-derive: find . -name "*.test.ts" | wc -l |
| TEST_LINES | 6538 | Documented in Test Strategy line 8. Re-derive: find . -name "*.test.ts" -exec wc -l {} + | tail -1 |
| COMMITS_TODAY | Unknown without shell access; placeholder 0 | git -C . log --since="2026-05-02 00:00" --oneline | wc -l |
| Coverage by category | See Wiki/Charts/coverage-by-category.json | Count bullets per H2 in Wiki/Index.md |
| OPT_OUT_HASH_COUNT | Unknown without DB query | psql -h localhost -p 5433 -U user -d enrichnodedb -c 'SELECT COUNT(*) FROM "OptOut_Hashes"' |
| ROPA_TODAY | Unknown without DB query | psql ... -c "SELECT COUNT(*) FROM \"RoPA_Log\" WHERE created_at >= CURRENT_DATE" |
| ART14_PENDING | Unknown without DB / queue introspection | BullMQ: count waiting jobs in Art14_Job queue |
| REKLAMSPARR_7D | Unknown without DB query | psql ... -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
dataviewfence 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 DESCPanel: 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 DESCPanel: 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 ASCPanel: 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 10Note: 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.
| Spec | File | Source data | Refresh trigger |
|---|---|---|---|
| Coverage by category | Wiki/Charts/coverage-by-category.json | Wiki/Index.md H2 sections | When Index.md adds or removes a bullet |
| Test coverage gap | Wiki/Charts/test-coverage-gap.json | Wiki/Test Coverage Gaps.md | When the Test Coverage Gaps note is edited |
| Open bugs by area | Wiki/Charts/open-bugs-by-area.json | Wiki/Known Issues.md plus warning callouts in Wiki/Pipeline.md, Wiki/EnrichV7.md | When a bug is opened or closed |
| Vault growth timeline | Wiki/Charts/vault-growth-timeline.json | Frontmatter 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.jsonare derived from theupdated:dates I read in front-matter and are NOT a true commit-level series. Replace withfind -newermtcounts in a future automation pass.
Mermaid sources
| Source | Used 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:
| State | Callout type | Trigger |
|---|---|---|
| All four metrics within budget | success | OPT_OUT_HASH_COUNT > 0, ROPA_TODAY > 0, ART14_PENDING == 0, REKLAMSPARR_7D recorded |
| Pending Article 14 backlog OR opt-out match in last 24h | warning | ART14_PENDING > 0 OR REKLAMSPARR_7D > 0 in last 24h |
| RoPA log entry missing for an enrichment that ran today | failure | enrichments_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
- 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. - 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.
- 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. - 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.