Compare commits

..

No commits in common. "04c2388845c2a7c628ea61d45a44a7803300b9cf" and "8f50f2144d3a3a1e0ca2478225141701ad9c9fc4" have entirely different histories.

31 changed files with 420 additions and 507 deletions

View File

@ -16,24 +16,6 @@ semantic search via Ollama.
If you're an agent acting on this vault, read `CLAUDE.md`. If you're a If you're an agent acting on this vault, read `CLAUDE.md`. If you're a
human browsing, start at `index.md`. human browsing, start at `index.md`.
## Status (as of 2026-05-24)
- **88 source files** across Dev / Venture / Homelab; **26 compiled Wiki
pages** (22 entities, 4 domain landings) + 2 synthesis pages.
- **First steady-state compile** since launch ran 2026-05-24, clearing a
34-source backlog (indexes rebuilt, 5 entities refreshed, the
`ai-memory-architecture` synthesis updated for the `petalbrain`
consolidation). The first **lint pass** ran the same night (broken
wikilinks + `session-note→session-notes` fixes).
- **5 entities promoted** that session: [[Wiki/Reference/trellis]],
[[Wiki/Reference/vault-mcp]], [[Wiki/Homelab/petalbrain]],
[[Wiki/Homelab/knot-dns]], [[Wiki/Dev/herbyeos]].
- **Compile cadence (planned, not yet live):** an n8n workflow nudges via
Google Chat when ≥10 new sources accrue or ≥7 days pass since the last
compile. Depends on a `wiki.compile_runs` table and a one-line addition
to the compile procedure's Step 8. See
`docker/n8n/workflows/wiki-compile-nudge.json`.
## Two-layer structure ## Two-layer structure
``` ```

View File

@ -0,0 +1,130 @@
---
project: vault-integration-test-multi
type: session-note
status: active
tags: [test, integration, verification, multi-chunk]
created: 2026-05-16
updated: 2026-05-16
---
# Vault Integration Test 2026-05-16 (multi-chunk)
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note then index_note then public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce multiple rows
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above. This run targets multi-chunk.

View File

@ -0,0 +1,21 @@
---
project: vault-integration-test
type: session-note
status: active
tags: [test, integration, verification]
created: 2026-05-16
updated: 2026-05-16
---
# Vault Integration Test 2026-05-16
This is an end-to-end test of the vault indexing pipeline post-chunking-refactor.
We're verifying that the save_note → index_note → public.embeddings path is fully
operational after Travis rebuilt the vault-mcp container with the published
embedding-chunking package from gitea.
The note should land in wiki.notes with a fresh source_id, and produce one row
in public.embeddings with source_schema='wiki', source_table='notes', and a
non-NULL chunk_text that contains the content above.
This content is intentionally short — about 80 tokens — to verify the single-chunk
path. A separate test with longer content will exercise multi-chunk.

View File

@ -3,7 +3,7 @@ type: topic-landing
path: Sources/Dev path: Sources/Dev
tags: tags:
- landing - landing
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Dev — Sources # Dev — Sources
@ -12,13 +12,6 @@ Project plans and session notes for coding, AI/ML, tooling, and dev environment
## Active Projects ## Active Projects
- [[Sources/Dev/pbs-hub-scene-management|pbs-hub-scene-management]] — pre-production extension: outline/treatment/scenes + tablet Present Mode (8 phases)
- [[Sources/Dev/pbs-hub-pre-production-extension|pbs-hub-pre-production-extension]] — companion scope doc for the scene-management rail/canvas UI
- [[Sources/Dev/pbs-hub-data-import-and-mcp|pbs-hub-data-import-and-mcp]] — JSON paste-import + standalone `pbs-hub-mcp` server (4 phases)
- [[Sources/Dev/pbs-hub-vector-search|pbs-hub-vector-search]] — semantic search for `pbs-hub-mcp` (LanceDB + OpenAI embeddings; deferred ~18mo)
- [[Sources/Dev/zero-check-refactor|zero-check-refactor]] — manifest-driven routing + inconclusive guard for the validation gauntlet
- [[Sources/Dev/repo-hygiene-remediation|repo-hygiene-remediation]] — remediate the 2026-05 doc-audit findings across 23 repos + recurring review
- [[Sources/Dev/ml-drills-curriculum|ml-drills-curriculum]] — internalize the ML inner-loop via narrated drills (not project delivery)
- [[Sources/Dev/instagram-automation-content-hub-plan|instagram-automation-content-hub-plan]] — master plan for PBS Instagram automation (Phases 15) - [[Sources/Dev/instagram-automation-content-hub-plan|instagram-automation-content-hub-plan]] — master plan for PBS Instagram automation (Phases 15)
- [[Sources/Dev/content-hub-phase5-architecture|content-hub-phase5-architecture]] — merge pbs-api + Content Hub into Blueprint Flask app - [[Sources/Dev/content-hub-phase5-architecture|content-hub-phase5-architecture]] — merge pbs-api + Content Hub into Blueprint Flask app
- [[Sources/Dev/content-hub-phase5-planning|content-hub-phase5-planning]] — locked decisions for Content Hub Phase 5 - [[Sources/Dev/content-hub-phase5-planning|content-hub-phase5-planning]] — locked decisions for Content Hub Phase 5
@ -49,11 +42,11 @@ Project plans and session notes for coding, AI/ML, tooling, and dev environment
## Recent Sessions ## Recent Sessions
- [[Sources/Dev/2026-05-15-agentic-validation-article-review|2026-05-15-agentic-validation-article-review]] — GitHub agentic-validation article; dominator analysis vs zero-check
- [[Sources/Dev/2026-05-10-dispatch-replacement-architecture-and-anthropic-billing-reality|2026-05-10-dispatch-replacement-architecture-and-anthropic-billing-reality]] — two-layer dispatch/agent split; subscription-vs-API billing
- [[Sources/Dev/ai-memory-architecture-research|ai-memory-architecture-research]] — OB1 architecture; harness vs model layers; pgvector - [[Sources/Dev/ai-memory-architecture-research|ai-memory-architecture-research]] — OB1 architecture; harness vs model layers; pgvector
- [[Sources/Dev/cloudflare-cache-rules|cloudflare-cache-rules]] — last-match-wins rule ordering; cookie bypass fix - [[Sources/Dev/cloudflare-cache-rules|cloudflare-cache-rules]] — last-match-wins rule ordering; cookie bypass fix
- [[Sources/Dev/email-obsidian-git-pipeline|email-obsidian-git-pipeline]] — Gmail → n8n → Gitea → vault pipeline built - [[Sources/Dev/email-obsidian-git-pipeline|email-obsidian-git-pipeline]] — Gmail → n8n → Gitea → vault pipeline built
- [[Sources/Dev/instagram-automation-session-notes|instagram-automation-session-notes]] — MySQL schema; "Great Lockout of 2026" workaround
- [[Sources/Dev/pbs-api-db-connection-fix|pbs-api-db-connection-fix]] — pool_pre_ping=True, pool_recycle=1800
## Completed Projects ## Completed Projects

View File

@ -9,7 +9,7 @@ tags:
- pgvector - pgvector
- embeddings - embeddings
- session-note - session-note
type: session-notes type: session-note
updated: '2026-05-15' updated: '2026-05-15'
worker: 2 worker: 2
--- ---

View File

@ -9,7 +9,7 @@ tags:
- pgvector - pgvector
- embeddings - embeddings
- session-note - session-note
type: session-notes type: session-note
updated: '2026-05-15' updated: '2026-05-15'
worker: 2 worker: 2
phase: 2a phase: 2a

View File

@ -0,0 +1,47 @@
---
created: '2026-05-17'
path: Sources/Homelab
project: postgres-consolidation-reflection-layer
tags:
- mcp
- embeddings
- automation
- pgvector
type: session-notes
---
## Outcome
End-to-end verification of vault MCP create_artifact after the full diagnostic + fix chain: search_path override removed from db.py connection pool (commit 051c3ba), letting the vault_mcp role's default `wiki, public` apply naturally. Goal: confirm the dual-write lands a markdown file in the vault repo AND a row in petalbrain.wiki.artifacts AND chunked rows in petalbrain.public.embeddings.
## Topics Covered
The full chain of fixes for this single end-to-end write:
- Renamed mcp_server → vault_mcp package (rename worker)
- Fixed artifacts subsystem imports (rename completion worker)
- Hidden artifact tools (mistake) then re-exposed + hidden save_note shim
- Fixed create_artifact wrapper dispatch (was pointing at save_note_impl)
- Added missing HERBYLAB_DATABASE_URL env var
- Removed search_path = herbylab override in connection pool's configure hook
- Multiple container rebuilds with --no-cache to defeat image caching
If this artifact lands successfully, six iterations of architectural debugging culminated in a working vault MCP write surface.
## Key Learnings
When debugging MCP integration paths, work upward through the stack systematically:
1. MCP transport (auth + tool dispatch)
2. Wrapper layer (param translation + delegation target)
3. Env config (every env var referenced by every code path)
4. Database state (schemas, roles, search_path defaults)
5. Code-level overrides (session-level SET commands, SQLAlchemy connect_args, hardcoded schema names in MetaData)
Issues at any layer can mask issues at another. The "rebuild fixed it" theory was tempting at each step but only the layer 5 fix actually unblocked the write.
## Follow-ons
- [ ] Worker verifies wiki.artifacts row exists for this entry with correct schema
- [ ] Worker verifies public.embeddings has chunked rows with source_schema='wiki', source_table='artifacts' (or 'notes', depending on routing)
- [ ] Worker confirms chunk_text non-NULL and chunk_token_count ≤ 512
- [ ] If success: vault MCP write surface considered operational end-to-end
- [ ] Address the three out-of-scope items the worker flagged: tests/conftest.py:59 search_path SET, alembic/env.py:41 SCHEMA constant, HERBYLAB_DATABASE_URL env var name

View File

@ -0,0 +1,30 @@
---
created: '2026-05-17'
path: Sources/Homelab
project: postgres-consolidation-reflection-layer
tags:
- mcp
- automation
- git
type: session-notes
---
## Outcome
Final-final verification of the vault MCP push path after fixing the git config parser semicolon trap (commit cd3c88f). If this returns pushed: true, the queued b578f458 plus this new commit should both land on origin, closing out the full end-to-end write surface debugging chain that started with the create_artifact body/content error.
## Topics Covered
The semicolon trap: git config values treat `;` as comment delimiter unless the entire value is wrapped in double quotes. Inner `"..."` quotes get stripped by the parser as inline quoted segments. So the f-string helper `!f() { echo "username=lovebug"; echo "password=$VAULT_PUSH_TOKEN"; }; f` got stored as `!f() { echo username=lovebug` — unterminated function, no credentials returned, push fails with "could not read Username".
Fix is one line: rewrite the helper as `!echo username=$VAULT_PUSH_USER && echo password=$VAULT_PUSH_TOKEN`. No semicolons, no inner quotes, `&&` isn't special to git config.
## Key Learnings
Git config has its own mini-parser separate from how shells interpret quoting. `;` is a comment delimiter in config values. `"..."` quotes get stripped (their contents kept). Always validate the parsed form, not just the string you wrote.
## Follow-ons
- [ ] If pushed: true: vault write surface complete end-to-end
- [ ] If pushed: false: collect the actual git push error from the new container logs
- [ ] Wrap session — major architectural debugging chain closed

