No module blocking/availability tracking - blocked modules not configurable — Phase 1: Problem #76
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#76
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
There's no system for:
Currently orchestrator hardcodes:
But many modules require API keys that may not be configured:
Decomposed from osint-hub#19
⏸ Needs Decision
Blocking factors:
Scope: medium Risk: low Spec: aligned Type: feature
Summary: Migrate main orchestrators (orchestrator.py, orchestrator_enhanced.py) from hardcoded
disallowed = set()to dynamic availability-based module filtering with per-investigation blocking configuration.Suggestion: Reuse existing
module_availability.pyin main orchestrators to filter by API key availability, addblocked_modulesfield to InvestigationRun/Case DB model, expose API endpoints for configuring blocked modules per investigation, and integrate into orchestrator.py and orchestrator_enhanced.py.orchestrator_v2.pyalready usesis_module_available()successfully — replicate that pattern.Rationale: The infrastructure already exists:
module_availability.pyhasis_module_available(),filter_available_modules(), andget_module_availability_info()with 128 lines of tests intest_module_availability.py.orchestrator_v2.pyalready uses it. The gap is that the two main orchestrators (orchestrator.py, orchestrator_enhanced.py) still usedisallowed = set()which is a no-op — they run modules that will fail at runtime because API keys are missing. Per-investigation blocking requires a DB schema change and new API endpoints, but the availability-checking core is done. Medium scope because it touches ~8-12 files (2x orchestrators, models, router, tests) but low risk since the pattern is proven in v2.Action: Review each blocking factor above. Remove
blocked:needs-decisionlabel to route back to triage.GSD PLAN: response missing GATE: line.
✅ Phase 1 Resolved — Per-Investigation Module Blocking Implemented
Changes made
Model (
backend/app/models.py):blocked_modules: strfield toInvestigationRun(JSON list of blocked module names)Availability layer (
backend/app/services/investigations/module_availability.py):get_run_blocked_modules(session, run_id)— combines globalModuleBlockDB blocks with per-runblocked_modulesOrchestrators updated:
orchestrator.py— usesget_run_blocked_modules(session, run.id)instead ofget_blocked_modules(session)orchestrator_v3_llm.py— same migrationAPI endpoint (
backend/app/routers/investigations.py):PATCH /investigations/{run_id}/blocked-modules— accepts{"blocked_modules": ["shodan", "virustotal"]}, pass empty list to clearTests — 5 new tests for
get_run_blocked_modulescovering global-only, combined, empty, None run_id, and empty string edge cases. All 24 tests pass.