2dph

module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 12, 2026 License: MIT

README

2dph — deductionphile

Python uv Tests Latest Release GitHub Stars

An evidence-first brain over the operational eSlider stack. Facts need two independent sources, or they are (not confirmed).

2dph is a single embedded knowledge graph (LadybugDB = Kuzu successor) with native HNSW vector + BM25 full-text indexes, built from markdown, compose files, ssh config, docker state, and git history. Search is deduction: confirmed facts first, supporting info second, web-search as the independent second source when the local graph cannot confirm.

Architecture

graph TB
    subgraph corpus["Corpus"]
        OPS["ops stack<br/>chat · onlyoffice · npm · observability · ai-bot"]
        SSH["~/.ssh/config"]
        CV["portfolio yaml"]
        GH["git history · authors"]
    end

    subgraph dph["2dph tools"]
        EX["bin/facts/extract<br/>2-source pairing"]
        AU["bin/facts/audit<br/>confidence + staleness"]
        IDX["bin/kb/index<br/>chunk + embed"]
        MD["bin/md/import<br/>mistune leaves"]
        SR["bin/kb/search<br/>deduction + --hop"]
    end

    subgraph store["Ladybug var/kb.lbug"]
        FACTS["facts root<br/>confirmed"]
        INFO["info root<br/>narrative"]
        VEC["HNSW cosine"]
        FTS["BM25 FTS"]
        GR["File→HAS_VERSION→Commit→AUTHORED→Person"]
    end

    subgraph ai["AI"]
        M2V["model2vec<br/>potion-multilingual-128M"]
    end

    subgraph ext["External"]
        WS["web-search skill<br/>(2nd independent source)"]
    end

    OPS --> EX
    SSH --> EX
    CV --> EX
    GH --> EX
    EX --> FACTS
    EX --> INFO
    MD --> GR
    MD --> INFO
    IDX --> M2V
    IDX --> VEC
    IDX --> FTS
    IDX --> FACTS
    SR --> FACTS
    SR --> INFO
    SR --> VEC
    SR --> FTS
    SR --> WS
    AU --> FACTS

The method

Every assertion is Who / What / How / Where / When + evidence + confidence, mirroring the detective detective skill: ≥2 independent sources confirm a fact; conflicting sources or a single source → hypothesis → (not confirmed).

root meaning used for answers
facts assertions backed by ≥2 sources (confirmed) yes, with evidence links
info descriptive/narrative leafs (how-tos, notes) context only, marked (not confirmed)
bin/kb/search "Matrix federation over HTTPS"      # facts → info → web-search
bin/kb/search "what runs on arc-2" --hop 1        # walk graph edges
bin/kb/search "where is cs-lexicon" --json | yq '.'  # YAML by default
bin/kb/get <id> --body                            # full chunk on demand
bin/kb/stats                                      # index health
bin/kb/eval                                       # recall@5 gate

Mail is a first-class corpus (retrievable through the same search):

bin/mail/sync.go --source onlyoffice,gmail --workers 8 --out var/mail  # raw sync (Go)
bin/mail/import --from-raw var/mail                                     # JSON → markdown
bin/mail/index_mail                                                     # rebuild brain incl. mail
bin/kb/search "Mietwagen Nürnberg invoice"                              # now answers from mail

Storage

  • LadybugDB — single var/kb.lbug, Cypher property graph, HNSW + BM25 in one engine, embedded (no server), ACID, read-only-safe for concurrent readers. Never DROP INDEX FTS/VECTOR on Ladybug 0.19: DROP leaves ghost catalog tables (_0_Leaf_vec_UPPER) so recreate fails while SHOW_INDEXES omits HNSW. Fresh indexes = delete var/kb.lbug + bin/kb/index --rebuild. Use ensure_indexes() after upserts.
  • model2vec — potion-multilingual-128M static embeddings (256-dim), CPU-fast, deterministic, no Ollama runtime dependency.
  • facts and info split semantically by root column but written inside the same transaction.

Tooling conventions

bin/{subject}/{method} — self-describing: shebang on line 1, usage comment from line 2. bash + python primary; golang via the Go shebang when a compiled helper is right. YAML default output, --json for machines. Everything that touches network/db is read-only, throttled, cached. Tests gate every commit.

Development

uv venv .venv                                  # Python 3.12, uv-managed
uv pip install -r requirements.lock.txt        # pinned toolchain
bin/facts/audit self                           # lexicon consistency gate
go test ./... && python -m unittest discover -s bin/tools -t .

Docker (optional, cached model + var volumes):

docker compose run --rm brain index            # (re)index corpus
docker compose run --rm brain search "query"   # one-shot query
docker compose run --rm brain serve            # async Go HTTP server
docker compose up brain-watch                  # auto re-index on change
  • go-second-brain — the earlier Neo4j + Qdrant + Matrix RAG brain
  • agent-skills — upstream skills (web-search, db-yaml, …) that 2dph integrates
  • detective method — the two-source method

See PLAN.md for decisions, execution status, and v2 open questions.

Directories

Path Synopsis
bin
usr/bin/env go run "$0" "$@"; exit bin/serve.go - async Go HTTP server for the 2dph brain (see bin/server).
usr/bin/env go run "$0" "$@"; exit bin/serve.go - async Go HTTP server for the 2dph brain (see bin/server).
kb command
usr/bin/env go run "$0" "$@"; exit bin/kb/watch.go - re-index the 2dph brain when corpus files change.
usr/bin/env go run "$0" "$@"; exit bin/kb/watch.go - re-index the 2dph brain when corpus files change.
mail command
usr/bin/env go run "$0" "$@"; exit bin/mail/sync.go - async download of OnlyOffice and Gmail mail to var/mail/.
usr/bin/env go run "$0" "$@"; exit bin/mail/sync.go - async download of OnlyOffice and Gmail mail to var/mail/.
mail/sync
Package synccmd wires the sync library to a CLI: reads .env, parses flags, picks sources, prints stats.
Package synccmd wires the sync library to a CLI: reads .env, parses flags, picks sources, prints stats.
server
Package server serves the 2dph brain over HTTP.
Package server serves the 2dph brain over HTTP.
watch
Package watch polls corpus directories for changes and re-runs bin/kb/index.
Package watch polls corpus directories for changes and re-runs bin/kb/index.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL