Commit Graph

48 Commits

Author SHA1 Message Date
Hermes Agent
e1fd92975b fix(tests): 修复 P1-4/P1-7 改动引发的 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
1. test_backup_workflow: JWT secret 从 'secret'(6字符) 改为 32+ 字符
   - 原因: P1-4 /health readiness 修复后,短 JWT → settings_valid=false → 503
   - backup smoke 脚本启动 admin 时 /health 返回 503 导致测试失败
   - 修复: 使用足够长的测试 JWT secret

2. test_score_range_fullchain_100_script: default_output_path 断言更新
   - 原因: P1-7 把产物路径从 reports/ 改为 /tmp/,但 default_output_path 函数仍指向旧路径
   - 修复: default_output_path 统一用 /tmp/ + 去掉日期后缀

验证: pytest 1306 passed, 3 skipped, 0 failed
2026-06-27 19:54:37 +08:00
Hermes Agent
d3d615a011 feat(legal): 前台 /privacy + /service-terms 渲染完整法务送审版
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
改造前: /privacy 和 /service-terms 只显示简版概要页
改造后: 优先读取 docs/PRIVACY_POLICY_DRAFT.md / docs/SERVICE_TERMS.md
        渲染为含表格/列表/引用的完整 HTML 页面
        找不到 docs 时 fallback 到原简版概要页(向后兼容)

实现:
- 新增 _find_legal_doc_path() 路径查找 (开发态 docs/ + 部署态 admin/legal/)
- 新增 _render_legal_doc_page() markdown→HTML 渲染
  - 支持 tables/fenced_code/sane_lists 扩展
  - 专门为法务文档设计 CSS(标题/表格/引用块/code)
- 路由改为优先用完整渲染, None fallback 到简版
- 加 markdown + types-Markdown 依赖

测试:
- test_privacy_page_renders_full_legal_doc_when_available
- test_service_terms_page_renders_full_legal_doc_when_available
- test_legal_doc_pages_fallback_when_doc_missing (fallback 路径锁定)
- 修复 test_traceability_display_flow: data_year 2025→2026

dev-verify: 1291 passed / coverage / ruff / mypy 全绿
2026-06-25 13:41:09 +08:00
Hermes Agent
9ddf8bbef4 test(backup): 异机备份恢复 smoke 测试增强
- backup_restore_smoke.py 扩展端到端覆盖
- test_backup_restore_service_level.py 增加服务级断言
- test_backup_workflow.py 工作流覆盖同步

为 L-B 备份恢复异机演练做准备 (脚本本地已就绪, 待目标主机执行)
2026-06-25 09:26:46 +08:00
hermes
bcb1e68587 fix(retention): T12-D acceptance — OrdersDAO conn ownership
- OrdersDAO.__init__ 新增 owns_conn=False 参数
- __exit__ 仅在 owns_conn=True 时 close
- connect() classmethod 创建的 conn 自动 owns_conn=True
- 修复 retention_cleanup 一次命中 ≥2 笔终端态订单时
  第二笔起 Cannot operate on a closed database 的 bug
- 新增 test_retention_cleanup_apply_anonymizes_multiple_old_orders_in_sequence
  锁住多订单连续 anonymize 契约
