ship: v0.2 P1 methodology framework + adapter layer #10

Merged
coreci-bot merged 10 commits from phase/01-methodology-adapters into milestone/v0.2-mvp 2026-09-27 11:28:13 +00:00
Owner

REQ-01..06, 08..11, 31: dial schema, methodology registry (rapid-answer, deep-report), run-config snapshots, five adapter contracts + fakes, Ollama cloud/local fallback, Tavily/DDG search, capability probe contracts, storage/secrets adapters. Verify: PASS — 0 P0, 2 P1 fixed in-phase (path traversal, probe tests), 9 P2 flagged. Gates: backend 71 tests + mypy strict + ruff; frontend 90 tests + build. Tag target v0.2.1.

REQ-01..06, 08..11, 31: dial schema, methodology registry (rapid-answer, deep-report), run-config snapshots, five adapter contracts + fakes, Ollama cloud/local fallback, Tavily/DDG search, capability probe contracts, storage/secrets adapters. Verify: PASS — 0 P0, 2 P1 fixed in-phase (path traversal, probe tests), 9 P2 flagged. Gates: backend 71 tests + mypy strict + ruff; frontend 90 tests + build. Tag target v0.2.1.
coreci-bot added 10 commits 2026-09-27 11:28:09 +00:00
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.1
requirements:
  covered: [REQ-33]
---/ci---
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.2
requirements:
  covered: [REQ-01]
---/ci---
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.3
requirements:
  covered: [REQ-02, REQ-03, REQ-05]
---/ci---
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.4
requirements:
  covered: [REQ-04]
---/ci---
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.1
requirements:
  covered: [REQ-33]
---/ci---
---ci---
phase: 1
milestone: v0.2
status: execute
persona: backend-engineer
task: T-1.5
requirements:
  covered: [REQ-06, REQ-10, REQ-11, REQ-31]
---/ci---

Protocols for all five adapter slots (REQ-06 model with planner/
writer roles, search, storage, memory, secrets) + fake model and
search adapters with a 6-page unicode-diverse fixture corpus (two
pages share a sentence for future quote-anchoring tests) + local FS
storage adapter (atomic tmp+replace writes, 8-char run IDs from a
reduced alphabet) + env-file secrets provider (later-file-wins,
value-leak-guarded repr). 48 tests green, zero API keys, fakes
import no httpx. Wave-2 subagent attempts failed silently twice;
executed inline per error recovery.
---ci---
phase: 1
milestone: v0.2
status: execute
persona: backend-engineer
task: T-1.9
requirements:
  covered: [REQ-06, REQ-07, REQ-08, REQ-09, REQ-12]
---/ci---

OllamaModelAdapter: OpenAI-compatible chat against ollama.com/v1
(Bearer OLLAMA_API_KEY from secrets scope) with keyless
localhost:11434/v1 automatic fallback on 401/connection failure;
planner/writer roles. TavilySearchAdapter (keyed default) +
DuckDuckGoSearchAdapter keyless fallback (html.duckduckgo.com/html,
one backoff, typed last_degradation warning — G-008 degraded-mode
contract). CapabilityProbe typed contract: context cap
min(claim, 8192), embedding batch 8, structured-output smoke test
with explicit warning + prompt-embedded JSON degrade path
(G-001: contracts proven with MockTransport; LIVE probing executes
in P2). All tests via httpx.MockTransport — zero real network,
zero API keys. 59 green.
---ci---
phase: 1
milestone: v0.2
status: execute
persona: ci-lead-developer
task: T-1.13
requirements:
  covered: [REQ-05, REQ-33]
---/ci---

Wave 4: cross-cutting integration test (registry → fake model
plan → dial snapshot → storage round-trip; Rapid Answer vs Deep
Report behavior-difference assertions; registry immutability;
unknown-override rejection; fake search feeds the evidence shape).
README: monorepo command map (uv + corepack pnpm), backend
quickstart, adapter env-var table (values never committed). 65
backend tests green, zero API keys.
---ci---
phase: 1
milestone: v0.2
status: verify
persona: backend-engineer
task: T-1.5
requirements:
  covered: [REQ-07, REQ-10]
---/ci---

Security verify (layer 3) found P1: LocalStorageAdapter accepted
absolute paths and traversal names (Path('runs/x') / '/etc/passwd'
escape verified). Fixed: run_id pattern ^[a-z0-9]{8}$ + artifact-name
allowlist enforced at the adapter boundary, unique tmp names + fsync
+ asyncio.to_thread (no blocking open in async, no tmp race).
Quality verify (layer 4) found P1: capability probe had zero test
coverage. Fixed: probe green-path, weak-structured-output warning,
endpoint-down, and list_models cloud->local fallback tests. Also
wrapped raw httpx exceptions into AdapterError (exception taxonomy).
71 backend tests green.
---ci---
phase: 1
milestone: v0.2
status: verify
requirements:
  covered: [REQ-01, REQ-02, REQ-03, REQ-04, REQ-05, REQ-06, REQ-08, REQ-09, REQ-10, REQ-11, REQ-31]
  partial: []
lessons:
  - "P0 zero; P1 both fixed in-phase with regression coverage"
  - "P2 flags for post-hoc log: SSRF allowlist before P2 wires fetch; fetch size cap; Tavily key-in-body vs Bearer; sticky fallback re-probe; dual run-id generators to consolidate in P2; DDG snippet positional pairing"
  - "Adapters-own-I/O invariant verified holding; secrets discipline exemplary"
---/ci---

Structural: mypy strict 26 files clean, ruff clean. Behavioral: 71
backend + 90 frontend tests green; REQ-01..06/08..11/31 each carry
contract or integration proofs (REQ-07/12 contracts proven with
fakes per G-001; live probing is P2 scope). Security: STRIDE clean
after fixes - Bearer only on cloud base, atomic writes, no value
leaks, timeouts everywhere. Quality: P2 flags logged for the P5
post-hoc review.
coreci-bot merged commit dfb738d54e into milestone/v0.2-mvp 2026-09-27 11:28:13 +00:00
Sign in to join this conversation.