fix(km): return source-backed knowledge readback
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m19s
CD Pipeline / build-and-deploy (push) Successful in 7m40s
CD Pipeline / post-deploy-checks (push) Has been cancelled

This commit is contained in:
ogt
2026-07-09 16:29:22 +08:00
parent 6d2d59c027
commit f0a928432b
2 changed files with 351 additions and 34 deletions

View File

@@ -23,8 +23,11 @@ async def test_knowledge_list_entries_fails_soft_when_readback_breaks(monkeypatc
response = await service.list_entries(limit=50)
assert response.items == []
assert response.total == 0
assert response.total == 13
assert len(response.items) == 13
assert response.items[0].id == "source-backed-project-awoooi"
assert response.items[0].source == "ai_extracted"
assert response.items[0].status == "approved"
assert [row.category for row in response.categories] == [
"project",
"product",
@@ -40,7 +43,7 @@ async def test_knowledge_list_entries_fails_soft_when_readback_breaks(monkeypatc
"schedule",
"general",
]
assert all(row.count == 0 for row in response.categories)
assert all(row.count == 1 for row in response.categories)
assert [row.key for row in response.asset_taxonomy] == [
"project",
"product",
@@ -55,14 +58,31 @@ async def test_knowledge_list_entries_fails_soft_when_readback_breaks(monkeypatc
"mcp",
"schedule",
]
assert all(row.count == 0 for row in response.asset_taxonomy)
assert response.readback_status == "degraded"
assert response.operator_stage == "knowledge_readback_degraded_ai_controlled_repair"
assert response.next_step == "queue_ai_controlled_km_readback_retry_tagging_and_connector_verifier"
assert all(row.count >= 1 for row in response.asset_taxonomy)
assert response.readback_status == "source_backed_degraded"
assert response.operator_stage == "knowledge_readback_source_backed_ai_controlled_repair"
assert response.next_step == "repair_primary_km_db_readback_then_promote_source_backed_receipts_to_persistent_km"
assert response.writes_on_read is False
assert response.manual_review_required is False
@pytest.mark.asyncio
async def test_knowledge_list_entries_source_backed_filter_and_search(monkeypatch) -> None:
monkeypatch.setattr(
knowledge_service_module,
"get_db_context",
lambda: _BrokenDbContext(),
)
service = KnowledgeService.__new__(KnowledgeService)
response = await service.list_entries(category="alert", q="Telegram", limit=50)
assert response.total == 1
assert response.items[0].id == "source-backed-alert-telegram-monitoring-coverage"
assert response.categories[[row.category for row in response.categories].index("alert")].count == 1
assert response.asset_taxonomy[[row.key for row in response.asset_taxonomy].index("alert")].count == 1
@pytest.mark.asyncio
async def test_knowledge_categories_fails_soft_when_readback_breaks(monkeypatch) -> None:
monkeypatch.setattr(
@@ -89,7 +109,7 @@ async def test_knowledge_categories_fails_soft_when_readback_breaks(monkeypatch)
"schedule",
"general",
]
assert all(row.count == 0 for row in categories)
assert all(row.count == 1 for row in categories)
@pytest.mark.asyncio
@@ -117,4 +137,4 @@ async def test_knowledge_asset_taxonomy_fails_soft_when_readback_breaks(monkeypa
"mcp",
"schedule",
]
assert all(row.count == 0 for row in taxonomy)
assert all(row.count >= 1 for row in taxonomy)