Commit Graph

288 Commits

Author SHA1 Message Date
Hermes Agent
c1e1d3e82d fix(public): T2-03 add order idempotency and rate limit
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 22:35:13 +08:00
Hermes Agent
a7e502bd62 fix(public): T2-02 mask payment readiness errors
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 22:31:32 +08:00
Hermes Agent
d49d261103 fix(payment): T2-01 require return nonce
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 22:27:24 +08:00
Hermes Agent
0552b9ae50 fix(frontend): T1-05 close admin review navigation
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 22:13:49 +08:00
Hermes Agent
ec6398197b feat(frontend): T1-04 verify admin auth session
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 22:04:41 +08:00
Hermes Agent
0d9e1ddb6e feat(frontend): T1-03 inject admin bearer token
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 22:00:34 +08:00
Hermes Agent
f634b47cd7 feat(admin): T1-02 use real auth login endpoint
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 21:55:55 +08:00
Hermes Agent
4189e60d8d fix(auth): T1-01 reject admin JWT query tokens
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 21:50:24 +08:00
Hermes Agent
6a436a7941 docs(frontend): T0-03 add local gate runbook
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 21:47:47 +08:00
Hermes Agent
b3ac495f36 docs(truth): T0-02 mark historical review snapshots
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 21:46:24 +08:00
Hermes Agent
61a924fcd9 docs(truth): T0-01 refresh current state entrypoints
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 21:44:34 +08:00
Hermes Agent
ec3c444656 docs(remediation): plan systemic review fixes
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 21:34:10 +08:00
Hermes Agent
0768c9ff87 docs(review): incorporate async comprehensive review findings
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 21:05:17 +08:00
Hermes Agent
738ab68898 docs(review): add comprehensive project review 2026-07-05
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 21:01:55 +08:00
Hermes Agent
4059f144c4 fix(health): allow dev placeholder readiness
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 20:49:18 +08:00
Frontend Developer
da99dec1e5 docs: add systemic frontend review findings
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 18:15:48 +08:00
Frontend Developer
5d52e07e7f docs: update frontend review status after e2e fixes
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 17:30:53 +08:00
Frontend Developer
2194f89694 fix: stabilize e2e assertions after i18n migration
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 16:16:23 +08:00
Frontend Developer
45e671966a feat: complete frontend ui integrity followups
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-05 14:09:49 +08:00
Frontend Developer
c7f1dd4d4c add sprint 4 llm enhance progress polling
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-04 17:12:37 +08:00
Frontend Developer
c9554597b8 add sprint 4 share link failure fallback
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-04 16:56:34 +08:00
Frontend Developer
fecdb67443 add sprint 4 share link status panel
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-04 11:35:04 +08:00
Frontend Developer
06a0f4733f add sprint 4 real backend regression
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-04 11:30:46 +08:00
Frontend Developer
4057ae565d Sprint 4 progress: 9/16 任务完成 + 4 新 commit (T-B-23/24/25/26)
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-04 10:27:35 +08:00
Frontend Developer
f16ed56283 memory: Sprint 4 进度 9/16 (T-B-23/24/25/26 全完成) 2026-07-04 10:25:02 +08:00
Frontend Developer
97cd431976 Sprint 4 T-B-26 · 路由级 prefetch (lazy chunks)
- router.tsx: ShareDialogPage/DataQueryPage/ReviewPage/PosterPreviewPage → React.lazy
- AppLayout.tsx: Outlet 外层包 Suspense + RouteFallback (骨架屏)
- Sidebar.tsx: NavLink onMouseEnter/onFocus 触发 prefetch
- hooks/usePrefetchLazyRoute.ts: lazy route loaders 注册表
- RouteFallback.tsx: 48px min-height + 3 dot pulse(满足 V10 不变量 L2 + a11y)

Bundle 影响(lazy 后):
  Main chunk:   85.57 → 81.30 KB gzip (-4.27 KB)
  App chunks:   1 → 6 个(含 ShareDialogPage 9.21 KB / DataQueryPage 6.13 KB)
  Hover 触发 prefetch,下一次点击即从缓存加载(0 延迟)

