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

10 Commits

Author SHA1 Message Date
coreci 3a8b7830c6 verify(P01): passed — 4 layers green, 2 P1 fixed in-phase, 9 P2 flagged
---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.
2026-09-27 11:27:07 +00:00
coreci a932b998a0 fix(P01): verify P1 fixes — storage path-traversal guard + capability-probe tests
---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.
2026-09-27 11:26:50 +00:00
coreci f024b96afc feat(P01): integration proofs + monorepo quickstart — REQ-05 behavior difference pinned
---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.
2026-09-27 11:23:04 +00:00
coreci b10aca8350 feat(P01): real adapters + probe contracts — ollama fallback, tavily/ddg, capability probe
---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.
2026-09-27 11:22:04 +00:00
coreci 63c8329236 feat(P01): adapter contracts + fake adapters — model, search, storage, memory, secrets
---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.
2026-09-27 11:20:38 +00:00
coreci e888094111 chore(P01): pin managed Python 3.12 per spec (D-008) — lockfile + .python-version
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.1
requirements:
  covered: [REQ-33]
---/ci---
2026-09-27 11:01:13 +00:00
coreci e27fd8f0a0 feat(P01): run-config contract — resolved dial snapshots persist + round-trip
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.4
requirements:
  covered: [REQ-04]
---/ci---
2026-09-27 11:00:37 +00:00
coreci 10c508d8fb feat(P01): methodology model + registry — rapid-answer, deep-report
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.3
requirements:
  covered: [REQ-02, REQ-03, REQ-05]
---/ci---
2026-09-27 11:00:18 +00:00
coreci 652aa89c1a feat(P01): 12-dial typed schema with safe defaults
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.2
requirements:
  covered: [REQ-01]
---/ci---
2026-09-27 10:59:50 +00:00
coreci f968ecbd73 feat(P01): backend scaffold — uv project, src layout, gates wired
---ci---
phase: 1
milestone: v0.2
status: execute
persona: data-engineer
task: T-1.1
requirements:
  covered: [REQ-33]
---/ci---
2026-09-27 10:59:30 +00:00