Switch to title-based wiki-links (#91)

## Summary
- Remove aliases from all zk cards to prevent them from capturing wiki-links
- Convert all wiki-links from `[[filename|Title]]` to `[[Title]]` format
- Replace `doc-filenames` task with `doc-titles` for duplicate title detection
- Update pre-commit hook to use `doc-titles`

Wiki-links now resolve to reference docs by their frontmatter title, which is more readable and maintainable than filename-based links.

## Deployment and Testing
- [x] Pre-commit hooks pass (including new `doc-titles` check)
- [x] Manually verified zk cards have aliases removed
- [ ] Deploy docs v1.0.7 and verify wiki-links resolve correctly
- [ ] Test links to reference docs (e.g., [[Grafana Alloy]], [[ArgoCD]])

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/91
This commit is contained in:
Erich Blume 2026-02-03 15:55:31 -08:00
commit 01adc4cf0f
56 changed files with 501 additions and 431 deletions

View file

@ -23,5 +23,5 @@ Managed via `Brewfile` and `mise.toml` in the blumeops repo.
## Related
- [[indri|Indri]] - Server accessed from gilbert
- [[cluster|Cluster]] - Remote k8s access
- [[Indri]] - Server accessed from gilbert
- [[Kubernetes Cluster|Cluster]] - Remote k8s access

View file

@ -12,14 +12,14 @@ All devices connected via [Tailscale](https://login.tailscale.com/) tailnet `tai
| Host | Description | Card |
|------|-------------|------|
| **Indri** | Mac Mini M1, 2020 - Primary server | [[indri|Details]] |
| **Gilbert** | MacBook Air M4, 2025 - Workstation | [[gilbert|Details]] |
| **[[sifaka|Sifaka]]** | Synology NAS - Storage & backups | [[sifaka|Details]] |
| **Indri** | Mac Mini M1, 2020 - Primary server | [[Indri|Details]] |
| **Gilbert** | MacBook Air M4, 2025 - Workstation | [[Gilbert|Details]] |
| **[[Sifaka NAS|Sifaka]]** | Synology NAS - Storage & backups | [[Sifaka NAS|Details]] |
| **Mouse** | MacBook Air M2 - Allison's laptop | - |
| **UniFi** | UniFi Express 7 - Home WiFi | - |
| **Dwarf** | iPad Air - Employer-provided, off tailnet | - |
## Related
- [[tailscale|Tailscale]] - Network configuration
- [[routing|Routing]] - Service URLs
- [[Tailscale]] - Network configuration
- [[Service Routing|Routing]] - Service URLs

View file

@ -22,17 +22,17 @@ Primary BlumeOps server. Mac Mini M1 (2020).
## Services Hosted
**Native (via Ansible):**
- [[forgejo|Forgejo]] - Git forge
- [[zot|Zot]] - Container registry
- [[jellyfin|Jellyfin]] - Media server
- [[borgmatic|Borgmatic]] - Backup system
- [[alloy|Alloy]] - Metrics/logs collector
- [[Forgejo]] - Git forge
- [[Zot]] - Container registry
- [[Jellyfin]] - Media server
- [[Borgmatic]] - Backup system
- [[Grafana Alloy|Alloy]] - Metrics/logs collector
- Caddy - Reverse proxy for `*.ops.eblu.me`
**Kubernetes (via minikube):**
- [[apps|All k8s applications]]
- [[ArgoCD Applications|All k8s applications]]
## Related
- [[routing|Routing]] - Port mappings
- [[cluster|Cluster]] - Minikube details
- [[Service Routing|Routing]] - Port mappings
- [[Kubernetes Cluster|Cluster]] - Minikube details

View file

@ -25,20 +25,20 @@ DNS points to indri's Tailscale IP (100.98.163.89). TLS via Let's Encrypt (ACME
| Service | URL | Description |
|---------|-----|-------------|
| Homepage | https://go.ops.eblu.me | Service dashboard |
| [[forgejo|Forgejo]] | https://forge.ops.eblu.me | Git hosting (SSH: 2222) |
| [[zot|Zot]] | https://registry.ops.eblu.me | Container registry |
| [[grafana|Grafana]] | https://grafana.ops.eblu.me | Dashboards |
| [[argocd|ArgoCD]] | https://argocd.ops.eblu.me | GitOps CD |
| [[prometheus|Prometheus]] | https://prometheus.ops.eblu.me | Metrics |
| [[loki|Loki]] | https://loki.ops.eblu.me | Logs |
| [[miniflux|Miniflux]] | https://feed.ops.eblu.me | RSS reader |
| [[kiwix|Kiwix]] | https://kiwix.ops.eblu.me | Offline Wikipedia |
| [[transmission|Transmission]] | https://torrent.ops.eblu.me | BitTorrent |
| [[teslamate|TeslaMate]] | https://tesla.ops.eblu.me | Tesla logger |
| [[navidrome|Navidrome]] | https://dj.ops.eblu.me | Music streaming |
| [[jellyfin|Jellyfin]] | https://jellyfin.ops.eblu.me | Media server |
| [[postgresql|PostgreSQL]] | pg.ops.eblu.me:5432 | Database |
| [[sifaka|Sifaka]] | https://nas.ops.eblu.me | NAS dashboard |
| [[Forgejo]] | https://forge.ops.eblu.me | Git hosting (SSH: 2222) |
| [[Zot]] | https://registry.ops.eblu.me | Container registry |
| [[Grafana]] | https://grafana.ops.eblu.me | Dashboards |
| [[ArgoCD]] | https://argocd.ops.eblu.me | GitOps CD |
| [[Prometheus]] | https://prometheus.ops.eblu.me | Metrics |
| [[Loki]] | https://loki.ops.eblu.me | Logs |
| [[Miniflux]] | https://feed.ops.eblu.me | RSS reader |
| [[Kiwix]] | https://kiwix.ops.eblu.me | Offline Wikipedia |
| [[Transmission]] | https://torrent.ops.eblu.me | BitTorrent |
| [[TeslaMate]] | https://tesla.ops.eblu.me | Tesla logger |
| [[Navidrome]] | https://dj.ops.eblu.me | Music streaming |
| [[Jellyfin]] | https://jellyfin.ops.eblu.me | Media server |
| [[PostgreSQL]] | pg.ops.eblu.me:5432 | Database |
| [[Sifaka NAS|Sifaka]] | https://nas.ops.eblu.me | NAS dashboard |
## Tailscale-Only Services
@ -61,5 +61,5 @@ DNS points to indri's Tailscale IP (100.98.163.89). TLS via Let's Encrypt (ACME
## Related
- [[tailscale|Tailscale]] - ACL configuration
- [[indri|Indri]] - Where services run
- [[Tailscale]] - ACL configuration
- [[Indri]] - Where services run

View file

@ -17,7 +17,7 @@ ACLs managed via Pulumi in `pulumi/policy.hujson`.
| Group | Members | Purpose |
|-------|---------|---------|
| `group:allisonflix` | admin, member | [[jellyfin|Jellyfin]] media access |
| `group:allisonflix` | admin, member | [[Jellyfin]] media access |
## Device Tags
@ -58,5 +58,5 @@ Pulumi uses OAuth client from 1Password (blumeops vault):
## Related
- [[routing|Routing]] - Service URLs
- [[hosts|Hosts]] - Device inventory
- [[Service Routing|Routing]] - Service URLs
- [[Host Inventory|Hosts]] - Device inventory