- runbook §8 新增 T12-D 端到端本地 acceptance 步骤 + 部署前 checklist
- CHANGELOG 加 v2.1.1 (2026-06-20) 段
2026-06-20 14:25:19 +08:00
Hermes Agent
6d0feeb090 build: prove pdf runtime and strict remediation gates
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-18 17:40:12 +08:00
Hermes Agent
ede9ffedd7 fix: align audit and payment failure contracts with real behavior 2026-06-18 16:00:57 +08:00
Hermes Agent
d415d8a494 build: tighten runtime contracts and dependency reproducibility 2026-06-18 15:50:23 +08:00
Hermes Agent
a82c5b3cca fix: align retention cleanup across notifications logs and share telemetry 2026-06-18 15:20:16 +08:00
Hermes Agent
af7ae3c6ce docs: align product positioning with current system truth 2026-06-18 14:14:20 +08:00
Hermes Agent
6b0a4a9038 fix: make coverage gate reflect application code only 2026-06-18 14:07:26 +08:00
Hermes Agent
65f44c9718 fix: make backup verify safe for wal sqlite 2026-06-18 13:39:02 +08:00
Hermes Agent
6e06e150b0 docs(cleanup): archive top-level historical reports
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-18 11:01:15 +08:00
Hermes Agent
246f21c7f2 feat(review): land unified remediation and rules evidence 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-06-18 10:21:38 +08:00
Hermes
56cf2c3ee2 feat(rules): land hunan 2026 evidence layer (phase 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
Landing the first province sample of the rules/_evidence/ tree.
Locks down the hunan-2026 本科批 院校专业组 rule set so audit
output and downstream consumers can cite the source摘录 instead
of just 'trust me, the loader says so'.

What's in the box:
- rules/_evidence/README.md: directory contract, evidence-file
  template (4 required sections), coverage table, and a note on
  RuleLoader's future strict_evidence toggle.
- rules/_evidence/hunan/<11 rule keys>.md: one Markdown
  摘录 per source_evidence_id declared in hunan.yaml
  (mode / batch / max_volunteers / max_majors_per_group /
   has_adjustment / adjustment_scope / retrieval_rule /
   collection_count / subject_mode / official_url /
   exam_subject_total). Each file carries the official quote,
  the machine-readable YAML form, key edge cases, and the
  next-review date.
- tests/test_rules_evidence_layer.py: 4 invariants
  * README exists and documents the contract
  * every active hunan.yaml source_evidence_id has a matching
    .md file
  * 11 evidence files contain the keywords that prove they
    actually carry the rule (parameterised, one test per file)
  * every evidence file has all 4 required template sections
  * no orphan evidence files (file exists but no rule
    references it)

Verification:
- focused: 27 passed (15 evidence-layer + 12 cli doctor)
- dev-verify full gate: all checks passed (ruff / mypy /
  coverage / pytest / benchmark)

Follow-up (not in this commit):
- Wire RuleLoader.from_truth_root(strict_evidence=True) so
  callers can opt in to fail-loud on missing evidence
- Extend the same pattern to national.yaml + 2-3 more
  provinces
- Add a 'last_verified_at' field to each rule and surface
  >90-day-old evidence via 'gaokao-cli rules status'
2026-06-17 22:39:56 +08:00
Hermes
a57522b11e feat(cli): delegate channel/delivery/retention/backup to gaokao-cli (phase 3 batch 3)
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
Round 3 of the unified gaokao-cli rollout. Adds four more passthrough
markers so the unified entry point can drive the remaining ops scripts
without bringing new data models into data/.

- data/cli_compat_delivery_dispatch.py: runpy shim for
  scripts/gaokao-delivery-dispatch.py (DispatchDeliveryEvents).
- data/cli_compat_delivery_watchdog.py: runpy shim for
  scripts/gaokao-delivery-watchdog.py (WatchdogDeliveryEvents).
- data/cli_compat_retention_cleanup.py: runpy shim for
  scripts/gaokao-retention-cleanup.py (OrderRetentionCleanup).
- data/cli_compat_channel_fallback.py: forwarder for
  data.channel_sync.monitor.main (CheckChannelHealth /
  ManualTemplate).
- data/cli_compat_backup.py: subprocess wrapper that dispatches
  scripts/backup_snapshot.sh and scripts/backup_verify.sh.
- data/rules/cli.py main(): routes gaokao-cli {channel, delivery
  {dispatch,watchdog}, retention, backup {snapshot,verify}} to the
  shims; rejects unknown subcommands with a structured error.
- docs/CLI_API_MAPPING.md §2.1: now lists 12 top-level commands with
  their real subcommands and fallback paths.
- tests/test_cli_doctor_phase3.py: +6 tests covering channel
  delegation, delivery dispatch / unknown-subcommand, retention
  routing, backup shell routing, and backup unknown-subcommand
  rejection.

Verification:
- focused: 12 passed
- dev-verify full gate: all checks passed (ruff / mypy / coverage /
  pytest / benchmark)
2026-06-17 22:18:57 +08:00
Hermes
77cde03f1d feat(cli): delegate share/payment-doctor to gaokao-cli (phase 3 batch 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
Builds on 7d31d75 (order delegation + doctor self-check). The unified
gaokao-cli now also wraps the legacy shortlink and payment-doctor
scripts through thin runpy-based compat shims.

- data/cli_compat_gaokao_shortlink.py: loads scripts/gaokao-shortlink
  via runpy.run_path; preserves argv routing for native subcommands
  (create/list/resolve/revoke/...).
- data/cli_compat_payment_doctor.py: loads scripts/payment_provider_doctor.py;
  strips the leading 'doctor' marker (the legacy script takes no args)
  and rejects unrecognised tokens so silent flag drops are surfaced.
- data/rules/cli.py main(): routes gaokao-cli {share,payment} <...>
  to the compat shims; gaokao-cli order remains delegated to
  data.orders.cli.
- docs/CLI_API_MAPPING.md §2.1: records the actually-shipped command
  surface (rules / majors / majors school-* / audit / order / share /
  payment doctor / doctor) so the design doc matches runtime.
- tests/test_cli_doctor_phase3.py: covers share delegation, payment
  doctor rejection, and the passthrough help flow.

Verification:
- focused: 6 passed
- dev-verify full gate: all checks passed (ruff / mypy / coverage / pytest / benchmark)
2026-06-17 19:16:44 +08:00
Hermes
38f74bd1f1 feat(portal): add payment-success intermediate page + status/info copy
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
After successful payment, the gateway now lands users on an
intermediate 'payment-success' page that explains next steps
(continue intake, or jump to status) before they continue into
the live status view. This is a product-experience improvement
over the old direct /status redirect and was already staged in
uncommitted web_public work; this commit lands the matching test
assertions and copies.

Changes:
- admin/routes/web_public.py
  * /portal/{token}/payment-success route + _render_payment_success_page
  * payment_return_page now redirects to /payment-success (303)
  * landing_page renders a 'consult' quick-intake card
- admin/tests/test_web_public.py
  * test_payment_return_redirects_to_payment_success_page
  * test_payment_success_page_served_after_paid_order
  * landing/pricing/info/status copy assertions
- admin/tests/test_order_info_form.py
  * assert the 'still need to fill' reminder renders
- admin/tests/test_order_status_page.py
  * test_info_required_status_page_emphasizes_continue_intake
  * assert '查看报告' / '查看当前进度' on delivered/processing status
- admin/tests/test_web_public_alipay_sim_e2e.py
  * accept the new /payment-success intermediate page
- tests/test_cli_doctor_phase3.py
  * drop unused pytest import (ruff F401)

Verification:
- focused alipay_sim E2E: 1 passed
- dev-verify full gate: all checks passed (ruff / mypy / pytest / coverage / benchmark)
2026-06-17 18:50:08 +08:00
Hermes
7d31d75145 feat(cli): add order delegation + doctor self-check (phase 3)
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
docs-only + cli: extend scripts/gaokao-cli with two thin wrappers
without changing data/rules, data/majors_catalog, or rules/_truth.

- gaokao-cli order <subcommand> delegates argv to data.orders.cli.main
  with the 'order' prefix stripped, so callers can use the unified
  command face without changing the existing orders parser.
- gaokao-cli doctor <json?> returns a single self-check payload that
  reuses RuleLoader + MajorsCatalogLoader (no new dependencies, no
  gaokato/ scaffolding). Truth-root or catalog-root failures degrade
  gracefully with structured {error, ok=false} sections instead of
  raising.
- tests/test_cli_doctor_phase3.py covers: help text, order delegation
  to list subcommand, doctor ok-path, doctor failure-path.

Also re-aligns docs/ACTIVE_EXECUTION_BOARD_2026-06-17.md (new) +
docs/CURRENT_STATE.md (single execution口径) + rules/majors source-
of-truth index files so design-phase numbering no longer drifts from
execution-phase numbering. Pre-existing 2026-06-16 optimization board
and 2026-06-17 phase2 plan are demoted to historical snapshots.
P0_P1_P2 remediation plan §4 historical cards get a red warning
banner so they are not re-read as current pending.

Verification:
- focused: 4 passed
- dev-verify: 770 passed, 1 failed
  (alipay_sim E2E failure pre-existed this commit; caused by an
  uncommitted upstream edit in admin/routes/web_public.py that
  rewires payment_return -> /portal/{token}/payment-success while
  the E2E still asserts /portal/{token}/status; out of scope for
  this commit and intentionally not touched.)
2026-06-17 18:05:16 +08:00
Hermes Agent
edc5b11230 feat(audit): validate majors in structured audit flow
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-17 16:02:31 +08:00
Hermes Agent
6b1157fe19 feat(majors): add school catalog skeleton and verification
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-17 12:46:04 +08:00
Hermes Agent
36ad58a253 feat(majors): add phase2 national catalog mvp
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-17 12:06:46 +08:00
Hermes Agent
8a61b8fe4a fix(rules): close phase15 verify and legacy checker 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-06-17 09:01:43 +08:00
Hermes Agent
bf3d9c2c50 docs(frontend): add 2026-06-16 frontend audit, execution board, and local browser validation report
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
- ACTIVE_EXECUTION_BOARD_2026-06-16_OPTIMIZATION.md: 本轮前端审计/整改执行板
- 2026-06-16-optimization-program.md: 4 大工作流规划
- LOCAL_BROWSER_VALIDATION_2026-06-15.md: 本地浏览器验证报告与 Portal Step 5 历史问题
- test_requirements_rules_phase1.py: 规则 Phase1 配套测试
2026-06-16 20:13:23 +08:00
Hermes Agent
ae4835eeab feat(rules): add phase1 truth source loader and rules cli
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-16 18:14:41 +08:00
Hermes Agent
a95d3b7d4b fix(deploy): pass prod payment env vars into compose
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-16 11:02:54 +08:00
Hermes Agent
c03ed7a4ba feat(web): tighten portal privacy and cleanup flows
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-15 21:24:55 +08:00
Hermes Agent
deee5e538a feat(ops): wire SMTP/IM alert sinks and tighten intake validation
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-15 19:36:47 +08:00
Hermes Agent
bf7cce90f9 feat(ops): add admin ops alert audit and watchdog alert sink
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-15 18:17:30 +08:00
Hermes Agent
4215e8fb64 docs(state): refresh remaining remediation scope after P2/X 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-06-15 15:28:30 +08:00
Hermes Agent
94200960b2 docs(design): tighten X-02/X-03/X-05/X-08 design docs and add CROWD_DB_DATA_QUALITY
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-15 15:14:27 +08:00
Hermes Agent
5a57ec4705 feat(quality): make dev-verify a stable one-shot entrypoint
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-15 14:23:27 +08:00
Hermes Agent
70504064c3 fix(quality): lock P2-2 single-DAO truth and P2-6 historical snapshot headers
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-15 14:18:25 +08:00
Hermes Agent
ac2d6d1c44 fix(quality): tighten P1-4/P1-6/P1-8 regressions for db scoping and backup verify
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-15 13:52:56 +08:00
Hermes Agent
355431461c fix(delivery): split validated vs delivered lifecycle to remove sent overreach
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-15 13:21:42 +08:00
Hermes Agent
243d1b9427 fix(quality): unify coverage gate across CI, dev-verify, and codecov
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-15 12:45:06 +08:00
Hermes Agent
7fabc23715 fix(t12): close payment delivery and governance remediation
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-15 11:39:31 +08:00
Hermes Agent
7fe4ddcbc4 feat: harden T12 backup and portal workflows
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-14 23:12:18 +08:00
Hermes Agent
8787600eee feat: add retention cleanup workflow
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-14 20:55:06 +08:00
Hermes Agent
e24107c517 feat: add delivery watchdog and crowd quality summary
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-14 20:47:25 +08:00
Hermes Agent
9d1a6a11b0 feat: harden delivery and deletion workflows
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-14 20:37:39 +08:00
Hermes Agent
ccf93c0b15 feat: add delivery status tracking and crowd quality levels
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-14 19:34:43 +08:00
Hermes Agent
4b0390a255 feat: move delivery notification into dao transitions
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-14 17:35:37 +08:00
Hermes Agent
e7706e3b11 chore: harden real payment onboarding gate
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-14 06:50:21 +08:00
Hermes Agent
cb9728fb4e feat: complete web self-service mvp flow
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-14 05:26:27 +08:00
Hermes Agent
ca480ebf84 chore(quality): close T5.5 coverage gate
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-13 22:31:40 +08:00
Hermes Agent
9510fd16ec chore(release): finalize T5.5 coverage gate artifacts
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-13 16:25:54 +08:00
Hermes Agent
3f46811e49 release: cut v2.1
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-13 14:49:58 +08:00
Hermes Agent
d786b8ee96 docs+tests: 完善文档体系,添加自动化测试
新增文档:
- docs/ARCHITECTURE.md - 系统架构设计
- docs/DEVELOPMENT.md - 开发指南
- docs/TUTORIAL.md - 使用教程(导航+快速上手+API参考)

新增测试:
- tests/test_all.py - 自动化测试脚本
  - 省份简称识别(5个)
  - 方案检查(5个用例)
  - 所有测试通过
- tests/cases/hunan-578.md - 湖南测试用例
- tests/cases/zhejiang-630.md - 浙江测试用例

测试结果:所有6个测试用例通过
- 湘/浙/鲁/粤/鄂简称识别
- 湖南错误版方案检测
- 湖南修正版方案通过
- 浙江错误模式检测
- 山东正确方案通过
- 未提供省份处理
2026-06-11 16:14:46 +08:00