Commit Graph
2486 Commits
Author SHA1 Message Date
Jesse_ChenandClaude Opus 5.5 451a58089a docs(tasks): correct how BUG-1011 must be fixed
Gate run 2857 on 36a73761 ran 3,762 tests with one failure, the report
snapshot database test, so it is the last thing between staging and a deploy.

The brief told the executor to move the shared psql and psqlAs helpers to
stdin. That instruction is withdrawn. The two helpers serve 522 calls across
29 test files, and psql -c runs a multi-statement string as one implicit
transaction. selectAsAuthenticated relies on that: it sets the JWT subject
with set_config(..., true), which lasts only for the current transaction.
Statement-at-a-time execution would run every later RLS query with no user
set, so those tests would stop testing what they claim to test. Five other
files also write their own begin, commit or rollback.

The brief now asks for a separate single-transaction stdin helper with an
explicit maxBuffer, used only by the snapshot test, with a test proving a
transaction-local set_config stays visible. It also says that if the snapshot
test then fails a real assertion, that is a product defect to report, not an
assertion to relax.

Privacy scan on this tree before push: zero findings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-23 17:29:44 +08:00
jesse-uxandClaude Code 8c2db6874d Merge staging gate acceptance note
Preserve the parallel staging acceptance documentation while retaining the verified run 2857 failure evidence and deployment blocker.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 17:23:53 +08:00
jesse-uxandClaude Code 15036465ee docs: record staging gate result
Record Gitea run 2857 evidence: H1-H3 pass, BUG-1011 remains the sole E2BIG failure, publish skipped, and staging is not deployed. Mark BUG-1012 through BUG-1014 resolved at the code-contract level while retaining the deployment blocker.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 17:18:09 +08:00
Jesse_ChenandClaude Opus 5.5 c91ddfcc14 docs(tasks): accept the staging gate repair
36a73761 fixes exactly the three failures the brief named and adds none:
under Node 22 the frontend goes from 3,748 tests / 26 failing to 3,750 / 23,
and the three that turned green are the breakpoint allowlist, the chat panel
scroll guard and the composer queue contract. Putting isLoading back into
inputDisabled turns the new AST assertion red on its own. The build keeps /
static, first-load gzip moves by 0.001%, and no 375px rule reaches the CSS.

The executor's reading of the real gate log before the fix shows run 2856
failed on exactly four tests, these three and the BUG-1011 database test, so
BUG-1011 is expected to be all that keeps run 2857 red. That still needs the
log to confirm.

Privacy scan on this tree before push: zero findings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-23 16:55:33 +08:00
jesse-uxandClaude Code 36a737616c fix(frontend): repair staging breakpoint and focus contracts
Independent Staging Quality Gate / validate (push) Failing after 12m24s
Independent Staging Quality Gate / publish (push) Skipped
Merge entry overflow rules into the existing 480px breakpoint, restore picker focus without scrolling, and sync composer and entry contracts without changing page logic. Add AST generation-state guard and both picker close-path regressions.

Validation: targeted 33/33; Chrome isolated components 145 checks; tsc and lint zero errors. Node22 full suite 3706 tests, no lost names or new failures; three target failures fixed, 88 baseline environment/contract failures unchanged. Windows build remains blocked by symlink EPERM. Changed-file privacy check: 11 files, no findings, not a full-repository pass. BUG-1011 remains separate.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 16:31:10 +08:00
Jesse_ChenandClaude Opus 5.5 93cd01dbf9 docs(tasks): brief why the staging gate has been red since 09-22
Staging has not deployed since 1bc6a954. Rerunning the shared frontend
failures under Node 22 splits them in two. Three are real, and each passes on
its parent commit and fails from the commit that introduced it: 45ec4617 adds
a 375px breakpoint outside the allowlist, and 2a3013f2 adds two focus() calls
without preventScroll inside the chat panel and changes inputDisabled without
updating the composer's source contract. The rest fail here only because this
machine has no Docker or rsync; the gate has both, so the executor must read
the gate log rather than infer from local runs.

Privacy scan on this tree before push: zero findings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-23 16:07:12 +08:00
Jesse_ChenandClaude Opus 5.5 88e89e10d9 docs(tasks): accept the report density fix and brief the database test repair
Acceptance of a12f2c0d against TASK-report-density-fix-20260923: F1 to F6
all pass. On the fixture the fact tables are 130 rows across 600 visible
cells with no engine key, no array index and no long decimal, and every
sourcePath resolves back into the packet. The first major period reads 18
years. Python and TS appendix cleaning are byte-identical. Removing the
writer table guard turns four of its six tests red. Under Node 22 the
frontend goes from 3,730 tests / 26 failing to 3,748 / 26 with an identical
list; the Python quick gate goes from 946 passed / 1 failed to 948 / 0.

