PMFlow/docs/superpowers/plans/2026-04-14-query-source-pol...

71 lines
3.2 KiB
Markdown

# Query Source Policy Refactor Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Make `query.answer` decide internal vs external source first, stop mixed retrieval in v1, and replace fake embeddings with real embedding backends.
**Architecture:** Keep `plan mode` in PMFlow. Move `source_policy` to the `query.answer` gateway and propagate it through AdaptiveRAG. Collapse duplicated query-answer source decisions so retrieval only executes against the selected source family.
**Tech Stack:** FastAPI, SQLAlchemy async, PMFlow kernel, AdaptiveRAG, pytest
---
### Task 1: Add Contract Tests For Source Policy
**Files:**
- Modify: `backend/tests/test_adaptive_rag_mainline_contract.py`
- Modify: `backend/tests/test_rag_route_contract.py`
- [ ] **Step 1: Write failing tests**
- [ ] **Step 2: Run targeted pytest to verify failures**
- [ ] **Step 3: Implement the minimal contract changes**
- [ ] **Step 4: Re-run targeted pytest**
### Task 2: Front-Load Source Policy In query.answer
**Files:**
- Modify: `backend/app/services/ai_pmo/ai_pmo_typed_executor_execute/mixin_execute_query_project.py`
- Modify: `backend/app/services/adaptive_rag_service/mixin_answer_entry.py`
- Modify: `backend/app/services/adaptive_rag_service/mixin_answer_mainline.py`
- Modify: `backend/app/services/adaptive_rag_service/mixin_core_intent.py`
- [ ] **Step 1: Write failing tests for source_policy propagation**
- [ ] **Step 2: Run targeted pytest to verify failures**
- [ ] **Step 3: Implement gateway propagation and unified query semantics**
- [ ] **Step 4: Re-run targeted pytest**
### Task 3: Remove Source-Selection Drift And Mixed Retrieval
**Files:**
- Modify: `backend/app/services/adaptive_rag_service/mixin_deep_guard_answer.py`
- Modify: `backend/app/services/adaptive_rag_service/mixin_multistep_flow.py`
- Modify: `backend/app/services/adaptive_rag_service/mixin_answer_retrieval.py`
- [ ] **Step 1: Write failing tests for internal-only / external-only retrieval domains**
- [ ] **Step 2: Run targeted pytest to verify failures**
- [ ] **Step 3: Implement retrieval-domain gating and remove duplicated source-selection branches**
- [ ] **Step 4: Re-run targeted pytest**
### Task 4: Replace Fake Embeddings
**Files:**
- Modify: `backend/app/services/llm_service/mixin_task_helpers.py`
- Modify: `backend/tests/test_adaptive_rag_mainline_contract.py`
- [ ] **Step 1: Write failing tests for embedding provider selection and fake-vector removal**
- [ ] **Step 2: Run targeted pytest to verify failures**
- [ ] **Step 3: Implement real embedding backend selection**
- [ ] **Step 4: Re-run targeted pytest**
### Task 5: Update Runtime Docs And Verify
**Files:**
- Modify: `AGENTS.md`
- Modify: `docs/architecture/RUNTIME_GUARDRAILS.md`
- Modify: `docs/architecture/CODE_REFERENCE_INDEX.md`
- [ ] **Step 1: Update runtime/documentation summaries for source_policy and embedding rules**
- [ ] **Step 2: Run targeted backend pytest**
- [ ] **Step 3: Run `python -m py_compile` for touched backend modules**
- [ ] **Step 4: Summarize deviations vs baseline**