Files
group_fqcd_jr/tools/probe_release_state.py
T
lzf_0626 c11e56c7aa 同步 docs/24 的过期状态;登录端点不改(docs/05 明确平台不实现)
docs/24 是客服阶段的总结,正文保留为当时的事实,本次做两件事:

1. 刷新"当前状态"表的数字:mypy 113→137 文件、unit+contract 497→664、
   integration 29→33、active 发布 181(5 项)→201(10 项:9 条 agent_tools + 1 条客服
   闲聊提示词)。数字由 tools/probe_release_state.py 只读查库得到,证据留档
   docs/evidence/release-state.json。
2. 追加第七节"后续更新",记录阶段总结写完之后的变化:两件待决策事项已落地(闲聊
   提示词已按继承语义发布、适当性两侧口径复核通过)、风控合并后的处理要点、以及
   三个仍然开着的口子(热线占位符、like %% 全表扫、offset 游标并发跳行)。

登录端点:**不改**。docs/05 §11 明确"JWT 签发、刷新、注销由统一身份认证模块负责,
Agent 平台不重复实现",本平台只做校验(app/core/security.py)。第五节第 8 条据此改写,
同时把第 7 条"风控尚未启动"标记为已完成。

顺带修正"已知缺口"里的一条:列表接口的 next_cursor/has_more 风控侧已补齐,客服侧仍待办。
2026-09-11 14:26:17 +08:00

91 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""只读探查:当前 active 配置发布与配置项数量(用于同步 docs/24 的"当前状态"表)。
只做 SELECT,结果写 `docs/evidence/release-state.json`:
python tools/probe_release_state.py
"""
from __future__ import annotations
import asyncio
import json
from pathlib import Path
from typing import Any
from sqlalchemy import text
from app.infrastructure.db import SessionFactory
OUTPUT = Path("docs/evidence/release-state.json")
async def collect() -> dict[str, Any]:
report: dict[str, Any] = {}
async with SessionFactory() as session:
report["recent_releases"] = [
dict(row)
for row in (
(
await session.execute(
text(
"""
SELECT id, release_no, title, status, created_at, activated_at
FROM config_release
ORDER BY id DESC
LIMIT 5
"""
)
)
)
.mappings()
.all()
)
]
report["active_items"] = [
dict(row)
for row in (
(
await session.execute(
text(
"""
SELECT i.namespace, COUNT(*) AS items
FROM platform_config_item i
JOIN config_release r ON r.id = i.release_id
WHERE r.status = 'active'
GROUP BY i.namespace
ORDER BY i.namespace
"""
)
)
)
.mappings()
.all()
)
]
report["active_prompt_versions"] = (
await session.execute(
text(
"""
SELECT COUNT(*) FROM prompt_template_version p
JOIN config_release r ON r.id = p.release_id
WHERE r.status = 'active'
"""
)
)
).scalar_one()
return report
async def main() -> None:
report = await collect()
OUTPUT.parent.mkdir(parents=True, exist_ok=True)
OUTPUT.write_text(
json.dumps(report, ensure_ascii=False, indent=2, default=str),
encoding="utf-8",
)
print(f"wrote {OUTPUT}")
if __name__ == "__main__":
asyncio.run(main())