zizi 091b66a9bb 重构: 收敛 Agent/Skill 运行时与创作质量闭环
将角色与 Skill 从 .claude 迁入 .agent,移除 Claude CLI 运行时并接入固定 Opus 角色 profile、完整 schema、预算 deadline、raw 与回执证据链。

同步拆分 Skill 职责、复利 lesson、Gate 回放、Dashboard 人审入口、数据库登记和机械门禁;候选设计正文不包含在本提交中。
2026-08-22 02:12:32 +08:00

105 lines
3.0 KiB
Python

#!/usr/bin/env python3
"""search 公共范式专用范围的离线合同测试。"""
from __future__ import annotations
import pathlib
import sys
import unittest
PROJECT_ROOT = pathlib.Path(__file__).resolve().parents[3]
SCRIPT_DIR = PROJECT_ROOT / ".agent" / "skills" / "search-knowledge" / "scripts"
sys.path.insert(0, str(SCRIPT_DIR))
from search import search_cards
class _Result:
def __init__(self, rows):
self._rows = rows
def fetchall(self):
return self._rows
class _Connection:
def __init__(self):
self.calls = []
def __enter__(self):
return self
def __exit__(self, *_args):
return False
def execute(self, sql, args):
self.calls.append((sql, list(args)))
if "muse_meta_schema" in sql:
return _Result([])
return _Result(
[
(
"draft",
7,
{
"型": "craft",
"名称": "递进揭示",
"一句话摘要": "逐层增加信息压力",
"字段": {"节拍": "三段递进"},
"目标库": "公共范式库",
},
"pending",
0.91,
3,
{},
None,
"active",
)
]
)
class SearchCardsTest(unittest.TestCase):
def test_public_pattern_scope_is_sql_enforced_and_tenant_bound(self):
conn = _Connection()
cards = search_cards(
"信息揭示",
scope="public_pattern",
ttype="craft",
dsn="postgresql://test/muse-example",
tenant_id=7,
connection_factory=lambda dsn: conn if dsn == "postgresql://test/muse-example" else None,
embedder=lambda _intent: [0.1, 0.2],
)
self.assertEqual(len(conn.calls), 2)
policy_sql, policy_args = conn.calls[0]
self.assertIn("muse_meta_schema", policy_sql)
self.assertEqual(policy_args, [7])
sql, args = conn.calls[1]
for fragment in (
"d.work_id=0",
"d.draft_payload->>'目标库'='公共范式库'",
"kb.kb_type='global'",
"d.source_action_policy",
"d.draft_payload->>'型' = %s",
):
self.assertIn(fragment, sql)
self.assertEqual(args, ["[0.1, 0.2]", 7, 7, 7, "craft", 5])
self.assertEqual(cards[0]["retrievalScope"], "public_pattern")
self.assertTrue(cards[0]["productionRetrievalEligible"])
def test_unknown_scope_fails_before_connecting(self):
with self.assertRaises(ValueError):
search_cards(
"冲突",
scope="unknown",
connection_factory=lambda _dsn: _Connection(),
embedder=lambda _intent: [0.1],
)
if __name__ == "__main__":
unittest.main()