One thing still fails: the database test for the report snapshot passes a
428,557-byte SQL string to psql as a single argument, past Linux's 131,072
byte limit, so it dies with E2BIG before reaching Postgres. The snapshot row
has never run against a real database. Recorded as BUG-1011 with a fix brief.

The real-person checklist the executor's tool refused to write is added here.

Privacy scan on this tree before push: zero findings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-23 15:42:29 +08:00
jesse-uxandClaude Code a12f2c0d26 fix(report): make density facts readable and printable
Independent Staging Quality Gate / validate (push) Failing after 11m4s
Independent Staging Quality Gate / publish (push) Skipped
Unify reader cleanup rules, lock writer table guards, and register the exact fictional timestamp collision. Preserve existing ordinary-report safety contracts and source-data gaps.

Validation: report Node 165/165, final safety 29/29, Python 101/101, Chrome 28/28; both PDFs retain all 130 rows. Full Node 3704 tests with the same 91 baseline failures. Privacy test: 62 passed, 1 failed due to 17 protected-file READ_ERRORs; not a green gate. Build, DB, manual checklist and controlled-login gaps remain documented. User explicitly authorized staging push with these gaps disclosed.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 15:26:25 +08:00
Jesse_ChenandClaude Opus 5.5 0d37bec15a docs(bugs): record the staging history rewrite for BUG-1008
The product owner chose to remove the leaked birth data from staging history.
The three commits after f77a1b5a were rebuilt with their original authors,
dates and messages, changing only the brief to its cleaned text: baeec66f,
f968cb21 and fcca56fe became a7f82dc2, bbd96d3b and abf28321. The new head's
tree is byte-identical to the old one and the leaked blob is absent from the
new history.

The old commits are still served anonymously by their SHA until the Gitea
server garbage-collects, so BUG-1008 stays mitigated rather than resolved.

Privacy scan on this tree before push: one finding, the fixture collision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-23 14:24:15 +08:00
Jesse_ChenandClaude Opus 5.5 abf2832180 docs(tasks): accept the report density round and remove birth data from its brief
Acceptance of f968cb21 against TASK-report-density-20260922. Tasks 1, 2, 4
and 5 pass; task 3 does not. Under Node 22, the gate's version, the frontend
suite goes from 3,698 tests / 26 failing to 3,730 / 26 with an identical
failure list; / stays static and first-load gzip moves by 0.007%.

Task 3 renders the ordinary report's fact tables as 948 key/value rows whose
labels are engine paths: 447 carry snake_case keys and 521 carry array
indices, down to a Julian day. The brief never specified columns, so the fix
brief does.

The quick gate's new failure is the privacy scan, and two thirds of it is
mine: the brief pushed in baeec66f carried the comparison chart's real birth
date, time and coordinates. They are removed here and recorded as BUG-1008.
The copy in baeec66f's history stays until the product owner decides whether
to rewrite staging. The remaining hit is a five-character collision inside an
engine timestamp of the fictional fixture, reproduced by regenerating from its
declared fictional input.

Privacy scan on this tree before push: one finding, the fixture collision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-23 14:07:20 +08:00
jesse-uxandClaude Code bbd96d3b6b feat(report): add dense personal report appendix
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 10:42:17 +08:00
Jesse_ChenandClaude Opus 5 a7f82dc2a6 docs(tasks): brief the report density and raw appendix round
Same-chart measurement against the upstream PL9 export: 847,632 chars and
8,044 table rows there, 309,357 and 1,478 here. The engine is not the gap --
twenty divisional charts, four KP tables, Ashtakavarga, the six Shadbala
components, Avastha, Sahams and the annual pack all compute today. The report
contract has nowhere to put them: REPORT_SECTION_KINDS has no table kind and
CHART_IDS lists nine charts.

The outgoing raw appendix also leaks 925 distinct engineering identifiers over
3,797 occurrences, including an internal function name, a third-party engine
name and a third-party product's page numbers. The comparison report scores
zero on every one of those.

