Files
market/agents
Yige 84df5e7056 chore(invoice-organizer): 1.0.2 —— 重新 pin 到已合并 commit / repin to merged commit (#130)
## 背景 / Background

接 [#127](https://github.com/desirecore/market/pull/127)。那个 PR
只改了技能内容,**刻意没动版本号与 pin**——`contentSource.ref` 必须指向**已合并的 commit**,而那个
SHA 在合并前并不存在。先 bump 版本会让目录声称 1.0.2、却仍按指向 1.0.1 内容的 pin 去取文件,比不 bump 更糟。

这是 `#117`/`#118`、`#120`/`#121` 之后**第三次**走同一条两步约束——inline agent 声明为
`installable` 就必须 pin 到已存在的 commit,所以内容与 pin 永远得分两个 PR。

Third time through the same two-step constraint: an inline agent
declared `installable` must pin to an already-merged commit, so content
and pin can never land in one PR.

## 改动 / Changes

- `agent.json#contentSource.ref`、sidecar 的 `provenance.content.ref` 与
`governance.compliance.reviewedRef` **三处同步** pin 到 `406bc10`
- 版本 `1.0.1` → `1.0.2`(`agent.json` 与 sidecar `release.version` 两处一致)
- `reviewedAt` / `timestamps.reviewedAt` 同步到 `2026-09-06`
- 补 1.0.2 changelog(中英双语)

## 1.0.2 修了什么 / What 1.0.2 fixes

两条都来自真机对比两个版本产出的索引文件:

| 缺陷 | 现象 | 危害 |
| --- | --- | --- |
| 索引顶层结构没钉死 | 同一个 Agent 分别产出过 `{…, records:[…]}`(数组)与 `{…, invoices:{…},
suspectedDuplicates, quarantined}`(字典),`updatedAt` 也时有时无 |
台账、报告、幂等判据全部从索引派生,键名一漂,跨轮次和外部工具都对不上 |
| `emails.json` 的 key 有前缀歧义 | key 是 `<provider>:<email>:<mailId>`,而 IMAP
的 `mailId` 自带 `imap:` 前缀 → `imap:me@example.com:imap:123` | 服务端对裸 UID
也接受,所以某轮抄原值、某轮剥前缀,**同一封邮件产生两个 key,「已处理」判定失效、邮件被重复入账** |

两条的修法都是**只钉规则、不改语义**:旧形态原样沿用、不重写容器;key
用列表接口返回的原值、一个字符不改。因此**对任何已落盘的索引文件零影响**——改语义会让存量用户的已处理邮件全部失配、整个邮箱重新入账一遍。

Both fixes pin the rule without changing semantics, so existing on-disk
index files are unaffected.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 03:29:10 -04:00
..