Skip to content

test(serve): validate Karvi harvest integration (/api/decide + /api/note + /api/events/karvi) #342

@fagemx

Description

@fagemx

Context

Karvi 深度整合(karvi#766, karvi#767)將開始 harvest decisions/lessons/events 到 Edda。需要在 Edda 側驗證三個 endpoint 都能正確處理 Karvi 的呼叫模式。

What Needs to Happen

1. POST /api/decide(karvi#766)

  • Karvi 送 { "decision": "runtime.spawn=cmd.exe", "reason": "verified in #598" }
  • 驗證:event 寫入 ledger.db,auto-supersede 同 key 的舊 decision
  • 回傳:{ "event_id": "evt_...", "superseded": "evt_..." | null }

2. POST /api/note(karvi#766)

  • Karvi 送 { "text": "[GH-598] spawn fix pattern", "role": "system", "tags": ["auto-harvest", "lesson"] }
  • 驗證:event 寫入 ledger.db with tags
  • 回傳:{ "event_id": "evt_..." }

3. POST /api/events/karvi(karvi#767)

  • Karvi 送 { "version": "karvi.event.v1", "event_id": "karvi-GH-598-plan-0", "event_type": "step_completed", "occurred_at": "...", "task_id": "GH-598", "step_id": "GH-598:plan" }
  • 驗證:idempotent — 同 event_id 重送回 200 + status: "duplicate"
  • 回傳:{ "event_id": "...", "status": "created" | "duplicate" }

4. 整合 smoke test

  • 連續送 decide → note → events/karvi,確認都寫入成功
  • edda ask "runtime" 能查到剛寫的 decision

Definition of Done

  • POST /api/decide → ledger.db 有新 decision event
  • POST /api/note → ledger.db 有新 note event with tags
  • POST /api/events/karvi → ledger.db 有 karvi event
  • 重送同 event_id → 200 + duplicate
  • edda ask "runtime" 回傳包含 harvest 的 decision

Smoke Test

# 1. Decide
curl -X POST http://localhost:3463/api/decide \
  -H "Content-Type: application/json" \
  -d '{"decision":"test.harvest=works","reason":"integration test"}'

# 2. Note
curl -X POST http://localhost:3463/api/note \
  -H "Content-Type: application/json" \
  -d '{"text":"test harvest note","role":"system","tags":["auto-harvest","test"]}'

# 3. Karvi event
curl -X POST http://localhost:3463/api/events/karvi \
  -H "Content-Type: application/json" \
  -d '{"version":"karvi.event.v1","event_id":"karvi-test-001","event_type":"step_completed","occurred_at":"2026-03-20T12:00:00Z","task_id":"T-test","step_id":"T-test:plan"}'

# 4. Query back
curl "http://localhost:3463/api/decisions?q=test.harvest"

References


Decomposed from fagemx/karvi planning pack by plan-decompose

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions