System is a non-functional stub - not a real OSINT investigation tool — Phase 1: Problem #79
Labels
No labels
agentic-osint
audit
blocked:commit-ready-failed
blocked:gate-fetch
blocked:gate-fetch
blocked:gate-lint
blocked:gate-plan
blocked:gate-research
blocked:needs-decision
blocked:needs-human
blocked:no-changes
blocked:preflight
blocked:verify-failed
bug
chore
deferred
enhancement
feature-request
in-progress
lint-baseline
lint-cleanup
needs-decompose
needs-triage
performance
quickfix
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/osint-hub#79
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase 1: Problem — Complete Analysis
Original Claim (from #13)
Finding: Original Claim No Longer Accurate
The comprehensive codebase audit (2026-06-08) reveals the system has grown significantly beyond its proof-of-concept origins:
gather()Real Remaining Problems
🔴 Critical (Blocks Production)
alembic upgrade headwill fail🟡 High (Degrades Quality)
dashboard_summary.py— broken class never executes🟠 Medium (Robustness)
asyncio.run()in sync contexts risks nested event loopsConclusion
The "stub" characterization is inaccurate. The real problem is unresolved technical debt and missing data models that prevent production deployment despite substantial functional implementation.
See comment 35141 for full audit details.
Decomposed from osint-hub#13
⏸ Needs Decision
Blocking factors:
Scope: medium Risk: medium Spec: partial Type: feature
Summary: assessment timed out
Suggestion: retry needed
Rationale: hq timeout
Action: Review each blocking factor above. Remove
blocked:needs-decisionlabel to route back to triage.⏸ Needs Decision
What needs to be decided?
blocked:needs-decisionlabel to route back to triage.Blocking factors:
Scope: small Risk: low Spec: partial Type: other
Summary: States the OSINT Hub is a proof-of-concept stub without specifying what concrete changes are needed.
Suggestion: Close as non-actionable — this is a problem statement with no deliverables, no definition of done, and no actionable work items. The codebase already has extensive module infrastructure; if there are concrete gaps, they need specific issues with measurable outcomes. The actual work specs should be in subsequent phases decomposed from #13.
Rationale: The issue body is a single sentence with zero implementation details. Despite claiming the system is a 'stub,' the actual codebase has 80+ real modules, 39K lines of tests, full orchestrator/playbook/LLM integration, and a functional frontend. Without concrete gaps identified, this cannot be triaged as actionable work. The ROADMAP.md already defines a hardening trajectory from Phase 0-5.
To unblock: Remove the
blocked:needs-decisionlabel. The triage will apply the appropriate outcome based on your choice above.Phase 1: Problem — Comprehensive Analysis
Original Claim (from #13)
Evidence-Based Reassessment
After thorough codebase audit, the original claim no longer reflects the current state. The following original issues from #13 have been resolved:
gather()returningEvidenceResult. No stubs, barepass, orNotImplementedErrorin any module._auto_queue_extracted_entities()in orchestrator_enhanced.py. Pipeline runner with recursive branch spawning up tomax_depth=3. EntityActionQueue with type-specific priorities.create_finding()with statement + supporting_evidence_ids.create_evidence_snippet()with grounded quotes. All evidence items have summary, quote_snippet, capture_method.What Remains: The Real Problems
While the system is NOT a stub, the following production-hardening gaps block it from being a real OSINT tool:
🔴 Critical (Blocks Production Use)
Alembic migration divergence — Two unresolved heads (
d1e2f3a4b5c6anda2b3c4d5e8f0).alembic checkfails.alembic upgrade headwill fail in production. Must be merged before any deployment.Missing OSINT data models — No
SocialProfiletable (10+ modules discover social profiles but store them in a free-textPerson.public_profilesfield). NoIPAddresstable. NoPersonDomaintable. These are fundamental OSINT data types with nowhere to live.API schemas disconnected from normalized tables —
OrganizationResponseandPersonResponsereturnemails,phones,domainsas flat comma-separated strings instead of serving from normalized subtables. The API layer doesn't reflect the database schema.🟡 High (Degrades Quality Significantly)
No module name conflict detection — Two files define
DashboardSummaryModulewithname="dashboard_summary". The second import silently overwrites the first. No warning, no error. This will cause data loss when the wrong version runs.Dead code:
dashboard_summary.py— Contains a brokenDashboardSummaryModulewith synchronousgather()(violates ABC contract) and invalidEvidenceResult()constructor call. Never executes at runtime (overwritten by activity_tracker.py) but signals inconsistent maintenance.Fragile string-based module resolution —
cascade_search.pyreferences modules like"social_profile_finder"and"haveibeenpwned"by string with no validation that the target module exists. A rename breaks the cascade silently.No end-to-end tests — 103 tests pass, but ALL module tests use mocks. No test exercises the orchestrator against a real LLM with actual module execution. The 4 failing tests have stale assertions that mask real changes.
Multiple orchestrator versions — 5 orchestrator variants (v1, enhanced, v2, v3, v3-llm). Unclear which is the production orchestrator. The API router uses non-enhanced
run_investigation. Maintenance burden grows with each version.🟠 Medium (Quality of Life / Robustness)
Missing FK constraint on
EvidenceItem.parent_evidence_id— Comment says "FK to evidence_item.id" but no foreign key constraint is defined. Referential integrity gap.asyncio.run()in synchronous contexts —cascade_search.pyandorchestrator.run_investigation()useasyncio.run()inside synchronous functions. Causes nested event loop errors when called from async contexts.EnrichmentPanel uses Tailwind/DaisyUI classes without the CSS framework — Invisible broken component styled with classes that don't exist.
Hardcoded admin credentials in frontend —
app.jsx:36defaults toadmin@example.local/adminadmin. Issue #34 tracks this separately."Coming Soon" button — CaseDetail.jsx:1264, Add Relationship button is disabled with "Coming Soon". Feature gap.
Inconsistent theming — Mix of dark and light background colors across components (
#ddd,#f5f5f5inline styles clash with dark theme).No shared state management — Components independently fetch the same data, leading to duplicate API calls. No cache layer.
Summary
The system has grown beyond its proof-of-concept origins and now has substantial real functionality:
However, it suffers from production-hardening gaps typical of a project that grew fast without dedicated quality/infrastructure work. The original claim of "stub" is inaccurate — the real problem is unresolved technical debt and missing OSINT-specific data models that prevent production deployment.
Recommended Next Steps