View File

@ -0,0 +1,28 @@
---
created: '2026-05-17'
path: Sources/Homelab
project: postgres-consolidation-reflection-layer
tags:
- mcp
- automation
- git
type: session-notes
---
## Outcome
Travis confirms push works from his side. Final confirmation from the MCP write path. If this artifact returns `pushed: true`, the vault MCP write surface is complete end-to-end: filesystem + git commit + git push + Postgres dual-write + chunked embeddings + Trello projection-ready.
## Topics Covered
The full architectural debugging chain that started with `create_artifact body/content` error and ended with a wrong-token issue covered every layer of the stack: package rename, import paths, MCP tool exposure, wrapper dispatch, env var presence, schema search_path, role default, connection pool configure hook, git credential helper, git config parser semicolon trap, and finally the token itself.
## Key Learnings
Layered configuration in MCP deployments compounds. Every layer (code, env, schema, container image, role config, credential helper, token value) needs to be right and recently rebuilt. The cheapest bugs (wrong token value) can hide behind the most architectural-looking symptoms.
## Follow-ons
- [ ] Confirm pushed: true closes the vault push initiative
- [ ] All queued artifacts (b578f458, ca2c8e93, f65b61c9, and this one) should be on origin
- [ ] Vault MCP write surface declared operational

View File

@ -0,0 +1,27 @@
---
created: '2026-05-17'
path: Sources/Homelab
project: postgres-consolidation-reflection-layer
tags:
- mcp
- automation
- git
type: session-notes
---
## Outcome
Retesting after Travis corrected the gitea PAT in `.env`. The previous failures were not a code issue — the helper wiring was correct, gitea was returning "Authentication failed" because the wrong token was in env. If this returns `pushed: true`, the queued commits (`b578f458`, `ca2c8e93`) plus this new one should all land on origin.
## Topics Covered
The full debugging chain ended at the cheapest possible bug: wrong env value. All the architectural fixes (HTTPS URL rewrite, credential helper, semicolon trap fix) were correct. The thing that was actually broken was the token itself.
## Key Learnings
When a credential helper says "Authentication failed" and the wiring is verifiable, check the credential value FIRST before assuming code issues. `curl -u "user:$TOKEN" https://gitea/api/v1/user` is a 5-second test.
## Follow-ons
- [ ] If pushed: true, close out the vault push fix completely
- [ ] Mark the architectural debugging chain done

View File

@ -0,0 +1,31 @@
---
created: '2026-05-17'
path: Sources/Homelab
project: postgres-consolidation-reflection-layer
tags:
- mcp
- automation
- git
type: session-notes
---
## Outcome
Final verification of the vault MCP write path after wiring `VAULT_PUSH_TOKEN` + `VAULT_GIT_HTTPS_URL` and rewriting the vault repo's origin to HTTPS at first push. If this artifact returns `pushed: true`, the end-to-end write surface (filesystem + git commit + git push + Postgres dual-write + chunked embeddings) is operational.
## Topics Covered
The full push fix:
- gitea PAT generated for lovebug user with write:repository scope
- VAULT_PUSH_TOKEN + VAULT_GIT_HTTPS_URL added to deployed .env
- `_ensure_https_remote` helper in git_writer.py rewrites origin URL + configures credential.helper on first push
- Credential helper reads $VAULT_PUSH_TOKEN at push time — token never lands in .git/config
## Key Learnings
The credential helper pattern keeps the secret out of any persisted file while still letting git push work non-interactively. The helper string in .git/config is just the recipe (`!f() { echo "username=..."; echo "password=$VAULT_PUSH_TOKEN"; }; f`); the env var resolves at runtime.
## Follow-ons
- [ ] If pushed: true: vault MCP write surface complete, the previous pending commit (5fb0ce2) plus this new one should both be on origin
- [ ] If pushed: false: surface the actual git push error from vault container logs

View File

@ -1,41 +0,0 @@
---
created: '2026-05-25'
path: Sources/Homelab
project: homelab-infrastructure
tags:
- proxmox
- tailscale
- dns
type: session-notes
---
## Outcome
Audited herbys-dev memory allocation, confirmed PVE host already has a static IP, and surfaced (but deferred) a Tailscale DNS resilience question.
## Topics Covered
- Docker memory totals on herbys-dev (~2.56 GiB across 16 containers)
- htop vs PVE memory accounting discrepancy explained (page cache vs process memory)
- herbys-dev VM right-sized: 24576 MiB → 14336 MiB (applies on next reboot)
- traefik VM (2 GiB allocated / ~500 MiB used) and knot LXC (512 MiB / ~29 MiB used) reviewed — both left alone
- PVE host /etc/network/interfaces confirmed: static IP `10.0.21.188/24` on `vmbr0`, gateway `10.0.21.1`, VLAN-aware bridge with vids 2-4094
- PVE `/etc/resolv.conf` is managed by Tailscale, pointing at `100.100.100.100`
- Split-DNS confirmed working (resolves both `pihole.herbylab.dev` → 10.0.11.20 and public domains)
## Key Learnings
- **Linux memory accounting**: `free -h` inside the VM is the source of truth. The `available` column is what matters, not `used`. PVE's outside view conflates process memory with page cache and shows allocations as "in use" when they're really evictable. The fear-bump from 24 → 26 GiB was based on misreading PVE.
- **VM allocation ≠ host commitment, with a caveat**: LXC limits are caps and cost nothing extra. VM allocations are reserved unless ballooning is configured with `balloon:` set below `memory:`. Default PVE behavior is effectively no ballooning.
- **`memory:` in qm config is MiB**: 14 GiB = 14336, 12 GiB = 12288.
- **Tailscale `--accept-dns=true` (default) hijacks `/etc/resolv.conf`**: the daemon rewrites it to point at `100.100.100.100` on every start. `--accept-dns=false` tells Tailscale to leave DNS config alone, persists across reboots, costs `*.ts.net` shell resolution but nothing else. VPN tunnel is unrelated to DNS setting.
- **PVE depending on Tailscale for DNS is a resilience smell**: a hypervisor that loses DNS when a userland VPN daemon hiccups is a bad pattern. Functional today, worth hardening eventually.
- **Long uptime increases risk over time**: untested boot paths, config drift between running state and on-disk state, accumulated updates. Periodic planned reboots are hygiene, not paranoia.
## Follow-ons
- [ ] Reboot herbys-dev when convenient to apply the 14 GiB memory change
- [ ] Pre-reboot smoke check: `docker ps --format "table {{.Names}}\t{{.Status}}\t{{.RestartPolicy}}"` to confirm every container has a restart policy
- [ ] Detach the ubuntu-24.04.4 live-server ISO from VM 100 (`ide2` line in qm config) — install cruft, not urgent
- [ ] **Optional hardening**: switch PVE host off Tailscale DNS. Run `tailscale set --accept-dns=false`, add `dns-nameservers 10.0.11.20` to the `vmbr0` stanza in `/etc/network/interfaces`, then `ifreload -a`. Removes Tailscale as a DNS dependency for the hypervisor.
- [ ] Try `dj0024javia.gitea-vscode-pullrequest` extension for VS Code → Lovebug PR review flow without the browser

View File