The decision record states plainly that two BUG-999 guards are overridden for
the appendix channel only; the ordinary prose projection is untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-22 21:42:50 +08:00
jesse-ux f77a1b5a33 fix(web): ignore a missing documentElement when marking the home screen revealed
Independent Staging Quality Gate / validate (push) Failing after 10m8s
Independent Staging Quality Gate / publish (push) Skipped
2026-09-22 13:42:36 +08:00
Jesse_ChenandClaude Opus 5 c6d421edba docs(tasks): 校正会话标题改写结果而非日期(BUG-1001)
BUG-988 后标题日期与副标题重复,且 BUG-929 删 uniquify 后同日多条
标题相同。产品拍板标题承载 accepted/confirmed 分钟或 candidate_range,
存量批量重算。红线:不得 bump updated_at,标题算式只能有一处实现。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-22 13:24:23 +08:00
jesse-ux 3fed71ab6d docs(tasks): record the icon audit review SHA
Independent Staging Quality Gate / validate (push) Failing after 10m0s
Independent Staging Quality Gate / publish (push) Skipped
2026-09-22 13:07:16 +08:00
jesse-ux 17c5b10cff docs(web): record the icon and motion audit without swapping icons 2026-09-22 13:07:04 +08:00
jesse-ux 90eaf24454 docs(tasks): record the starter-entry review SHA
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 1m53s
2026-09-22 13:05:25 +08:00
jesse-ux 45ec46176d fix(web): soften the home entry pill borders 2026-09-22 13:05:07 +08:00
jesse-ux 92e79642d2 docs(tasks): mark the chat person picker ready for review
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 5m53s
2026-09-22 12:59:20 +08:00
jesse-ux 2a3013f224 fix(chat): choose the chart person before the first message 2026-09-22 12:57:04 +08:00
jesse-ux 6d06fca0d8 docs(tasks): mark four meeting implementations ready for review
Independent Staging Quality Gate / validate (push) Failing after 14m17s
Independent Staging Quality Gate / publish (push) Skipped
2026-09-22 12:16:41 +08:00
jesse-ux cc7ef8a339 fix(chart): keep account and chart-view birth truth consistent 2026-09-22 12:14:50 +08:00
jesse-ux dd4141a030 fix(report): project ordinary reports onto public prose only 2026-09-22 12:13:53 +08:00
jesse-ux 337d820076 fix(web): recover the home screen when the bundle never runs 2026-09-22 12:13:17 +08:00
jesse-ux 6ac61be07d fix(consult): resolve chat subject from server-owned profile binding 2026-09-22 12:11:52 +08:00
jesse-uxandClaude Code 10baeb2fa8 docs: split meeting product work into task books
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-22 11:19:35 +08:00
jesse-ux 1bc6a954c5 docs: record BUG-995 fix SHA 2503c019
Independent Staging Quality Gate / validate (push) Successful in 10m27s
Independent Staging Quality Gate / publish (push) Successful in 3m29s
2026-09-22 00:59:50 +08:00
jesse-ux 2503c0190b fix(test): passthrough stdout mocks so smalltalk TAP is visible
BUG-995: privacy tests were swallowing node:test TAP by replacing process.stdout.write without calling through.
2026-09-22 00:59:36 +08:00
jesse-ux 24795cbff8 docs: mark BUG-994 resolved after staging prune-before-pull deploy 2026-09-21 23:33:38 +08:00
Jesse_ChenandClaude Opus 5 26c1fbc6eb docs(tasks): 隐私测试接管 stdout 吞掉运行器报告(BUG-995)
consultation-smalltalk.test.ts mock process.stdout/stderr,
node:test 的 TAP 也走 stdout,四条用例只上报 1~4 条,
失败时只剩一行 not ok <文件路径>。修法是 mock 透传。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-21 23:10:53 +08:00
jesse-ux a06829b33e fix(deploy): prune unused staging images before digest pull
Independent Staging Quality Gate / validate (push) Successful in 16m51s
Independent Staging Quality Gate / publish (push) Successful in 6m45s
BUG-994: migrate run 2841 failed writing containerd ingest because the staging host had no space left after accumulated exact-SHA images.
2026-09-21 22:59:07 +08:00
jesse-ux f9685f2837 fix(web): paint session row highlight as one chip including the menu
Independent Staging Quality Gate / validate (push) Successful in 10m44s
Independent Staging Quality Gate / publish (push) Failing after 3m29s
Selected and hover fill stay on the whole row. The title and ⋯ no longer draw their own canvas or radius, so they stop looking like two controls (BUG-993, recurrence of BUG-024).
2026-09-21 20:12:58 +08:00
Jesse_ChenandClaude Opus 5 c954fb8e67 docs: BUG-991/992 收口,补真机走查清单
门禁 run 2837 全绿、d2cec179 已部署、retire 迁移已应用。
五条只有真人能验的写成 docs/testing 清单。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-21 19:40:24 +08:00
jesse-ux d2cec17995 test: stop requiring retired archive entrypoints in Python contracts
Independent Staging Quality Gate / validate (push) Successful in 11m24s
Independent Staging Quality Gate / publish (push) Successful in 3m45s
Flip archive tokens to must-not-appear on the session row and session hook only. Keep writeChatSession POST/PATCH and assert delete still uses DELETE. Grep tests/ before deleting frontend symbols.
2026-09-21 19:20:45 +08:00
Jesse_ChenandClaude Opus 5 d3e0edfd1b docs(tasks): 归档下线验收结论与修复单(BUG-992)
5a4b8738 业务三层均正确;门禁 run 2836 红在两条 Python 源码合同
仍要求归档入口存在。同类第四次(933/934/939),防复发落到
frontend/AGENTS.md 的 grep 口径。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-21 19:09:44 +08:00
jesse-ux 5a4b87383f fix(web): retire session archive UI and API, restore archived rows
Independent Staging Quality Gate / validate (push) Failing after 6m35s
Independent Staging Quality Gate / publish (push) Skipped
Remove archive/restore from the session menu and drop archived=1 listing. PATCH still accepts archived_at from old bundles then ignores it. A forward migration clears archived_at without bumping updated_at. Delete stays unchanged.
2026-09-21 18:49:40 +08:00
Jesse_ChenandClaude Opus 5 f8cb1dcdee docs(tasks): 归档能力整体下线任务书(BUG-991)
产品拍板下线而非装回入口:删前端链路与 ?archived=1,
迁移清空存量 archived_at(不 bump updated_at),列留待后轮。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-21 18:22:52 +08:00
Jesse_ChenandClaude Opus 5 11e4d5ff09 docs: 会话列表修复单验收通过,BUG-990 收口并更正影响面,新增 BUG-991
门禁 run 2833 全绿、df329fa9 已部署,987~990 回填修复版本。
归档视图的 UI 入口在 92558ee6 就已删除,BUG-990 的用户现象描述更正;
归档后无法查看与恢复记为 BUG-991,待产品决策。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-21 18:17:31 +08:00
jesse-ux df329fa96c fix(web): support PostgREST not(col, is) so archived session lists load
Independent Staging Quality Gate / validate (push) Successful in 10m31s
Independent Staging Quality Gate / publish (push) Successful in 3m37s
Local Postgres not() only handled eq/cs, so archived=1 threw and the sidebar archive view returned 500. Compile is not null/true/false instead of inequality.
2026-09-21 17:45:07 +08:00
Jesse_ChenandClaude Opus 5 70d595e361 docs(tasks): 会话列表重建验收结论与修复单(BUG-990)
e71e4f92 三条实现均通过独立复跑;门禁 run 2832 红在兼容层
not(col,"is",null) 未实现,归档视图自 a1956deb 起 500。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-21 17:33:03 +08:00
jesse-ux e71e4f9200 fix(web): keep rectification sessions listed and persist chats on first send
Independent Staging Quality Gate / validate (push) Failing after 16m52s
Independent Staging Quality Gate / publish (push) Skipped
Empty-consultation filtering is now session_type scoped so birth-time rows stay in the sidebar. Subtitles use updatedAt with sort/group/cursor. New chats stay local until the first send.
2026-09-21 16:39:32 +08:00
Jesse_ChenandClaude Opus 5 f8d65e484d docs(tasks): 会话列表重建任务书(BUG-987~989)
校正会话被 messages<>'[]' 整类过滤掉、副标题与排序不同源、
新建复用旧空草稿。产品拍板副标题改最后活动时间、第一问前不落库。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-21 16:11:04 +08:00
jesse-ux 0c3c9d6b42 fix(deploy): keep BuildKit cache and use Huawei mirrors for API images
Independent Staging Quality Gate / validate (push) Successful in 10m36s
Independent Staging Quality Gate / publish (push) Successful in 7m7s
Gitea run 2828 validated, then publish hit the 60-minute deadline while
Aliyun apt/pip crawled at about 22 kB/s after a 72h cache prune on a
runner with 677 GiB free. Skip BuildKit prune when disk is above the
minimum, split API apt/pip layers, and point apt/pypi at Huawei Cloud.
2026-09-21 10:56:38 +08:00
Jesse_ChenandClaude Opus 5 27a6c39b94 docs: 回填跨午夜日期锚点的合入状态与验收结论
b85c4a68 已由 Claude 独立验收后快进合入 staging。BUG-982/983 的「修复版本」
原写「本地未提交实现,未推送/部署」,与实际不符,改为记录实现 SHA 与合入
事实;两条状态仍保持 investigating,因为部署与真人验收未完成。

