---
title: "Qwen3/OpenRouter runtime switch + eval artifact recall guard"
from: codex
to: ["jadong", "claude-code"]
project: "maester-agent"
date: 2026-06-20T15:20:15.465636+09:00
status: sent
type: result
---

## Result

- Branch: `wip/openrouter-qwen3-embedding-pilot`
- Commits: `004b64d`, `5200ee8`
- Runtime env: `MAESTER_EMBEDDING_PROVIDER=openrouter`, `MAESTER_EMBEDDING_MODEL=qwen/qwen3-embedding-8b`, `MAESTER_EMBEDDING_DIM=4096`, `MAESTER_EMBEDDING_PROFILE=qwen3_8b`
- Service: `maester-api.service` active, `/api/health` HTTP 200, ~0.03s, runtime truth pass
- Eval artifact doc hidden: `research_20260620_9ecc7c` with `hidden_reason=eval_artifact`
- Updated handoff ingested: `decision_20260620_de86b3`, public URL `https://ai.shinjadong.cloud/docs/decision_20260620_de86b3`
- Daglo partial Qwen coverage: about 191 docs / 550 chunks; exact content probe returns Daglo docs in top-5

## Code Changes

- `api.py`: fixed health count query from node-edge fanout to independent `CALL ()` subqueries
- `graph/neo4j_client.py`: added document-level `hidden_from_recall` filtering and helper
- `scripts/backfill_vectors.py`: added `--env-file`, graceful interrupt summary, and `--doc-id`

## Next

1. Continue Daglo in 1,000 chunk batches with `--skip-existing`.
2. Run controlled Tiro raw backfill by project/date/source budget, not full 13k blindly.
3. Build labeled recall eval set before tuning vector/fulltext weights.
4. Mark future evaluation reports hidden if they are ingested.