@ -3,7 +3,7 @@ type: topic-landing
path: Sources/Homelab path: Sources/Homelab
tags: tags:
- landing - landing
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Homelab — Sources # Homelab — Sources
@ -12,14 +12,6 @@ Project plans and session notes for infrastructure, networking, hardware, and de
## Active Projects ## Active Projects
- [[Sources/Homelab/postgres-consolidation-ob1-reflection-layer|postgres-consolidation-ob1-reflection-layer]] — consolidate wiki/ob1/trellis into `petalbrain` (3 schemas, 4 service users) + OB1 reflection layer
- [[Sources/Homelab/postgres-consolidation-followups|postgres-consolidation-followups]] — close-out tasks from the consolidation: reflector activation, verification, cleanup
- [[Sources/Homelab/trellis-mcp|trellis-mcp]] — MCP server for resumable threads of work across conversation boundaries
- [[Sources/Homelab/trellis-mcp-tool-surface-followups|trellis-mcp-tool-surface-followups]] — `pause_thread`→`checkpoint_thread` rename + optional `id` addressing
- [[Sources/Homelab/vault-semantic-search|vault-semantic-search]] — `vault:search` MCP tool over `public.embeddings` (wiki schema)
- [[Sources/Homelab/ob1-jsonl-watcher-ambient-capture-from-claude-code-sessions|ob1-jsonl-watcher]] — ambient capture of Claude Code/Cowork sessions into OB1 via JSONL tailing
- [[Sources/Homelab/herbylab-project-management|herbylab-project-management]] — projects/notes as Postgres-backed artifacts; Trello projection via NOTIFY→n8n
- [[Sources/Homelab/gitea-migration-to-pve|gitea-migration-to-pve]] — relocate Gitea to PVE LXC; two-instance cross-mirror with PBS
- [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — MCP server (FastMCP + Authentik + Cloudflare Tunnel); Phase 1 tools - [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — MCP server (FastMCP + Authentik + Cloudflare Tunnel); Phase 1 tools
- [[Sources/Homelab/ob1-main-deployment|ob1-main-deployment]] — OB1 AI memory system (Supabase + pgvector); Phases 06 - [[Sources/Homelab/ob1-main-deployment|ob1-main-deployment]] — OB1 AI memory system (Supabase + pgvector); Phases 06
- [[Sources/Homelab/ob1-deployment|ob1-deployment]] — OB1 addendum: Tailscale-only, parallel n8n write, Phase 7 Dispatch hook - [[Sources/Homelab/ob1-deployment|ob1-deployment]] — OB1 addendum: Tailscale-only, parallel n8n write, Phase 7 Dispatch hook
@ -37,19 +29,15 @@ Project plans and session notes for infrastructure, networking, hardware, and de
## Recent Sessions ## Recent Sessions
- [[Sources/Homelab/2026-05-24-davinci-resolve-studio-install|2026-05-24-davinci-resolve-studio-install]] — Resolve Studio 20.3.3 on `herbyeos` via sheridans PKGBUILD - [[Sources/Homelab/2026-05-06-homelab-mcp-server-stand-up|2026-05-06-homelab-mcp-server-stand-up]] — first MCP server deployment; Authentik OAuth + Cloudflare Tunnel; `mcp.herbylab.dev`
- [[Sources/Homelab/2026-05-22-pbs-nas-off-site-backup-via-rsync|2026-05-22-pbs-nas-off-site-backup-via-rsync]] — PVE→PBS LXC→NAS rsync off-site backup; day-1 restore validated - [[Sources/Homelab/2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment|2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment]] — VLAN chip→bridge VID alignment (VID 11 lab, VID 21 private)
- [[Sources/Homelab/2026-05-21-traefik-routes-for-pihole-openwrt-us-test-authy-static-ip-cutove|2026-05-21-traefik-routes-for-pihole-openwrt...]] — pihole/openwrt behind Traefik; us-test-authy static-IP recovery - [[Sources/Homelab/dns-knot-pihole-end-to-end|dns-knot-pihole-end-to-end]] — Knot DNS + Pi-hole chain live; rebind protection fix; EDE 15 debugging
- [[Sources/Homelab/2026-05-18-claude-desktop-subprocess-leak-memory-management|2026-05-18-claude-desktop-subprocess-leak-memory-management]] — Dispatch subprocess zombies eating ~10.6GB RAM - [[Sources/Homelab/homelab-dns-decision|homelab-dns-decision]] — locked Knot DNS architecture; split-horizon `.herbylab.dev`
- [[Sources/Homelab/2026-05-18-acl-shared-repo-permissions|2026-05-18-acl-shared-repo-permissions]] — POSIX default ACLs for herbyadmin/travadmin shared git tree - [[Sources/Homelab/server-stability-and-security-hardening|server-stability-and-security-hardening]] — MySQL OOM fix; WordPress cap; Cloudflare Bot Fight Mode; Traefik v3.6.11
- [[Sources/Homelab/2026-05-15-postgres-consolidation-phase2a-result|2026-05-15-postgres-consolidation-phase2a-result]] — schemas + service users + `public.embeddings` landed disruption-free - [[Sources/Homelab/server-stability-mysql-oom|server-stability-mysql-oom]] — MySQL OOM investigation (earlier session)
- [[Sources/Homelab/2026-05-15-postgres-consolidation-phase0-recon|2026-05-15-postgres-consolidation-phase0-recon]] — pre-consolidation instance snapshot; OB1 is pg17/Ollama, not Supabase
- [[Sources/Homelab/2026-05-11-traefik-phase1-phase2-wildcard-canary|2026-05-11-traefik-phase1-phase2-wildcard-canary]] — Traefik Phase 1.6 wildcard + Phase 2 canary complete
- [[Sources/Homelab/2026-05-06-homelab-mcp-server-stand-up|2026-05-06-homelab-mcp-server-stand-up]] — first MCP server deployment; `mcp.herbylab.dev`
## Completed Projects ## Completed Projects
- [[Sources/Homelab/davinci-resolve-studio-install|davinci-resolve-studio-install]] — Resolve Studio 20.3.3 install on Endeavour tower ✓
- [[Sources/Homelab/ufw-docker-outage-fix|ufw-docker-outage-fix]] — UFW after.rules DOCKER-USER outbound rules fix ✓ - [[Sources/Homelab/ufw-docker-outage-fix|ufw-docker-outage-fix]] — UFW after.rules DOCKER-USER outbound rules fix ✓
- [[Sources/Homelab/wp-cron-supercronic-deploy|wp-cron-supercronic-deploy]] — WP-Cron disabled; Supercronic sidecar; Traefik block-wpcron ✓ - [[Sources/Homelab/wp-cron-supercronic-deploy|wp-cron-supercronic-deploy]] — WP-Cron disabled; Supercronic sidecar; Traefik block-wpcron ✓
- [[Sources/Homelab/2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment|2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment]] — VLAN renumber ✓ - [[Sources/Homelab/2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment|2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment]] — VLAN renumber ✓

View File

@ -0,0 +1,35 @@
---
created: '2026-05-17'
path: Sources/Homelab
project: vault-semantic-search-integration-test-2026-05-16
tags:
- mcp
- embeddings
- pgvector
type: project-plan
---
## Goal
Verify the vault MCP create_artifact path works end-to-end after the ALTER FUNCTION fix for the notify_project_change trigger.
## Locked Decisions
- Type: project-plan (exercises the projects table trigger that was failing)
- Status: on_deck (a valid project_status enum value, will be resolved by the trigger)
- Domain: homelab
## Open Items
- [ ] Confirm the trigger fires successfully with the ALTER FUNCTION search_path fix
- [ ] Verify push succeeds
## Phases
### Phase 0
Run this artifact creation, confirm pushed: true and ok: true.
## Notes
This test entry can be deleted later once verification is complete. It's intentionally created with type=project-plan to exercise the wiki.projects table + notify_project_change trigger that was failing.

View File

@ -3,31 +3,31 @@ type: topic-landing
path: Sources path: Sources
tags: tags:
- landing - landing
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Sources # Sources
All project plans and session notes. 88 files across Dev, Venture, and Homelab domains. All project plans and session notes. 62 files across Dev, Venture, and Homelab domains.
## By Domain ## By Domain
- [[Sources/Dev/index|Dev]] — 34 projects, 7 sessions — coding, AI/ML, tooling, PBS tech - [[Sources/Dev/index|Dev]] — 27 projects, 5 sessions — coding, AI/ML, tooling, PBS tech
- [[Sources/Venture/index|Venture]] — 0 projects, 2 sessions — PBS business, content, brand - [[Sources/Venture/index|Venture]] — 0 projects, 2 sessions — PBS business, content, brand
- [[Sources/Homelab/index|Homelab]] — 22 projects, 17 sessions — infrastructure, networking, deployments - [[Sources/Homelab/index|Homelab]] — 14 projects, 8 sessions — infrastructure, networking, deployments
- [[Sources/Reference/index|Reference]] — (empty) cross-domain reference notes - [[Sources/Reference/index|Reference]] — (empty) cross-domain reference notes
## Active Projects (cross-domain highlights) ## Active Projects (cross-domain highlights)
- [[Sources/Homelab/postgres-consolidation-ob1-reflection-layer|postgres-consolidation-ob1-reflection-layer]] — `petalbrain` consolidation + OB1 reflection layer (largely landed) - [[Sources/Homelab/ob1-main-deployment|ob1-main-deployment]] — OB1 AI memory (Supabase + pgvector, Phases 06)
- [[Sources/Dev/pbs-hub-scene-management|pbs-hub-scene-management]] — pbs-hub pre-production: scenes, scripts, tablet Present Mode - [[Sources/Dev/instagram-automation-content-hub-plan|instagram-automation-content-hub-plan]] — PBS Instagram automation (Phases 15)
- [[Sources/Homelab/trellis-mcp|trellis-mcp]] — resumable work threads across conversation boundaries - [[Sources/Dev/pbs-membership-loe1-phase3|pbs-membership-loe1-phase3]] — The Garden membership area
- [[Sources/Dev/zero-check-refactor|zero-check-refactor]] — manifest-driven validation gauntlet + inconclusive guard - [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — MCP server for AI tool access
- [[Sources/Homelab/gitea-migration-to-pve|gitea-migration-to-pve]] — Gitea → PVE LXC, cross-mirrored with PBS - [[Sources/Dev/second-brain|second-brain]] — LLM wiki + AI memory architecture
## Recent Sessions (cross-domain highlights) ## Recent Sessions (cross-domain highlights)
- [[Sources/Homelab/2026-05-22-pbs-nas-off-site-backup-via-rsync|2026-05-22-pbs-nas-off-site-backup-via-rsync]] — off-site PBS backup, restore validated day-1 - [[Sources/Homelab/2026-05-06-homelab-mcp-server-stand-up|2026-05-06-homelab-mcp-server-stand-up]] — MCP server live at `mcp.herbylab.dev`
- [[Sources/Homelab/2026-05-15-postgres-consolidation-phase2a-result|2026-05-15-postgres-consolidation-phase2a-result]] — schemas + service users + shared embeddings table - [[Sources/Homelab/2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment|2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment]] — VLAN renumber complete
- [[Sources/Dev/2026-05-10-dispatch-replacement-architecture-and-anthropic-billing-reality|2026-05-10-dispatch-replacement...]] — two-layer dispatch/agent architecture - [[Sources/Dev/ai-memory-architecture-research|ai-memory-architecture-research]] — OB1 architecture research
- [[Sources/Homelab/2026-05-21-traefik-routes-for-pihole-openwrt-us-test-authy-static-ip-cutove|2026-05-21-traefik-routes...]] — more services behind Traefik; VM recovery - [[Sources/Dev/email-obsidian-git-pipeline|email-obsidian-git-pipeline]] — email-to-vault pipeline live

View File

@ -18,51 +18,15 @@ sources:
- "[[Sources/Homelab/homelab-mcp-server]]" - "[[Sources/Homelab/homelab-mcp-server]]"
- "[[Sources/Homelab/2026-05-06-homelab-mcp-server-stand-up]]" - "[[Sources/Homelab/2026-05-06-homelab-mcp-server-stand-up]]"
- "[[Sources/Dev/wiki-vault-migration]]" - "[[Sources/Dev/wiki-vault-migration]]"
- "[[Sources/Homelab/postgres-consolidation-ob1-reflection-layer]]"
- "[[Sources/Homelab/postgres-consolidation-followups]]"
- "[[Sources/Homelab/2026-05-15-postgres-consolidation-phase0-recon]]"
- "[[Sources/Homelab/2026-05-15-postgres-consolidation-phase2a-result]]"
- "[[Sources/Homelab/ob1-jsonl-watcher-ambient-capture-from-claude-code-sessions|ob1-jsonl-watcher]]"
- "[[Sources/Homelab/vault-semantic-search]]"
- "[[Sources/Homelab/herbylab-project-management]]"
- "[[Sources/Homelab/trellis-mcp]]"
created: 2026-05-08 created: 2026-05-08
updated: 2026-05-24 updated: 2026-05-08
--- ---
# AI Memory Architecture # AI Memory Architecture
## Synthesis ## Synthesis
Travis's AI memory system is not a single tool but a layered architecture: a structured wiki vault for human-readable knowledge, a pgvector semantic store for AI-queryable memory, a homelab MCP server to expose both to AI agents, and pipelines to keep all layers in sync. These components appear across 15+ projects and represent a coherent long-term investment in AI-assisted knowledge work. Travis's AI memory system is not a single tool but a layered architecture: a structured wiki vault for human-readable knowledge, a pgvector semantic store for AI-queryable memory, a homelab MCP server to expose both to AI agents, and n8n pipelines to keep all layers in sync. These components appear across 8+ projects and represent a coherent long-term investment in AI-assisted knowledge work.
> **Update (2026-05-24 compile).** Two things in the original synthesis below are now superseded and corrected in-line: (1) OB1 was never "Supabase" — it's a self-hosted `pgvector/pgvector:pg17` container, since consolidated into the `petalbrain` database; (2) the "n8n parallel write" ingest path for OB1 was replaced by a JSONL session watcher. The **Consolidated Substrate** and **Trellis: the third leg** sections below capture the May-2026 state; the older sections are kept for design-history continuity.
### The Consolidated Substrate (`petalbrain`)
As of the May-2026 postgres consolidation, all three memory systems share one Postgres instance (`homelab-postgres`, pgvector:pg17) under one database, **`petalbrain`**, with schema-level isolation and a dedicated service role per system:
```
petalbrain (Postgres / pgvector:pg17, on Proxmox, Tailscale-only)
├── schema wiki — owner vault_mcp — wiki.artifacts / projects / notes
├── schema ob1 — owner ob1_mcp — ob1.thoughts (raw) + ob1.reflections (compiled)
├── schema trellis — owner trellis_mcp — threads / events / tags
└── public.embeddings — shared vector store, all sources, 768-d nomic-embed-text
HNSW vector_cosine_ops (m=16, ef_construction=64)
512-token chunks / 64-token overlap
```
`public.embeddings` is the load-bearing idea: one table for every source, keyed by `(source_schema, source_table, source_id, embedding_model)`, so "find similar to X across everything" is a single `ORDER BY embedding <-> query` rather than a UNION across per-system tables. Cross-schema reads are granted narrowly (ob1_mcp reads wiki + trellis for reflection synthesis; lovebug is RW everywhere). Isolation is enforced by Postgres at the role level, not by trusting MCP code to behave — matching the same "separate the *who*, not the *where*" pattern used for host users and Authentik.
The embedding model is **local Ollama `nomic-embed-text` (768-d)** — never a hosted provider for memory. Switching it is a deliberate full re-embed, which is why `embedding_model` is part of the uniqueness key.
### OB1's own two layers
OB1 now mirrors the wiki's Sources/Wiki split internally: `ob1.thoughts` is the raw capture layer; `ob1.reflections` is a compiled layer written by a **daily reflection job** (`claude-sonnet-4-6` via the Anthropic Messages API direct) that synthesizes generalizable lessons with citations back to source rows. Same discipline as the wiki — mixing raw and synthesized content in one table pollutes semantic neighbors. Ambient capture is the [[Sources/Homelab/ob1-jsonl-watcher-ambient-capture-from-claude-code-sessions|JSONL watcher]]: it tails Claude Code / Cowork session files and posts turn-pairs to OB1's `capture_thought`. "Save everything, filter later."
### Trellis: the third leg
The original two-system framing (wiki + OB1) is now three: [[Sources/Homelab/trellis-mcp|Trellis]] is resumable *working state* — named threads with checkpoints that survive conversation boundaries. The clean separation the stack settled on: **CLAUDE.md = instructions (how to behave), Trellis = record (where we are in the doing), wiki + OB1 = lessons and outcomes (what we learned/built).** None should swallow another's job. Trellis lives in `petalbrain.trellis`; its tool surface is being refined ([[Sources/Homelab/trellis-mcp-tool-surface-followups|checkpoint_thread rename + id addressing]]).
### The Three Memory Layers ### The Three Memory Layers
@ -74,11 +38,11 @@ Layer 1: Structured Wiki (wiki-vault)
- Git-versioned - Git-versioned
- Written by: MCP server, email pipeline, Travis/Jenny - Written by: MCP server, email pipeline, Travis/Jenny
Layer 2: Semantic Memory (OB1) [see "Consolidated Substrate" above for current state] Layer 2: Semantic Memory (OB1)
- self-hosted pgvector:pg17 (petalbrain), NOT Supabase - Supabase + pgvector
- Embeddings of vault content + session context (Ollama nomic-embed-text, 768-d) - Embeddings of vault content + session context
- Queryable by AI agents via semantic search over public.embeddings - Queryable by AI agents via semantic search
- Written by: JSONL session watcher → capture_thought (NOT n8n parallel write) - Written by: n8n parallel pipeline (mirrors vault writes)
- Access: Tailscale-only - Access: Tailscale-only
Layer 3: Agent Context (Dispatch / Lovebug) Layer 3: Agent Context (Dispatch / Lovebug)
@ -137,19 +101,10 @@ The homelab MCP server (`mcp.herbylab.dev`, deployed 2026-05-06) is the critical
**wiki-vault-migration** documents the vault consolidation from pbs-projects + homelab-projects into this unified structure, establishing the wiki-vault as the canonical structured knowledge store. **wiki-vault-migration** documents the vault consolidation from pbs-projects + homelab-projects into this unified structure, establishing the wiki-vault as the canonical structured knowledge store.
**postgres-consolidation-ob1-reflection-layer** (project plan) is the source for the single-database / three-schema / four-service-user model, the shared `public.embeddings` design, and OB1's two-layer captures+reflections split. **2026-05-15-postgres-consolidation-phase0-recon** is the primary evidence that OB1 is pgvector:pg17 + Ollama `nomic-embed-text` (768-d), not Supabase — it inventories the live instance directly. **phase2a-result** confirms the schemas, roles, and `public.embeddings` table landed with verified permission isolation. **postgres-consolidation-followups** supplies the reflection-model choice (`claude-sonnet-4-6` direct), chunking parameters (512/64), and the enricher loop bug.
**ob1-jsonl-watcher** (project plan) is the source for the ambient-capture-via-JSONL design that replaced the n8n parallel-write idea. **trellis-mcp** establishes the third memory leg and the instructions/record/lessons three-way separation. **herbylab-project-management** documents the Postgres-backed artifact model and the NOTIFY→n8n→Trello projection. **vault-semantic-search** specifies the (still-unbuilt) `vault:search` tool over the wiki schema.
## Open questions ## Open questions
*Several earlier open questions were resolved by the May-2026 consolidation: OB1's substrate is confirmed (pgvector:pg17 / `petalbrain`, not Supabase); ambient capture is the JSONL watcher, not n8n parallel-write (so there is no wiki↔OB1 dual-source-of-truth problem — vault is content, OB1 indexes session content); and the shared `public.embeddings` table is live.* - OB1 Phases 06 deployment timeline: what is the current blocker? The addendum was written but the deployment plan doesn't indicate Phase 0 is complete.
- When the n8n parallel write pipeline goes live, will it backfill existing vault content (all 62+ notes) into OB1, or only new writes going forward?
Still open: - The Dispatch pre-compact hook (Phase 7) depends on Dispatch exposing a lifecycle event. Is this a Dispatch feature that already exists, or does it require Dispatch development work?
- How will the MCP server's OB1 recall tool handle stale embeddings when vault content is updated by the compile loop? Will there be a re-embed step in the compile procedure?
- **Reflector quality** — the daily reflection job's synthesis prompt is unproven; first non-dry-run output needs review before the 3am timer is trusted (postgres-consolidation-followups Phase 1). - The wiki + OB1 parallel write model creates two sources of truth for the same content. Reconciliation strategy (wiki as authoritative; OB1 as derived index) should be documented once the pipeline goes live.
- **`ob1-enricher` PENDING_QUERY loop** — must be fixed before the enricher is restarted, or the metadata backlog grows.
- **Re-embed on compile** — when the wiki compile loop edits a Wiki page, its `public.embeddings` row goes stale. There is still no re-embed step in the compile procedure. *(Agent inference, not stated in any source — flagged.)*
- **`vault:search` not yet built** — the semantic-search MCP tool over the wiki schema is designed ([[Sources/Homelab/vault-semantic-search|vault-semantic-search]]) but unbuilt; until it ships, the wiki half of the substrate isn't actually queryable by agents.
- **claude/competent-knuth-de9483 branch** — artifact tooling that landed via a separate path; merge/abandon/cherry-pick still undecided.
- **Dispatch pre-compact hook (Phase 7)** — still depends on a Dispatch lifecycle event; the JSONL watcher covers Claude Code/Cowork capture in the meantime.

View File

@ -1,39 +0,0 @@
---
type: entity
path: Wiki/Dev
tags:
- workstation
- python
created: 2026-05-24
updated: 2026-05-24
---
# herbyeos
## What it is
herbyeos is Travis's primary local **dev tower** — an EndeavourOS (Arch-based, rolling-release) workstation with an i7, 128 GB RAM, and an RTX 3080 Ti. It's the heavy-iron rig for GPU and fast-iteration work, distinct from [[Wiki/Dev/herbydev|herbydev]] (the Proxmox dev *VM*). When a project says "on the tower" — Jupyter ML drills, DaVinci Resolve, local model experiments — it means herbyeos.
## Current state
Active workstation. Recent/known uses:
- **DaVinci Resolve Studio 20.3.3** installed via the sheridans GitHub PKGBUILD (bundled-libs approach, chosen for resilience across `pacman -Syu` rolling updates) rather than the AUR package
- **ML/AI drills** — the planned `ml-drills-curriculum` runs Python + Jupyter here for fast iteration on the RTX 3080
- Rolling-release means the standing gotcha is post-update library drift (e.g., Resolve's glib/pango conflicts → `LD_PRELOAD` workaround)
## Where it lives
- Physical tower on Travis's desk (EndeavourOS); GPU: RTX 3080 Ti
- Not a Proxmox guest — bare-metal workstation
## Related projects
- [[Sources/Homelab/davinci-resolve-studio-install|davinci-resolve-studio-install]] — Resolve Studio install (project plan)
- [[Sources/Homelab/2026-05-24-davinci-resolve-studio-install|2026-05-24-davinci-resolve-studio-install]] — install session notes
- [[Sources/Dev/ml-drills-curriculum|ml-drills-curriculum]] — Jupyter ML drills on the tower
- [[Wiki/Dev/herbydev|herbydev]] — the Proxmox dev VM (distinct machine)
## History
- **2026-05-24** — DaVinci Resolve Studio 20.3.3 installed (sheridans PKGBUILD, bundled libs)
- **2026-05** — Designated the Jupyter/RTX-3080 host for the ML drills curriculum

View File

@ -3,7 +3,7 @@ type: topic-landing
path: Wiki/Dev path: Wiki/Dev
tags: tags:
- landing - landing
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Dev — Wiki # Dev — Wiki
@ -14,7 +14,6 @@ Compiled entities, topic landings, and synthesis for the Dev domain.
- [[Wiki/Dev/pbs-hub|pbs-hub]] — Python Flask app merging pbs-api + Content Hub; Blueprint architecture; `pbs_hub` MySQL DB - [[Wiki/Dev/pbs-hub|pbs-hub]] — Python Flask app merging pbs-api + Content Hub; Blueprint architecture; `pbs_hub` MySQL DB
- [[Wiki/Dev/herbydev|herbydev]] — Travis's primary dev workstation (Proxmox VM); Fish + Starship; Claude Code; Tailscale VNC - [[Wiki/Dev/herbydev|herbydev]] — Travis's primary dev workstation (Proxmox VM); Fish + Starship; Claude Code; Tailscale VNC
- [[Wiki/Dev/herbyeos|herbyeos]] — EndeavourOS dev tower (i7 / 128GB / RTX 3080 Ti); GPU + Jupyter + DaVinci Resolve
## Synthesis Pages ## Synthesis Pages

View File

@ -5,7 +5,7 @@ tags:
- pbs - pbs
- python - python
created: 2026-05-08 created: 2026-05-08
updated: 2026-05-24 updated: 2026-05-08
--- ---
# pbs-hub # pbs-hub
@ -24,11 +24,6 @@ In active development (Phase 5 of Content Hub). Architecture decisions locked:
Phase 5 merges `pbs-api` + Content Hub codebases. Prior phases (14) built the Instagram automation database schema ("Great Lockout of 2026" workaround), reel detection system, and content tracking. Phase 5 merges `pbs-api` + Content Hub codebases. Prior phases (14) built the Instagram automation database schema ("Great Lockout of 2026" workaround), reel detection system, and content tracking.
As of May 2026 the tool (codebase `pbs-video-manager`, served at `/pbscontenthub`) is being extended **upstream into pre-production** and given external write paths:
- **Pre-production extension** ([[Sources/Dev/pbs-hub-scene-management|scene-management]] / [[Sources/Dev/pbs-hub-pre-production-extension|pre-production-extension]]) — Outline/Treatment/Scenes authoring, a `scenes`/`scene_items` model (Path B: separate from `checklist_items`), a persistent card-rail + canvas UI, and a tablet **Present Mode** with color-coded scene completion to stop forgetting shots mid-shoot. All new tables target the `pbs_automation` DB.
- **Data import + MCP** ([[Sources/Dev/pbs-hub-data-import-and-mcp|data-import-and-mcp]]) — a JSON paste-import affordance plus a standalone **`pbs-hub-mcp`** server (its own repo/container) exposing additive-upsert + read/search tools to LLM clients. First homelab MCP that fronts a separate REST API; hand-mirrored Pydantic models with drift-detection CI.
- **Vector search** ([[Sources/Dev/pbs-hub-vector-search|vector-search]]) — semantic `search_projects` via LanceDB + OpenAI `text-embedding-3-small`, n8n-driven async embedding. Deferred ~18 months until the project library is large enough for title search to hurt.
## Where it lives ## Where it lives
- PBS Linode Docker stack (`pbs-hub` service) - PBS Linode Docker stack (`pbs-hub` service)
@ -46,10 +41,6 @@ As of May 2026 the tool (codebase `pbs-video-manager`, served at `/pbscontenthub
- [[Sources/Dev/instagram-automation-session-notes|instagram-automation-session-notes]] — schema created - [[Sources/Dev/instagram-automation-session-notes|instagram-automation-session-notes]] — schema created
- [[Sources/Dev/instagram-reel-sync-phase4|instagram-reel-sync-phase4]] — reel detection system - [[Sources/Dev/instagram-reel-sync-phase4|instagram-reel-sync-phase4]] — reel detection system
- [[Sources/Dev/pbs-api-db-connection-fix|pbs-api-db-connection-fix]] — pool_pre_ping connection fix - [[Sources/Dev/pbs-api-db-connection-fix|pbs-api-db-connection-fix]] — pool_pre_ping connection fix
- [[Sources/Dev/pbs-hub-scene-management|pbs-hub-scene-management]] — pre-production scenes + Present Mode
- [[Sources/Dev/pbs-hub-pre-production-extension|pbs-hub-pre-production-extension]] — rail/canvas UI scope
- [[Sources/Dev/pbs-hub-data-import-and-mcp|pbs-hub-data-import-and-mcp]] — paste-import + pbs-hub-mcp
- [[Sources/Dev/pbs-hub-vector-search|pbs-hub-vector-search]] — semantic search (deferred)
- [[Wiki/Reference/plant-based-southerner|plant-based-southerner]] — parent entity - [[Wiki/Reference/plant-based-southerner|plant-based-southerner]] — parent entity
## History ## History
@ -58,5 +49,3 @@ As of May 2026 the tool (codebase `pbs-video-manager`, served at `/pbscontenthub
- **2026** — Three-tier reel detection system designed (Phase 4) - **2026** — Three-tier reel detection system designed (Phase 4)
- **2026** — DB connection fix: `pool_pre_ping=True`, `pool_recycle=1800` - **2026** — DB connection fix: `pool_pre_ping=True`, `pool_recycle=1800`
- **2026** — Phase 5 architecture planned: merge pbs-api + Content Hub into Blueprint Flask app - **2026** — Phase 5 architecture planned: merge pbs-api + Content Hub into Blueprint Flask app
- **2026-05-17** — Pre-production extension planned: scenes/scene-items model, rail+canvas UI, tablet Present Mode (targets `pbs_automation`)
- **2026-05-19**`pbs-hub-mcp` + JSON paste-import planned; vector-search spun out to its own (deferred) plan

View File

@ -3,7 +3,7 @@ type: topic-landing
path: Wiki/Homelab path: Wiki/Homelab
tags: tags:
- landing - landing
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Homelab — Wiki # Homelab — Wiki
@ -13,8 +13,6 @@ Compiled entities, topic landings, and synthesis for the Homelab domain.
## Entities ## Entities
- [[Wiki/Homelab/proxmox|proxmox]] — bare-metal hypervisor for homelab VMs and LXCs; hosts DNS stack, Authentik, OB1, ustest1 - [[Wiki/Homelab/proxmox|proxmox]] — bare-metal hypervisor for homelab VMs and LXCs; hosts DNS stack, Authentik, OB1, ustest1
- [[Wiki/Homelab/petalbrain|petalbrain]] — consolidated pgvector:pg17 DB; wiki/ob1/trellis schemas + shared `public.embeddings`
- [[Wiki/Homelab/knot-dns|knot-dns]] — authoritative DNS for internal `.herbylab.dev` (split-horizon with Pi-hole)
## Synthesis Pages ## Synthesis Pages

View File

@ -1,45 +0,0 @@
---
type: entity
path: Wiki/Homelab
tags:
- dns
- proxmox
- homelab
- traefik
created: 2026-05-24
updated: 2026-05-24
---
# Knot DNS
## What it is
Knot is the authoritative DNS server for the homelab's internal `.herbylab.dev` zone, running in a Proxmox LXC. It is the primary half of a split-horizon DNS architecture — Knot answers authoritatively for internal names while Pi-hole sits in front for filtering and forwarding. Knot is what makes capability-based names like `traefik.herbylab.dev`, `pihole.herbylab.dev`, and `openwrt.herbylab.dev` resolve on the LAN to their Traefik-fronted services.
## Current state
Active as the internal authority. Operational notes from recent work:
- **Split-horizon** — Knot authoritative for internal `.herbylab.dev`; Pi-hole forwards/filters in front (rebind-protection and EDE-15 issues were debugged during stand-up)
- **A-records being added incrementally** as services land — outstanding adds flagged in session notes include `pve.herbylab.dev → 10.0.21.188` (so PVE SPICE `.vv` files stop needing sed-rewrite) and `us-test-authy.herbylab.dev → 10.0.21.207`
- Sits upstream of the homelab [[Wiki/Reference/traefik|Traefik]] TLS pipeline (DNS resolves the name, Traefik terminates with the `*.herbylab.dev` wildcard)
## Where it lives
- Knot LXC (container **103**) on Proxmox
- Zone data for `.herbylab.dev`; secondary on the NAS is a planned follow-on (not yet stood up)
## Related projects
- [[Sources/Homelab/dns-knot-pihole-end-to-end|dns-knot-pihole-end-to-end]] — Knot + Pi-hole chain live; rebind/EDE-15 fixes
- [[Sources/Homelab/homelab-dns-decision|homelab-dns-decision]] — locked split-horizon Knot architecture
- [[Sources/Homelab/2026-05-21-traefik-routes-for-pihole-openwrt-us-test-authy-static-ip-cutove|traefik routes for pihole/openwrt]] — internal name resolution for new routes
- [[Wiki/Reference/traefik|traefik]] — consumes Knot resolution
- [[Wiki/Homelab/proxmox|proxmox]] — host
- [[Wiki/Homelab/homelab-ingress-stack|homelab-ingress-stack]] — synthesis
## History
- **2026** — Split-horizon Knot architecture locked; `.herbylab.dev` authoritative internally
- **2026** — Knot + Pi-hole chain brought live end-to-end (rebind protection + EDE-15 debugging)
- **2026-05** — Pending A-record adds (`pve`, `us-test-authy`) flagged across Traefik/PBS-backup sessions
- **Planned** — Knot zone file into git; Ansible role for the primary; secondary on NAS

View File

@ -1,50 +0,0 @@
---
type: entity
path: Wiki/Homelab
tags:
- pgvector
- embeddings
- mcp
- ob1
- homelab
created: 2026-05-24
updated: 2026-05-24
---
# petalbrain
## What it is
petalbrain is the consolidated Postgres database that backs all three of Travis's memory systems. It is a single `pgvector/pgvector:pg17` instance (container `homelab-postgres`) holding three schemas — `wiki`, `ob1`, `trellis` — plus a shared `public.embeddings` vector store. It was created by consolidating three previously separate databases (`herbylab`, `openbrain`, `trellis`) so the cross-cutting reflection/search queries that span all three become free intra-database joins instead of cross-database FDW taxes. The name replaced `openbrain`, which became misleading once the DB also held wiki and trellis content.
## Current state
Live. Layout:
- **Schema `wiki`** — owned by `vault_mcp`; `artifacts` / `projects` / `notes`
- **Schema `ob1`** — owned by `ob1_mcp`; `ob1.thoughts` (raw) + `ob1.reflections` (compiled)
- **Schema `trellis`** — owned by `trellis_mcp`; threads / events / tags
- **`public.embeddings`** — shared across all sources, owned by `postgres`; `VECTOR(768)` (Ollama `nomic-embed-text`), HNSW `vector_cosine_ops` (m=16, ef_construction=64), keyed `(source_schema, source_table, source_id, embedding_model)`; 512-token chunks / 64 overlap
- **Service roles**`vault_mcp` / `ob1_mcp` / `trellis_mcp` each own their schema; `ob1_mcp` reads `wiki` + `trellis` for reflection synthesis; `lovebug` is RW everywhere. Isolation enforced at the Postgres role level (verified with positive permission-denied tests).
## Where it lives
- Container `homelab-postgres` (`pgvector/pgvector:pg17`), `/opt/projects/docker/postgres/`, bound to `127.0.0.1:5433`, external volume `ob1_data`, on the `homelab` Docker network — Proxmox
- Credentials for the four service roles in `/opt/backups/postgres-consolidation/credentials.env` (0600) for KeePassXC transcription
- Pre-migration dumps + rollback runbook in `/opt/backups/postgres-consolidation/`
## Related projects
- [[Sources/Homelab/postgres-consolidation-ob1-reflection-layer|postgres-consolidation-ob1-reflection-layer]] — the consolidation + reflection plan
- [[Sources/Homelab/postgres-consolidation-followups|postgres-consolidation-followups]] — activation, verification, Phase 8 cleanup
- [[Sources/Homelab/2026-05-15-postgres-consolidation-phase0-recon|phase0-recon]] — pre-consolidation instance inventory
- [[Sources/Homelab/2026-05-15-postgres-consolidation-phase2a-result|phase2a-result]] — schemas + roles + embeddings landed
- [[Wiki/Reference/ob1|ob1]] · [[Wiki/Reference/vault-mcp|vault-mcp]] · [[Wiki/Reference/trellis|trellis]] — the three consumers
- [[Wiki/Homelab/proxmox|proxmox]] — host
- [[Wiki/Dev/ai-memory-architecture|ai-memory-architecture]] — synthesis
## History
- **2026-05-14** — OB1 embedding dim migrated 1536→768 for `nomic-embed-text` (precursor)
- **2026-05-15** — Phase 0 recon; Phase 2a landed the `wiki` + `trellis` schemas, four service roles, and the empty `public.embeddings` table inside `openbrain`, disruption-free
- **2026-05**`openbrain` renamed to `petalbrain`; `public.thoughts``ob1.thoughts`; embeddings backfilled; MCP connection strings cut over
- **Open** — Phase 8 cleanup: drop the old standalone `herbylab` / `trellis` DBs after the verification window

View File

@ -5,7 +5,7 @@ tags:
- proxmox - proxmox
- homelab - homelab
created: 2026-05-08 created: 2026-05-08
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Proxmox # Proxmox
@ -20,13 +20,10 @@ Active. Key guests running on Proxmox:
- **ustest1** — Self-hosted GitHub Actions runner for PBS CI/CD (`pbsii-cicd-pipeline`) - **ustest1** — Self-hosted GitHub Actions runner for PBS CI/CD (`pbsii-cicd-pipeline`)
- **DNS stack** — Knot DNS primary + secondary, Pi-hole (split-horizon `.herbylab.dev`) - **DNS stack** — Knot DNS primary + secondary, Pi-hole (split-horizon `.herbylab.dev`)
- **Authentik** — SSO/IdP for homelab services - **Authentik** — SSO/IdP for homelab services
- **`homelab-postgres`** — pgvector:pg17 container hosting the consolidated `petalbrain` DB (wiki/ob1/trellis schemas) — the substrate for OB1 and the MCP servers - **OB1** — Supabase + pgvector memory system (deployment in progress)
- **Traefik VM 102** (`10.0.21.181`) — homelab ingress with the `*.herbylab.dev` wildcard
- **PBS LXC 110** — Proxmox Backup Server (Debian 12); daily backups to local datastore, weekly rsync to NAS
- **us-test-authy (VM 100)** — recovered to static `10.0.21.207`; runs Claude Desktop / Dispatch
- **herbydev** — Primary dev workstation VM (promoted from us-test-authy) - **herbydev** — Primary dev workstation VM (promoted from us-test-authy)
VLAN scheme renumbered in May 2026: VID 11 (lab network), VID 21 (private network); OpenWrt switch chip aligned to bridge VID assignment. (Note: DaVinci Resolve runs on the separate `herbyeos` Endeavour tower, not on Proxmox.) VLAN scheme renumbered in May 2026: VID 11 (lab network), VID 21 (private network); OpenWrt switch chip aligned to bridge VID assignment.
## Where it lives ## Where it lives
@ -42,8 +39,6 @@ VLAN scheme renumbered in May 2026: VID 11 (lab network), VID 21 (private networ
- [[Sources/Homelab/dns-knot-pihole-end-to-end|dns-knot-pihole-end-to-end]] — DNS stack on Proxmox - [[Sources/Homelab/dns-knot-pihole-end-to-end|dns-knot-pihole-end-to-end]] — DNS stack on Proxmox
- [[Sources/Homelab/2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment|2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment]] — VLAN renumber - [[Sources/Homelab/2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment|2026-05-08-homelab-vlan-renumber-switch-chip-to-bridge-alignment]] — VLAN renumber
- [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — MCP server (Proxmox-hosted) - [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — MCP server (Proxmox-hosted)
- [[Sources/Homelab/postgres-consolidation-ob1-reflection-layer|postgres-consolidation-ob1-reflection-layer]] — `petalbrain` on `homelab-postgres`
- [[Sources/Homelab/2026-05-22-pbs-nas-off-site-backup-via-rsync|2026-05-22-pbs-nas-off-site-backup-via-rsync]] — PBS LXC 110 backup pipeline
- [[Wiki/Homelab/homelab-ingress-stack|homelab-ingress-stack]] — synthesis - [[Wiki/Homelab/homelab-ingress-stack|homelab-ingress-stack]] — synthesis
## History ## History
@ -53,5 +48,3 @@ VLAN scheme renumbered in May 2026: VID 11 (lab network), VID 21 (private networ
- **2026** — herbydev promoted from us-test-authy (Proxmox VM rename/reconfigure) - **2026** — herbydev promoted from us-test-authy (Proxmox VM rename/reconfigure)
- **2026-05-06** — MCP server deployed on Proxmox behind Authentik + Cloudflare Tunnel - **2026-05-06** — MCP server deployed on Proxmox behind Authentik + Cloudflare Tunnel
- **2026-05-08** — VLAN scheme renumbered (VID 11 lab, VID 21 private); switch chip → bridge alignment fixed - **2026-05-08** — VLAN scheme renumbered (VID 11 lab, VID 21 private); switch chip → bridge alignment fixed
- **2026-05-15**`petalbrain` consolidation: wiki/ob1/trellis schemas on the `homelab-postgres` pgvector:pg17 container
- **2026-05-22** — PBS LXC 110 (Debian 12) off-site backup pipeline; PVE→PBS→NAS rsync; day-1 restore validated

View File

@ -6,7 +6,7 @@ tags:
- git - git
- docker - docker
created: 2026-05-08 created: 2026-05-08
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Gitea # Gitea
@ -24,8 +24,6 @@ Active. Key roles:
The GitHub deploy refactor project completed the migration to pbsdeploybot with Gitea SSH host aliases, replacing the previous ambiguous key setup. The GitHub deploy refactor project completed the migration to pbsdeploybot with Gitea SSH host aliases, replacing the previous ambiguous key setup.
A **relocation is planned** ([[Sources/Homelab/gitea-migration-to-pve|gitea-migration-to-pve]]): promote a new PVE LXC Gitea to canonical for homelab/`petal-power` repos, keep the PBS instance canonical for PBS business code, and cross-mirror each as the other's insurance copy. The reframe is that PBS-Gitea was already serving as paid offsite backup. Lovebug also pushes vault-mcp commits to Gitea over HTTPS using a `lovebug` PAT via an env-driven git credential helper (the semicolon-trap and token fixes are documented in the consolidation session notes).
## Where it lives ## Where it lives
- PBS Linode Docker stack (`gitea` service) - PBS Linode Docker stack (`gitea` service)
@ -37,8 +35,7 @@ A **relocation is planned** ([[Sources/Homelab/gitea-migration-to-pve|gitea-migr
- [[Sources/Dev/github-deploy-refactor|github-deploy-refactor]] — pbsdeploybot + SSH host alias pattern - [[Sources/Dev/github-deploy-refactor|github-deploy-refactor]] — pbsdeploybot + SSH host alias pattern
- [[Sources/Dev/email-to-obsidian-automation|email-to-obsidian-automation]] — Gitea as vault write endpoint - [[Sources/Dev/email-to-obsidian-automation|email-to-obsidian-automation]] — Gitea as vault write endpoint
- [[Sources/Dev/email-obsidian-git-pipeline|email-obsidian-git-pipeline]] — email pipeline session notes - [[Sources/Dev/email-obsidian-git-pipeline|email-obsidian-git-pipeline]] — email pipeline session notes
- [[Sources/Homelab/env-file-hardening|env-file-hardening]] — pbsdeploy credential separation - [[Sources/Dev/env-file-hardening|env-file-hardening]] — pbsdeploy credential separation
- [[Sources/Homelab/gitea-migration-to-pve|gitea-migration-to-pve]] — planned PVE LXC relocation + cross-mirror
- [[Wiki/Reference/traefik|traefik]] — ingress layer - [[Wiki/Reference/traefik|traefik]] — ingress layer
- [[Wiki/Reference/n8n|n8n]] — automation that pushes to Gitea - [[Wiki/Reference/n8n|n8n]] — automation that pushes to Gitea
@ -47,5 +44,3 @@ A **relocation is planned** ([[Sources/Homelab/gitea-migration-to-pve|gitea-migr
- Ongoing — Self-hosted git service in PBS stack - Ongoing — Self-hosted git service in PBS stack
- **2026** — pbsdeploybot machine user created; SSH host alias pattern implemented - **2026** — pbsdeploybot machine user created; SSH host alias pattern implemented
- **2026** — Email-to-vault pipeline wired through Gitea as the push endpoint - **2026** — Email-to-vault pipeline wired through Gitea as the push endpoint
- **2026-05** — vault-mcp push surface wired (lovebug PAT + HTTPS credential helper)
- **2026-05-23** — PVE LXC migration plan written: two-instance cross-mirror, `petal-power` canonical on the new instance

View File

@ -3,7 +3,7 @@ type: topic-landing
path: Wiki/Reference path: Wiki/Reference
tags: tags:
- landing - landing
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Reference — Wiki # Reference — Wiki
@ -21,11 +21,9 @@ Compiled entities, topic landings, and synthesis for the Reference domain.
**AI & Agents** **AI & Agents**
- [[Wiki/Reference/lovebug|lovebug]] — named AI coding agent; Dispatch instance; primary collaborator - [[Wiki/Reference/lovebug|lovebug]] — named AI coding agent; Dispatch instance; primary collaborator
- [[Wiki/Reference/ob1|ob1]] — AI memory system; self-hosted pgvector:pg17 (`petalbrain`) + Ollama; Tailscale-only - [[Wiki/Reference/ob1|ob1]] — AI memory system; Supabase + pgvector; Tailscale-only; Phases 06
- [[Wiki/Reference/claude-code|claude-code]] — Anthropic CLI; primary AI tool across all projects - [[Wiki/Reference/claude-code|claude-code]] — Anthropic CLI; primary AI tool across all projects
- [[Wiki/Reference/dispatch|dispatch]] — AI agent orchestration framework; manages Lovebug lifecycle - [[Wiki/Reference/dispatch|dispatch]] — AI agent orchestration framework; manages Lovebug lifecycle
- [[Wiki/Reference/vault-mcp|vault-mcp]] — MCP write surface for the vault; dual-writes `petalbrain.wiki` + markdown + git
- [[Wiki/Reference/trellis|trellis]] — MCP server for resumable work threads across conversation boundaries
**Automation & Infrastructure** **Automation & Infrastructure**
- [[Wiki/Reference/n8n|n8n]] — self-hosted workflow automation; central automation hub - [[Wiki/Reference/n8n|n8n]] — self-hosted workflow automation; central automation hub

View File

@ -7,49 +7,45 @@ tags:
- pgvector - pgvector
- automation - automation
created: 2026-05-08 created: 2026-05-08
updated: 2026-05-24 updated: 2026-05-08
--- ---
# OB1 # OB1
## What it is ## What it is
OB1 (Open Brain) is Travis's personal AI memory and retrieval system — a self-hosted **pgvector/pgvector:pg17** Postgres store holding embeddings of session content, project notes, and vault content for semantic recall across AI conversations. It is the fast, voluminous, agent-facing half of the two-system memory model; the [[Wiki/Dev/ai-memory-architecture|wiki-vault]] is the slow, curated, human-facing half. OB1 is forked from the upstream community project `NateBJones-Projects/OB1`. OB1 is Travis's personal AI memory and retrieval system — a Supabase + pgvector stack that stores embeddings of project notes, session logs, and vault content to enable semantic recall across AI conversations. Named as a reference to the "Old Ben" Kenobi archetype of a wise, reliable memory keeper. OB1 sits alongside the wiki-vault in the broader second-brain architecture: the vault provides structured human-readable knowledge, OB1 provides fast semantic search for AI context injection.
> **Correction (2026-05-24 compile):** earlier versions of this page described OB1 as a "Supabase + pgvector" stack. The postgres-consolidation recon proved that's wrong — OB1 has always been a self-hosted pgvector container (`homelab-postgres`, DB now `petalbrain`), with embeddings from local **Ollama `nomic-embed-text`** (768-d), never Supabase.
## Current state ## Current state
Operational and consolidated into the `petalbrain` Postgres instance. Key facts as of the May 2026 consolidation: In active deployment across Phases 06. Key architectural decisions (from the addendum):
- **Storage**`ob1.thoughts` (raw captures) + `ob1.reflections` (synthesized lessons); embeddings live in the shared `public.embeddings` table (HNSW, vector_cosine_ops, m=16/ef_construction=64), 512-token chunks / 64-token overlap - **Tailscale-only access** — Phase 4 deferred public endpoint; OB1 only reachable over Tailscale mesh
- **Two-layer model** — raw captures + a daily reflection job (`claude-sonnet-4-6` via Anthropic API direct) that synthesizes generalizable lessons, mirroring the wiki's Sources/Wiki split - **Parallel write pipeline** — n8n writes new vault notes to both wiki-vault and OB1 simultaneously
- **Ambient capture** — the [[Sources/Homelab/ob1-jsonl-watcher-ambient-capture-from-claude-code-sessions|ob1-jsonl-watcher]] tails Claude Code / Cowork JSONL session files and posts turn-pairs to OB1's `capture_thought` (replaces the earlier "n8n parallel write" idea) - **Phase 7 (planned)** — Dispatch pre-compact hook wires Lovebug's context windows into OB1 for automatic memory ingestion before context is dropped
- **Embedding model** — Ollama `nomic-embed-text` (768-d), local; switching requires a full re-embed
- **Tailscale-only access** — no public endpoint The AI memory architecture research session explored harness-vs-model layering, Poolside and Pi.dev approaches, and the split between episodic (session notes) and semantic (wiki entity) memory modes.
- **`ob1-watcher` / `ob1-enricher`** daemons; enricher has a known PENDING_QUERY loop bug pending a fix before restart
## Where it lives ## Where it lives
- **Postgres** — `petalbrain` DB on `homelab-postgres` (pgvector:pg17), Proxmox; schema `ob1`, owned by the `ob1_mcp` service role - **Supabase instance** — hosted in homelab (Proxmox), contains pgvector extension
- **Embeddings** — Ollama (`nomic-embed-text`) on the homelab - **Ingest pipeline** — n8n on PBS Docker stack
- **Capture** — `ob1-jsonl-watcher` daemon on herbydev reading `~/.claude` session logs - **Query interface** — planned: homelab MCP server exposes OB1 recall as a tool
- **Access** — Tailscale-only - **Access** — Tailscale-only (no public endpoint)
## Related projects ## Related projects
- [[Sources/Homelab/ob1-main-deployment|ob1-main-deployment]] — full deployment plan (Phases 06) - [[Sources/Homelab/ob1-main-deployment|ob1-main-deployment]] — full deployment plan (Phases 06)
- [[Sources/Homelab/ob1-deployment|ob1-deployment]] — addendum (Tailscale, Phase 7 Dispatch hook) - [[Sources/Homelab/ob1-deployment|ob1-deployment]] — addendum (Tailscale, parallel write, Phase 7)
- [[Sources/Homelab/ob1-jsonl-watcher-ambient-capture-from-claude-code-sessions|ob1-jsonl-watcher]] — ambient session capture
- [[Sources/Homelab/postgres-consolidation-ob1-reflection-layer|postgres-consolidation-ob1-reflection-layer]] — consolidation + reflection layer
- [[Sources/Homelab/postgres-consolidation-followups|postgres-consolidation-followups]] — reflector activation + cleanup
- [[Sources/Dev/ai-memory-architecture-research|ai-memory-architecture-research]] — architecture research session - [[Sources/Dev/ai-memory-architecture-research|ai-memory-architecture-research]] — architecture research session
- [[Sources/Dev/second-brain|second-brain]] — wiki-vault + OB1 second-brain pattern
- [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — MCP server will expose OB1 recall
- [[Wiki/Reference/n8n|n8n]] — ingest pipeline
- [[Wiki/Reference/tailscale|tailscale]] — access layer - [[Wiki/Reference/tailscale|tailscale]] — access layer
- [[Wiki/Dev/ai-memory-architecture|ai-memory-architecture]] — synthesis page - [[Wiki/Dev/ai-memory-architecture|ai-memory-architecture]] — synthesis page
## History ## History
- **2026** — Architecture research: pgvector, harness vs model layers, Poolside/Pi.dev reviewed - **2026** — Architecture research session: pgvector, harness vs model layers, Poolside/Pi.dev reviewed
- **2026** — Deployment (Phases 06); pgvector container + Ollama embeddings; Tailscale-only - **2026** — Full deployment plan written (Phases 06, Supabase + pgvector)
- **2026-05-14** — Embedding dim migrated 1536→768 for `nomic-embed-text`; `ob1-jsonl-watcher` plan written - **2026** — Addendum locked: Tailscale-only, parallel n8n write, Phase 7 Dispatch hook
- **2026-05-15** — Consolidated into `petalbrain`; `ob1.thoughts` + shared `public.embeddings`; reflection layer designed - **Planned** — MCP server integration to expose OB1 recall as homelab tool
- **2026-05-18** — Dispatch subprocess-leak incident reinforced the case for harness-owned subprocess lifecycle

View File

@ -6,7 +6,7 @@ tags:
- docker - docker
- homelab - homelab
created: 2026-05-08 created: 2026-05-08
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Traefik # Traefik
@ -24,7 +24,7 @@ Active at version 3.6.11 (upgraded March 2026 during the server stability harden
- **Cloudflare Tunnel** — Traefik sits behind Cloudflare Tunnel for MCP and some homelab services - **Cloudflare Tunnel** — Traefik sits behind Cloudflare Tunnel for MCP and some homelab services
- **Knot DNS** — primary and secondary DNS integrated with Traefik TLS pipeline - **Knot DNS** — primary and secondary DNS integrated with Traefik TLS pipeline
The homelab runs its own Traefik **3.7 on VM 102 (`10.0.21.181`)** with Docker + file + ACME providers, separate from the PBS instance. It holds the LE prod wildcard `*.herbylab.dev` (Cloudflare DNS-01) and fronts a growing set of services — `whoami`, the Traefik dashboard (TLS + basicauth), `pihole`, and `openwrt` LuCI — each reachable behind a `cloudflared` tunnel (`traefik-vm`). The homelab also runs Traefik (or uses the same pattern) for `.herbylab.dev` services behind Authentik.
## Where it lives ## Where it lives
@ -39,8 +39,6 @@ The homelab runs its own Traefik **3.7 on VM 102 (`10.0.21.181`)** with Docker +
- [[Sources/Homelab/wp-cron-supercronic-deploy|wp-cron-supercronic-deploy]] — block-wpcron middleware - [[Sources/Homelab/wp-cron-supercronic-deploy|wp-cron-supercronic-deploy]] — block-wpcron middleware
- [[Sources/Homelab/ufw-docker-outage-fix|ufw-docker-outage-fix]] — UFW + Docker/Traefik outbound rules fix - [[Sources/Homelab/ufw-docker-outage-fix|ufw-docker-outage-fix]] — UFW + Docker/Traefik outbound rules fix
- [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — MCP server behind Traefik - [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — MCP server behind Traefik
- [[Sources/Homelab/2026-05-11-traefik-phase1-phase2-wildcard-canary|2026-05-11-traefik-phase1-phase2-wildcard-canary]] — homelab VM 102: wildcard cert + canary
- [[Sources/Homelab/2026-05-21-traefik-routes-for-pihole-openwrt-us-test-authy-static-ip-cutove|2026-05-21-traefik-routes-pihole-openwrt]] — pihole/openwrt routes
- [[Wiki/Reference/cloudflare|cloudflare]] — tunnel + DNS - [[Wiki/Reference/cloudflare|cloudflare]] — tunnel + DNS
- [[Wiki/Reference/authentik|authentik]] — auth layer - [[Wiki/Reference/authentik|authentik]] — auth layer
- [[Wiki/Homelab/homelab-ingress-stack|homelab-ingress-stack]] — synthesis - [[Wiki/Homelab/homelab-ingress-stack|homelab-ingress-stack]] — synthesis
@ -52,5 +50,3 @@ The homelab runs its own Traefik **3.7 on VM 102 (`10.0.21.181`)** with Docker +
- **March 2026**`block-wpcron` middleware added when Supercronic replaced WP-Cron - **March 2026**`block-wpcron` middleware added when Supercronic replaced WP-Cron
- **2026** — UFW `after.rules` fixed to restore Docker/Traefik outbound routing after UFW misconfiguration caused outage - **2026** — UFW `after.rules` fixed to restore Docker/Traefik outbound routing after UFW misconfiguration caused outage
- **2026-05-06** — Traefik used as ingress for MCP server at `mcp.herbylab.dev` - **2026-05-06** — Traefik used as ingress for MCP server at `mcp.herbylab.dev`
- **2026-05-11** — Homelab Traefik 3.7 on VM 102: Phase 1.6 wildcard cert + Phase 2 canary; dashboard locked behind TLS+basicauth; `traefik-vm` cloudflared tunnel
- **2026-05-21**`pihole` + `openwrt` routed on `*.herbylab.dev`; `addPrefix` redirect-loop and self-signed-backend (`insecureSkipVerify`) lessons captured

View File

@ -1,44 +0,0 @@
---
type: entity
path: Wiki/Reference
tags:
- mcp
- claude-code
- lovebug
created: 2026-05-24
updated: 2026-05-24
---
# Trellis
## What it is
Trellis is an MCP server that captures and resumes long-running **threads of work** across conversation boundaries. The unit is a *thread* — a logical work effort that may span many chat sessions over days or weeks, with pause/resume verbs so context can be switched without losing working state. It solves the "where exactly did we leave the Traefik debugging" problem that memory is too lossy for and chat history can't restore. Trellis is the *record* leg of the three-way memory split: CLAUDE.md is instructions, Trellis is where-we-are-in-the-doing, and the [[Wiki/Dev/ai-memory-architecture|wiki + OB1]] hold lessons and outcomes.
## Current state
Operational, Postgres-backed in the consolidated `petalbrain` instance (schema `trellis`, owned by the `trellis_mcp` role). Shape:
- **Four tables**, append-only events log: `threads`, `tags`, `thread_tags`, `events`. Checkpoint payload is freeform markdown the agent synthesizes.
- **Seven tools** (`*_thread`): `start`, `checkpoint` (was `pause`), `resume`, `get`, `list`, `fork`, `update`.
- **Lifecycle is prompt-driven** — no autonomous jobs, no auto-abandon. Threads persist until explicitly acted on.
- A [[Sources/Homelab/trellis-mcp-tool-surface-followups|tool-surface refinement]] is in flight: `pause_thread`→`checkpoint_thread` rename (the verb writes a `checkpoint` event, not a status change, and collided with the `paused` status), plus optional integer `id` addressing alongside the canonical `slug`.
## Where it lives
- `trellis-mcp` container; same deployment pattern as vault-mcp (FastMCP, Authentik in front, Cloudflare Tunnel), hostname `trellis.herbylab.dev`
- Data: `petalbrain.trellis` schema on the `homelab-postgres` pgvector:pg17 container
- Local repo: `/opt/projects/homelab/trellis-mcp/`
## Related projects
- [[Sources/Homelab/trellis-mcp|trellis-mcp]] — design + build plan
- [[Sources/Homelab/trellis-mcp-tool-surface-followups|trellis-mcp-tool-surface-followups]] — checkpoint rename + id addressing
- [[Sources/Homelab/postgres-consolidation-ob1-reflection-layer|postgres-consolidation-ob1-reflection-layer]] — trellis cutover into petalbrain
- [[Wiki/Reference/vault-mcp|vault-mcp]] — sibling MCP, same deployment pattern
- [[Wiki/Dev/ai-memory-architecture|ai-memory-architecture]] — synthesis (Trellis = the "record" leg)
## History
- **2026-05-10** — Design locked: thread model, four-table append-only schema, seven-tool surface, prompt-driven lifecycle
- **2026-05** — Consolidated into `petalbrain.trellis` (trellis cutover, Phase 2/3 of the consolidation)
- **2026-05-23** — Tool-surface follow-ups planned: `checkpoint_thread` rename + `id` addressing

View File

@ -1,53 +0,0 @@
---
type: entity
path: Wiki/Reference
tags:
- mcp
- pgvector
- embeddings
- wiki
- git
created: 2026-05-24
updated: 2026-05-24
---
# vault-mcp
## What it is
vault-mcp is the MCP server that writes Travis's project plans and session notes into the wiki vault. It is the canonical write path for the `Sources/` layer: a `create_artifact` call **dual-writes** a Postgres row in `petalbrain.wiki` *and* a markdown file in the vault repo, then commits and pushes to Gitea, then chunks and embeds the content into the shared `public.embeddings` table. It is the machine half of the [[Wiki/Dev/ai-memory-architecture|memory architecture]] — agents and the email pipeline write through it; the compile skill reads what it produced. Formerly named `homelab-mcp-server` / `herbydev-mcp`.
## Current state
Operational end-to-end after a long May-2026 debugging chain (package rename → import paths → tool exposure → wrapper dispatch → env config → schema search_path → git credential helper → token). Key facts:
- **Tools**`create_artifact` + `update_artifact` are canonical; `update_artifact` mutates metadata only (artifacts are immutable once created); `save_note` is a hidden deprecation shim
- **Schema** — owns `petalbrain.wiki` as the `vault_mcp` role (`search_path = wiki, public`)
- **Embeddings** — chunks at 512 tokens / 64 overlap, writes to `public.embeddings` (source_schema=`wiki`)
- **NOTIFY → Trello** — project-status changes fire a Postgres NOTIFY that n8n turns into Trello card moves; hand-editing frontmatter does *not* fire it (use the tool)
- **Git push** — HTTPS with a `lovebug` PAT via an env-driven credential helper (the secret never lands in `.git/config`)
- The `vault:search` semantic tool ([[Sources/Homelab/vault-semantic-search|vault-semantic-search]]) is designed but not yet built
## Where it lives
- `vault-mcp` container on the homelab; hostname under `*.herbylab.dev` behind Authentik + Cloudflare Tunnel
- Data: `petalbrain.wiki` schema on `homelab-postgres` (pgvector:pg17)
- Local repo: `/opt/projects/homelab/vault-mcp/` (renamed from `herby-dev`)
- Writes markdown into this vault (`/opt/projects/wiki-vault/Sources/`)
## Related projects
- [[Sources/Homelab/homelab-mcp-server|homelab-mcp-server]] — original stand-up (FastMCP + Authentik + Tunnel)
- [[Sources/Homelab/herbylab-project-management|herbylab-project-management]] — artifact/project model + NOTIFY→Trello
- [[Sources/Homelab/postgres-consolidation-ob1-reflection-layer|postgres-consolidation-ob1-reflection-layer]] — wiki schema + embeddings consolidation
- [[Sources/Homelab/postgres-consolidation-followups|postgres-consolidation-followups]] — write-surface cleanup items
- [[Sources/Homelab/vault-semantic-search|vault-semantic-search]] — planned `vault:search` read tool
- [[Wiki/Reference/trellis|trellis]] — sibling MCP, same deployment pattern
- [[Wiki/Reference/gitea|gitea]] — push target
- [[Wiki/Dev/ai-memory-architecture|ai-memory-architecture]] — synthesis
## History
- **2026-05-06** — Stood up as `homelab-mcp-server` at `mcp.herbylab.dev`
- **2026-05** — Renamed to `vault-mcp`; artifact tooling (`create_artifact`/`update_artifact`) added
- **2026-05-15** — Owns `petalbrain.wiki`; chunked embeddings into `public.embeddings`
- **2026-05-16/17** — Write surface declared operational end-to-end (dual-write + git push + embeddings) after the full-stack debugging chain

View File

@ -3,7 +3,7 @@ type: topic-landing
path: Wiki path: Wiki
tags: tags:
- landing - landing
updated: 2026-05-24 updated: 2026-05-08
--- ---
# Wiki # Wiki
@ -21,10 +21,7 @@ Generated and maintained by the wiki-maintenance compile skill.
## Key Entities ## Key Entities
- [[Wiki/Reference/lovebug|lovebug]] — named AI coding agent (Dispatch) - [[Wiki/Reference/lovebug|lovebug]] — named AI coding agent (Dispatch)
- [[Wiki/Reference/ob1|ob1]] — AI memory system (self-hosted pgvector:pg17 / `petalbrain`) - [[Wiki/Reference/ob1|ob1]] — AI memory system (Supabase + pgvector)
- [[Wiki/Homelab/petalbrain|petalbrain]] — consolidated pgvector DB behind wiki/ob1/trellis
- [[Wiki/Reference/vault-mcp|vault-mcp]] — MCP write surface for the vault
- [[Wiki/Reference/trellis|trellis]] — resumable work threads across sessions
- [[Wiki/Reference/plant-based-southerner|plant-based-southerner]] — the PBS business - [[Wiki/Reference/plant-based-southerner|plant-based-southerner]] — the PBS business
- [[Wiki/Reference/jenny|jenny]] — PBS co-founder and content creator - [[Wiki/Reference/jenny|jenny]] — PBS co-founder and content creator
- [[Wiki/Reference/n8n|n8n]] — central automation hub - [[Wiki/Reference/n8n|n8n]] — central automation hub

43
log.md
View File

@ -24,46 +24,3 @@ Append-only event log. Each entry records a compile, lint, or migration run.
Sources/index, Wiki/Dev, Wiki/Venture, Wiki/Homelab, Wiki/Reference, Wiki/index, root index Sources/index, Wiki/Dev, Wiki/Venture, Wiki/Homelab, Wiki/Reference, Wiki/index, root index
- Entity promotions: all 17 met 2+ project threshold; Docker and Dispatch added per user spec - Entity promotions: all 17 met 2+ project threshold; Docker and Dispatch added per user spec
- No pages deleted or demoted - No pages deleted or demoted
## [2026-05-24 21:30] compile | 34 sources since first compile (11 Dev, 23 Homelab)
- Pages touched: Sources/index, Sources/Dev/index, Sources/Homelab/index, Wiki/index,
Wiki/Reference/index, Wiki/Reference/ob1, Wiki/Reference/traefik, Wiki/Reference/gitea,
Wiki/Homelab/proxmox, Wiki/Dev/pbs-hub, Wiki/Dev/ai-memory-architecture (synthesis)
- Pages created: none (entity promotions proposed, not auto-created — see below)
- Entities promoted: none this run
- Entities PROPOSED for promotion (await user approval): trellis, vault-mcp, petalbrain,
pbs-hub-mcp, knot-dns, herbyeos
- Synthesis pages written: 0 new; ai-memory-architecture substantially updated (petalbrain
consolidation, public.embeddings, OB1 two-layer + reflection job, JSONL watcher, Trellis
third leg); 9→17 sources
- Contradictions flagged: OB1 described as "Supabase + pgvector" across ob1 entity, Wiki/index,
Wiki/Reference/index, ai-memory-architecture — corrected to self-hosted pgvector:pg17/petalbrain
+ Ollama nomic-embed-text (per phase0-recon direct inventory)
- Tags proposed: none
- Notes: 8 source files are pipeline test artifacts (5x vault-push/create-artifact verification,
2x vault-integration-test, 1x vault-semantic-search-integration-test) — flagged for cleanup,
NOT deleted. Lint items: type=session-note (singular) on 4 files should be session-notes;
MCP-written project-plans intentionally omit status/updated frontmatter (per herbylab-project-
management design) — not an error. Venture domain unchanged (no new sources).
## [2026-05-24 21:45] compile | entity promotions (user-approved)
- Pages created: Wiki/Reference/trellis, Wiki/Reference/vault-mcp, Wiki/Homelab/petalbrain,
Wiki/Homelab/knot-dns, Wiki/Dev/herbyeos
- Entities promoted: trellis, vault-mcp, petalbrain, knot-dns, herbyeos (5 of 6 proposed)
- Deferred per user: pbs-hub-mcp ("that will come later")
- Indexes updated: Wiki/index, Wiki/Reference/index, Wiki/Homelab/index, Wiki/Dev/index
- Notes: Sources are MCP-written/immutable, so referencing Sources files were NOT rewritten to
wikilinks; new entity pages link outward to their sources instead.
## [2026-05-24 22:00] cleanup | delete test artifacts + stale worktrees (user-approved)
- Deleted 8 pipeline test artifacts: Dev/2026-05-16-vault-integration-test{,-multi},
Homelab/2026-05-17-vault-{create-artifact,push-final,push-success,push-token-fix,push}-verification,
Homelab/vault-semantic-search-integration-test-2026-05-16
- Removed 3 stale git worktrees (.claude/worktrees/{amazing-bardeen,inspiring-borg-1ee437,
reverent-sinoussi}) — all clean, none complained — and deleted their 3 merged claude/* branches
- Index fixups: removed 2 deleted-file links from Sources/Dev/index; refreshed Sources/index counts
(96→88 files; Dev 9→7 sessions, Homelab 23→22 projects / 22→17 sessions)
- Broken-link recheck: 0 real broken links remaining