- bin/facts/crm: prove person<->company/company<->project against ooCRM x corpus SoT (knowledge-mesh-seed.yaml), write 78 facts (root=facts) - tools/crmfacts.py + test_crm_facts.py: parser under unit tests (26 pass) - docs/crm-associations-proof.md: provable graph, mistakes, fixes - oo merge 759->763 resolves duplicate GoldenRatio.Exchange legal entity - bin/db/ssh-tunnel: "$0" self-check + accept-new/BatchMode ssh flags - AGENTS.md: document bin/facts/crm
1.7 KiB
1.7 KiB
CRM association proof (oo CLI ↔ corpus)
Proven with oo (eslider/go-onlyoffice) against the OnlyOffice portal
(office.produktor.io). Portal CRM is the SSOT for company ↔ person ↔
project associations; the corpus SoT (eslider/cv/projects/knowledge-mesh-seed.yaml)
is the second, independent source. Facts that can be backed by both are
written to the brain under root=facts by bin/facts/crm.
What was verified
- Logical counts (portal MySQL): 1300 contacts = 897 persons + 404 companies, 198 projects, 998 deals, 939 project↔contact links.
- Every client company linked to a project has ≥1 person underneath.
- Every person
company_idresolves to an existing company. - Corpus org list (9) maps 1:1 onto CRM companies: ProProdukt SL / produktor.io, Dyvenia, Immowelt AG, WhereGroup, Keynote SIGOS, D2S/SYSTEMS, GRID, Pack und Cup, Markets Platform.
- 78 person↔company association facts written to the brain
(
how=crm-crosscheck,type=association). Recall@5 inbin/kb/eval= 1.0.
Mistakes found
| # | Mistake | Fix |
|---|---|---|
| 1 | Duplicate legal entity GoldenRatio.Exchange (contact 759) vs Golden Ratio Exchange (763); 3 deals (211, 287, 559) were linked to 759 |
oo contacts merge 759 763 — 763 kept, 759 removed, deal links re-pointed to 763 |
| 2 | env/-wide: OnlyOffice creds file used wrong UX (user eslider, password with $2 suffix) making oo auth fail |
.env fixed to eslider@gmail.com + clean password; .env stays gitignored |
Gates after fix
uv run python -m unittest discover -s tools -t .→ 26 tests OKbin/facts/audit self+bin/facts/audit db→ okbin/kb/eval→ recall@5 = 1.0go test ./...(serve/) → ok