Files
Neo-ZQYY/docs/audit/changes/2026-03-22__trace-path-fix-miniprogram-login-race.md
Neo 14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。

按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。

涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
   召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
   DDL 基线合并 / Kiro 到 Claude Code 迁移

阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:35:42 +08:00

2.8 KiB
Raw Blame History

变更审计记录trace 日志路径修复 + 小程序登录竞态修复

字段
日期 2026-03-22 23:04:58
Prompt-ID P20260322-230035
Session-ID bc69ee78
Session 路径 docs/audit/session_logs/2026-03/22/85_77a7e7b7_223315

操作摘要

修复两个独立问题:(1) 后端 trace 日志路径因 cwd 为 apps/backend/ 导致相对路径解析错误;(2) 小程序端 checkAuthStatus() 与登录操作的竞态条件。同时清理临时调试脚本。

本次对话文件变更

新增文件

  • docs/audit/prompt_logs/prompt_log_20260322_230035.md
  • docs/audit/session_logs/2026-03/22/85_77a7e7b7_223315/main_01_bc69ee78.md
  • docs/audit/session_logs/2026-03/22/87_e3ed0bda_224451/main_01_341f2e98.md

删除文件

  • scripts/ops/_tmp_find_login2.py — 临时调试脚本,已完成使命
  • docs/audit/session_logs/.../main_01_f8989b2e.md — 被 bc69ee78 supersede
  • docs/audit/session_logs/.../main_01_d4907912.md — 被 341f2e98 supersede

改动注解

apps/backend/app/trace/config.py

  • 变更类型:修改
  • 原始原因:DEV_TRACE_LOG_DIR 默认值 export/dev-trace-logs 是相对路径,后端 cwd 为 apps/backend/,日志写到了 apps/backend/export/dev-trace-logs/ 而非项目根
  • 思路分析:_init_from_env() 中检测相对路径,若 NEOZQYY_ROOT 环境变量存在则 os.path.join(project_root, raw_log_dir) 转绝对路径。依赖已有环境变量约定,比 __file__ 回溯更可靠
  • 修改结果trace 日志统一写入项目根 export/dev-trace-logs/,与 EXPORT-PATHS.md 一致。不影响已设绝对路径的环境

apps/miniprogram/miniprogram/app.ts

  • 变更类型:修改
  • 原始原因:onLaunchcheckAuthStatus() 用旧 token 发 /api/xcx/me401 后 clearTokens() 清掉用户刚登录获得的新 token
  • 思路分析token 快照比对——发起前记录 tokenAtStart,返回后若 token 已被 onLogin 更新则放弃路由和错误处理。最小侵入,无需锁或信号量
  • 修改结果:消除 checkAuthStatusonLogin 竞态窗口

apps/miniprogram/miniprogram/utils/request.ts

  • 变更类型:修改
  • 原始原因:tryRefreshToken() 失败时无条件 clearTokens() + redirectToLogin(),与 app.ts 竞态联动
  • 思路分析:刷新前记录 tokenBeforeRefresh,失败时检查 token 是否已变化,已变化则跳过清除
  • 修改结果:双重竞态保护,不再盲目清除新 token

scripts/ops/_tmp_find_login2.py

  • 变更类型:删除
  • 原始原因:临时脚本,定位登录竞态问题后已无用途

DDL / 迁移检查

  • 无新增迁移 SQL
  • 无数据库 schema 变更

合规状态

  • code_without_docs: 无缺失
  • api_changed: false
  • openapi_spec_stale: false