Ghost Intel 98 — v3.66.0
GeoINT Event Details dossier — Phase 3 (Labeled offline-AI + honest Media).
The final phase of the Event Details dossier fills the last two tabs — MEDIA and INTEL SUMMARY — without inventing a single fact. Everything deterministic works for every user; the AI summary is strictly local, isolated, and clearly labeled.
What's new
- INTEL SUMMARY tab. Three sections:
- Key Entities — places and named mentions pulled deterministically from the report's own text (no cloud, no model needed). Nothing is typed as "person" or "org" the app can't substantiate.
- Reported casualty / verification phrases — the only place casualty detail appears, and only as verbatim quotes from the source, each labeled "extracted · unverified". Never a synthesized number, never an invented "verified" badge.
- AI Summary — a one/two-sentence neutral summary of the description, generated by your own local Ollama model, stamped "AI · unverified." It summarizes the unverified report; it does not assess whether it's true. No local model? The section says so and every other tab keeps working.
- MEDIA tab. An honest affordance: it tells you what media the source reports (photo / video) and gives you an Open source button — it deliberately does not inline a remote image or video.
Honesty & privacy (this is an offline OSINT tool)
- The AI never leaves your machine and never pulls anything in. The summary runs through a new, isolated local path — Ollama-only (an OpenAI-compatible/remote endpoint is treated as "no local model", so unverified OSINT is never sent to a third party), endpoint SSRF-guarded, and with no web search, no RAG, no memory — unlike the conversational assistant. One loopback call, nothing else.
- No remote media is ever inlined. The app's own sanitizer strips remote
<img>because it would beacon out; the Media tab honors that — it's an "open the source" affordance, not a gallery. A test asserts no remote<img>/<video>renders on any tab. - Casualties are quotes, not numbers. Extraction is deterministic and verbatim; the model is never asked for, and never used to produce, a casualty figure.
Under the hood
- Two new pure deterministic renderer selectors (
deriveEntities,extractClaimPhrases) + a new isolated main-processsummarizeEventservice andgeoint:summarizeEventIPC channel. No new dependency. - Built subagent-driven over 5 TDD tasks with a parallel adversarial whole-branch review weighted to AI-fabrication and egress; controller-verified. The review caught and fixed a real cross-event AI-summary misattribution (a switched event briefly showing the prior event's summary) and tightened the extractors (Title-Case headlines no longer become one bogus "entity"; casualty matching is word-boundary-anchored so "deadline" isn't filed as a casualty).
Verification
- 3,778 automated tests passing (1 skipped);
pnpm typecheckclean.
Install
Windows NSIS installer — GhostIntel98-Setup-3.66.0.exe (per-user, no admin; unsigned → More info → Run anyway):
- SHA-256:
f51c18fc44bc433b97fdf966ff901a72c70e656dd3cfb0286ec5d7c7263a9ff4 - Size: 963,147,359 bytes (~963 MB).
Everything from v3.65.0 and earlier carries forward.