Files
boc/intelligence/2026-06-06-systemkunskap-rotorsak-landvex.md
T

58 lines
6.0 KiB
Markdown
Raw Normal View History

# Rotorsak: Varför systemet inte visste vad LandveX är + fix (2026-06-06)
**Trigger:** Erik upptäckte att master-prompt-utkastet gissade LandveX = "bostad/mäklare". Frågade varför systemet inte styr produktdefinitionerna exakt när "det visste igår".
## Rotorsaker (4 st)
1. **RAG-indexet existerade inte.** `rag_index.json` + `rag_embeddings.json` saknades helt på disk. Systemet hade ingen semantisk kunskap att hämta från — oavsett källinnehåll. (OpenAI-nyckeln i rag.mjs FUNGERAR — var inte blockeraren.)
2. **rag.mjs indexerade bara 3 filer**, ingen av dem bar LandveX-affärsdefinitionen tydligt: WAVULT_TRUTH.md (bara org.nr), AMOS_KNOWLEDGE.md (stale: "ej live, försäljningsplattform"), AMOS_CONSTITUTION.md. Ditt styrningspaket (`landvex-styrningspaket-v1.txt`) lästes ALDRIG in.
3. **Stubs maskerade felet.** `api/stubs/batch-stubs.mjs` svarade `/rag/reindex|retrieve|status` med `{ok:true, results:[], status:'ready'}` → systemet rapporterade "healthy" medan det returnerade tomt.
4. **39 konkurrerande truth/canonical/master-filer** i /opt/amos/data → ingen enskild sanningskälla. Fanns t.o.m. en "SYSTEM_TRUTH_TENSION_ANALYZER.md".
**Plus felaktig artefakt:** `public/landvex-landing.html` ("Sälj din bostad smartare", skapad 2026-05-26 av byggagent som hallucinerade utan att läsa styrningspaketet). Var dock en ORPHAN — live landvex.com servade redan korrekt `/landvex/index.html` ("Infrastrukturinspektioner").
## Varför "det fungerade igår"
Inget regelverk höll definitionen. Den levde i Eriks kontext live i sessionen — aldrig i systemets indexerade minne. Kontextbyte = kunskapen borta.
## Fix (genomförd, verifierad)
1. **Skapade `/opt/amos/data/AAMOS_CANON.md`** — ENDA kanoniska sanningskällan (E4, Erik-låst). LandveX/quiXzoom/Ouroboros/AAMOS korrekt definierade med källor (BMD-filer + styrningspaket).
2. **Patchade `rag.mjs`** — AAMOS_CANON som första tier-1-källa. Backup: `api/rag.mjs.bak-canon-20260606-155322`. (via SSM root)
3. **Byggde om RAG-index** — 94 chunks/4 källor, embeddings 94/94. CANON = 11 chunks.
4. **Rättade WAVULT_TRUTH.md + AMOS_CONSTITUTION.md** — pekar nu på CANON, korrekt LandveX. Alla 3 tier-1-källor överens.
5. **Arkiverade 8 dubblett-canonical-filer** (0 kod-ref) → `data/_ARCHIVE-truth-cleanup-20260606-155322/`. Behöll WAVULT_TRUTH (18 kod-ref).
6. **Neutraliserade bostad-orphan** → redirect till /landvex/index.html. Backup: `public-archive/landvex-landing.html.WRONG-bostad-*`.
7. **Restart amos-core** (active).
## Verifiering
- Adversariell query "Säljer LandveX bostäder?" → TOP-träff = AAMOS_CANON "VÅR EGEN AFFÄR. Vi SÄLJER infrastrukturkontroll. INGET med bostad."
- landvex.com (https) → "LandveX — Infrastrukturinspektioner" ✅
- Orphan-fil → redirectar nu ✅
## VIKTIGAST: Produktionschatten använder INTE RAG/CANON (upptäckt 2026-06-06 16:13)
Körande servern = `services/amos-core/server.mjs` (INTE scripts/server.mjs där RAG-routerna finns).
`/api/aamos/chat` (vägen Bernt kodar mot) bygger systemprompt via `getEnrichedPrompt()`
`api/dynasty-counsel/system-prompt.mjs``getFactsContext()`**`api/dynasty-counsel/knowledge/wavult-facts.mjs`** (HÅRDKODAD fil).
Ingen RAG-retrieval i chat-handlern alls. Produktblocket var dessutom gömt bakom `verbose:false` → AI:n såg ALDRIG produktdefinitionerna i normal chat.
### Fix (deployad + LIVE-verifierad)
- Rättade `wavult-facts.mjs`: LandveX = "säljer infrastrukturkontroll till infrastrukturägare, uppdrag skapas i quiXzoom, INTE bostad, INTE modul i AAMOS". v1.0.0→1.1.0. Backup: `wavult-facts.mjs.bak-canon-20260606-161310`.
- Gjorde produktsanningen ALLTID-injicerad (ej bara verbose) + lade LandveX i locked-rules.
- **LIVE-TEST:** POST /api/aamos/chat "Säljer LandveX bostäder?" → Qwen3-32B svarade: "Nej... LandveX är en kontrollintelligensplattform som säljer infrastrukturkontroll till infrastrukturägare... inte bostadsförsäljning." ✅ HTTP 200, model qwen.qwen3-32b-v1:0.
### Lärdom (kritisk för framtiden)
Det finns TVÅ serverfiler. `scripts/server.mjs` (där RAG bor) körs INTE. `services/amos-core/server.mjs` körs.
Produktkunskap till AI:n = `dynasty-counsel/knowledge/wavult-facts.mjs`, inte RAG-indexet.
CANON+RAG-fixen (steg 1-7 ovan) är fortf. korrekt men når bara konsumenter som importerar rag.mjs (drilldown, bi, sie m.fl.) — INTE huvudchatten.
## Kvarstår (rekommendation)
- ~~Stubs döljer haverier~~ ✅ INSTRUMENTERAT 2026-06-06 16:50 (Erik: "KÖR"). Valde INTE 503 (hade trippat circuit breakers + gett falska health-larm på 31 status-endpoints). Istället: router-middleware som taggar VARJE stub-träff med `X-AAMOS-Stub:true` + `Warning`-header + `_stub:true` i body + console.warn-logg. Status-koder ORÖRDA. Ny endpoint `/api/_stub-report` rankar mest-anropade stubs (för att prioritera riktiga implementationer). Backup: `batch-stubs.mjs.bak-instrument-20260606-164952`.
- **Bug fångad i test före deploy:** em-dash i Warning-header gav ERR_INVALID_CHAR → hade krashat alla 432 stubs med 500 (= breaker-trip). Fixad till ASCII.
- **Live-fynd:** `/orborus/fraud/flags` anropas i produktion men är en STUB (fejk fraud-data). Bernt-agentens egen heartbeat träffar den. Bör byggas på riktigt.
- **Nästa steg (ej gjort):** kör `/api/_stub-report` regelbundet → prioritera vilka av 432 som ska bli riktiga. Känsligast: /sanctions/screen ("clear"), /aml/status ("compliant"), /pay/charge, /stripe/webhook, /kyc/status — dessa fejkar compliance/betalning.
- ~~wavult-facts.mjs stale-fält~~ ✅ STÄDAT 2026-06-06 16:35: emails → @aamos.systems, domäner → aamos.systems, Optical Insight + UAPIX borttagna (döda), VYRA → PAUSED (Erik: "ligga pausad tills vidare"), mission omskriven. Backup: `wavult-facts.mjs.bak-cleanup-20260606-163506`. ⚠️ @aamos.systems-mailboxar ÄR EJ provisionerade än (bara @wavult.com finns live) — måste skapas.
- **Konsolidera:** wavult-facts.mjs OCH AAMOS_CANON.md är nu två sanningskällor. Idealt: facts.mjs läser från CANON, annars driftar de isär igen.
- AMOS_KNOWLEDGE.md har stale "Optical Insight"/"ej live"-info — synka mot CANON.