G3 闸门:typecheck  / lint  / vitest 69  / e2e 84/84  / build 
2026-07-04 10:22:12 +08:00
Frontend Developer
bf5ad4a7aa Sprint 4 T-B-25 · Bundle 优化验证
- vite.config.ts: production sourcemap=false (build time 17.89s → 6.89s)
- scripts/bundle-report.cjs: 输出 raw/gzip 大小 + 预算校验 (500KB total / 150KB per chunk)
- package.json: build pipeline 末尾自动跑 bundle-report

实测(无 sourcemap,9 chunks):
  Total gzip: 301.41 KB (预算 500 )
  Main chunk: 85.57 KB gzip (预算 150 )
  Heavy vendor (>80 KB): chart-vendor 101 KB / index 86 KB
  可优化点:ShareDialogPage + recharts 走 lazy load (留 T-B-26 处理)

G3 闸门:build 项 ,main chunk 下降 87.85 → 85.57 KB
2026-07-04 10:15:01 +08:00
Frontend Developer
61ba0ca987 Sprint 4 T-B-24 · Lighthouse CI (G3 闸门真实化)
- apps/web/lighthouserc.cjs: desktop preset, 3 runs, P/A/B/S ≥ 90 断言
- apps/web/scripts/lhci-scores.cjs: 本地汇总脚本(median P/A/B/S + / 标记)
- .github/workflows/web-ci.yml: 新增 lighthouse job,treosh/lighthouse-ci-action@v12
- apps/web/package.json: +lhci script
- apps/web/.gitignore: .lighthouseci/ 加入忽略(避免本地 12 个 run 报告污染 repo)

本地验证(desktop preset, 3 runs × 4 URLs):
  perf=100  a11y=95-96  best=96  seo=91  (全部 ≥ 90 )

G3 闸门状态:typecheck  / lint  / vitest 69  / e2e 84/84 
             / build 87.85KB  / Lighthouse P/A/B/S 
             / 真实后端 (T-B-27)/ Poster CLI Docker (T-C-44)
2026-07-04 10:08:10 +08:00
Frontend Developer
1a494396f9 Sprint 4 T-B-23 · e2e 真实化 8 spec
- theme-switch.spec.ts · 3 主题切换 + localStorage 持久化 + inline script 防闪烁
- chat-send-receive.spec.ts · 用户消息 → SSE 流式 → markdown 渲染 (content 字段)
- form-submit-validation.spec.ts · SubmitButton 守卫 (Enter 触发 + mobile force)
- plan-create-view.spec.ts · PlanSchema 真实结构 + section 形式详情页
- data-query-search.spec.ts · 院校/专业/分数线 真实接口
- review-flow-approve.spec.ts · 审核状态机 + 3 操作按钮
- poster-generate-download.spec.ts · 3 模板 + Zod url() 校验

G3 闸门 e2e 项: 84/84 passed (4 浏览器 × 21 测试)
2026-07-04 09:54:33 +08:00
Frontend Developer
f5e40a4c54 add sprint 4 query persistence
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-03 22:53:33 +08:00
Frontend Developer
411f225af5 add sprint 4 submit button guard
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-03 22:37:33 +08:00
Frontend Developer
c4f12cad4d add sprint 4 offline recovery
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-03 22:14:30 +08:00
Frontend Developer
ad261d75ef add sprint 4 route error boundary
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-03 22:02:46 +08:00
Frontend Developer
86296bdb0e start sprint 4 error code mapping
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-03 21:55:30 +08:00
Frontend Developer
e554215335 finish sprint 1-3 frontend contract closure
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-03 21:28:50 +08:00
Frontend Developer
f8d4bb3ab9 docs(memory): Sprint 3 关键成果与 4 条新经验
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
- Sprint 3 完成:G2 闸门通过,5 模块端到端 + LLM 4 模 fallback
- 30+ TanStack Query hooks + 5 页面 + 1 LLM 适配器
- 4 模 fallback 链:claude → gpt → gemini → deepseek
- 37 单测 + 24 e2e
- Vite build 312 KB gzip