验收证据回填状态板:用当初复现两条 Bug 的同一探针重跑——983 的申报分钟
落回申报日、late_night 300 个候选全在同一日两段;982 的跨午夜三分钟簇由
1440 变 3,同日两段为 300 未糊成一段。非跨午夜同机 A/B 6/6 逐位相同,新
测试基线 6 红修复后全绿,Python 组 216→272 零失败,tsc 0。

同时记下遗留待确认项:无 cluster_intervals 的行仍走旧按钟点算法,需确认
除修复前旧缓存外没有别的生产路径会产生无日期行。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-21 09:25:56 +08:00
jesse-ux b85c4a686a fix(rectification): anchor candidate windows to civil dates across midnight
Independent Staging Quality Gate / validate (push) Successful in 13m27s
Independent Staging Quality Gate / publish (push) Failing after 1h0m1s
Carry explicit local date intervals instead of inferring the day from clock
order. Cluster width, delivery, adoption, and reports keep the actual civil
date; adopted date is stored separately from the reported birth_date.

Algorithm identity is scoring-9 / spec-v5. Scoring weights, confirmation
thresholds, and Skill version are unchanged. Isolated Linux final-3 gates
passed; four pre-existing Python failures remain. This is not a production
release.
2026-09-21 02:55:00 +08:00
Jesse_ChenandClaude Opus 5 3be740f84d docs(tasks): 跨午夜日期锚点单三点拍板,转待领取
D1 late_night:选 late_night 时追问一次「午夜前还是午夜后」,答不上退
同日两段 [D 00:00–03:59] ∪ [D 23:00–23:59],一律不得跨到 D+1。写明连锁
范围:退路会产生不连续候选集,枚举、聚类、簇跨度、交付区间、宽度与交付
卡都要支持两段,不得用「取两段最小到最大」糊成一段。

