Hermes Agent
|
9d239fe2c3
|
feat(t12): harden public checkout and add admin manual order page
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 12:16:45 +08:00 |
|
Hermes Agent
|
c03ed7a4ba
|
feat(web): tighten portal privacy and cleanup flows
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
|
eb06990b82
|
feat(t12): add multi-file upload limits and ops alert monitoring surfaces
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:01:21 +08:00 |
|
Hermes Agent
|
4026b8f55f
|
feat(t12): productize portal status and structured intake flow
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 17:13:05 +08:00 |
|
Hermes Agent
|
7fabc23715
|
fix(t12): close payment delivery and governance remediation
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
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
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
|
9d1a6a11b0
|
feat: harden delivery and deletion workflows
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
|
4b0390a255
|
feat: move delivery notification into dao transitions
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
|
08148fe282
|
feat: add consent gating and dev verify
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 13:02:03 +08:00 |
|
Hermes Agent
|
cb9728fb4e
|
feat: complete web self-service mvp flow
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
|
3f46811e49
|
release: cut v2.1
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 |
|
coder
|
9168a10d75
|
feat(orders): T4.2 DAO 数据访问层 (CRUD + 事务 + 加密 + 状态机)
- data/orders/dao.py (530 lines): OrdersDAO class
* CRUD: create / get / get_by_external_id / find_by_phone / list / count / stats_by_status / update / delete
* 事务: transaction() 上下文 + 嵌套深度计数(外层事务中内层不重复 commit)
* 加密透明化: API 入口 Order dataclass 走明文 PII,DAO 内部 to_db_row/from_db_row 转换
* 状态机守护: transition_status() 单事务内 UPDATE orders + INSERT order_status_history
+ 时间戳联动 (paid_at/started_at/delivered_at/completed_at COALESCE 保留首次值)
* 幂等 upsert_by_external_id: 4 种 action 与 data/channel_sync/dao_extension 对齐
* 防御: update() 显式拒绝 status 字段; _row_factory_ctx() 不污染外部 row_factory
* 异常: OrderNotFound(LookupError) / DuplicateOrder(ValueError)
- data/orders/tests/test_dao.py (51 cases): 加密透明化、状态机合法/非法路径、
事务回滚、upsert 4 种 action、状态历史时间线、row_factory 隔离、删除 cascade、
与 dao_extension 的契约对齐
- data/orders/__init__.py: 导出 OrdersDAO / UpsertResult / StatusChange /
OrderNotFound / DuplicateOrder
- 验证: data/orders/tests/ 163/163, data/ 386/386, ruff 0 warning, py_compile clean
|
2026-06-12 16:36:51 +08:00 |
|
coder
|
ef4bb46295
|
docs(orders): T4.2 DAO 文档 + 实施记录 + CHANGELOG
- data/orders/README.md: 增加 DAO API 一览表 + 加密透明化边界表
- docs/plans/T4-2-orders-dao.md: 实施记录 (设计原则 / DoD / 验证 / 风险)
- CHANGELOG.md: T4.2 条目(51 用例 / 163 总 / 386 data 全绿)
|
2026-06-12 16:36:32 +08:00 |
|
Hermes Agent
|
e18abedb4f
|
feat(orders): T11.2 敏感字段展示脱敏工具 + to_dict 三态策略
- 新增 data/orders/masking.py (141 行):
- mask_phone: 11 位 → 138****1234;支持 +86/86 国家码剥离、空格/横杠分隔符
- mask_id_card: 18 位 → 430102********1234(保留前 6 行政区划 + 末 4);15 位老版兼容;13-14 位非标准也走前 6 后 4 遮罩
- mask_name: 1 字原样 / 2 字 张* / 3 字 张*丰 / 4+ 字 张**;非中日韩字符全遮
- mask_sensitive_dict: 一键遮罩订单字典中所有已知 PII 字段,不动 _enc/_hash 索引/密文
- 默认安全:None/空串/非字符串均不抛错,统一返回 None/''
- 扩展 Order.to_dict(decrypt_sensitive) 三态策略:
- True : 完整明文(权限内接口使用,如后台人工核对)
- False : 完全移除明文(对外公开统计/审计日志)
- 'mask' : 部分遮罩(默认,推荐;列表/详情直接可用)
- 未知字符串策略值回退为 mask(防误传 plaintext 导致明文泄露)
- 新增 data/orders/tests/test_masking.py (246 行,32 个 pytest 用例):
- 覆盖各 mask 函数边界(标准/带 +86/短串/非法输入)
- 覆盖 Order.to_dict 三态与默认 mask 的串联通路
- 验证:
- data/orders/tests 全套 112 用例通过(原 80 + 新增 32)
- 全仓 344/344 通过
- ruff check 0 warning / ruff format --check 已规范
- 与 T4.1 落盘加密的关系:crypto 负责'落盘形态'(密文+hash),
masking 负责'展示形态'(部分遮罩),两者正交互补。
|
2026-06-12 16:26:57 +08:00 |
|
Hermes Agent
|
bdd361e50f
|
docs(orders): T11.2 展示脱敏文档 + 字段分类表更新
- data/orders/README.md 新增 T11.2 段:展示脱敏三态策略示例代码
- 文件结构表新增 masking.py / test_masking.py
- 字段分类表:强/弱敏感 PII 增加'展示遮罩'列
- DoD 勾选'展示脱敏'项
- 版本号 v1.0 → v1.1
代码改动见下个 feat commit(分离便于回滚/review)。
|
2026-06-12 16:26:32 +08:00 |
|
Hermes Agent
|
a11480cf10
|
feat(orders): add encrypted sqlite order model
|
2026-06-12 15:24:20 +08:00 |
|