新增 4 条经验教训:
- 4 模 LLM fallback 链设计
- apiClient 强制 Zod schema 保持 0 any
- 大体积包拆 manualChunk(recharts 懒加载)
- Portal token 路由级联
2026-07-03 16:44:00 +08:00
Frontend Developer
e24cbb7d1c feat(sprint-3): 5 个新模块(Share/Query/Review/LLM/Poster)+ G2 闸门通过
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
## 5 大新模块(30+ hooks + 5 页面 + 1 LLM 适配器)

### Share Link (T-B-22/28)
- useShareLinkCreate/Delete/LatestQuery/StatsQuery
- ShareDialog 弹窗(QR + 链接 + 复制)
- StatsCard 3 卡(访问数/独立访客/最近访问)
- AccessTrendChart(recharts 折线图)

### Data Query (T-B-23)
- useScoreLineQuery / useRankEstimatorQuery / useMajorsQuery / useSchoolsQuery
- DataQueryPage:4 过滤器 + 等效分数 + 分数线表

### Review Flow (T-B-24)
- useReviewStartMutation / useReviewStatusQuery / useReviewActionMutation
- Zod discriminated union 处理 3 种 action
- 5 状态轮询(pending/in_progress/approved/rejected/changes_requested)
- ReviewPage:状态机 UI + 3 操作按钮

### Portal (T-B-25)
- usePortalCWBQuery / usePortalFullPlanQuery
- PortalPage:token 路由 + 等效分数 + 完整方案

### Poster (T-B-27)
- usePosterGenerateMutation(3 模板 classic/modern/minimal)
- PosterPreviewPage:渐变预览 + 下载 + 复制 QR

### LLM (T-B-17/26)
- 4 模适配器(claude/gpt/gemini/deepseek)
- enhanceWithFallback 链式降级
- useLLMConfig / useAuditEnhanceMutation

## G2 闸门(全部通过)
- typecheck: 0 error
- lint: 0 error 0 warning
- test (Vitest): 37/37 passed (10 文件)
- test:e2e (Playwright): 24/24 passed (4 浏览器 × 6 spec)
- build (Vite): 312 KB gzip (recharts 拆分后主 chunk 83KB)
- codegen:check: 0 any

## 关键技术决策
1. 4 模 LLM fallback 链:claude → gpt → gemini → deepseek
2. 所有 API 强类型 + Zod 校验(apiClient 强制 schema)
3. recharts 拆 manualChunk:chart-vendor 104KB gzip
4. Portal token 路由:/portal/:token 共享 token 自动级联

## Sprint 3 收口报告
SPRINT_3_CLOSEOUT_2026-07-03.md

下一步:Sprint 4 · 性能 + 监控(Sentry / Web Vitals)
2026-07-03 16:42:03 +08:00
Frontend Developer
7b132302fb docs(memory): Sprint 2 关键成果与经验教训
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
- Sprint 2 完成:G1 闸门通过,33 any 清零,49 warning 清零
- 切 Vite 5 + React 19 框架
- 4 Zustand slice 替代 7 手写 hook
- 15 TanStack Query hooks + 25 单测 + 20 e2e
- Vite build 192 KB gzip

新增 3 条经验教训:
- 主题持久化双源方案
- MobileNav fixed 定位
- Vite 切框架保留 monorepo
2026-07-03 15:56:51 +08:00
Frontend Developer
5ea822192f Merge Sprint 2: V10 选项 B 完整切换 + G1 闸门通过
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-07-03 15:52:20 +08:00
Frontend Developer
e8b8ad079e feat(sprint-2): V10 选项 B 完整切换 + G1 闸门通过
框架切换:Next.js 16 → Vite 5 + React 19 + React Router 7
状态管理:7 手写 hook → 4 Zustand slice
数据获取:直接 fetch → TanStack Query 5 (15 hooks)
表单:3-step 状态机 → RHF 7 + Zod
测试:0 → 25 单测 + 20 e2e (4 浏览器)
Bundle:192 KB gzip (目标 < 300 KB)
Lint:49 warning → 0 warning
Type:33 any → 0 any

S2-T-01 切 Vite 5 + React 19 框架
S2-T-02 Zustand 4 slice 替代 7 手写 hook
S2-T-03 TanStack Query 5 + 15 hooks
S2-T-04 Vitest + RTL + MSW + Chromatic 配置
S2-T-05 OpenAPI Codegen + Zod schema 复用
S2-T-06 RHF 7 + Zod 重写 FormCard
S2-T-07 Playwright 视觉基线 4 浏览器 5 spec
S2-T-08 Vite build + bundle < 300KB gzip