D2 允许窗口跨到前一天,附带义务是交付层必须说明「若落在 23:5x 则出生
日期是前一天」,不得静默改用户的出生日期。

D3 加窗口相对序号,排序取首尾算跨度一律用序号,钟点只作展示。序号入
契约会改候选身份与缓存指纹,验收必须核对 BUG-984 的身份校验并确认历史
结果只读不被重标。

让步顺序补一条:追问可先上、两段退路后上,但退路就绪前 late_night 宁可
只搜后半夜并说明,也不得搜到用户没申报过的日期。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-20 20:24:09 +08:00
Jesse_ChenandClaude Opus 5 8aa5f6a444 docs(tasks): 跨午夜日期锚点与簇跨度任务书(BUG-982 + BUG-983)
两条 Bug 都实测复现,合并成一单,因为根因相同:契约只传钟点、日期不在
契约里,后端按钟点大小猜哪端跨日。

BUG-983 是静默算错盘:_candidate_datetimes() 把起始钟点无条件绑在申报
日期上,前端零补偿。实测申报 00:10 / 申报日 2000-06-15,申报分钟本身
落到 06-16 00:10,整套盘算在错误日期上。late_night 更重:其 00:00–03:59
共 240 分钟全部落在用户没有申报过的日期上。983 不修,BUG-981 的候选级
日期修复在这批人身上等于没上线。

BUG-982 影响面比原记录大:同缺陷在 _cluster_span、unionStillValidRange、
indistinguishableWidthMinutes 三处出现,原记录只写了 Python 两处。实测
跨午夜三分钟簇被报成 1440 分钟,且该链直达交付卡的「范围 X 分钟」。

三个待决点:late_night 的语义(按出生证明口径两段都在同一日,现行实现
一半落在次日)、申报贴近午夜时允不允许窗口跨到前一天、日期怎么进契约。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
2026-09-20 20:15:30 +08:00
jesse-uxandClaude Code 8d0359fc62 fix(rectification): enforce trusted result identity and preserve receipt provenance
Independent Staging Quality Gate / validate (push) Successful in 10m4s
Independent Staging Quality Gate / publish (push) Successful in 10m26s
Unify minute and block cache identity, keep unverifiable historical results read-only across server tools and write entrypoints, and aggregate completed receipt sources chronologically through a compatible function migration.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-20 18:03:38 +08:00
jesse-uxandClaude Code 6dd62207eb docs(rectification): record independent review and SQL authorization stop
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-20 15:57:45 +08:00
jesse-uxandClaude Code d575e89a83 fix(rectification): stop stamping pending receipts and document aggregate blocker
Implement BUG-984 F2 option A and reproduce mixed completed identities through real tools. Stop at the required SQL authorization boundary; F1/F3/F4 remain pending.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-20 15:55:09 +08:00