Co-authored-by: Cursor <cursoragent@cursor.com>
5.5 KiB
PROGRESS · consultation_workflow 全量 500(出生时间敏感度 float 崩溃)(2026-09-04)
工作树:/Users/jesse/Downloads/Copse/astrology/.worktrees/report-sensitivity-crash-20260904
分支:codex/report-sensitivity-crash-20260904
基线:任务书写 285c5722;开工 git fetch 后 origin/staging HEAD 为 45e00f46(含本任务书)。
任务书:仓库根 TASK-report-sensitivity-crash-20260904.md
未改 _high_rigor_birth_payload 的 float 口径,未改前端 worker,未改 .gitea/workflows/**,不提升 main。
| 任务 | 状态 | BUG |
|---|---|---|
| 1 类型修复 + 降级加固 + 回归测试 | 完成 | BUG-524 |
| 2 staging 部署后真实 personal_full | 引擎已修好;产品报告被另一处挡住 | BUG-524 / BUG-526 |
| 3 聊天路径回归确认 | 默认模型缺计费配置,未跑到引擎 | BUG-524 |
开工复现
.venv/bin/python -m pytest tests/test_consultation_workflow_birth_time_sensitivity.py -q --tb=short 修复前:
.FFFFFF.F
TypeError: 'float' object cannot be interpreted as an integer
栈与任务书一致:execute_consultation_workflow → _build_birth_time_sensitivity → _birth_datetime_from_args。payload 仍把 hour/minute 解析为 float(该用例本身通过)。不带敏感度字段的聊天形状因默认 confirmed 早退,修复前也能过。
实现要点
_birth_datetime_from_args:datetime(int(year), int(month), int(day), int(hour), int(minute), _arg_second(args))。execute_consultation_workflow:敏感度构建的ValueError不再升成打死端点的BadRequest;其余异常降级为:
schema=jyotish.report_birth_time_sensitivity.v1
status=not_applicable
availability=not_available
blocked=true
reason=birth_time_sensitivity_unavailable
status 留在前端已有 Zod 枚举(not_applicable / candidate_window_only)内,避免降级对象被 consultationWorkflowResponseSchema 打成 workflow_contract_invalid。真正的缺字段/非法主题仍由 _high_rigor_birth_payload 等抛 BadRequest。
本地 HTTP 对照(虚构 1993-06-15 10:30)
引擎 .venv/bin/python scripts/jyotish_api_server.py --port 5200,swisseph_available=true。
| 请求 | HTTP | success | sensitivity.status |
|---|---|---|---|
| career / marriage / wealth / timing / health(provisional + representative_time 10:30) | 200 | true | candidate_window_only |
| 不带敏感度字段(聊天形状) | 200 | true | not_applicable |
五份主题响应喂给 buildReportEvidenceBundleV2:claimCards = career / health_pressure / marriage / timing / wealth(5 张),blockedSections 空。
测试
.venv/bin/python -m pytest tests/test_consultation_workflow_birth_time_sensitivity.py tests/test_flexible_birth_time_engine.py tests/test_consultation_workflow_domains.py -q
............................................................
9 条新回归 + 既有 flexible/domains 全部通过。
质量门(staging 现行:--profile quick --skip-yoga-logic --skip-frontend-runtime):
585 passed, 1 skipped, 201 warnings in 436.00s (0:07:15)
Quality gate passed.
elapsed_ms: 751689
该次 pytest argv 尚未包含新文件(CORE 钉是门跑完后补上的)。随后把 tests/test_consultation_workflow_birth_time_sensitivity.py 列入 CORE_PYTEST_TARGETS,并加 test_quality_gate_runs_this_file。补钉后:
.venv/bin/python -m pytest tests/test_consultation_workflow_birth_time_sensitivity.py -q
.......... [100%]
10 passed。
Staging 真实验证(2026-09-04)
GET https://staging.jyotisha.chat/api/health → .deployment.gitCommit = 7b1354a79bb8e9b92c3c816fdc01f5f8de2860b7。运行中 API 已含 int(args.hour/minute) 与敏感度降级。未提升 main。下文无账号、姓名、出生资料。
引擎(BUG-524)已在部署树上修好
从 web 容器对虚构 smoke 盘 POST http://api:5200/api/consultation_workflow(birth_time_accuracy=provisional,float 时分):HTTP 200,success=true,birth_time_sensitivity.status=candidate_window_only,约 74s,响应约 1.2MB。
任务 2 · 产品 personal_full 未闭环
登录后点「生成完整报告」。request_id 527f95f3-ac2e-4ed7-9b49-3c6ea4be02e8:failed / calculation_unavailable,约 16.5s,job 3/3,进度停在 30%(generating_report),无 personal_report_sections 行。
同期 API 访问日志没有 POST /api/consultation_workflow。Postgres 在 08:59:04 / 08:59:10 / 08:59:20 UTC 三次 permission denied for table agentic_rectification_cases,SQL 即 worker 对 candidate_accepted 的直接 SELECT。20260814010000_immutable_skill_registry.sql 已收回该表的 service_role 表级权限。资料状态为 accepted,worker 因此走进这张锁死表,从未到达已修好的引擎。记为 BUG-526(BUG-525 已被采集拒答占用)。
事故行 85616e32-…(07:38 UTC)同样是约 18s / 3 次 attempt / 无章节;当时 web 容器已 recreate,无法回收那一窗的 Postgres 句。不能把 07:38 也写成 TypeError,只能说与本次 16s 失败形态相同。
任务 2 欠的章节正文、telemetry、inputTokens / 2 倍线对照因此仍缺。
任务 3 · 聊天未跑到引擎
新开对话点「时运」芯片。产品提示「当前服务的计费配置尚未完成,本次不会扣点」。web 日志 reason=feature_pricing_missing。API 无 consultation_workflow。默认聊天模型缺咨询计费配置,与 BUG-524 无关。