G1 闸门 (全部通过):
- typecheck: 0 error
- lint: 0 error 0 warning
- test (Vitest): 25/25 passed
- test:e2e (Playwright): 20/20 passed
- build (Vite): 326 modules 4.14s
- codegen:check: OpenAPI types 非占位

Sprint 2 收口报告:SPRINT_2_CLOSEOUT_2026-07-03.md
2026-07-03 15:51:03 +08:00
Frontend Developer
7892625ed2 docs(s1): memory + closeout notes
V8 真实执行记录: Sprint 1 实际完成 4 主任务, 推迟 8 任务
33 个 any 待 Sprint 2 决策
2026-07-03 09:22:42 +08:00
Frontend Developer
fa7c22e8ed chore(s1): monorepo skeleton + 30-file prototype first commit
Sprint 1 G0 闸门通过 (pnpm install / typecheck / lint / build / turbo 全部 exit 0)

实际完成:
- T-A-01 monorepo 根骨架: pnpm-workspace.yaml + turbo.json + 根 package.json
- T-A-02 收编原型: apps/web/ 30 个 src/ 文件 (4948 行) 首次入库
- T-A-03 lint/format: eslint flat config (根 + apps/web) + prettier
- T-A-23 web-ci.yml: GitHub Actions 4-step CI (typecheck/lint/build/bundle)

勘误 (前置假设错误):
- 原型 4948 行 (不是 4114 行)
- 原型含 33 个 any + 16 个未用变量 (Sprint 2 修)
- 原型从未 commit, 用 cp -r + git add, 不是 git mv

推迟到 Sprint 2+:
- T-A-04/05 tsconfig packages 抽离
- T-A-06/07/08 design tokens 抽离
- T-A-09~13 5 基础组件

依赖隔离:
- .gitignore 加 11 行 monorepo 规则
- apps/web/.gitignore 补 .npm-cache/next-dev.log
- 删除 apps/web 内嵌 .git/ (cp -r 复制时携带)

验证:
- pnpm install: 1m55s, 456 packages
- typecheck: 0 errors
- lint: 0 errors, 49 warnings (any + unused)
- next build: 8 routes compiled, 9/9 static pages
- turbo run build: 1 successful, 12.9s
2026-07-03 09:22:03 +08:00
Hermes Agent
a8b49276e8 feat(share): complete poster generation and unify share CLI surface
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
2026-06-30 17:48:58 +08:00
Hermes Agent
0145d6690f feat(share-link): 正式分享链接 API + 复核/报告页分享按钮前端改造
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
新增:
- POST /api/share-link: 创建正式分享链接(需 admin 角色)
- DELETE /api/share-link/{id}: 撤销分享链接
- 复核结果页 / 报告就绪状态页: 分享按钮改造为调用正式 API
  - 移除 window.location.href 跳转的旧实现
  - 改用 fetch + navigator.share / clipboard API
  - 失败时显示具体错误,不再静默

测试: 7 项通过(API 鉴权 + 创建/撤销 + 前端按钮改造)
- test_share_link_api.py: 5 项 (401/403 鉴权, admin 创建 review_result/report, 撤销)
- test_share_link_frontend.py: 2 项 (复核/报告页不再用 window.location)

已知后续工作(未包含在本 commit):
- test_share_status_panel.py: 期望 status 页面渲染'当前分享状态'面板,当前未通过
- 将在下一个 commit 完成 panel 集成
2026-06-29 21:01:44 +08:00
Hermes Agent
d83f1a1c72 fix(audit): LLM 返回 markdown-fenced JSON 时正确解析,避免静默吞异常
问题: AuditService._llm_enhance_audit 直接 json.loads(resp.content),
当 LLM 返回 ```json ... ``` 包裹内容时必然失败,被外层
except Exception: return [] 静默吞掉,导致 LLM 增强永远不生效。
表面看似已接入 LLM,实际从未真正调用成功。

修复: 在 json.loads 前剥离 markdown fence(```json / ``` 标记),
兼容主流 LLM 的 markdown 输出习惯。

