fix: integrate people archive, report reader and western chart corrections
Validate on Linux Node 22 and PostgreSQL 17: 3894 frontend tests and 64 database tests pass, with no removed test names or new failures. Preserve static Home, bounded gzip, assertion-change records and manual acceptance gaps. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
# PROGRESS · 西洋盘避让与移动端点击修复(2026-09-25)
|
||||
|
||||
## 最终整合复验补记
|
||||
|
||||
组合快照 `final-r4b` 已在 Linux Node22.23.2 / PostgreSQL17 验证:前端3894/3894、DB64/64,fail/skip/cancel/todo均0;tsc/lint/build各exit0,lint0error/127既有warning,首页Static。顶层及嵌套旧测试名无删除、新增失败0;完整首屏/入口增量/专属JS gzip分别+0.1612%/−0.4536%/−0.7984%。完整日志与快照hash见 `PROGRESS-three-fixes-integration-20260925.md` final-r4b节。
|
||||
|
||||
下文执行期状态保留作历史。组件几何/字符命中证据不冒充受控登录、整页移动端、真实Tab/读屏或部署验收;这些缺口保留,BUG-1033不提前resolved。
|
||||
|
||||
## 状态与范围
|
||||
|
||||
本地实现和组件级验证完成,集成全量/独立复核/登录整页/部署待验收;未提交、未推送。BUG-1033由协调方分配(people预留1031/1032)。
|
||||
|
||||
- 工作树:`.worktrees/chart-western-fix-20260925`;分支:`codex/chart-western-fix-20260925`。
|
||||
- 实际开工基线:`48fe4daf519dab2a5c6bf4b01dd513067de1647b`,不是任务书早先的`fabe0114`。
|
||||
- 规格校正:任务书所写`frontend/src/lib/western-wheel-layout.ts`不存在;实际文件是`frontend/src/components/chart-page/western-wheel-layout.ts`,协调方已确认。
|
||||
- 只改Western布局/SVG、测试/golden及文档。无引擎/API/people/报告业务修改,无依赖升级、workflow/main/DNS/stash操作。
|
||||
- 用户硬门槛:**必须用Node22跑全量测试,并和开工时的基线逐条对比,新增失败为0才允许推送;改任何既有断言必须原值/新值/原因三栏。** 本单不以定向通过代替此门槛。
|
||||
|
||||
## 决策与实现
|
||||
|
||||
### D1 固定锚点,行星让位
|
||||
|
||||
保留ASC/MC的r162和+9°位置,共用同一坐标函数用于绘制与障碍盒。星座名和宫号亦作固定障碍。行星先保持既有11°松弛,再按距离代价搜索两层半径188/136及邻近角度,要求文字盒不交、完整在viewBox内、显示角仍至少11°、圆心距离大于命中半径+1。保留真实黄经用于刻度与引导线,未更改任何引擎数值。
|
||||
|
||||
独立复核发现真实窄宫的宫号互碰,因此最终不再豁免house-house:宫号保留真实宫中角度,默认r84,拥挤才径向尝试108/60/132/36。原golden仍全部r84,其既有半径断言未改。所有真实扫描样本保留,所有标签对均检查。
|
||||
|
||||
### D2 扫描而非单一幸运样本
|
||||
|
||||
- 固定种子20260925、LCG的512张几何压力盘:ASC附近、MC附近、全周均匀随机三类,均匀宫头仅用于几何压力测试,不冒充引擎合同。
|
||||
- 64张真实Swiss引擎虚构盘:保留原始响应及真实非均匀宫头,纬度±55°,无样本过滤。
|
||||
- `MAX_OVERLAPPING_CHART_RATE=0.01`,并对固定回归集合额外断言实际重叠盘数为0。
|
||||
- 渲染后读取实际inline字号,检查完整37个标签(11行星+26其他)、全部标签盒、边界;骨架和相位常显合同保留。
|
||||
|
||||
### D3 按实际盘宽与真实字体验收
|
||||
|
||||
| 指标 | 原值 | 最终值 |
|
||||
| --- | --- | --- |
|
||||
| 375px页面盘宽 | 忽略左右页边距 | 375−16×2=343px |
|
||||
| 字号 | 17×343/520=11.21px | 19×343/520=12.53px |
|
||||
| 透明圆直径 | 44×343/520=29.02px | 68×343/520=44.85px |
|
||||
| 基线/符号字框 | middle / 约1em估算 | central / 符号2.2em,普通1.4em |
|
||||
| 点击归属 | 同组圆/线按行星顺序覆盖 | 所有按钮圆先画,所有文字后画;逐字符归属自身 |
|
||||
|
||||
真实本地Noto Symbols的文本盒约2.07em高,因此不能只按font-size估高。装饰引导线和刻度`pointerEvents=none`。可见文字层`pointerEvents=bounding-box`、点击同一回调,`aria-hidden`且无tabIndex;原透明圆组保留唯一键盘按钮/aria-pressed/标签,未产生重复Tab项。
|
||||
|
||||
### D4 原始golden及陈旧文档
|
||||
|
||||
原Western fixture从视图键子集改为完整`build_tropical_natal_from_request`返回对象,测试内mapper转换。另存64份完整原始响应。仅JSON格式化及LF换行,无键值改造。BUG-1025与首页拆分CHANGELOG按历史行为→当前`/people`跳转更正,不抹掉历史。
|
||||
|
||||
## 失败探索与复核账本
|
||||
|
||||
1. 初版估算几何扫描过,但Chrome65盘发现462对字框相交、7个中心命中错误。真实字体高度和middle基线导致漏算,后画装饰线也拦点击。修正字框/central/装饰线后65盘均0。
|
||||
2. 高字框暴露512样本中的7个行星-宫号冲突;把实际宫号盒加入障碍后消除,不缩字。
|
||||
3. 曾试`asc + offset*30 + skew*sin(offset*pi/6)`任意非均匀宫头,发现大量宫号互碰;这种生成器不是物理盘,未列正式引擎集。没有据此把全部验证换成均匀宫头:另补64张真实引擎完整响应。
|
||||
4. 真实64盘初次Chrome有5对宫号互碰(2盘)。最初新测试临时跳过house-house;独立复核指出任务书要求任意标签,最终撤销例外并实现仅径向宫号避让。同样64盘保留,最终宫号碰撞0。
|
||||
5. 独立复核指出只保护中心仍不够:真实扫描索引8/23/33/53/60可见文字末字符被邻星r34圆吞掉。改为先所有命中圆、后所有文字;逐字符`getExtentOfChar`中心`elementFromPoint`验证纳入可复跑脚本,最终0错误。没有把r34退回22来消红。
|
||||
6. `git diff --check`首次报生成JSON的CRLF空白,统一为LF后复核;不改变raw数据。
|
||||
|
||||
## 既有断言三栏
|
||||
|
||||
原有3个Western测试名称、断言表达式和chart-page-view原21项均未删除/替换。即便仅间接改变夹具或盒语义,也按三栏留账:
|
||||
|
||||
| 原值 | 新值 | 原因 |
|
||||
| --- | --- | --- |
|
||||
| fixture为手工视图数组/键,测试直接读 | 完整引擎raw对象,测试内mapper构造视图 | AGENTS §7.4真实合同;11行星/12宫头真实值保留 |
|
||||
| `westernLabelBox`默认font17、高约1em | font19、符号2.2em/普通1.4em | 修正真实字体与343px缩放;盒更大是收紧检查,不是降容差 |
|
||||
| 单盘两两不交、11°、宫中角度/r84、骨架3圈12线无文字 | 原断言原样保留;追加512压力盘与64真实盘全标签扫描 | 提升覆盖,不删除幸运单盘合同 |
|
||||
| 本轮新真实扫描草稿暂排除house-house | 最终取消排除,检查全部标签对,阈值≤1%且固定集必须0 | 独立复核纠正范围;宫号径向避让而非豁免失败 |
|
||||
| 本轮新点击测试最初仅检查圆心 | 追加全部命中圆早于文字、唯一按钮数、装饰线不拦事件;Chrome逐字符hit-test | 独立审查发现可见字末尾被邻圆截获 |
|
||||
|
||||
## 本地验证
|
||||
|
||||
运行时:Windows、Node v22.23.2、Python3.11.7;依赖复用已有node_modules目录junction,未安装或升级。Linux全量由协调方独立执行。
|
||||
|
||||
| 检查 | 结果 | 边界 |
|
||||
| --- | --- | --- |
|
||||
| `npx tsx --test tests/western-wheel-layout.test.ts tests/chart-page-view.test.tsx` | 28/28,fail0 skip0 | 原24项保留,新增4项 |
|
||||
| `npx tsc --noEmit` | exit0 | 本地 |
|
||||
| `npm run lint` | 0 error / 127 warning | 既有无关警告,不顺手修 |
|
||||
| 512压力盘 | 全标签碰撞0 | 固定种子几何,不是引擎响应 |
|
||||
| 64真实引擎盘 | 全标签碰撞0 | 不过滤样本,不排除house-house |
|
||||
| Chrome129盘实际字体 | 碰撞0、宫号碰撞0、圆心与逐字符命中错误0 | 65真实含原golden +64压力;343px盘宽 |
|
||||
| Chrome实测 | 最小字12.53269px、命中直径44.85382px | 独立组件,不是登录页 |
|
||||
| LinuxNode22开工基线(协调方回报) | 3863/3863,fail0 skip0;DB61/61,tsc0 | 最终集成仍须名称逐条比较,不能用旧Node20失败豁免 |
|
||||
| Linux最终全量/build/Static/gzip | 待协调验收 | 未声称通过;不得推送 |
|
||||
| 登录页面/键盘/点选取消/部署health | 待验 | 见BLOCKED与真人清单 |
|
||||
|
||||
额外`pre_work_check.py --remote-timeout 8 --command-timeout 45`结果fail:`test_preflight_fragment_scan_reports_authority_layers_and_risk_buckets`在`tests/test_preflight_fragment_scan.py:64`要求`.workbuddy/skills/jyotish-vedic-astrology`镜像命中,但独立worktree无该镜像;Python运行、外部适配、远端可见性和其余扫描项通过。未修改Python生产文件或该断言;此失败不豁免前端门禁。
|
||||
|
||||
## 复跑原始响应
|
||||
|
||||
仓库根目录运行;输入均为明确虚构的测试数据,不来自真实用户:
|
||||
|
||||
```python
|
||||
import json, random, sys
|
||||
from pathlib import Path
|
||||
sys.path.insert(0, 'scripts')
|
||||
from western_chart_engine import build_tropical_natal_from_request
|
||||
out = Path('frontend/tests/fixtures')
|
||||
one = build_tropical_natal_from_request(dict(
|
||||
year=1990, month=1, day=1, hour=12, minute=0,
|
||||
lat=39.9042, lon=116.4074, tz=8, house_system='P'))
|
||||
r = random.Random(20260925)
|
||||
scan = [build_tropical_natal_from_request(dict(
|
||||
year=1970+i%45, month=1+i%12, day=1+i%27,
|
||||
hour=i%24, minute=(i*13)%60,
|
||||
lat=r.uniform(-55,55), lon=r.uniform(-180,180), tz=0,
|
||||
house_system='P')) for i in range(64)]
|
||||
for name, value in [('western-1990-01-01-beijing.json', one),
|
||||
('western-fictional-scan-20260925.json', scan)]:
|
||||
(out/name).write_bytes((json.dumps(value, ensure_ascii=False, indent=2)+'\n').encode())
|
||||
```
|
||||
|
||||
## 复跑浏览器证据
|
||||
|
||||
`artifacts/western-browser-check.tsx`读取实际组件、globals.css和本地Noto字体,生成HTML,不接网络或用户数据。脚本及`artifacts/western-browser-result.json`作为复跑证据;生成HTML、Chrome profile、stderr和其他审查临时文件不纳入交付清单。
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
NODE_PATH="$PWD/node_modules" npx tsx ../artifacts/western-browser-check.tsx
|
||||
# Chrome路径按本机安装调整,使用新建的专用临时profile,不借用登录profile
|
||||
chrome --headless --no-first-run --disable-gpu \
|
||||
--user-data-dir=/tmp/western-check-profile --window-size=375,850 \
|
||||
--virtual-time-budget=10000 --dump-dom \
|
||||
file:///absolute/worktree/artifacts/western-browser-check.html
|
||||
```
|
||||
|
||||
等待字体就绪后`#result`必须charts129、collisions[]、houseOnlyCollisions[]、hits[]。页面交互、选择/取消及键盘需另按`docs/testing/chart-dasha-western-20260924.md`在受控登录环境执行。
|
||||
@@ -0,0 +1,115 @@
|
||||
# PROGRESS · 人物档案 P0/P1 修复(2026-09-25)
|
||||
|
||||
## 最终整合复验补记
|
||||
|
||||
Linux Node22.23.2 / PostgreSQL17 的 `final-r4b`:全量 **3894/3894**、DB **64/64**,fail/skip/cancel/todo 均0;tsc/lint/build各exit0,lint0error/127既有warning,首页Static。相对开工基线3863/61,顶层及嵌套名称多重集合均无删除、新增失败0。三种首页gzip变化为完整资源+0.1612%、入口增量−0.4536%、专属JS−0.7984%。日志、快照hash、四项修复三栏及验证环境失败保留在 `PROGRESS-three-fixes-integration-20260925.md` final-r4b节。
|
||||
|
||||
以下执行期记录保留作历史;旧面板在整合树保留,不能将本单执行树的删除写成已交付。Python/隐私及最终边界核查另行补记;受控真人、迁移上线和health仍待验,未据自动化绿提前resolved。
|
||||
|
||||
## 基线与门禁
|
||||
|
||||
- 开发树:`codex/people-archive-p1-fix-20260925`,实际开工基线 `48fe4daf519dab2a5c6bf4b01dd513067de1647b`(任务书之后的新 staging)。不改其它分支、workflow、DNS;未提交、未推送。
|
||||
- **必须用 Node 22 跑全量测试,并和开工时的基线逐条对比,新增失败为 0 才能推;改任何断言都要写三栏。**
|
||||
- 协调方 Linux Node22 基线:前端 3863/3863、fail0、skip0;数据库 61/61;tsc exit0。旧 Node20 的失败不作为本轮豁免。
|
||||
- 当前仅本地定向证据:Node v22.23.2,首轮组合 70/70,provider/report/cache 39/39;tsc exit0;前端修改区域 lint 0 error(既有 warning 未顺手修改);根 Python 三个相关合同 21/21。新增星历用例、Linux全量与DB快照审查仍进行中,完成后由协调方补确数。
|
||||
|
||||
## 实现清单
|
||||
|
||||
| 任务 | 实现 | 验收状态 |
|
||||
|---|---|---|
|
||||
| T1 worker | 持久化 chartProfileId 经 loadSubjectBirth;他人从 typed columns 读取;候选范围仅本人;人物缺失/外属终止且走既有退款 | fake-engine ready 与删除/外属失败退点定向通过;真实模型/线上待验 |
|
||||
| T2 OR is | 复用 unary IS 编译器,支持 null/true/false,不当作字符串或 =null | 单测通过;真实 sessions GET + PG 在新增 DB 用例中 |
|
||||
| T3 时序 | 同步 last-account 预读仅作暂存选择;账户/目录校验 ready 闸门挡 chart/report/ephemeris/newChat;provider先账户再目录再session | 跨账户/目录事件单测通过,受控浏览器待验 |
|
||||
| T4 消息 | metadata merge 保留 hydrated 消息、深链及分页外行;人物不变不广播subject;视图按当前人物过滤,跨账户清除旧数据 | 纯函数与provider合同通过,生命周期独立审查中 |
|
||||
| T5 纠偏 | 新迁移降级旧JSON accepted/confirmed、清active tuple;不改旧迁移、不改profiles;目录失效刷新;未知用量拒绝删除;daily按所选资料;合盘新对话显式self且不改全局;星历暖缓存/首败重试 | 定向通过;迁移与真机待独立验 |
|
||||
| T6 清理 | 有界 ids 预检替代count/head;同账户事务锁确保4人上限;无效UUID 404;report双字段冲突400并规范化持久化;删除死面板、合同改锁/people;编辑标题纠正 | DB并发用例新增,所有既有测试名保留 |
|
||||
| T7 记录 | BUG1031/1032,关联1030/990/1024;本记录、设计、changelog、真人清单 | BUG状态保持 investigating,未部署 |
|
||||
|
||||
## 数据边界与设计说明
|
||||
|
||||
- 检查迁移:`personal_reports.chart_profile_id` 为 nullable uuid,无指向 chart_profiles 的 FK;不存在 ON DELETE SET NULL 把他人改成本人的窗口。**独立真实DB进一步确认:删除RPC级联删报告/job后,worker不会再看到缺失人物,单靠worker失败退款不足。** 新 `20260925040000_deleted_report_release.sql` 在删除事务内以受限definer触发器复用`release_usage`,未交付预留退款;ready不退,已completed不退,已released幂等。删除RPC显式校验auth.uid/所有权并按job→report锁序避免running worker完成时死锁。未改旧迁移、未开放通用退款权限。
|
||||
- 新纠偏迁移在独占表锁事务中临时停用 birth guard,清理完立即恢复。旧JSON保留作兼容,不再赋予校正权威。profiles不写入。
|
||||
- 人数上限使用 owner 派生的事务 advisory lock 后再独立 count,两个连接争抢第四/第五个名额;预检只改善错误反馈,DB为最终权威。
|
||||
- Provider内部保留同账户会话,以免深链/消息丢失;可见侧栏按当前人物过滤,不展示对方列表。不同账户不能合并。
|
||||
- Home未新增useState/useRef。Part B为纯编码豁免。Skill版本不bump。
|
||||
|
||||
## fabe0114 追溯三栏(完整覆盖11个文件、12个修改位置)
|
||||
|
||||
| 文件/断言 | 原值 | 新值 | 原因 |
|
||||
|---|---|---|---|
|
||||
| chart-page-view / provider URL | sessions仅limit | limit+subject | 历史按当前人物;本轮进一步用bind后捕获subjectId |
|
||||
| chart-view-route / birth reader | ACCOUNT_BIRTH_SELECT直读 | loadSubjectBirth且拒clientBirth/body.profile | 唯一服务端人物解析入口 |
|
||||
| consultation-entrypoint / disabled | 产品/加载/变更3条件 | 加 !rectificationForSelf | 校正仅支持本人 |
|
||||
| database-admin-account-reset / fixture | role=self | role=other | 本人镜像停写,仍覆盖重置他人档案 |
|
||||
| home-bootstrap-reveal / guards源 | 只page | page+binder,数量仍2 | 今日星语移到独立组件,并未减少等待约束 |
|
||||
| personal-report-api / birth | from(profiles) | loadSubjectBirth | 报告取当前人物资料 |
|
||||
| personal-report-api / GET签名 | GET() | GET(request: Request) | 支持subject查询参数 |
|
||||
| report-row-delete / fetch匹配 | url==/api/reports | startsWith(/api/reports) | 允许subject查询,旧响应复活测试仍保留 |
|
||||
| secondary-page-entry / state初始化 | viewFromSnapshot(peekChartPage()) | viewMatchingSubject(subjectId) | 防暖缓存显示错人 |
|
||||
| server-owned-birth-profile / synastry | select ACCOUNT_BIRTH_SELECT | loadSubjectBirth | 本人与对方共用权威解析器 |
|
||||
| session-list-provider / URL | sessions仅limit | limit+subject | 当时调用readCurrentSubjectId;本轮进一步bind后捕获subjectId |
|
||||
| settings-mvp-contract /菜单 | span星盘资料 | /people星盘档案并禁止旧span | 独立档案页替代已退役对话框 |
|
||||
|
||||
## 本轮既有断言三栏
|
||||
|
||||
| 范围 | 原值 | 新值 | 原因 |
|
||||
|---|---|---|---|
|
||||
| adopted-birth-date | 死面板 record.profile有效日期 | /people selected.profile有效日期 | 保留日期正确性,转锁实际入口 |
|
||||
| chart-library-other-profile:保存资格 | nextProfile | draft+保存中守卫 | 新人物页独立保存不依赖户主校正 |
|
||||
| 同文件:保存/删除失败与成功刷新 | 旧helper调用、云成功文案、deleteOtherChart catch | 人物页POST/PUT/DELETE、失败早返、invalidate+load | 不再测试不可达代码;失败不得本地伪成功 |
|
||||
| 同文件:添加后合盘 | 选关系提示/用于合盘按钮 | 显式和我合盘、保存不触发合盘 | 保留显式操作语义;无人物关系字段 |
|
||||
| 同文件:pending | 死按钮disabled/spinner | hook重入守卫、finally复位和既有通知 | 真实入口仍不可重入 |
|
||||
| 同文件:列表 | ChartLibraryView/list返回片段/添加其他人 | editing=false、列表无form、条件ChartProfileForm、添加一个人 | 名称不删除,锁替代UI |
|
||||
| 同文件:本人删除/合盘 | selfView无删除、死面板历史 | 本人不能删、self新对话、绑定删除确认id | 真实详情操作边界 |
|
||||
| settings-mvp-contract:编辑 | 旧本人saveProfile+otherSave | 账户readProfile+other独立saveOther | 移除死入口,不伪造当前不存在的本人编辑 |
|
||||
| chart-page-view + session-list-provider URL | 调用时readCurrentSubjectId | bind后捕获subjectId | 账户与目录闸门先于请求 |
|
||||
| session-list-provider 401 | 并行 OR状态检查 | 先account401,再sessions401 | 防跨账户预读先发请求;仍各自清理 |
|
||||
| home-surface、3个Python surface集合 | chart-library-panel路径 | people/people-page路径 | 扩散半径同时检索tests/与frontend/;保留测试名 |
|
||||
| test_supabase_user_data_contract | 死样式synastry-report-card/history、旧添加/用于合盘 | people-detail/pendingDelete、添加一个人/和我合盘 | 旧无入口面板退役,重定向合同不删除测试 |
|
||||
| ephemeris生命周期、report-row-delete fixture | 默认无需绑定 | 显式虚构account已bind | 新ready门要求,原行为断言不弱化 |
|
||||
| personal-report-worker harness | loadProfile只收userId | 收userId+subjectId,可注入真实resolver | 既有断言不变,扩展P0成功/失败路径 |
|
||||
|
||||
## 最终对比方法(待协调方冻结后执行)
|
||||
|
||||
```sh
|
||||
node -v
|
||||
npm test > final-tests.log 2>&1
|
||||
npm run test:db > final-db.log 2>&1
|
||||
./node_modules/.bin/tsc --noEmit
|
||||
npm run lint
|
||||
# 基线和最终日志分别提取完整TAP名称,使用集合差:基线名称 - 最终名称必须空;
|
||||
# not ok 名单逐条比较:当前Node22基线空,因此最终必须空。
|
||||
```
|
||||
|
||||
必须记录实际Linux日志路径、失败名称差集、消失名称差集、build Static及gzip;当前不宣称这几项完成。没有受控账号,不借用凭据,真人清单待产品负责人执行。
|
||||
|
||||
|
||||
## 独立审查闭环与冻结(2026-09-25)
|
||||
|
||||
- 修复self worker metadata投影遗漏:唯一出生解析不变,仅self额外读取`rectification_case_id`;他人不读profiles,候选窗仍self专用。永久worker测试按真实select投影,防mock整行掩盖漏列。
|
||||
- report subjectId别名与chartProfileId同传先判冲突,移除别名再入原strict schema,不放宽schema。永久测试覆盖别名单传、两者同值成功、冲突拒绝和未知字段仍拒绝。
|
||||
- 标准`?new=1`两个bootstrap新建分支改用已绑定当前人物;合盘特殊self独立,不改变全局人物。永久bootstrap行为测试覆盖。
|
||||
- A人物分页晚回不得覆盖B cursor,scope+generation同时守卫提交/错误/finally;永久React hook测试重放原竞态。
|
||||
- provider用稳定初始ready避免重复bootstrap,但提供`waitUntilReady`等待当前reload代;Home调用当前gate。非401目录失败作为可恢复错误,不假登出。永久provider+bootstrap行为测试分别覆盖reload等待和目录503。
|
||||
- reports/ephemeris共享cache按account+subject隔离,过期异步结果拒写;页面同scope拒晚响应。常规登出是硬导航,跨账号函数级探针不夸大为普通用户路径P0。
|
||||
- `people-refund-r4`独立真实PG矩阵六场景通过:queued、running、completed、already-released、ready待结算、running完成与删除双连接并发。原失败探针/修复后探针均保留在协调方忽略artifacts,不提交。
|
||||
- 本地Node22.23.2最终生产冻结点:tsc exit0;完整lint **0 error / 127 warnings**(未顺手修无关warning);54/54 review定向、fail0;先前辅助5文件51项定向通过。日志本机临时目录`people-tsc8.txt`、`people-lint-final3.txt`、`people-review-regressions6.txt`。不同组合可能重叠,不把它们相加伪称全量。
|
||||
- Linux中间r1标准DB63/63、全量3868中35fail;后续定向已修各失败组,但**中间快照不是最终验收**。冻结已通知协调方,下一次直接整合最终Linux全量和永久DB测试。未经最终fail0/名称多重集合差为空不得推。
|
||||
- 新永久DB退款用例覆盖真实authenticated删除,不再只mock人物null;ready fixture遵循report_document/完成时间/hash CHECK。双连接独立验证已过,最终标准suite待协调方。
|
||||
|
||||
### 独立审查后既有测试三栏补充
|
||||
|
||||
| 文件/范围 | 原值 | 新值 | 原因 |
|
||||
|---|---|---|---|
|
||||
| chart-page-hook fixture | cache reset后直接挂载 | reset后绑定明确虚构账户/空others | 新目录ready闸门;原17个超时、401、429、重试和缓存断言不改 |
|
||||
| report-polling-contract / loadReports取消防线 | `assert.match(centerSource, /if \(cancelled\.current\) return;/)` | `assert.equal((centerSource.match(/if \(cancelled\.current \|\| requestedSubject !== readCurrentSubjectScope\(\)\) return;/g) ?? []).length, 2)` | 成功和异常两分支均在取消或账户/人物scope变化时拒绝提交;检查两处防线,未放宽取消/轮询频率合同。原台账误写ready依赖迁移,现按HEAD实际diff更正 |
|
||||
| composer-isolation 两否定断言取样 | homeSurface混入独立人物表单draft | Home+聊天相关hooks集合 | 独立编辑draft不是Home根聊天draft;无根useState/value断言不变 |
|
||||
| daily-starlanguage effect切片 | 旧guard/旧deps锚点 | useEffect起点/含subjectReady的新deps | 新ready/profile guard与cleanup;1次重试、清timer、cache指纹断言保留并增强当前人物来源 |
|
||||
| session-list-lifecycle fetch fixture | 只account/sessions,无目录隔离 | chart-profiles合法响应,挂载/卸载reset目录 | 真走新加载链,不预设ready;StrictMode/401/不稳定callbacks收敛断言不改 |
|
||||
| session-list-provider bootstrap合同 | `await deps.sessionListReady` | `await (deps.waitForSessionList?.() ?? deps.sessionListReady)`且Home传函数 | 初始promise已resolve不能代表人物切换reload就绪;永久行为测试同时锁住 |
|
||||
|
||||
新测试编写时的修正不伪装旧基线变更:首次新bootstrap成功测试误以为hydrated=true,按既有正常两阶段揭幕模型改锁phase=prepare+正确account;新pagination探针去掉any并指定hook类型;新增DB ready fixture补齐既有CHECK,均非放宽既有断言。
|
||||
|
||||
### 交付文件边界
|
||||
|
||||
交付包含本树tracked修改/删除、3个新增lib(worker-subject、report-subject-request、subject-session-merge)、两份新迁移、两份新people测试、进度及委托补齐docs。所有`artifacts/*`复现脚本/日志和`frontend/node_modules`junction不进提交。无commit/push、无真实账号凭据、无生产变更。
|
||||
@@ -0,0 +1,74 @@
|
||||
# PROGRESS · 读者版年运与投影修复(2026-09-25)
|
||||
|
||||
## 最终整合复验补记
|
||||
|
||||
组合快照 `final-r4b` 已在 Linux Node22.23.2 / PostgreSQL17 验证:前端3894/3894、DB64/64,fail/skip/cancel/todo均0;tsc/lint/build各exit0,lint0error/127既有warning,首页Static。相对开工基线无旧测试名消失、无新增失败;完整首屏/入口增量/专属JS gzip分别+0.1612%/−0.4536%/−0.7984%。完整证据与环境失败历史见 `PROGRESS-three-fixes-integration-20260925.md` final-r4b节。
|
||||
|
||||
下文为本单执行期记录;Python/隐私最终快照补验另记,受控登录与部署缺口不由自动化替代,BUG状态不提前升级。
|
||||
|
||||
## 状态与基线
|
||||
|
||||
本地实现与定向回归已完成,等待协调方对组合代码独立审查、Linux Node 22 全量及构建验收。未提交、未推送、未部署;BUG-1026 / 1028 不提前写 resolved。
|
||||
|
||||
- 任务:`TASK-report-reader-main-fix-20260925.md`,本树 `codex/report-reader-main-fix-20260925`。
|
||||
- 开工远端基线:`48fe4daf519dab2a5c6bf4b01dd513067de1647b`;任务所列 `fabe0114` 之后为任务文档更新。
|
||||
- 已检索并完整核对 BUG-1026 / 1028 及关联 BUG-999 / 1027;旧防复发测试存在,但只锁表头、泄漏词或同键合成字典,未检查实际可见单元格和 Bhava Bala 整表。
|
||||
- 已读 AGENTS、frontend/AGENTS、DESIGN、VOICE、CONTEXT 与预检台账。开工预检 `python scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45`:remote verified,fragment scan / adapter diagnostics 已执行;focused 因既有 `.workbuddy` mirror 路径断言失败,未伪造环境。
|
||||
- 用户硬门槛:必须 Node 22 + Linux 全量,按名称逐项对照,新增失败为 0 才能推;每个既有断言改动记录原值 / 新值 / 原因。本执行方没有推送权限。
|
||||
|
||||
## T1–T3 实现
|
||||
|
||||
1. `annual_tajika_pack._annual_comparable_value`:年主仅比较实际行星,Tajika 缺少 `year_lord_sign` 不再导致假冲突。代码注明 BUG-1028 与上游差异。真实不同年主仍 conflict;参考版提示也不再无条件宣称分歧,且保留外部验证未完成说明。
|
||||
2. `pl9_reader_export`:年主、Muntha、年度上升各从独立字段取值;真实冲突以「太阳返照:…;Tajika:…(两者不同)」并列,不强行取一侧。选取依据仅解释现有本地 Muntha 守护星口径,不冒充 Panchadhikari。`_annual_series_surface` 补保留 `solar_return`,未来年返照时刻从对应年度真实数据读取。
|
||||
3. `report-public-projection`:共享安全规则与 PL9 报告专用规则分离;聊天导出、安全 chart fence / SVG 不使用新长英文段规则。明确内部字段、密钥、危险 URL、脚本仍拦截。Score / Weight 不单独让报告领域表消失,provider / attempt / job / model 仍拦截。删内部表只连紧邻说明段,不连标题。
|
||||
4. 五要素只显示中文「综合性质 / 吉性要素数量 / 要素总数」,删除原始评分键;缺姓名不输出空姓名行。
|
||||
5. 未改 API 主文件、Ayanamsa、宫制、大运、依赖、迁移、workflow、人物档案或西洋盘代码;未改 Skill 包,版本不 bump。
|
||||
|
||||
## 上游 Panchadhikari 同步决定(D2 允许让步)
|
||||
|
||||
查证上游提交 `23b9609e330dbee70a4725bdc222b125d9b0e39f` 的 `scripts/tajika.py::calc_panchadhikari_year_lord` 及其力量计算闭包:会在产品进程导入 `jhora`,外部不可用时退到本仓已 blocked 的 Panchavargiya native_proxy;且其 Muntha 从年度上升推算,与本轮恢复本命上升的既有口径不一致。完整同步会跨越许可证隔离与算法治理边界,不能为了补表格解除 blocked。
|
||||
|
||||
因此按 D2 使用本地既有真实字段,不引入此选择器、不改算法、不宣称 oracle / 多引擎精度闭环。查证源码只留本地 `artifacts/report-reader-fix/upstream-tajika-inspect.py`,不并入运行包。
|
||||
|
||||
## Golden 与测试证据
|
||||
|
||||
Golden 使用原有明确虚构测试输入,通过 `cmd_full_reading → build_professional_report_reference_packet → _pl9_export_markdown_for_edition(reader_main)` 真实重算,1832 行;provenance 增加生成链和任务名。未手写领域响应。
|
||||
|
||||
末尾重算脚本再次覆盖 golden 被工具拒绝,未换工具绕过,也未转交覆盖。改用**只读**完整引擎重算对照,确认最终代码输出与先前已成功重算的 golden **逐字相等**,故不需要第二次覆盖。证据 `fixture-final-verification.log`。这仅证明**该次重算逐字相等,不承诺全引擎跨次字节确定性**。协调方独立多次重跑观察到 Shadbala Mercury / Venus 的 Drik / Total 有 0.01 漂移,年运与章节无差;保留本次成功记录及独立限制,不改算法、golden 或容差消除漂移。本单字段回归以真实年运来源和明确单元格断言为准,不能由一次全报告相等推断所有引擎输出确定性。
|
||||
|
||||
新增 Python 4 项测试覆盖:真实不同键字典一致、三年非空且变化、未来真实返照时刻、真实两侧值冲突故障注入、缺名与五要素清理。前端新增2项并增强 golden:Bhava Bala 标题+十二行表原样存在、后续表不丢标题、聊天英文保留、安全规则不退步、年运可见格不为空。没有删除既有测试。
|
||||
|
||||
| 验证 | 结果 | 证据(本地 artifacts/report-reader-fix/) |
|
||||
| --- | --- | --- |
|
||||
| Python 开工两文件基线 | 17 通过 | report-baseline-tests.log |
|
||||
| Python 修改后两文件 | 21 通过 | python-targeted.log |
|
||||
| Python 最终扩展7文件(含API增长、隐私、parity) | 124 通过,0 失败 | python-expanded-final.log |
|
||||
| 前端三文件首次 | 38 通过 / 2 个旧 SHA 不符;逐行检查后按 D3 修正 | frontend-targeted.log、projection-diff.txt |
|
||||
| 前端三文件最终,Node 22.23.2 | 40 通过 / 0 失败 / 0 跳过 | frontend-targeted-final.log |
|
||||
| 最终 tsc --noEmit | exit 0,0 错 | tsc-final.log |
|
||||
| 最终 npm run lint | exit 0,0 error / 127 warning | lint-final.log |
|
||||
| Python quick,UTF-8,skip-frontend-runtime | 首跑与最终重跑均 exit 0;最终 948 passed / 1 skipped | python-quick.log、python-quick-final.log |
|
||||
| 最终真实引擎与 golden 对照 | 1832 行逐字相等,未覆盖 | fixture-final-verification.log |
|
||||
|
||||
环境:Windows、Node 22.23.2 / npm 10.8.1、Python 3.11.7。quick 使用 `PYTHONUTF8=1 PYTHONIOENCODING=utf-8`,与协调方 UTF-8 基线同环境;前端单独跑,不把 Windows 定向当 Linux 全量。
|
||||
|
||||
协调方通报的 **Linux Node 22 基线**:3863/3863、fail0、skip0、DB61/61、tsc0、lint0error/127warning、build0 首页 Static;证据主仓 `artifacts/three-fixes-baseline-20260925-u2mvj0n4/linux-logs/`。最终组合必须 fail0、原测试名称无消失、新增失败0,构建/gzip由协调方独立验收,不能引用旧 Node20 失败豁免。
|
||||
|
||||
## 所有既有断言改动三栏
|
||||
|
||||
| 断言位置 | 原值 | 新值 | 原因 |
|
||||
| --- | --- | --- | --- |
|
||||
| test_annual_tajika_pack:executive_summary.status | in {blocked, parameter_sensitive} | == partial_verified | 两侧真实相同年主不再误报冲突;只是本地可读状态,外部 replay 边界未升级 |
|
||||
| test_annual_tajika_pack:unified.status | in {blocked, parameter_sensitive} | == partial_verified | 同上,统一报告摘要同步真实本地状态 |
|
||||
| report-public-projection:KP 原始表标题 | doesNotMatch | match ### KP 原始表 | D3 只删内部表及说明段,不删标题;防后续正常表归错章节 |
|
||||
| personal-report-density-retry:投影 SHA | f3aeb8f4b09ba0a78af4ab5e7aee4db32d7499b8e6b1488f2925b35fd91750b9 | 3d16948c52d97adbdcfee45441336f8cd1ae242e3c0c99f766cb8aa0bc964067 | 固定旧 density golden 未改,旧/新投影逐行差异仅增加标题与空行,符合 D3;不是为消红放宽泄漏 |
|
||||
| report-export-blocks:LF 下载 SHA | b7f6947f6ae6f82e4a972be3c1f2bc50260ed0c5f029847264f40a5ee6ba7b88 | 4295165c4ed6e13b03e8c3c25fd54ad3ef5a2ca1732e9f0783d0ada0c2bbfef2 | 同一投影恢复标题后普通下载同步;22 个安全 SVG、去围栏、逐字节组合、泄漏零命中断言未弱化 |
|
||||
|
||||
只有上述5处改变既有预期。新增断言不替代原有泄漏、安全或图盘断言;参考版年运提示回归也使用真实完整引擎结果。
|
||||
|
||||
## T4 记录与未完成验收
|
||||
|
||||
- 沿用 BUG-1026 / 1028 补根因、旧测试为何未拦住、修复与回归;更新 testing、CHANGELOG、DESIGN、任务索引、BLOCKED。
|
||||
- 无受控登录,未读取或借用凭据。浏览器清单未执行,不写已验收;无提交/推送/部署/health 声明。
|
||||
- quick 在 Windows 把5个既有 pending_packets 文件改为 CRLF;逐字核验确为纯换行后,恢复操作被工具拒绝覆盖。未绕过或转交代执行,保留本树脏态;这5个文件不在交付白名单,不修改 oracle 内容。整体 `git diff --check` 会因此报 CRLF whitespace;仅交付范围 `scripts frontend tests docs CHANGELOG.md BLOCKED.md` 的 diff --check 为0。清理需用户另行批准,见 BLOCKED。
|
||||
- 本单是纯代码维护,不输出运势解读;MEVG/三引擎精度未在本轮关闭,不能把自动化绿当作领域真值验证。
|
||||
@@ -0,0 +1,163 @@
|
||||
# 三份修复单整合与独立验收 · 2026-09-25
|
||||
|
||||
## 授权与基线
|
||||
|
||||
- 产品要求同步代码并执行人物档案、报告读者版、西洋盘三份修复单;人物档案最优先,另两单在不交叉代码文件的前提下并行。
|
||||
- 产品追加硬门槛:**必须用 Node 22 跑全量测试,并和开工时的基线逐条对比,新增失败为 0 才能推;修改任何既有测试断言均记录「原值 / 新值 / 原因」三栏。** 三份任务书进一步要求 Linux 环境。
|
||||
- 已成功 fetch;本轮固定开工基线为 `48fe4daf519dab2a5c6bf4b01dd513067de1647b`(`origin/staging`)。任务书引用的旧版本为 `fabe0114`,验证代理核对二者仅 5 份文档差异,产品代码一致。2026-09-25 03:33 UTC 公共 staging health 只读核对 HTTP 200,web/api SHA 均为 `fabe0114dd324cf56e4690d1be7c16d42916af07`;这是开工部署基线,不是本轮修复部署证据。
|
||||
- 主检出有既存未跟踪文件,本轮不切分支、不覆盖、不顺带提交。三个执行树、一个基线树与一个整合树均独立创建。
|
||||
- 不提升 main、不改 workflow、不动 DNS、不进行生产发布;执行代理不自行提交或推送。
|
||||
|
||||
## 执行与整合顺序
|
||||
|
||||
| 顺序 | 执行工作树 | 范围 | 状态 |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `.worktrees/people-archive-p1-fix-20260925` | TASK-people-archive-p1-fix-20260925 全部 T1–T7 | 执行中 |
|
||||
| 2,可并行 | `.worktrees/report-reader-main-fix-20260925` | TASK-report-reader-main-fix-20260925 | 本地实现、独立定向验收完成,白名单已整合 |
|
||||
| 3,可并行 | `.worktrees/chart-western-fix-20260925` | TASK-chart-western-fix-20260925 | 字符误点/宫号修正后独立复验通过,白名单已整合 |
|
||||
| 基线 | `.worktrees/three-fixes-baseline-20260925` | Linux / Node 22 全量、DB、构建基线 | 已完成,零失败 |
|
||||
| 最终整合 | `.worktrees/three-fixes-integration-20260925` | 顺序合入三单,独立审查和全量复验 | 报告与西洋已合入;人物修复审查发现及中间全量失败中 |
|
||||
|
||||
产品代码按各任务书边界隔离。BUG_HISTORY、CHANGELOG、DESIGN、任务索引等共用文档在整合树串行处理,不覆盖其它轮次记录。新 Bug 号人物档案使用 BUG-1031 / BUG-1032,西洋盘如需新记录使用 BUG-1033;报告沿用 BUG-1026 / BUG-1028。
|
||||
|
||||
## 开工预检
|
||||
|
||||
主会话已在独立基线运行:
|
||||
|
||||
```text
|
||||
python scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45
|
||||
```
|
||||
|
||||
| 项目 | 实测结果 |
|
||||
| --- | --- |
|
||||
| Windows Node | 22.23.2 |
|
||||
| Windows Python | 3.11.7 |
|
||||
| Docker 引擎 | Linux,可访问;不得借用其它会话资源 |
|
||||
| 远端可见性 | verified |
|
||||
| 适配器、碎片扫描步骤 | 成功;不代表三引擎数值交叉验收 |
|
||||
| focused tests | 23 通过、1 失败,预检整体 fail |
|
||||
|
||||
失败为 `tests/test_preflight_fragment_scan.py::test_preflight_fragment_scan_reports_authority_layers_and_risk_buckets`,断言要求机器存在历史 `.workbuddy/skills/jyotish-vedic-astrology` 镜像路径。与错误台账已有环境问题同类;不伪造镜像目录、不改断言消红。这不是本轮业务修复通过的证据。
|
||||
|
||||
## 已完成的开工测试基线
|
||||
|
||||
验证代理独立 Linux / Node 22.23.2 环境实跑(Docker 29.8.1、Compose 5.5.1、Postgres 17),原始证据位于主仓忽略目录 `artifacts/three-fixes-baseline-20260925-u2mvj0n4/linux-logs/`(不是提交内容);主会话已读取对应 README 核验环境与口径。
|
||||
|
||||
| 检查 | 基线结果 |
|
||||
| --- | --- |
|
||||
| npm test | 3863 通过 / 0 失败 / 0 跳过;顶层 TAP 名称多重集合 3833(另有嵌套用例) |
|
||||
| npm run test:db | 61 通过 / 0 失败 / 0 跳过 |
|
||||
| tsc --noEmit | exit 0 |
|
||||
| lint | exit 0,0 error / 127 既有 warning |
|
||||
| build | exit 0,首页 `○ Static` |
|
||||
| 首页专属 JS gzip(level 9) | 4 块,130258 B;最终必须单独比较,避免共享资源分母掩盖增长 |
|
||||
| 首页相对父 layout 增量 JS gzip | 8 块,229275 B(其中 4 块 99017 B 同时被其它页面共享) |
|
||||
| 首页完整直链 JS/CSS gzip(level 9) | 32 份资源,合计 682982 B(JS 641409 B / CSS 41573 B);其余父 layout/runtime/CSS 共 24 资源 453707 B。三种分组均保留逐资源 SHA256 与清单,最终同口径比较;不同于旧任务书 130933 B 口径,不混比 |
|
||||
| Windows Python quick 首轮 | 28 失败 / 920 通过 / 1 跳过,subprocess 默认 GBK 解码 UTF-8 报错;原日志保留 |
|
||||
| Windows Python quick UTF-8 复跑 | `PYTHONUTF8=1 PYTHONIOENCODING=utf-8 python scripts/run_quality_gate.py --profile quick --skip-frontend-runtime`,948 通过 / 1 跳过,exit 0;前端由独立 Linux 全量验证,不冒称此命令包含前端 |
|
||||
|
||||
Python 基线日志在整合树 `artifacts/three-fixes-verification/python-quick-baseline.log` 与 `python-quick-baseline-utf8.log`。没有修改产品代码来解决编码问题。
|
||||
|
||||
**本轮 Linux 前端/DB 基线为零失败,最终版本必须零失败;不得引用前轮 Node 20 的 56/61 项失败作为豁免。**
|
||||
|
||||
## 分单独立审查与早期反馈
|
||||
|
||||
- 报告:独立只读 Windows Node 22.23.2 五文件 51/51,Python 年度两文件 21/21;D1–D5 已测范围无确认新增产品缺陷,5 处既有断言三栏齐全,22 SVG/泄漏零命中未弱化。白名单已合入整合树,5 个 oracle 纯换行副作用排除。真实引擎跨次 Shadbala 0.01 漂移限制见分单 PROGRESS,不宣称全报告确定性。
|
||||
- 西洋:首轮独立 Chrome 扫描发现 64 真实盘中 5 个可见字符中心会命中另一行星;仅圆心点击为零错误不足以验收。另有 2/64 盘出现宫号间重叠,不接受排除宫号后称全部标签达标。修正绘制层与宫号径向位置后,独立原脚本 v2 复验 64 真实盘 / 2368 标签(含宫号)碰撞 0、2865 字符误点 0、704 圆心误点 0,原 5 例全部恢复;最小字号 12.5327px、命中直径 44.8538px。键盘处理器 Enter/Space 22 次正确、Escape 11 次忽略,样例相位选择前后均 2,骨架 text/button/aspect 均 0。主会话已读原始 JSON;产品/测试/raw fixture 白名单已整合。上述是组件/处理器验证,不冒称登录整页、真实 Tab 或读屏验收。
|
||||
- 人物:本地定向 70/70 为执行方证据。独立后端六文件 39/39,但实际投影重现本人 `rectification_case_id` 遗漏导致旧候选范围丢失;实际 strict schema 重现有效 `subjectId` 别名残留导致 400,均退回执行方修。独立前端真实 bootstrap 注入重现旧 `?new=1` 入口仍硬编码本人;暖星历缓存账号边界仍在核查。标准用例通过不等于这些遗漏不存在。
|
||||
- 人物早期 Linux 固定快照 `people-db-r1` 标准真实 DB 63/63、fail0/skip0(基线61);纠偏/并发及 GET self 路径已实跑。该中间快照全量 3868 项 / 3833 通过 / 35 失败,tsc 有 1 处测试 mock 返回类型错误,lint 0 error。主会话已提取 35 个失败名;包括旧生命周期 harness 未 bind、退役入口源码合同、Home 聚合 surface 扩大等,执行方须逐项修正并记三栏,不归为环境豁免。当前不得推送。
|
||||
- **独立真实 DB 已确认删除人物退款遗漏(P0)**:fixture 余额 10,经 `authorize_usage(report.full,2)` 后 8,report generating/job queued;实际 authenticated owner `delete_chart_subject` 成功后 subject/report/job 均删除,余额仍 8、reservation 仍 reserved、refund 交易 0。worker 已无 job 可处理,不能用模拟 loadSubjectBirth=null 的测试证明此路径已修。日志主仓 `artifacts/three-fixes-baseline-20260925-u2mvj0n4/people-db-r1-refund-probe.log` 已由主会话读取,退回执行方补兼容新迁移与真实回归;阻止最终交付。
|
||||
- 前端额外真实 React hook 探针确认旧人物 A 分页请求晚到会覆盖 B 的 nextCursor,导致 B 后续历史无法加载;真实 Provider + bootstrap 探针还重现切人 reload 期间复用已完成 ready、以及 account200/catalog503 被当作 account:null,两种情况均误跳登录。执行方修复中,原探针复验前不标通过。上述中间快照不是最终组合,业务修正及测试 harness 补齐后仍须完整复跑。
|
||||
- 退款独立复验:r2 的删除 trigger 已能退款,r3 为修锁序误引用不存在 `j.report_id`,真实 DB 当场拦截,失败原日志保留;改用实际 `(user_id, request_id)` 后 r4 六场景全过:queued/running 删除 8→10 且只退一次、already released 幂等、completed 不退、ready 未完成计费窗口保留收费且后续 complete_usage 成功、两连接 worker 锁 job→delete 等待→complete_job 提交→删除无死锁。主会话已读 `people-refund-r4-matrix.log`;日志内标签误沿用 r3,实际 cwd/归档为 r4,快照 SHA256 `d9cd1f8631c67b5f5679ebf85db7914d11b534de144c610e7b2f06183c125337`。不替代最终标准 DB 全套。
|
||||
- 人物第二轮独立探针:本人 caseId 的真实列投影、两种有效别名 strict schema 均已转绿;前端保留原失败脚本,另建 recheck,确认 `?new=1` 正确人物、旧分页不覆盖 B 游标、账户+self缓存隔离、provider reload 等待后正常启动、catalog503可恢复而非登出。Windows 六文件 39 项中 38 通过、1 处旧源码合同仍要求旧 ready API,已交执行方迁移并记三栏;不据此提前声明全量绿。
|
||||
- 主会话在报告/西洋整合树额外运行两个报告 Python 文件,21 项全部通过、exit 0,日志 `artifacts/three-fixes-verification/report-integrated-python-targeted.log`;三份隐私扫描测试 70 项通过、exit 0,日志 `report-western-privacy-targeted.log`。仍不替代最终 Linux quick,后续人物与文档整合后需再核验。
|
||||
- Linux Python 3.13 CI-style quick 首轮缺 Node 导致 1 失败;补齐独立容器 Node 22 环境后 948 passed / 1 skipped、exit 0。首轮日志保留,未改业务或断言。最终整合仍同环境重跑。
|
||||
|
||||
## 整合冻结进展与权限边界
|
||||
|
||||
- 人物生产源码及两份 SQL 已冻结,21 份修改源码和 5 份新增源码/迁移已按非删除白名单合入;逐文件 LF 规范化哈希一致,清单 `artifacts/three-fixes-verification/people-product-integration-whitelist.json`。人物永久测试最后补齐真实 provider→bootstrap 串联与独立 ephemeris 暖缓存跨账户场景,测试冻结后再整合运行完整门禁。
|
||||
- 后端独立审查收束:限定范围无尚未修复的确认缺陷。040000 迁移 SHA256 `f783bacf370826d0d0bf35e68b6515edb081057a8fcb1d981fd3d1080218e67b` 与 r4 实测一致。删除 RPC 是 SECURITY DEFINER,以显式 auth.uid/owner/role 校验及 owner 过滤保障权限,不应表述为依赖调用者 RLS;受限退款触发器不开放通用退款权限。两连接结果只证明已测试调度,不声称穷尽并发。
|
||||
- **权限阻塞:** 整合工具明确拒绝删除既存 `frontend/src/components/chart-library-panel.tsx`。未通过其它工具/代理绕过,整合树保留该旧文件;执行树已做的删除不等于整合交付已删除。其余非删除修复继续整合。若要清除此死文件,需用户明确许可;未经许可不以打包排除等方式变相删除。
|
||||
|
||||
## 最终交付门槛(历史清单;最新结果见 final-r4b 补记)
|
||||
|
||||
1. 独立 Linux / Node 22 开工全量原始日志与失败清单保留;最终版本同环境全量执行,逐项核对失败标识与原因,新增失败 0,测试总数不下降。
|
||||
2. 真实 PostgreSQL 执行 `npm run test:db`,覆盖本人历史 `null/self` 与他人隔离、迁移纠偏及并发人数限制;不得以 mock 替代。
|
||||
3. P0 报告 worker 成功路径测试验证实际 engine 入参属于目标人物;人物删除走失败退点,不回落本人。
|
||||
4. tsc 无错误,lint 0 error;完整 next build 的 `/` 保持 Static,首屏 gzip 与同环境基线相比 ±2%。
|
||||
5. Python 定向与 quick 真跑,未通过与环境缺口逐条列出;不改引擎口径与主服务增长合同。
|
||||
6. 旧断言三栏覆盖本轮所有修改,并补齐人物档案前轮遗漏;fixture 来自真实引擎。
|
||||
7. 对照三份任务书逐项独立复核。无受控登录态的浏览器验收保留为环境缺口并给出 testing 清单,不冒充通过。
|
||||
|
||||
## 测试断言变更
|
||||
|
||||
各单变更三栏分别归入各自 PROGRESS,整合阶段另做最终 diff 对账。
|
||||
|
||||
- 报告:5 处既有断言变更已由独立审查逐项核对,泄漏、安全、22 SVG 等无关约束没有弱化。
|
||||
- 西洋:原 24 项名称保留,新增 4 项;raw fixture 与更保守字框语义变化有三栏,新扫描曾排除宫号的草稿已纠正,保留失败探索记录。主会话独立真实引擎重算 65 份 raw 响应,JSON 全等,未覆盖 fixture;证据 `artifacts/three-fixes-verification/western-raw-independent-replay.json`。
|
||||
- 人物前轮补账:独立 `git show fabe0114` 对账确认 11 个测试文件 / 12 个位置完整覆盖(9 处 assert 预期、1 处 guards 取样源、1 处 DB fixture、1 处 fetch mock),无遗漏;两条新增保护断言也归入相关行。已将“本轮 bind 后捕获”的描述与前轮历史区分,未倒写历史。
|
||||
- 人物本轮最终测试快照:20 个既有前端/ Python 合同文件修改、2 个新增永久行为测试已合入;补齐 ephemeris A/self→B/self 暖缓存隔离,以及真实 Provider generation reload→Home bootstrap 串联(含 `?new=1` 当前人物断言)。测试文件与人物源码均已 `diff --check`,白名单 `people-tests-integration-whitelist.json`。尚未跑整合 Linux 门禁。
|
||||
- 人物文档已按段合入:BUG-1030 保持 investigating 并补齐 ready/scope 证据边界;新增 BUG-1031(worker错人/self metadata/删除预留退款)与 BUG-1032(OR is复发BUG-990);最终组合仍未提交、推送或部署。
|
||||
|
||||
## final-r4b:最终 Linux 前端、数据库与构建复验
|
||||
|
||||
本节取代上文中间快照的“最终待验”状态,但不解除受控登录、部署或删除权限缺口。开工基线 SHA 不变;2026-09-25 交付前再次 fetch,远端 staging 仍为 `48fe4daf519dab2a5c6bf4b01dd513067de1647b`。
|
||||
|
||||
- 验证环境:Linux、Node v22.23.2、专属 DinD 的真实 PostgreSQL 17;使用原 lockfile `npm ci`,不升级依赖。
|
||||
- 快照:`final-integration-r4-clean.tar`,SHA256 `438181e66b2368a6eefef2f47b7eb827ca5fe440b2e11c8d57d18d0b65077471`。保留 Git symlink / mode、旧 `chart-library-panel.tsx`;不包含本轮过程 artifacts、node_modules、.next 或未授权副作用文件。
|
||||
- 原始日志在授权隔离容器 `/work/logs/final-r4b-{test,db,tsc,lint,build}.{log,exit}`;摘要 `final-r4b-summary.json`,逐项对账 `final-r4b-versus-baseline.json`,资产分组由 `analyze-home-assets.py` 生成。旧 `final`(r2)及 `final-r4` 失败日志原样保留,不覆盖。
|
||||
- wrapper exit 不代表全部通过;已逐一读取五个 `.exit` 并核对 summary / comparison。
|
||||
|
||||
| 检查 | 开工基线 | final-r4b | 结论 |
|
||||
| --- | ---: | ---: | --- |
|
||||
| npm test | 3863/3863 | 3894/3894 | exit 0,失败/skip/cancel/todo 均 0 |
|
||||
| 前端顶层名称多重集合 | 3833 | 3864 | 无删除,新增 31 |
|
||||
| 前端含嵌套名称多重集合 | 3863 | 3894 | 无删除,新增 31 |
|
||||
| test:db | 61/61 | 64/64 | exit 0,失败/skip/cancel/todo 均 0 |
|
||||
| DB 顶层/含嵌套名称 | 49/61 | 52/64 | 无删除,新增 3 |
|
||||
| 新增失败/诊断变化 | 0 | 0 | 两套比较均为空 |
|
||||
| tsc / lint / build | 0/0/0 | 0/0/0 | 全部 exit 0 |
|
||||
| lint error / warning | 0/127 | 0/127 | 无新增,不顺修 warning |
|
||||
| 首页 `/` | Static | Static | build 明确 `○ /` |
|
||||
| 完整首屏 JS+CSS gzip | 682982 B | 684083 B | +0.1612% |
|
||||
| 首页相对父 layout 增量 JS | 229275 B | 228235 B | −0.4536% |
|
||||
| 首页专属 JS gzip | 130258 B | 129218 B | −0.7984% |
|
||||
|
||||
补充分组:JS 641409→642510 B(+0.1717%);CSS 41573 B 不变;增量共享 JS 99017 B 不变;父 layout/runtime/CSS 453707→455848 B(+0.4719%)。全部口径在 ±2% 内,不用总资源分母掩盖首页专属增长。
|
||||
|
||||
### r2 四个新增失败的修复与断言台账
|
||||
|
||||
| 范围 | 原值 | 新值 | 原因 |
|
||||
| --- | --- | --- | --- |
|
||||
| chat-session-url / static Home 源码锚点 | `await deps.sessionListReady;` | `await (deps.waitForSessionList?.() ?? deps.sessionListReady);` | 等待当前 Provider generation;仍检查预览不写 URL、首页不 fetchSessions、客户端读 query,不放宽 Static 合同 |
|
||||
| report-row-delete / 挂载 fixture | 没有显式 account scope | 绑定明确虚构账户与空人物目录 | 真实目录 ready 闸门要求;tombstone、旧 GET 不复活、旧 finally 不清新 flight 断言不变 |
|
||||
| session-list-lifecycle / Storage fixture | Node 无 localStorage | 隔离 Map-backed Storage,关闭及异常路径恢复原 descriptor | 浏览器依赖只补测试环境;StrictMode/current-ready/无误跳登录断言不变 |
|
||||
| secondary-page-data / invalidate 行为 | epoch 改变一律抛 scope_changed | scope 改变才拒绝;同 scope invalidate 允许旧调用返回但禁止写缓存 | epoch 与身份不同义;生产实现修复,不改既有竞态断言来消红 |
|
||||
|
||||
四个原失败名已在 final-r4b 全量中通过:`home stays a client-read query on a static route`、`report cache invalidation rejects stale GET writes and stale finally keeps newer flight`、`mounted report center removes deleted row and an older GET cannot resurrect it`、`Home connects to the real provider current generation during person-switch reload`。
|
||||
|
||||
### 验证环境失败与处理
|
||||
|
||||
- Windows materialized symlink 导致 migration duplicate、Linux 污染 mode 导致 Skill hash mismatch,不修改迁移扫描器或 registry hash;保真 archive 内 symlink 正确,包 hash 为原登记值 `750a0d58c6731c0dbdeb5c785cea1bf8a3f73aaf94a560a86397805b7037724c`。
|
||||
- 首次 `final-r4` 的 test / DB 各 exit 1,唯一失败名 `staging database environment file is ignored`:archive 无 `.git`,`git check-ignore` 返回 128。仅在隔离验证目录建立临时 Git/index 后用新标签 final-r4b 重跑;源 worktree 未提交,测试未改。
|
||||
- Python 补验首次误在 Node 镜像调用 Python3.13 venv,解释器目标不存在,exit127;测试未开始,不记为业务失败或通过。需在匹配 Python 镜像并带 Node22 的环境另跑。
|
||||
|
||||
### final-r4b Python、隐私与交付边界复核
|
||||
|
||||
在匹配Python3.13 Bookworm镜像复用本轮验证卷、venv及Node22工具,逐一读取以下log/exit(均在`/work/logs/final-r4b-*`):
|
||||
|
||||
| 项目 | 结果 | exit |
|
||||
| --- | --- | ---: |
|
||||
| Python六文件定向(年度、读者版、API增长、人物/会话合同) | 49 passed | 0 |
|
||||
| CI-style quick:`--profile quick --skip-yoga-logic --skip-frontend-runtime` | 948 passed / 1 skipped,与同参数基线一致 | 0 |
|
||||
| 三份隐私测试 | 70 passed | 0 |
|
||||
| public privacy scan | 3311文件,0 finding,pass | 0 |
|
||||
| commercial privacy scan | 3311文件,0 finding,pass | 0 |
|
||||
|
||||
quick明确使用与Linux基线相同的CI参数;不声称运行Yoga逻辑全套或在此命令重复运行前端。前端由本节独立Node22全量覆盖。首次exit127及旧快照证据保留,不混用。
|
||||
|
||||
只读独立审计确认:78个候选文件(65 tracked修改+13新增),无依赖/锁文件/workflow变更,旧迁移未改,仅两份指定新迁移;`chart-library-panel.tsx`与HEAD相同。Home useState 33→33、useRef 37→37,文件1347→1349行;API主文件原样(215方法/10931行),无新增伪造点。既有断言三栏无剩余确认遗漏;report-polling原台账误述已按实际两处分支scope守卫更正。64个非文档候选文件与已测archive双侧LF规范化后全部一致,测试/生产源码没有在验收后再改。
|
||||
|
||||
交付前预检再次运行:远端verified,但focused仍失败。除历史镜像路径断言外,碎片计数断言为`4 >= 0 + 45`不成立(当前工作区残留增加,台账已有同类);不制造镜像、不清理其它工作区、不改断言,预检整体不写通过。日志`artifacts/three-fixes-validation-r4/delivery-pre-work-check.log`。这不改变Linux产品全量新增失败0的实测,也不是领域/oracle全绿声明。
|
||||
|
||||
最终暂存边界复核发现两个新测试文件含CRLF(此前未跟踪,普通diff --check未覆盖):`people-archive-regressions.test.ts`39行、`people-pagination-lifecycle.test.tsx`35行。仅将CRLF规范化为LF,逐行文本/断言完全不变;Linux Node22重跑两文件10/10、fail/skip/cancel/todo0、exit0,证据`/work/logs/delivery-lf-targeted.{log,exit}`。未修改生产代码,不改测试预期。最终暂存集的public/commercial隐私扫描均3357文件、0finding、exit0(与Linux快照扫描范围不同,分别记数);日志在`artifacts/three-fixes-validation-r4/delivery-*-privacy.json`。提交/推送状态以实际命令和远端SHA核对为准。无受控账号的整页移动端、真实Tab/读屏与staging health不据此声称通过;BUG-1030/1031/1032/1033保持原状态。
|
||||
@@ -11,6 +11,8 @@
|
||||
- [侧栏导航注册循环修复与验收](PROGRESS-sidebar-navigation-loop-20260919.md) — 2026-09-19,修复/回归已完成,完整验收与 staging 交付状态见记录。
|
||||
- [门禁隐私扫描 `.venv` 与头像合同](PROGRESS-privacy-venv-20260920.md) — 2026-09-20,直接执行:删跟踪的 `.venv` 符号链接、对齐 Beam 文案合同(BUG-974/975)。
|
||||
|
||||
- [三份修复单整合与独立验收](PROGRESS-three-fixes-integration-20260925.md) — 2026-09-25,人物档案优先,报告与西洋盘并行;Node 22 / Linux 全量对照与断言三栏为交付硬门槛。
|
||||
|
||||
## 状态板
|
||||
|
||||
这一节是所有任务的总板。任务书推上来时加一行,状态变化时改这一行,不另开文件。
|
||||
@@ -117,7 +119,7 @@
|
||||
|
||||
| 任务书 | 进度 | 主题 | 状态 | 落点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `TASK-people-archive-p1-fix-20260925.md` | — | **P0 修复(staging 实况,修好前不得提升 main)**:报告 worker 仍按 `job.userId` 读户主 `profiles`(给别人生成报告用户主资料且扣点);`SELF_SESSION_FILTER` 的 `is.null` 自托管适配器不支持 → 本人会话列表 500(BUG-990 同类复发);当前人物整页加载后先是本人、会话订阅替换清空已打开对话;另 7 项 P2(回填把 jsonb 里未经校正的「已校正」抄进类型化列等)。必须 Node 22 全量 + test:db | 待领取(**最优先**) | — |
|
||||
| `TASK-people-archive-p1-fix-20260925.md` | `PROGRESS-people-archive-p1-fix-20260925.md` | **P0修复**:worker按持久化人物解析、真实删除预留退款、本人历史OR is、切人/消息时序及P2/P3;BUG-1031/1032,关联1030/990/1024。永久定向54/54、独立前端5探针与退款r4六场景通过;必须最终Node22 Linux全量+DB逐条基线对照 | 本地冻结;最终组合/真人/部署待验收,未推送 | — |
|
||||
| `TASK-home-page-split-20260925.md` | `PROGRESS-home-page-split-20260925.md` | **首页 page.tsx 拆分(只搬不改)**:启动流程约 285 行抽成 lib 纯函数 `runHomeBootstrap`、恢复轮询约 100 行抽出、错误 / 引导屏抽组件,目标 ≤1300 行并下调增长合同基线;两个按源码切片的测试改为直接调用函数;还原 824647f2 的 import 挤行。排在 chart-ephemeris 之后、people-archive P1 之前 | 已验收(行为逐行一致;1417 行达让步线、合同基线已下调;流程违规:未跑全量致门禁红 3 次) | `da35b3e4`(已部署) |
|
||||
| `TASK-staging-gate-fix-20260924.md` | — | **修复单(阻塞 staging 部署)**:慢网首页 `0e4dd0f4` 起 5 条源码合同测试未跟上(硬跳转计数、重试 reload 正则、两处按已删语句切片)→ 门禁红,`0e4dd0f4..f125fae0` 全部未部署;另 page.tsx +9 行、订阅支付不刷新余额、原始附录三文件残留。只修测试与收尾,不改已验收行为;失败名单须与 `edc9c22c` 逐条一致 | 已验收(Claude 09-25:5 条转绿、失败名单与 edc9c22c 逐条一致 56/56、门禁 run 2877 绿;import 挤行凑数为 P3,由 home-page-split D5 还原;原始附录三文件仍未删) | `651c75e7`/`7a001456`/`824647f2`;deploy run 2879 因 ACR 网络失败,待同 SHA 重跑 |
|
||||
| `TASK-people-archive-p1-20260924.md` | `PROGRESS-people-archive-p1-20260924.md` | **星盘档案(多人物)P1**:每个档案 = 一个人(含本人),最多 5 人、无关系字段;标题旁人名 = 全局切换器(对话 / 星盘 / 星历 / 报告 / 档案页同一组件),星盘、星历、报告、今日星语、新建对话都跟当前人物走(推翻 BUG-1000 新对话固定本人);历史只显示当前人物;档案管理改侧栏 `/people` 页、设置删星盘资料;删人连带删对话与报告;取消「设为默认」/`activeChartId`(BUG-1030 错人)。他人资料改类型化列 + 与户主同级守卫,统一 `resolveSubjectBirth`;户主暂留 `profiles`。生时校正跟人与任意两人合盘留 P2。**同日四单全部合入后开工**,需 Docker 跑 test:db | 验收未通过(Claude 09-25:两个 P0 实况——给他人报告按户主资料生成且扣点、本人会话列表自托管 Postgres 500;切人时序 P1×2;修复单 people-archive-p1-fix) | `ab6c55f8`/`45842361`/`fabe0114`(已部署) |
|
||||
@@ -175,7 +177,7 @@
|
||||
|
||||
| 任务书 | 进度 | 主题 | 状态 | 落点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `TASK-report-reader-main-fix-20260925.md` | — | **读者版修复**:year_lord 比较键不齐致真实数据恒判冲突,读者版年运 Varshesha/Muntha 每年都是「-」(用户可见年运仍不可用);投影把 `Score` 表头当内部词、连标题删掉 Bhava Bala;新泄漏规则误作用于聊天导出 | 待领取 | — |
|
||||
| `TASK-report-reader-main-fix-20260925.md` | `PROGRESS-report-reader-main-fix-20260925.md` | **读者版修复**:真实年主比较、分字段绑定与未来返照;保留 Bhava Bala 和标题,隔离报告/聊天规则 | 本地独立定向通过,组合 Linux 全量待验 | 已整合至 `codex/three-fixes-integration-20260925`(未提交、未推送) |
|
||||
| `TASK-report-reader-main-20260924.md` | `PROGRESS-report-reader-main-20260924.md` | **报告正文换上游读者版 reader_main + KP / Muntha 计算缺陷 + 投影截断(BUG-1026/1027/1028)**:正文一直是上游审计版(读者版 09-09 才出、从未同步),本仓又自加「结论等级规则」/英文段/异常原文;投影黑名单不认 PL9 词汇且截断半句、删表留说明;KP args `vars()` 拷贝为空恒失败;Muntha 漏合 `birth_asc_sign_idx` → Year Lord 恒火星。产品拍板接入读者版、旧报告不回填。 | 部分通过(Claude 09-25:读者版切换、泄漏 0 命中、KP 已修;年运 Year Lord/Muntha 全为「-」P1、投影误删 Bhava Bala P2 → 修复单) | `3c2f7bd5`(已部署) |
|
||||
| `TASK-report-reader-actions-20260924.md` | — | **报告操作收敛**:列表只留「查看报告」;阅读页删「下载原始附录」「打印」,导出改图标按钮;导出对话框 ≥860 居中、窄屏仍贴底(修订 chapter-export D9/D10)。产品变更,不开 BUG 号 | 基本通过(Claude 09-24:入口收敛、图标、≥860 居中均符合;原始附录三文件因执行方权限未删、PROGRESS/清单未写 → 并入修复单) | `f125fae0`(未部署) |
|
||||
| `TASK-report-chapter-export-fix-20260924.md` | `PROGRESS-report-chapter-export-20260924.md` | **CRLF图盘JSON残留(BUG-1020)**:旧剥离器只匹配LF;建议D5对错误围栏残留作有限例外,D13不构成该授权。 | 代码已验收(Claude 09-24),待部署(被同批门禁红阻塞) | `fa8fef55`/`133aca49`(未部署) |
|
||||
@@ -204,7 +206,7 @@
|
||||
|
||||
| 任务书 | 进度 | 主题 | 状态 | 落点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `TASK-chart-western-fix-20260925.md` | — | **西洋盘 ASC/MC 重叠**:轴点标签不参与避让,3000 张随机盘约 34% 与行星重叠;避让测试改扫描;点击区 ≥44px;fixture 改存原始响应;BUG-1025/CHANGELOG 陈旧行 | 待领取 | — |
|
||||
| `TASK-chart-western-fix-20260925.md` | `PROGRESS-chart-western-fix-20260925.md` | **西洋盘 ASC/MC 重叠**:固定锚点避让、真实引擎64盘与固定种子512盘扫描、343px盘宽命中≥44px;raw golden;文档陈旧行更正 | 本地独立组件复核通过,组合全量与登录整页待验 | 已整合至 `codex/three-fixes-integration-20260925`(未提交、未推送) |
|
||||
| `TASK-chart-dasha-western-redesign-20260924.md` | `PROGRESS-chart-dasha-western-redesign-20260924.md` | **大运 / 西洋盘改版**(原型 https://claude.ai/artifact/DYovEPMqD1xwNgna5xVTre ,产品 09-24 全部同意,相位线常显):大运「现在」卡 + 时间条 + 默认折叠(原 81/144 行平铺);西洋盘 520 三圈、行星避让 + 引线、宫号居宫中、ASC/MC 盘内、行星位置表、点选过滤相位。排在 chart-ephemeris-fixes T1 之后 | 已验收,1 P1(ASC/MC 标签不参与避让,约 34% 盘重叠)→ chart-western-fix | `5a2d9da9`(已部署) |
|
||||
| `TASK-chart-ephemeris-fixes-20260924.md` | `PROGRESS-chart-ephemeris-fixes-20260924.md` | **Chara 0 年大运崩溃 + 星历切日期旧数据 + 星盘无资料空状态(BUG-1023/1024/1025)**:mapper 0/0 → `RangeError`(约 7.8% 星盘,产品定照实显示 0 年、不改引擎);BUG-966 删掉重置致日期与数据分叉(回归);无资料只有一句话,加「去填写出生资料」+ `?settings=chart` 深链(T3 排在 home-slow-network 之后)。大运 / 西洋版式重做不在本单 | 已验收(Claude 09-25;星历暖进重复拉取与首屏失败无重试来自 people-archive 提交,并入其修复单) | `19ea0f06`(已部署) |
|
||||
| `TASK-chart-page-skeleton-wait-20260924.md` | `PROGRESS-chart-page-skeleton-wait-20260924.md` | **星盘页骨架盘等待态 + 三个「永远还没拿到」死角**:「这一张盘还没拿到。」只代表 `view === null`,是唯一等待态,失败各有句子;但客户端无超时(A)、401 跳转前(B)、分盘层失败 / 429 后 `ChartVedicTab` 只看 `!selected` 不看 pending(C)三条路都让这句永远挂着。**产品 09-24 拍板推翻 09-18 方案一(BUG-966)**:星盘页盘位用骨架盘 + 呼吸动效(复用 `VedicChartSvg` 空模型,不复制几何;`prefers-reduced-motion` 静止),范围只限星盘页会出盘轮的位置,首页 / 侧栏 / 星历 / 报告的「不放骨架」合同不动;`AGENTS.md` §6 与 `DESIGN.md` §9 / §15 追加例外。三死角出口:客户端 25s 超时 → `timedOut` 句、401 先写失败体、按层失败态 `layerFailures`(429 独立档,BUG-715/723)。BUG-1016 / 1017 | 已验收(Claude 09-24:红线全绿、+46 测试、失败名单同基线、四路由标记与 gzip 同基线;BUG-1016/1017 resolved) | `1420471a`(staging 已部署);真机清单欠 |
|
||||
|
||||
Reference in New Issue
Block a user