Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

All notable changes are recorded here. Versions follow [SemVer](https://semver.org/).

## v0.7.32 (2026-10-15)

自 v0.7.31 起累计 2 个提交(#406–#407)。**无 schema 变更(仍 16)**;**行为变更一处**:明细保留窗口的**默认值**从 30 天改成 **10 分钟**(老配置里显式写过的窗口不受影响 —— `retain_days` 仍被认且优先)。本版把宿主 2026-10-15 的裁定落地:**真实的明细只留 10 分钟,交易页的「明细」由分钟级汇总承担**。

- **交易页列表改从读模型取数(#406)** — 此前 `GET /api/transactions` 的行与 `total` 都读原始明细表,于是「明细只留一小段」等于「交易页只答得出那一小段」。而列表真正渲染的 11 个字段**汇总维度全都覆盖**(`counterpart` 在页面零消费点、汇总行的主键也从不被读回)⇒ 列表与 `total` 改读 `tx_facts`(分钟汇总行 ∪ 未折叠尾巴),更早的历史以**分钟汇总行**照样列得出来。每行带 `row_count`(它代表多少条真实明细;未折叠明细恒 1),页面在类型列后渲染 `×N` 并由悬停说明(新键 `tx.row.bucket`)交代 —— **不把汇总行当作单条真实明细**。`total` 数是**行数**(`COUNT(*)`,与列表同源、页码数不会对不上),`summary.entries` 仍是**条数**(`SUM(row_count)`,折叠对它不可见):两者刻意不同,差额就是折叠本身。两条臂的交界**不沉默**:折叠按 `id` 分批 ⇒ 某一分钟可能一半折进桶、一半还在尾巴,于是同一分钟在列表里出现「一行汇总 + 若干行明细」—— 两截互斥、`SUM(row_count)` 仍等于那一分钟的真实条数(`tx_facts.rs::a_minute_folded_in_half_still_adds_up` 钉住)。默认排序随之从 `t.id DESC` 改成 `t.time DESC, t.id DESC`(两条臂的 `id` 各自从 1 起,按 `id` 排会拿汇总表的主键当时间用),`fmtPrecise()` 也不再给只有分钟的源串补 `:00`(那秒是伪造的精度)。门禁 `tx_facts_gate` 随之改写:R2 要求**每一处读视图都声明粒度**,并新增 R4「列表真的在视图上」—— 把列表搬回原始表只翻 R4 一条(变异腿钉住)。
- **明细保留窗口默认 10 分钟(#407)** — 窗口不再决定交易页能答多深(#406 之后那段历史由汇总行承载),于是它可以按真实需要设定,而宿主的裁定是「根本没有查询真实明细的需求」:`[rollup] retain_minutes` 默认由 `43200`(30 天)改为 `10`,示例配置同步。删除本身一条没变 —— 仍然只删**已折叠且已归档**的行,所以窗口外的那段既不丢信息也不丢原件(汇总行答得出、JSONL 里躺着原件)。交易页那句说明不再把边界换算成「天」(分钟级窗口取整成天会变成「最近 0 天」这种错话):改成直接说**边界那一刻**(单位无关,前端也不必再算一遍窗口)。门禁 `tx_retention_gate` 的 R1 判据随前提改写:①窗口必须能用**分钟**表达(退回按「天」写即红 —— 天粒度写不出「10 分钟」,一天以下只剩 `0`,而 `0` 是「完全不留明细」这条**另一条**规则);②窗口比列表最深的预设浅时,「欠」只能由**列表不再从明细表取数**来还 —— 不是把规则删掉:谁把列表搬回明细表,这条立刻重新生效。两条都做过真语料变异(配置退回按天 ⇒ 只 R1 红;列表搬回明细表 ⇒ 只 R1 红)。

`cargo test` 559 → **562**(新增 3 条:折叠交界、门禁 R4 的变异腿、门禁的读法)。UI 资产令牌随各前端 PR 自行推进,本版结束在 `app.js` `?v=20261015-3`、`i18n.js` `?v=20261015-2`、`style.css` `?v=20261012-1`、`api.js` `?v=20261012-1`、`data.js` `?v=20260914-11`。

## v0.7.31 (2026-10-15)

自 v0.7.30 起累计 48 个提交(#357–#404)。**无 schema 变更(仍 16)**;**无破坏性改动** —— 唯一的配置改动(#404)向后兼容,旧拼写仍被认且优先。本版三条主线:**交易明细保留窗口的单位与披露**、**前端文案与 i18n 包的对齐**,以及**一大批「文档 / 注释陈述了一个今天已不成立的事实」的校准**。
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "aitokenpool"
version = "0.7.31"
version = "0.7.32"
edition = "2021"
description = "AI Token 共享池 — 企业 key 池 + 公共共享市场"
license = "MIT"
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# AITokenPool — multi-stage release image (v0.7.31)
# AITokenPool — multi-stage release image (v0.7.32)
#
# Build: docker build -t aitokenpool:0.7.31 .
# Build: docker build -t aitokenpool:0.7.32 .
# Run: docker run -p 8080:8080 -v "$PWD/atp-data:/data" \
# -e ATP_MASTER_KEY="$(openssl rand -hex 32)" \
# aitokenpool:0.7.31
# aitokenpool:0.7.32
#
# Notes:
# - unified data dir (rant 2026-08-19T20:53:23): ATP_DATA_DIR=/data holds
Expand Down
4 changes: 2 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AITokenPool — Docker Compose 一键部署(v0.7.31)
# AITokenPool — Docker Compose 一键部署(v0.7.32)
#
# 快速开始:
# export ATP_MASTER_KEY=$(openssl rand -hex 32) # 必填,见下方说明
Expand All @@ -16,7 +16,7 @@
services:
aitokenpool:
build: .
image: aitokenpool:0.7.31
image: aitokenpool:0.7.32
ports:
- "8080:8080"
volumes:
Expand Down
Loading