N3 第二轮候选 18315d11:浏览器 371 通过、1 失败;报销付款主链路通过。 PWA 自动导航会销毁旧执行环境,原 expect.poll 回调直接 page.evaluate 因此提前抛错。 改为当前 html 的版本属性断言,保持 45 秒期限、同会话 A/B 联合见证及全部否定断言。 受管定向 1 项通过,无失败、跳过或重试,环境及清理通过;任务/治理检查通过。 应用、资金规则、迁移、门禁范围和并发/重试配置未改。两个失败回执完整保留。 第三轮完整候选验证以新回执为准;独立代码复核及真实还款待验。 仅本地提交,不推送、不部署,不访问生产或真实 OCR。
39 KiB
2026-10-09 借款候选验证中的 PWA 导航观测修正
09-17-company-loan-principal-repayment 的 N3 接续已获本地提交、验证及必要测试修正授权。其候选 18315d11 第二轮完整门禁为 FAIL:浏览器 371 通过/1 失败、零跳过/重试;唯一失败为 PWA 跨版本测试的版本读取在应用自动导航时抛出 Execution context was destroyed。报销付款主链路已通过,受管环境、源码一致性及清理通过。原回执保留在 artifacts/release-gate/loan-receipt-n3-20261009-r2/。
本任务承接这处验收测试修正:版本等待必须容忍被测应用正常的自动导航,并在原有 45 秒内确认新文档的版本属性。保留同一 origin/BrowserContext、A 前提、B 的控制器与文件摘要、缓存和实际资源加载、会话、错误及导航次数全部断言;不增加测试重试、人工刷新或运行预算。产品 PWA、付款资金规则和正式门禁范围不变。先受管定向重验该文件,再形成新的本地候选并由 N3 执行完整门禁;定向通过不能抵扣原 FAIL。当前 inline 下由主会话实施和检查,独立代码复核另记待完成;不推送、部署或访问生产。
修正后的受管定向回执为 1 项通过、无失败/跳过/重试,A/B 联合见证与全部原断言走完;环境、源码一致性和自有资源清理通过。新的完整候选资格仍待第三轮正式回执,不能把此次单例通过与旧 371 项拼成完整 PASS。
2026-09-19 R101定向3/3接收,固定新候选进入最终验收
R101一次生产构建定向复验3/3通过,零失败/跳过/重试;只读补审通过,接收时112输入及5份before/after均一致。新增响应来源检查、准确到达、原标题/入口/设计断言与两张截图全部走完。只证明该次通过,不宣称统计稳定性或历史唯一根因已确定。
按既有本地提交授权保存5路径补丁;随后冻结新clean SHA,单独新请求/新marker安排一次原完整verify-candidate。旧focused请求已消耗,禁止再次派发或删除其marker;旧371/372 FAIL与3/3定向PASS分别保留,不能拼接完整资格。推送、部署、公网与真实业务边界保持。
2026-09-19 最终候选仅R101失败:补齐模拟接口隔离合同
0f9e7049完整尝试已结束:复制/双引擎先验及门禁native/guest通过,static通过、full-local 11/12通过;后端4449通过/1原条件跳过,浏览器371/372、零跳过零重试。唯一R101失败截图实际为登录页,产品“我的”标题仍在;该spec使用page.route却未按现有frontend spec阻止Service Worker。不能据此宣称历史唯一根因已证明。
同一QA修复范围内补齐R101的测试上下文隔离,并在原完整跳转中验证refresh与/me由模拟接口返回;保留3个用例、原标题/卡片/文案/设计断言和截图。产品认证/PWA、配置、预算、全局workers不变。先Claude一次受管retained-local全文件3项,结果独立保存,不抵扣旧完整FAIL,也不自动重跑完整门禁。
2026-09-19 缓存修正定向验收通过,冻结最终本地候选
复制工具12/12合成测试及独立只读复核通过,7份增量和14条输入实算一致。按既有授权本地提交该补丁;随后Claude执行一次“独占保留内部链接复制→双引擎空白页先验→原verify-candidate完整门禁”。先验失败不得进入昂贵阶段;先验不能抵扣原门禁内native/guest或业务阶段。原失败、所有旧marker和12公网等外部义务不变。无推送部署或真实业务授权。
2026-09-19 修正本地浏览器缓存复制合同
三组对照A/B物化副本均WebKit page失败、真实父进程code134且清理前退出;等长路径C保留131个内部链接后双引擎通过。支持当前条件下内部链接结构相关,不把历史根因唯一性或完整门禁写成已证明。
本批实现可复用的本地缓存复制工具:普通文件独立复制,内部相对且最终指向本缓存常规文件的链接保持原样;外部/绝对/悬空/循环/目录链接和特殊文件拒绝。比较源前后、目标字节/模式/链接结构及源目标inode独立,失败拒绝、不覆盖既有目标或证据。后续启动器统一调用它,不能再用symlinks=False物化整个包。工具不启动浏览器、联网、下载安装或访问真实配置。
只验证新复制工具的合成边界,不重复已通过30/7探针测试。独立通过后保存最终候选,再安排一次完整门禁;本次不启动完整门禁。新完整尝试须用成功C组缓存的独占复制、短私有运行目录及原全部门禁要求,原失败/marker/外部义务保留。
2026-09-19 native观测补丁已定向验收,WebKit根因继续本地诊断
探针文件原30项通过,环境文件短TMPDIR补充7/7通过;补丁独立复核及治理/格式通过。旧37项FAIL不改写,非同次37全绿。真实双引擎诊断Chromium通过、WebKit在page阶段报browser_process_closed,底层父进程是否退出及原因未采集,不能仅凭类别断定系统进程退出原因。
允许现有本地故障诊断范围内做固定三组对照:长路径物理副本、短路径物理副本、短路径保留内部安全相对链接的独占副本;每组一次、无重试、无下载或系统/生产设置改动。双引擎原生online/namespace约束不放宽。对照只帮助归因,不能作完整发布回执;实际缓存策略修复需以观测为据。记录安全stderr类别及真实进程退出码/信号,不保留原始输出、端点、配置或完整路径。
2026-09-19 最终候选环境失败:限定诊断与观测修复
候选16b9cad9的单次完整尝试FAIL/exit1:static通过;full-local在native WebKit观测抛错时停止,12个内部阶段全部NOT_RUN,未获得发布资格。旧回执、marker和缓存保持。继续现有QA范围,仅修复错误观测丢失并安排Claude定向验证;双引擎、namespace、online、预算、完整集合及零重试要求不变,不改业务或部署入口。
本批验收:每种引擎失败必须保留名称、失败阶段、安全分类及清理结果;失败仍拒绝,清理错误不抹掉首因;不得记录原始Playwright错误/端点/完整路径。以假引擎验证故障路径,以新独占缓存/无外联网namespace进行一次双引擎空白页诊断;诊断不是完整门禁或发布回执。根因未证实前不修改缓存策略、不下载、不自动重跑全量。
2026-09-19 R1本地补丁可提交,最终完整验收待执行
独立代码复核六项及125项定向检查通过;生命周期52项在原5秒预算下补充通过,原3项超时与未知成因保持记录。没有已证实的R1缺陷需要改代码,按已有授权保存最终候选。本地定向完成不勾销完整验收:冻结clean提交后一次verify-candidate,外部部署/公网义务仍分别授权与验收。
2026-09-19 R1限定验收最新余额
125项强制门禁测试与六项独立代码复核PASS;部署生命周期文件3项5秒超时仍开放。该测试执行的REMOTE片段修改前后完全相同,新增R1校验未进入其执行路径,不采纳合并校验建议。按design最新诊断计划仅查这一文件,保留原预算/失败,不启动全量或发布。
2026-09-19 R1当前状态:本地实现完成,未运行验证
五文件接入与跨入口合成测试已落地,主会话语法/格式检查通过;Claude定向测试和独立复核待回。不勾销R1最终验收,不具备发布资格;本批未提交/推送/部署。最新清单与交接见implement顶部,以下均保留各自历史时点。
2026-09-19 R1本地接入及新版顺序已批准
用户明确确认design顶部方案:先本地接入拒绝未验候选、Claude定向验证及独立复核,再提交最终候选、一次完整验收;完整通过前不实际发布。此段替代旧R1“本地接入前先完整全绿”的时序限制,部署与推送仍另行授权。历史结果不抵扣新输入。
2026-09-19 当前阶段:R1接入方案已细化,待单独批准实施
两笔本地提交已完成(729d9057、1f8d5b65);预算补丁独立复核及两项必修关闭。当前R1仍未接入,当前候选完整门禁仍未通过,12项公网未执行。本轮用户同意先准备R1方案,未运行测试或真实入口;具体5文件范围、回执接口、只读边界、Claude定向矩阵和一次最终完整验收顺序见design.md顶部R1接入方案。
待批准的具体变化:在本地接入拒绝未验候选的校验,最终clean SHA完整通过后才允许实际发布;直接部署包装器缺回执立即拒绝,不隐式启动全量。现行“真实启用另行授权”边界保留;本轮只有规划批准,不等于接入、推送或部署授权。以下旧“最新”记录仅为各历史时点,现状以本段及implement顶部为准。
2026-09-19 最新本地验收
g20-full-r6同一冻结候选完成static及12个full-local阶段,4437后端通过/1原条件跳过、372本地浏览器全过,零失败/跳过/重试。7组33页完整;PARTIAL仅dirty_candidate,localChecksPassed=true,无部署资格。R1真实入口启用及独立、公网12义务、旧registry保护例外仍开放;完整阶段/计时/来源边界与余额见implement顶部。历史FAIL原样保留,不能把本地通过写为所有交付完成。
2026-09-18 已批准视觉分组验收
33页矩阵改为7组、各180秒,共用一次计时合成准备;全部页面/断言/截图、全局并发和零重试保留。同一完整运行必须7组全过并精确覆盖33页,缺页/重复/未审完/失败或跳过组拒绝。设计与implement当前入口已同步;此批准仅替代全页面原累计180秒,不放宽其他门禁,不授权部署。
2026-09-18 G20 接续执行(最新用户批准)
用户在解释 WebKit 用途及五组余项后明确“按照这个规划开始执行,非必要不暂停,尽量做完”。本轮据此批准官方 Playwright WebKit 运行包下载到本轮独占缓存,及既定本地完整验收和共享候选回执机制实施;不再列下载授权待答复。仅运行包,不隐式安装系统包或修改共享缓存;业务测试继续无外联合成环境。
沿用 G19 分层合同。先补 WebKit 真实启动/报销离线敏感证据单例,再普通 full-local。受管运行期间源码/测试/task/spec/docs冻结,只写本轮 ignored artifacts。旧失败/旧候选不覆盖。
2026-09-18 G19 最新验收状态
分层验收已获明确批准并本地实施验证:完整发现65/365,351本地、12同候选公网义务、2冻结旧链。74项覆盖/runner、7项诊断检查和2条本地冻结保护通过;原完整full-r2仍失败,公网NOT_RUN_LOCAL、独立PENDING,R1未启用。具体合同、证据、失败保留及后续顺序见implement顶部;未提交部署或执行真实操作。
2026-09-18 G18 最新状态
OCR/R108/33路由项覆盖及三处限定产品修复已完成本地验证;最终18项共享入口、原四文件并发4/4及131定向unit通过。G18时点完整发现64/363,仅枚举;原full-r2仍失败,全部AC/R1不因局部绿自动补勾。产品PWA/采购归09-18-local-concurrency-product-fixes,当前结果/失败保留/分组余项详见implement顶部与local-coverage-g18-20260918。独立PENDING,无提交发布或真实操作。
2026-09-18 G19 分层验收(用户已明确批准,实施中)
用户批准:12 条公网用例作为同一候选发布后必跑项;2 条冻结差旅保留原源码与历史结果,改验冻结保护。本地通过不代表公网/完整交付通过,不授权部署、恢复差旅或真实操作。此增量替代 R2 的“排除集合为空”,不重写旧 full-r2 失败。
- G19a:全体非 manual 用例继续真实发现,固定 12 live+2 frozen 的用例身份、原因、责任角色、必跑入口和原源码摘要;未指派实际负责人明确待定。
- G19b:由完整发现与受控合同生成本地执行文件集合,登记用例级覆盖;拒绝遗漏、身份漂移、未知/重复、跳过、重试与 expected-failure。禁止调用者筛选普通本地集合。
- G19c:新增两条冻结保护整例,验证现行合成角色入口/正式 API 拒绝、共享付款差旅 blocker 与入站导入权限拒绝;不改权限,不执行旧差旅链。
- G19d:公网义务在本地保持 NOT_RUN_LOCAL,绑定候选提交与源码摘要;公网用例结果只能由同候选、live profile、完整逐项通过报告兑现。验收回执不自授部署或发布资格。
- G19e:增加漏例/新增未知归属/漂移/伪通过/候选不匹配/真实 runner 选择等反例,运行本地冻结保护,更新 spec/协调 task 与新候选;独立仍 PENDING。
WebKit 下载问题仍待答复,完整普通门禁未通过;R1 机制后续与真实强制消费启用分开,不启用发布入口。所有旧差异、失败材料与冻结包保持。
部署门禁完整性与候选验收回执
2026-09-18 G18 在用OCR修正缺陷
恢复本地OCR条件覆盖后,实测暴露票据详情URL/本地状态双向回写导致无法点击人工修正。依当前范围只消除重复状态源,维持既有URL导航/权限/OCR业务合同;具体红例、修复与验收见implement顶部。G18其余覆盖和普通全量/R1/独立/外部余额继续分列。
2026-09-18 G16/G17 最新验收状态
普通 full-r2 已完整执行但失败:65/359,326 通过/12 失败/5 超时/16 跳过。后续 14 条原失败观测及 2 条串行未执行项已有定向通过;WebKit 1 条未验、冻结差旅 2 条保留。当前发现 64/358,无缺失/未知;发现包装器末尾临时 SHA 采集告警保留。原结果不改写、不拼接普通全绿,完整集合/运行可靠性、条件用例归属、R1 和独立审阅仍开放。最新执行与六组余额以 implement 顶部及 full-gates-followup-20260918 证据为准。原 AC 未以局部结果自动补勾。
2026-09-18 本地限定验收状态
G12/G13在本地受管合成环境完成;原58逐项为53已重验(52浏览器+1静态)、4旧/冻结排除、1WebKit未验。真实PWA双构建升级及报销两步审批/独立付款/回单/下游整例通过,所有结果只归对应定向候选,不修改原54失败/4超时的历史分母。G15复核与外部事实清单已备;独立PENDING,普通full-local账号前置/完整发现处置、原AC7及R1未完成。具体证据、失败轮次和后续顺序见implement顶部;未部署或执行真实操作。
2026-09-17 在用门禁分类与限定修复(用户已批准)
用户批准按最新余项建议实施。本轮先把原54失败/4超时的58条观测逐项接回当前源码与产品边界,区分现行合同、已被替代断言、旧/待精简路径、环境/登录前置和已由后续任务处理但尚缺整例重验的项。旧结果保持,不改分母、不批量skip,不把分类或定向通过冒充全量发布资格。
对已明确属于现行合同且能用本地合成输入验证的测试漂移,按implement先落最小批次再修复;新权限/业务/视觉规则不在本轮制定。当前首批为R12共享错误提示断言接回09-05已批准的安全兜底/原因码合同。生产/ARM、真实配置密钥备份、旧恢复、提交部署与借款不执行;R1启用仍未批准,独立复核不由inline自检代替。
2026-09-07 后续最小增量已批准:保全本轮四张截图、恢复已归档证据;两个 spec 仅调整输出路径,默认和受管调用均不得覆盖归档目录;回执增加完整 Git 状态、全仓已跟踪内容与 index 语义状态,限定源码不变与全仓不变分开判断。并入可定位的 14 张归档截图摘要校验,不读取恢复演练私有候选或生产文件,不宣称任意历史 SHA 均可本地重验。58 条环境有效观测保留,不重跑全套诊断,不启动合同阶段 B、认证迁移或 R1。
Goal
让真实发布入口只能使用当前候选的完整、可核对验收结果,不再发生“已登记验收报红、定向回归通过后仍被当成完整候选发布”的脱节。复用既有 ci-release 的验收顺序,不另造一套发布流程;先完成入口与回执合同,再恢复旧合同只读用例。
Background
- 用户于 2026-09-06 批准方案及两个边界,附阶段 A 前置条件:先原样运行一次 full-local,提交当前真实红项清单,再由用户决定 R1 强制点的生效时机。本轮仅执行阶段 0,不进入阶段 A。基线 HEAD=66f25b1、本地 origin/main=492920c;原业务准备包及门禁只读追溯均已获用户复核通过。
scripts/qa/run-release-gate.sh的 ci-release 已有 static → full-local → deploy;但实际发布走 production-identity-bootstrap → deploy-existing → deploy.sh,未关联该验收结果。来源检查仅证明提交与工作树,不证明测试覆盖。- 两道浏览器门禁都受旧用例影响:
scripts/qa/run-local-candidate.sh:84纳入全部 acceptanceSpecs;release 的 full-local 经scripts/qa/run-web-gates.sh:585调用client/package.json:15的无 spec 参数 Playwright 全套运行。两者不是同名或等价的门禁,不能互相冒充。 client/tests/e2e/payment-reviewer-permissions.spec.ts:397等待已移除的行内“更多”,导致后续续约/归档断言没有执行;详情入口已在 ContractsRegistryPage 中替代旧菜单。scripts/qa/run-release-gate.sh:103与:112的 PROJECT_WIDE_SKIP_BUSINESS_FLOW / PROJECT_WIDE_SKIP_VISUAL 只靠置位跳过,没有必需理由和回执;并入本 task,不单开。- 历史调查到此停止,不逐次追查过去所有候选。已确认的证据与边界见
.trellis/tasks/09-06-payment-observation-readonly-preparation/implement.md:171;不改写失败留痕,也不把用户批准发布倒写成明确豁免整道候选门禁。
Scope
2026-09-07 最新授权:用户批准设计 §10 的受管环境实施及落地后一次诊断。bootstrapObservation 使用全新 context、导航前请求监听、无 spec route mock、登录表单可见、观察窗口 refresh=0 和独立原生 online 采样,不修改 AuthContext。环境合同归本 task 的 R2/R6;31+2 迁移、合同阶段 B 和 R1 启用不随此授权启动。
原始隔离诊断的 207 条浏览器失败观测撤销“真实红项清单”及决策资格,不用于缺陷数量、修复范围/优先级、工时、R1 时机或发布判断。原始 JSON、trace、外层包装和派生清单保留,不删除、不覆盖、不将 207 条倒写成均已证明的假失败。在线对照只证明代表性合同用例的认证前置可在不改 mock 时通过,不能代替新全量诊断。阶段 B 恢复原合同详情/续约/归档验收范围,不含 31 文件认证迁移,也不表示已经证明它是唯一红项。
修改面限定于 QA 执行与结果模块、既有发布入口、合成合同测试、相关回归和现有模块规约。行为要求由 R1–R5 规定,拟涉及文件及先后顺序见 implement.md;不把本任务扩大成新的发布平台。
2026-09-06 用户追加批准的前置范围仅为:PWA (a) 输入准备及归属验证;将真实 DB 负明细场景改名归位、总额守卫直接单测和不可达性规约;重跑 full-local 摸清分母。用户已明确批准上述分层纠正,不再沿用旧场景名改诊断。保留默认文件间并发,--retries=0 独立属于 R2。合同用例仍留在阶段 B,其他新红项只记录不修,R1 生效继续挂起。
上述 18 文件实现已获用户独立复核通过,随后用户明确批准设计 §9 的诊断子项。该子项的实现与首次隔离诊断已完成并交审;不把它倒写成整个阶段 A、既有红项修复或 R1 启用授权。场景 8 未修,经理缺口另列只读事实与业务影响待核项。
Requirements
R1. 真实发布入口采用既有验收合同
- 以下是强制点获批生效后的目标合同,不表示本轮批准已启用它。机制实现与本 task 完成不自动授权强制消费;启用前必须验证完整 full-local 全绿,并另获明确授权。不得新增日常发布可置位的豁免或禁用开关来代替分阶段生效。
- 普通发布的必需本地阶段采用 ci-release 已有的 static 与 full-local,并核对 full-local 实际结果中的受管 witness/acceptance 集合;不只验证退出码,不以另一套局部检查替换。
- ci-release、all、deploy 模式与 production-identity-bootstrap、deploy-existing、底层 deploy.sh 必须收敛到同一份候选回执验证;直接运行底层脚本也不能绕过浏览器验收。
- 缺回执、回执无效或必需阶段未通过时,在远端同步、构建、容器操作、init/migrate/seed 等发布写入前失败退出。原有纯只读生产 preflight 可以独立运行,但不得生成发布资格。
- 不为了复用 ci-release 而丢掉当前生产身份、迁移、回滚窗口、来源与部署后检查;调用链不得出现 ci-release 与 bootstrap 相互递归或重复触发部署。
R2. 回执绑定来源和实际覆盖,不能由定向结果冒充
- 标准发布的 Playwright 执行必须显式传 --retries=0,覆盖 CI 环境下配置默认重试一次的行为;这是 R2 独立要求,不依附 PWA 是否存在。PWA 不要求全局 --workers=1,保留既有本地 4 / CI 2 workers 默认及文件内 serial。
- 预期集合必须解释当前候选下每个非 manual spec 的归属:要么进入完整验收集合,要么进入显式登记且带原因、必跑入口、责任归属和验收证据的例外集合;不得两边都没有,也不能从回执自报 expected 或既有 acceptanceSpecs 子集反推全量。遗漏、未知归属或有登记却没有兑现执行义务均不能成为完整通过。2026-09-18 已批准 G19:12 条公网义务在同候选发布后兑现,2 条冻结整链保留原源码/历史结果并由冻结保护替代当前执行;其余本地用例必须完整执行。完整交付须另核公网义务,不能把 NOT_RUN_LOCAL 计为通过。PWA 仍无例外,具体实现见 G19 及设计第 8 节。
- 持久回执至少记录:完整候选提交、来源及校验策略摘要、执行 profile/模式、阶段状态与退出码、真实起止时间、工具链、实际筛选参数、预期和实际 spec 集合、用例集合及逐项结果、异常/跳过记录。
- 环境事实属于同级必需输入:受管环境策略/runner/观测器摘要、运行平台、命名空间创建归属及可核验关系、原生在线探针和候选登录入口黑盒观测、观测作用域、环境检查/清理状态。缺失、未知或与当前受管 profile 不一致时不得获得完整验收或发布资格;不能只信调用者的 ONLINE=1、GATE_PASSED=1 或回执自报 environmentPassed=true。具体字段与判据见已批准的设计 §10;本轮实施验证状态见 implement.md。
- spec 使用仓库相对路径;集合来源是当前候选下的真实发现与执行报告,不是人工声明“跑了全套”。同一 spec 内的 --grep 仍可能漏测,所以还必须核对用例级覆盖,并记录 grep、project、shard、only 等影响范围的条件。
- 普通发布不接受定向、仅枚举、受管用例 skipped/failed/timedOut/interrupted、缺项、重复、未知来源或不完整结果。不得通过重试至绿、test.only、test.fail 或缩减清单恢复资格。
- 换提交、工作树脏、策略/配置/锁定依赖等校验输入变化,旧回执失效。测试前后及真正发布写入前都核对来源,不能用开发中脏工作树的诊断回执给后续提交背书。
- local-candidate 的 full/focused/list 继续保留各自含义和严格判定,均留痕;其回执不能改名充当 ci-release 的发布前回执。反过来也不把 ci-release 的本地验收称为 LOCAL_CANDIDATE_PASS 或已部署。
- 成功、失败、PARTIAL、LIST_ONLY 和中断都应留下可识别状态;没有完整结束证据的运行不得变成 PASS。cleanup 不再删除唯一结果证明。
R3. 两个 project-wide skip 开关受控留痕
- 只有开关而没有非空理由、受影响阶段、操作人别名和明确批准引用时,失败退出;不接受默认理由、自动批准或补造批准时间。
- 本版拟定边界:这些开关只支持获批的局部诊断,返回 PARTIAL/非零并列出未覆盖阶段,不能打印完整 PASS,不能生成普通发布资格。
- 普通发布的必需本地门禁本轮不提供豁免入口;继承这两个 skip 开关也不得静默忽略后按完整发布处理。若未来确需应急发布例外,应另行明确其批准与验收合同,不复用无记录开关。
R4. 按详情入口恢复合同只读权限验收
- 在入口和回执的故障检测先建立后,再修改旧合同用例:从列表“查看详情”进入,先证明合成生效合同详情已加载,再具体验证新增、编辑、续约、归档不可用。
- 增加同一合成业务状态下有管理权限身份的对照,避免因页面未加载或合同已终止而得到假阴性;不读取真实合同、不操作生产身份。
- 续约和归档断言必须实际执行。若暴露产品权限缺口,保留失败、单独报告并等待范围批准;不得在本 task 中悄悄放宽权限、改状态机或删断言。
R5. 保留部署安全、证据和范围边界
- 保留 existing 模式禁止 db 生命周期操作、init/server/worker 隔离、120 秒健康检查和禁止自愈合同;不顺手修改 PGDATA、路由、schema、migration、seed、业务 flag 或账号。
- 回执只收集最小脱敏数据,不写完整本地路径、凭据、账号、真实合同/票据/银行资料或原始业务响应;审批引用不是可由脚本替人授权的签名。
- 本地回执用于防止失误、暴露可核对的跳过及范围差异,不是防伪完整性证明;有本地文件写权限的操作者可以伪造内部自洽材料。回执必须支持第三方按记录的候选、环境与命令重跑复现,不能把执行端自报当成独立证据;首次真实部署前须独立重跑并与回执比对。
- 仅用本地隔离 DB、合成角色与严格限定目录的 fake 工具验证;fake PATH 不写入共享配置,不连真实 Docker/SSH 来做变异。
- 其他历史失败不静默排除、不抽样、不改为跳过;遇到它们时完整候选仍失败,明确列为阻塞并单独请求修复范围。不能因本 task 改的是门禁而把门禁先绕过部署。
- 原业务准备包可以交业务,不依赖本 task。当前没有获得提交、push、归档、生产配置、部署、账号启停、回填或付款授权。
R6. 环境启动合同(已批准增量,与 R1/R2 同级)
- 隔离的创建、校验、记录、资源归属和清理由受管 runner 负责;禁止依赖 artifacts 中临时包装来施加必需条件。建议本地 Linux 普通 full-local 与诊断统一使用受管 isolated-online-v1:独占命名空间、无外连默认路由、原生浏览器在线。缺权限/工具即环境失败,不静默退回另一个环境。
- 在线是原生浏览器信号,不是公网可达或企业微信/live 授权。全局启动前提失败即中止整轮后续业务验收,不能让普通环境错误展开成几百条用例超时;失败回执仍保存,诊断仍为 PARTIAL/非零且无发布资格。
- bootstrapObservation 为黑盒实际观测,不记录伪造的分支时刻 online:全新无会话 context,导航前监听请求,不安装任何 spec mock,记录登录表单可见、窗口内 refresh 请求数为 0、原生在线独立样本。refresh 后 401 也能显示登录表单,因此仅表单可见不得通过。AuthContext 及所有业务 spec 不修改。
- 专门环境探针的 bootstrap 只代表该探针,不冒充全部业务用例;全局网络条件持续由 runner 校验。测试自行对独立 context 的 setOffline 场景保留,不能禁用或跳过 mobile-approvals-offline、r89、r108 来满足全局在线断言。
- 本地环境回执防失误、便于复跑审计,不防可写本地文件的操作者伪造;不宣称能够证明所有祖先包装都不存在。
Out Of Scope
0014 资料补录与付款、三单运营处置、主体自动赋值/回填、IM routing 配置及 G1–G10 全局技能复核保持各自边界,不随本任务启动。无新的权限模型、状态机、数据结构或真实数据操作;原部署安全合同按 R5 保留。不引入签名服务、凭据或新的 CI 平台。
Acceptance Criteria
- AC1:所有普通发布入口的命令捕获证明,无有效完整回执时远端发布写动作计数为 0;有效回执只进入一次现有发布链,且保留生产前后置检查。(R1)
- AC2:实际发布前阶段复用 ci-release 的 static/full-local 实现;候选 full、候选 focused、LIST_ONLY、project-wide 和直接定向 Playwright 结果不能互换成发布资格。(R1/R2)
- AC3:成功与失败回执均包含候选提交、实际 spec 和用例集合、筛选条件、逐项结果及真实阶段状态;仅伪造 exit=0/17 passed 或相同 spec 名称不能骗过验证。(R2)
- AC4:旧提交、脏树、输入变化、缺失/截断/中断回执、同文件漏用例、受管用例跳过/重试/expected-failure、伪布尔“已通过”均使发布验证非零退出。(R2)
- AC5:两个 skip 开关各自及组合都验证:缺理由/批准引用失败;获批诊断为有留痕的 PARTIAL/非零;均不能进入普通发布。(R3)
- AC6:真实源码变异移除入口验证、放宽 profile/来源/覆盖判定、恢复无记录 skip 时,对应隔离回归必须变红;断言按执行事件和集合语义,不 grep 某个 flag 字符串。(R1/R2/R3)
- AC7:修复后的合同只读用例实际进入详情,续约/归档负向断言与管理身份对照均执行;人为暴露任一禁止动作时测试失败,不增加 timeout、不删断言。(R4)
- AC8:既有部署安全、来源和 49 项 db 生命周期回归保持有效;夹具升级不得引入测试专用发布绕过口或削弱 fake 工具防泄漏检查。(R5)
- AC9:本 task 的覆盖核对、回执反例及已批准用例修复通过;原样完整本地运行及全部未通过、未覆盖部分如实留痕,dirty 诊断不具备发布资格。额外红项阻断完整候选资格与 R1 生效,不用聚焦绿抵扣;本地机制 diff 可单独交只读独立复核,但不得宣称完整门禁已绿。相关 spec/docs 及治理检查完成,不要求先偷偷提交来取得发布回执。(R1–R5)
Post-task Authorization Gates
以下取代原 AC10,不计入本 task 完成标准,也不由方案批准自动取得授权:
- 红项及未覆盖清单审阅后,由用户另定 R1 强制点生效时机;完整 full-local 全绿及该次普通门禁完整绿路径的实测总耗时、逐阶段耗时共同作为启用输入,不能用 711 秒前置失败或诊断耗时替代。全绿不是可豁免项。机制可先评审或另批合入,连接真实发布强制点的步骤保持未授权;具体切换交付形态待清单和实测成本后确定,不引入永久 bypass。
- 提交、push 与冻结干净候选分别遵循既有授权。之后为该完整 SHA 重新生成、验证回执,不把 dirty 基线结果移作发布凭证。
- 首次真实部署另行授权;用户或独立复核方按该候选重跑验证并比对回执,确认范围、逐项结果与来源。主会话自检不算独立重跑,部署授权不能倒写成强制点启用或验收豁免。
- 合同恢复若暴露产品权限缺口,保留失败并单独申请修复范围;等待期间不启用 R1、不授权发布、不放宽用例或权限。修复获批后重新完整验证,未全绿不得进入第 1 步的启用。
Test Plan
环境增量验收(已批准,不改变 R1 单独启用条件;独立复核另列):
- AC11(R2/R6):环境创建或原生在线前置失败时,后续业务浏览器用例启动数为 0;如在后续阶段才发现漂移,剩余分支停止,既有原始结果保留但整轮无完整验收资格。不存在跳过环境检查的普通发布开关。
- AC12(R2/R6):记录实际环境 profile/策略摘要、namespace 关系及观测范围;缺 bootstrap 观测、unknown、错误 profile/namespace、旧策略回执、伪环境通过字段均不能获得资格。第三方按策略重新建立环境,不要求不同机器的 namespace inode 字面相等。
- AC13(R6):受管启动在原本只有 loopback 的外层条件下仍能建立符合策略的原生在线环境,或在业务用例前明确失败;context 单独置离线不改变其他新 context,原有显式离线场景和默认并发/零重试/完整集合均保留。
- AC14(R2/R6):无 mock 黑盒登录入口观测针对当前候选构建,表单可见、零 refresh 与独立原生采样一起验证,前置失败/缺观测不会变成 PASS;移除 namespace 归属校验、在线断言或环境回执消费中的任一项,对应隔离反例须变红。测试中不产生真实发布写动作,也不新增产品源码观测点。
先在网络与数据库隔离条件下原样运行一次现有 full-local,不改代码、不修用例、不部署;记录完整阶段、发现集合、实际执行、失败、跳过及未运行部分。若前置阶段失败,必须说明浏览器尚未运行、红项分母仍未知,不能把首个失败称为整套唯一失败。用户审阅基线后再进入阶段 A:纯结果验证、入口捕获和真实源码变异;之后才恢复合同用例。完整矩阵、命令与阶段 0 实测记录在 implement.md。
Key Proposed Decisions
- 以既有 ci-release 发布前阶段为普通发布基线,不新增第三套并行发布框架;在同一次 full-local 报告上增加受管集合完整性核对,不再额外重复跑一遍相同浏览器集合来制造第二张“通过”。local-candidate 的独立合同不删除、不降级,也不被宣称已经执行。
- 普通发布无豁免、两个 skip 仅作获批 PARTIAL/非零诊断的边界已经用户批准;阶段 A 仍须先提交完整基线清单,R1 生效另行授权。
- 不追查全部历史候选,不混入业务修复或 Trellis/G1–G10 任务;技术设计、兼容性和实施顺序分别见 design.md、implement.md。
Risks And Deferred Items
full-local 包含本地数据库准备、服务端回归和全量浏览器,耗时及其他既有失败可能阻塞下一次发布。此风险需如实呈现,不能以“修测试只需十分钟”承诺完整门禁收口。若发现额外产品问题或需要发布例外,停在明确证据与范围决策,不扩大本轮实现。
Planning Status
以下三段保留分轮历史,不代表当前仍未执行诊断;最新状态见本节末段及 implement.md §12。
方案条件批准;已 task start,并完成一次原始 full-local 入口运行:exit 1,停在 workflow-actions 第 6/23 场景组;独立预枚举还发现 PWA 双构建输入缺失。浏览器未执行,完整红项分母仍未知,详见 implement.md 第 7 节。任务状态 in_progress 不等于阶段 A 已启动;本轮未修改运行时代码或执行发布命令。先交审新增阻塞处理范围,R1 生效及所有提交、push、部署操作仍待各自授权。
最新授权:PWA (a) 及两处修正、金额分层三件事均已批准实施;代码、针对性验证及一次隔离 full-local 补跑已完成。完整发现得到 65 个非 manual 文件 / 275 条用例;193 文件/1692 服务端单测、前端检查/构建和第 6/23 组负明细黑盒验证通过。新增第 8/23 组经理缺失场景预期 200、实际 409,full-local exit 1;后续真实 DB 回归和 275 条浏览器用例未运行,完整浏览器红项分布仍未知。新红项不修,R1/阶段 A/合同修复未启动;实现 diff 待用户独立复核,详见 implement.md 第 9 节。
后续复核与诊断更新:用户已批准第 9 节对应的 18 文件 diff。第 8 组 409 不含 skipped 数组;提交传入严格解析,经理缺失在 skipped.push 之前直接抛错,尚未解析 finance。现有原函数的双节点内存探针和既有严格/兼容模式单测源码与此一致,详见 implement.md 第 10 节。诊断分支仅完成增量设计,尚未实施或运行;浏览器仍为 0 executed / 275 discovered,任务未完成。
最新交审状态:§9 实施及一次完整隔离诊断完成,固定 PARTIAL/exit 2;65 文件/275 用例有对应结果:50 passed、76 failed、131 timedOut、18 skipped,0 重试、0 缺失回执用例。207 项失败不是 207 个已确认产品缺陷;合同/R102 本次先卡登录前置,不能证明下游原断言已执行。18 个 skipped 中 14 个 expectedStatus=skipped、4 个 expectedStatus=passed,不能把条件跳过删出集合或开启 live 环境凑绿。普通 full-local 全绿成本仍未取得,诊断约 197 分 24 秒不能替代它。执行器两项自有问题已在原始运行结束后最小修正,34 项 QA 与原身份/金额 36 项定向单测通过;聚合器净库定向验证保持内部 fail-fast,场景 8 后面的分母仍未补齐。经理盘点 7 条 active 在职记录中 4 条缺直接经理,实际规则和 smoke/真人未消歧,不宣称六路全部锁死。全 task AC 尚未完成;R1、其他阶段 A、阶段 B、提交/push/归档/部署仍未授权,本增量待用户独立复核。
后续状态(2026-09-07):上述 21 文件已获用户独立复核通过。追加只读结果与两次带 trace 的条件对照见 implement.md §13:三张 rejected 的 CEO owner 存在 finance 显式兜底,不能因缺经理否定本人重提;至少五条浏览器登录用例通过。当前构建下代表性合同登录在单条 1 worker 与全套 4 workers 中均失败,不能据此宣称“只有并发才失败”或排除一切竞态。全套在后续 263 条结果后以 143 中断,完整终态未取得,孤立残留已补清理;不重跑、不补造通过。新获批诊断 trace=on 已最小实施,35 项 QA 通过,待本增量独立复核;普通门禁 trace 配置未改。207 仍仅原始失败观测,根因分类/去重后的可执行红项清单尚未取得;R1 与场景 8 等其他边界继续挂起。
追加验收:迁移状态误判最小修复
用户确认复用本 task 并要求继续主线,授权上述本地修复与验证;不改旧冻结验收、不部署。范围仅迁移状态四处谓词及其定向回归/规约。
- 消除 producer=141 导致的匹配假阴性;工具错误失败关闭,候选/已应用迁移核对保持。
- 确定性回归覆盖未知/合法待执行、无待执行、unsafe、长输出、四处工具错误及旧谓词源码变异。
- 与 seed 改动的临时组合回归通过,记录本地边界、独立复核缺口及未部署状态。