验证:
- 真实 53hk 中转链路(MiniMax-M2.7-highspeed)端到端调用通过
- 修复前 AuditService.suggestions 无 '🤖 LLM' 输出
- 修复后真实返回 8 条 LLM 风险分析 + 建议操作条目
- 新增回归测试 test_llm_enhance_audit_handles_markdown_json_fence
- 全部 LLM/audit 测试通过 (16+7=23 项)
2026-06-29 21:00:46 +08:00
Hermes Agent
9b587a5547 fix(review): 复核结果页有token时补齐step1按钮+冲稳保按钮
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
修复: 有token场景复核结果页缺少'先补齐基础信息'按钮
- step1_btn: 有token时显示 /portal/{token}/info 链接
- cwb_btn: 有token时显示 /portal/{token}/cwb 链接
- 无token时两个按钮都隐藏

发现: /my-orders 已改为C方案(需portal token),手机号直查已废弃
这是安全设计(防枚举),不是bug

E2E验证:
- 创建订单→支付→资料提交→复核结果(带token) 
- 冲稳保建议页(冲/稳/保三档) 
- 无token复核页: 完善信息+进入完整规划 
- 有token复核页: 补齐信息+冲稳保+完整规划 
2026-06-29 13:10:09 +08:00
Hermes Agent
0ec5bdfc19 fix(dashboard): 从URL参数自动读取token并加载数据
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
修复管理后台Web登录后dashboard仍提示缺JWT的问题:
- dashboard.js bootstrap() 新增 URL ?t= 参数读取逻辑
- 自动将token填入#token input并触发loadDashboard
- 登录后自动跳转→自动认证→自动加载数据,用户无感知

验证: 浏览器登录admin/Admin123! → dashboard自动加载'已连接·数据已加载'
2026-06-29 12:40:11 +08:00
Hermes Agent
2af1d0670a feat(admin): 新增管理后台Web登录页+URL token支持
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
新增功能:
1. /admin/login Web登录页面(用户名+密码表单)
   - 深蓝色全屏背景+白色卡片设计
   - 登录后自动跳转 /admin/dashboard?t=token
   - 错误提示友好显示
   - token存储到localStorage
2. admin/auth.py get_current_user 支持 URL query 参数 t
   - 优先从 Authorization: Bearer 头获取
   - fallback 从 URL ?t=token 获取(管理后台Web场景)
   - 不影响API认证安全性

验证:
- 302 passed
- 浏览器验证: /admin/login → 输入admin/Admin123! → 自动跳转dashboard 
- dashboard页面正常加载(运营总览+KPI+趋势+分布)
2026-06-29 12:30:57 +08:00
Hermes Agent
ef7ecb794a fix(review): 复核结果页按钮失效+视觉改进
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
修复按钮失效根因:
- 馑token=None时,改为直接跳转首页(/review/action需要token必填)
- 按钮从form改为a链接,无token场景可正常跳转

视觉改进:
- 风险等级:颜色块+醒目提示(橙黄中等/绿低/红高)
- 用户信息:卡片化展示(5字段网格布局)
- 信息完整性:绿色提示条vs橙色警示条
- 整体层次:卡片分区+标题层级

剩余工作:
- 测试失败: test_report_page_routes_followup_step1_to_info
- 待补充: LLM具体复核结果(南方科技大学+605分分析)
- 待优化: 风险等级字号、按钮图标化
2026-06-29 12:09:14 +08:00
Hermes Agent
1f63757531 feat(rules): Phase3 - 航海类+中外合作办学新增2项目+5条规则
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
新增项目:
1. navigation: 航海类提前批(大连海事/武汉理工等,体检严格,降20-50分)
2. sino_foreign: 中外合作办学(宁波诺丁汉/西交利物浦等,学费5-15万/年,降30-80分)

新增规则:
1. 航海类体检要求(视力/色觉/身高)
2. 航海类分数优势
3. 中外合作办学学费范围(5-15万/年)
4. 中外合作办学资质核查(教育部监管平台)
5. 中外合作办学分数优势

总项目数: 14→16
总规则数: 39→44
测试: 75 passed
2026-06-29 10:01:04 +08:00