diff --git a/PRIMARY-AT-CAMPAIGN.json b/PRIMARY-AT-CAMPAIGN.json index 36a6fa5..a13d030 100644 --- a/PRIMARY-AT-CAMPAIGN.json +++ b/PRIMARY-AT-CAMPAIGN.json @@ -2,7 +2,7 @@ "$schema": "https://raw.githubusercontent.com/omdsh-dev/dsh-accessibility/main/PRIMARY-AT-CAMPAIGN.schema.json", "protocol": "dsh-a11y-primary-at-campaign/0.1.0-draft", "campaignId": "dsh-0.1.2-alpha.2-primary-at-2026-08-31", - "status": "prepared-not-open", + "status": "open", "preparedOn": "2026-08-31", "candidate": { "repository": "https://github.com/omdsh-dev/deepseek-harness", @@ -54,34 +54,34 @@ "availabilityGates": [ { "id": "core-revision-public", - "status": "missing", - "detail": "The public accessibility-core branch does not yet contain candidate revision 5803bfcfdd502adac26ae9b8eec12d6aed263ec6." + "status": "ready", + "detail": "Exact candidate revision 5803bfcfdd502adac26ae9b8eec12d6aed263ec6 is anonymously readable from the public core repository." }, { "id": "lab-revision-public", - "status": "missing", - "detail": "The public lab branch does not yet contain lab revision 6aed71615edd1db1ec5b12897e1ad40b79294c78." + "status": "ready", + "detail": "Exact lab revision 6aed71615edd1db1ec5b12897e1ad40b79294c78 is anonymously readable from the public accessibility repository." }, { "id": "default-branch-intake", - "status": "missing", - "detail": "The default branch has an older AT form, but it lacks the current protocol-bound AT form, disabled-developer form, campaign guide, and core lab guide." + "status": "ready", + "detail": "The public default branch contains the exact manifest, bilingual campaign and lab guides, current bilingual AT and disabled-developer forms, and bound automated browser report." }, { "id": "discussion-current", - "status": "missing", - "detail": "Discussion 16 still names the superseded 0.1.1-rc.2 candidate and must be updated before recruitment." + "status": "ready", + "detail": "Public Discussion 16 contains the exact candidate revision, lab revision, protocol, intake routes, privacy boundary, and zero-human-record statement." }, { "id": "tracking-issues-current", - "status": "missing", - "detail": "Issues 1 and 2 still name the superseded 0.1.1-rc.2 candidate and must be updated before recruitment." + "status": "ready", + "detail": "Public Issues 1 and 2 contain the current physical Windows NVDA and physical macOS VoiceOver instructions for the exact campaign." } ], "evidenceBoundary": [ "This manifest coordinates a future human campaign; it is not assistive-technology or disabled-user evidence.", "The isolated Chrome smoke run proves lab readiness and cleanup only; it does not prove spoken, braille, focus, or task behavior.", - "The public human-evidence ledger contains zero human records when this campaign is prepared.", - "External recruitment must not begin until status is open and every availability gate is ready." + "The public human-evidence ledger contains zero human records when this campaign opens.", + "Opening coordinates intake only; it creates no assistive-technology, disabled-user, conformance, certification, or whole-product support claim." ] } diff --git a/PRIMARY-AT-CAMPAIGN.md b/PRIMARY-AT-CAMPAIGN.md index 3983fad..527cff8 100644 --- a/PRIMARY-AT-CAMPAIGN.md +++ b/PRIMARY-AT-CAMPAIGN.md @@ -2,28 +2,28 @@ [简体中文](PRIMARY-AT-CAMPAIGN.zh.md) | English -Campaign status: `prepared-not-open`; external testing is not open. Campaign protocol: `dsh-a11y-primary-at-campaign/0.1.0-draft`. Scenario protocol: `dsh-core-at-lab/1.0.0-draft`. Machine-readable state: [PRIMARY-AT-CAMPAIGN.json](PRIMARY-AT-CAMPAIGN.json). +Campaign status: `open`; real VoiceOver, NVDA, and disabled-developer results may now be submitted. Campaign protocol: `dsh-a11y-primary-at-campaign/0.1.0-draft`. Scenario protocol: `dsh-core-at-lab/1.0.0-draft`. Machine-readable state: [PRIMARY-AT-CAMPAIGN.json](PRIMARY-AT-CAMPAIGN.json). This first campaign targets exact DSH `0.1.2-alpha.2` revision `5803bfcfdd502adac26ae9b8eec12d6aed263ec6` with exact lab revision `6aed71615edd1db1ec5b12897e1ad40b79294c78`. An isolated-Chrome startup and cleanup smoke run passed for this pair on macOS. A separately regenerated [three-engine browser report](automated-evidence/core-browser/2026-08-31-dsh-0.1.2-alpha.2-5803bfcfdd.json) passes fourteen deterministic checks on the same exact DSH revision and is bound in the machine manifest. These prove only lab and automated-browser readiness; the ledger still contains zero human records. -## Why recruitment is not open yet +## Public availability and evidence boundary -The public core branch and lab branch do not yet contain the two pinned revisions. The default branch lacks this guide, the core lab guide, and the disabled-developer form; its existing older AT form predates the versioned protocols and direct-human/modality gates. [Discussion 16](https://github.com/omdsh-dev/dsh-accessibility/discussions/16), [NVDA Issue 1](https://github.com/omdsh-dev/dsh-accessibility/issues/1), and [VoiceOver Issue 2](https://github.com/omdsh-dev/dsh-accessibility/issues/2) still name the superseded `0.1.1-rc.2` candidate. Inviting people now would give them stale instructions or a missing intake route. +The exact core and lab revisions, this default-branch guide, the bilingual intake forms, [Discussion 16](https://github.com/omdsh-dev/dsh-accessibility/discussions/16), [NVDA Issue 1](https://github.com/omdsh-dev/dsh-accessibility/issues/1), and [VoiceOver Issue 2](https://github.com/omdsh-dev/dsh-accessibility/issues/2) were anonymously verified before the campaign opened. All five `availabilityGates` rows in the manifest are `ready`. -The campaign may change to `open` only after every `availabilityGates` row in the manifest is `ready`. Opening the campaign is coordination state, not accessibility evidence. +Opening the campaign is coordination state, not accessibility evidence. The ledger starts with zero human records; failed and partial submissions are welcome, and no intake Issue becomes a support claim without separate consented, de-identified, validated, and publicly reviewed evidence. -Observe the five gates anonymously before changing that state: +Recheck the five public gates anonymously at any time: ```sh pnpm run campaign:public:verify pnpm run campaign:public:require ``` -The first command always prints a versioned, privacy-minimized observation report. The strict command exits nonzero unless the exact revisions, default-branch intake, Discussion 16, and Issues 1/2 are all publicly readable and current without credentials. It never edits the campaign and never creates human evidence. +The first command always prints a versioned, privacy-minimized observation report. The strict command exits nonzero unless the exact revisions, default-branch intake, Discussion 16, and Issues 1/2 are all publicly readable and current without credentials. Neither command edits the campaign or creates human evidence. Maintainer publication order and tested replacement bodies for the default-branch PR, Discussion 16, and Issues 1/2 are in the [primary AT outreach handoff](outreach/primary-at/README.md). -## Exact setup after the campaign opens +## Exact setup for this open campaign ```sh git clone https://github.com/omdsh-dev/deepseek-harness.git diff --git a/PRIMARY-AT-CAMPAIGN.zh.md b/PRIMARY-AT-CAMPAIGN.zh.md index 1533a0f..fd9d257 100644 --- a/PRIMARY-AT-CAMPAIGN.zh.md +++ b/PRIMARY-AT-CAMPAIGN.zh.md @@ -2,28 +2,28 @@ 简体中文 | [English](PRIMARY-AT-CAMPAIGN.md) -活动状态:`prepared-not-open`,尚未向外部测试者开放。活动规程:`dsh-a11y-primary-at-campaign/0.1.0-draft`。场景规程:`dsh-core-at-lab/1.0.0-draft`。机器可读状态:[PRIMARY-AT-CAMPAIGN.json](PRIMARY-AT-CAMPAIGN.json)。 +活动状态:`open`;现在可以提交真实 VoiceOver、NVDA 和残障开发者结果。活动规程:`dsh-a11y-primary-at-campaign/0.1.0-draft`。场景规程:`dsh-core-at-lab/1.0.0-draft`。机器可读状态:[PRIMARY-AT-CAMPAIGN.json](PRIMARY-AT-CAMPAIGN.json)。 首轮活动固定到 DSH `0.1.2-alpha.2` 精确 revision `5803bfcfdd502adac26ae9b8eec12d6aed263ec6` 与实验室精确 revision `6aed71615edd1db1ec5b12897e1ad40b79294c78`。这一组合已在 macOS 通过隔离 Chrome 启动与清理冒烟检查;另行重新生成的[三引擎浏览器报告](automated-evidence/core-browser/2026-08-31-dsh-0.1.2-alpha.2-5803bfcfdd.json)也在同一精确 DSH revision 上通过十四项确定性检查,并已绑定进机器清单。它们只证明实验室和自动浏览器就绪;账本仍有零条真人记录。 -## 为什么尚未开放招募 +## 公开可用性与证据边界 -公开核心分支与实验室分支尚未包含上述两个固定 revision;默认分支缺少本指南、核心实验室指南和残障开发者结果表单,现有旧 AT 表单也早于版本化协议、真人直接操作及逐模态观察门禁。[Discussion 16](https://github.com/omdsh-dev/dsh-accessibility/discussions/16)、[NVDA Issue 1](https://github.com/omdsh-dev/dsh-accessibility/issues/1) 与 [VoiceOver Issue 2](https://github.com/omdsh-dev/dsh-accessibility/issues/2) 仍指向已经被替代的 `0.1.1-rc.2` 候选。现在邀请测试者会让他们拿到过时说明或无法使用的提交入口。 +活动开放前,已匿名核验精确核心与实验室 revision、本默认分支指南、双语提交表单、[Discussion 16](https://github.com/omdsh-dev/dsh-accessibility/discussions/16)、[NVDA Issue 1](https://github.com/omdsh-dev/dsh-accessibility/issues/1) 和 [VoiceOver Issue 2](https://github.com/omdsh-dev/dsh-accessibility/issues/2)。机器清单的五项 `availabilityGates` 均为 `ready`。 -只有机器清单中每个 `availabilityGates` 项都变成 `ready`,活动才能改为 `open`。活动开放只是协调状态,不是真人无障碍证据。 +活动开放只是协调状态,不是真人无障碍证据。账本从零条真人记录开始;欢迎失败和部分结果,任何提交 Issue 都必须另行经过同意、去标识化、验证与公开评审,才能成为支持声明证据。 -改变状态前,先匿名观察五项门禁: +可随时匿名复核五项公开门禁: ```sh pnpm run campaign:public:verify pnpm run campaign:public:require ``` -第一条命令总会输出带版本、隐私最小化的观察报告;严格命令只有在精确 revision、默认分支提交入口、Discussion 16 与 Issue 1/2 均无需凭据即可公开读取且为当前版本时才返回成功。它绝不会修改活动清单,也不会创建真人证据。 +第一条命令总会输出带版本、隐私最小化的观察报告;严格命令只有在精确 revision、默认分支提交入口、Discussion 16 与 Issue 1/2 均无需凭据即可公开读取且为当前版本时才返回成功。两条命令都不会修改活动清单或创建真人证据。 维护者的公开顺序,以及默认分支 PR、Discussion 16 与 Issue 1/2 的受测试替换正文,见[首轮 AT 公开交接包](outreach/primary-at/README.md)。 -## 活动开放后的精确配置 +## 本次开放活动的精确配置 ```sh git clone https://github.com/omdsh-dev/deepseek-harness.git diff --git a/README.md b/README.md index b3a8284..72aa92b 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ See [ACCESSIBILITY.md](ACCESSIBILITY.md) for the assistive-technology matrix, ma Consented human results use the versioned [human evidence ledger](HUMAN-EVIDENCE.md). Stable tasks and authoritative core, safety, and claim classifications come from the [evidence task catalog](EVIDENCE-CATALOG.json), not from the submitter. The validator preserves failed and partial observations while preventing stale, private, operationally assisted, unsafe, ineligible, unknown, or incomplete records from claiming `a11y-at-tested` or `a11y-user-validated`. The separate [aggregate coverage policy](EVIDENCE-COVERAGE.md) prevents incompatible exact environments from being combined and reports all missing primary and extended AT, CLI, companion, authoring, and disabled-developer rows. The ledger currently contains only a non-evidence template, so all twenty-six aggregate requirements are missing. -The first [primary AT campaign](PRIMARY-AT-CAMPAIGN.md) pins the current core and lab revisions for VoiceOver/Safari, NVDA/Chrome, and disabled-developer core tasks. It remains `prepared-not-open`: public branches, default-branch intake forms, Discussion 16, and Issues 1/2 must be made current before external recruitment begins. +The first [primary AT campaign](PRIMARY-AT-CAMPAIGN.md) is `open` for VoiceOver/Safari, NVDA/Chrome, and disabled-developer core-task submissions against pinned core and lab revisions. Its five public-availability gates pass anonymously, while the human-evidence ledger correctly remains empty until consented results are submitted and reviewed. ## CLI accessibility candidate diff --git a/README.zh.md b/README.zh.md index f86cc92..81cf56c 100644 --- a/README.zh.md +++ b/README.zh.md @@ -62,7 +62,7 @@ MVP 仍以阅读为主。发送、停止、批准、编辑排队任务或使用 经过同意的真人结果使用版本化[真人证据账本](HUMAN-EVIDENCE.zh.md)。稳定任务以及核心、安全关键和声明资格只能来自[证据任务目录](EVIDENCE-CATALOG.json),不能由提交者自行决定。validator 会保留失败和部分观察,同时禁止过期、私密、存在未记录协助、不安全、无资格、未知或证据不完整的记录声明 `a11y-at-tested` 或 `a11y-user-validated`。另有[聚合覆盖策略](EVIDENCE-COVERAGE.zh.md)阻止不兼容精确环境相互拼接,并报告主要与扩展辅助技术、CLI、companion、创作及残障开发者验证的全部缺口。当前账本只有非证据模板,因此二十六项聚合要求全部缺失。 -首轮[主要辅助技术活动](PRIMARY-AT-CAMPAIGN.zh.md)已固定当前核心与实验室 revision,目标是 VoiceOver/Safari、NVDA/Chrome 和残障开发者核心任务。它仍是 `prepared-not-open`:外部招募前必须先让公开分支、默认分支提交表单、Discussion 16 及 Issue 1/2 与当前候选一致。 +首轮[主要辅助技术活动](PRIMARY-AT-CAMPAIGN.zh.md)现已 `open`,可针对固定核心与实验室 revision 提交 VoiceOver/Safari、NVDA/Chrome 和残障开发者核心任务结果。五项公开可用性门禁已通过匿名复核;在经同意的真人结果提交并评审前,真人证据账本仍正确保持为空。 ## CLI 无障碍候选 diff --git a/ROADMAP.md b/ROADMAP.md index 98ce0da..704b5d4 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -19,7 +19,7 @@ Updated: 2026-08-31. This roadmap is evidence-driven and may change after upstre - Accessible authoring foundation: the bilingual RFC and six standalone local packages now cover both provider chains. The literal-loopback path has an installable, default-inert `dsh-a11y-local-preview/0.1.0-draft` DSH composition; the caller-owned path has a non-serializable, separately permissioned `dsh-a11y-caller-page/0.1.0-draft` trusted-host composition for disposable non-authenticated pages. Real product bundle installation and config composition where applicable, published DSH runtime loading, Chromium auditing, privacy, lifecycle, and package evidence pass locally. The `dsh-a11y-authoring-agent-lab/0.1.2-draft` replay gate proves one exact audit/read/edit/re-audit product loop, validates the untrusted-data framing in both persisted audit results, and requires their eleven-row manual author-review plans to remain unresolved. The new `dsh-a11y-authoring-at-lab/0.1.0-draft` makes the same bounded task available through real DSH Web, proves allow-once changes automated findings from two to zero, proves rejection leaves source unchanged, and defines separate human VoiceOver/NVDA records. Both automated modes are product evidence, not AT or disabled-author evidence. Review/publication, any authenticated/cross-origin authority, live-model repair, listener-verified real AT, and disabled-author evidence remain pending. - Human evidence ledger: `dsh-a11y-human-evidence/0.1.0-draft` now defines a public JSON Schema, privacy/freshness/claim validator, non-evidence template, and local/CI gate. Its pinned `dsh-a11y-evidence-catalog/0.1.0-draft` revision registers 33 stable tasks across five protocols and owns core, safety, and claim classification. The new `dsh-a11y-evidence-coverage-policy/0.1.0-draft` evaluates six profiles and twenty-six cataloged human-evidence requirements without mixing incompatible exact environments or anonymous disabled-developer records. Its matrix includes primary and extended screen readers, braille, voice and switch input, magnification, CLI, companion, authoring, and disabled-developer validation. A bilingual community guide and dedicated disabled-developer intake now cover contributors who may not use a named AT while requiring consent, a private withdrawal route, exact tasks, assistance, effectiveness, and safety. A fail-closed scaffold command derives non-claim drafts from the catalog without ingesting participant text or overwriting files. The system preserves failures and partial results while failing closed on stale, private, operationally assisted, unsafe, ineffective, unknown, ineligible, or incomplete support claims. No real run is in the ledger and all twenty-six aggregate requirements are missing, so this proves governance readiness rather than AT or disabled-user support. - Listener-verified Windows and Linux screen-reader results remain pending; complete VoiceOver spoken-output records remain pending. -- Primary human campaign: `dsh-a11y-primary-at-campaign/0.1.0-draft` pins core revision `5803bfcfdd502adac26ae9b8eec12d6aed263ec6` and lab revision `6aed71615edd1db1ec5b12897e1ad40b79294c78` for VoiceOver/Safari, NVDA/Chrome, and disabled-developer core tasks. The isolated Chrome smoke passes, but the campaign remains `prepared-not-open` until both revisions, default-branch intake, Discussion 16, and Issues 1/2 are publicly current. +- Primary human campaign: `dsh-a11y-primary-at-campaign/0.1.0-draft` is `open` against core revision `5803bfcfdd502adac26ae9b8eec12d6aed263ec6` and lab revision `6aed71615edd1db1ec5b12897e1ad40b79294c78` for VoiceOver/Safari, NVDA/Chrome, and disabled-developer core tasks. The isolated Chrome smoke and all five anonymous public-availability gates pass; the human-evidence ledger remains empty pending consented submissions and review. ## Phase 0 — foundation and upstream compatibility (through 2026-09-12) diff --git a/ROADMAP.zh.md b/ROADMAP.zh.md index d67d5f1..19f7d46 100644 --- a/ROADMAP.zh.md +++ b/ROADMAP.zh.md @@ -19,7 +19,7 @@ - 无障碍创作基础:中英文 RFC 与六个独立本地包现已覆盖两条提供链路。字面量 loopback 路径具有默认禁用、可安装的 `dsh-a11y-local-preview/0.1.0-draft` DSH 产品组合;调用方自有页面路径具有不可序列化、另行授权的 `dsh-a11y-caller-page/0.1.0-draft` 可信宿主组合,策略上只用于一次性未认证页面。本地已通过适用路径的真实产品 bundle 安装与配置组合、已发布 DSH runtime 加载、Chromium 审计、隐私、生命周期和包内容证据。`dsh-a11y-authoring-agent-lab/0.1.2-draft` replay 门禁证明了一项精确审计/读取/编辑/复审产品循环,校验两次持久化审计结果中的不可信数据框定,并要求其中十一项人工作者复核计划保持未解决。新的 `dsh-a11y-authoring-at-lab/0.1.0-draft` 可通过真实 DSH Web 操作同一有界任务,证明“仅允许一次”后 finding 从两项降至零,也证明拒绝后源码不变,并定义独立的 VoiceOver/NVDA 真人记录。两种自动模式都只是产品证据,不属于辅助技术或残障作者证据。评审/发布、任何鉴权/跨 origin 扩权、live-model 修复、人工听读真实辅助技术和残障作者证据仍待补。 - 真人证据账本:`dsh-a11y-human-evidence/0.1.0-draft` 已定义公开 JSON Schema、隐私/时效/声明 validator、非证据模板以及本地/CI 门禁。其固定的 `dsh-a11y-evidence-catalog/0.1.0-draft` revision 在五项规程下登记 33 个稳定任务,并负责核心、安全和声明资格分类。新的 `dsh-a11y-evidence-coverage-policy/0.1.0-draft` 会评估六个 profile、二十六项已登记真人证据要求,且不混合不兼容精确环境或匿名残障开发者记录。矩阵覆盖主要与扩展读屏软件、盲文、语音与开关输入、放大、CLI、companion、创作和残障开发者验证。新增中英双语社区指南和专用残障开发者入口,可接收未使用具名 AT 的贡献者结果,同时要求同意、私密撤回渠道、精确任务、协助等级、有效性和安全性。新增 fail-closed scaffold 命令可从目录派生无声明草稿,且不读取参与者正文、不覆盖文件。系统会保留失败和部分结果,同时对过期、私密、存在操作协助、不安全、无效、未知、无资格或不完整的支持声明 fail-closed。账本尚无真实运行记录,二十六项聚合要求全部缺失,因此当前证明的是治理已就绪,而不是 AT 或残障用户支持。 - Windows 和 Linux 的人工听读结果仍待补;完整 VoiceOver 实际朗读记录仍待补。 -- 首轮真人活动:`dsh-a11y-primary-at-campaign/0.1.0-draft` 已固定核心 revision `5803bfcfdd502adac26ae9b8eec12d6aed263ec6` 与实验室 revision `6aed71615edd1db1ec5b12897e1ad40b79294c78`,目标为 VoiceOver/Safari、NVDA/Chrome 和残障开发者核心任务。隔离 Chrome 冒烟已通过,但在两个 revision、默认分支提交入口、Discussion 16 与 Issue 1/2 全部公开且更新前,活动保持 `prepared-not-open`。 +- 首轮真人活动:`dsh-a11y-primary-at-campaign/0.1.0-draft` 已针对核心 revision `5803bfcfdd502adac26ae9b8eec12d6aed263ec6` 与实验室 revision `6aed71615edd1db1ec5b12897e1ad40b79294c78` 开放(`open`),目标为 VoiceOver/Safari、NVDA/Chrome 和残障开发者核心任务。隔离 Chrome 冒烟与五项匿名公开可用性门禁均已通过;经同意的提交和评审到来前,真人证据账本保持为空。 ## 阶段 0——基础与上游兼容(截至 2026-09-12) diff --git a/tests/primary-at-campaign.spec.mjs b/tests/primary-at-campaign.spec.mjs index 66bc6bc..522f2d0 100644 --- a/tests/primary-at-campaign.spec.mjs +++ b/tests/primary-at-campaign.spec.mjs @@ -12,10 +12,10 @@ function source(file) { } describe('primary human assistive-technology campaign', () => { - it('pins the exact lab-ready candidate without opening recruitment', () => { + it('opens the exact lab-ready candidate without creating human evidence', () => { expect(manifest).toMatchObject({ protocol: 'dsh-a11y-primary-at-campaign/0.1.0-draft', - status: 'prepared-not-open', + status: 'open', candidate: { package: '@deepseek-ai/dsh', version: '0.1.2-alpha.2', @@ -40,7 +40,7 @@ describe('primary human assistive-technology campaign', () => { 'disabled-developer-core-web', ]) expect(manifest.availabilityGates).toHaveLength(5) - expect(manifest.availabilityGates.every(gate => gate.status === 'missing')).toBe(true) + expect(manifest.availabilityGates.every(gate => gate.status === 'ready')).toBe(true) expect(manifest.evidenceBoundary.join('\n')).toMatch(/zero human records/) expect(manifest.evidenceBoundary.join('\n')).toMatch(/not assistive-technology or disabled-user evidence/) expect(manifest.automatedEvidence.dshRevision).toBe(manifest.candidate.revision) @@ -53,28 +53,26 @@ describe('primary human assistive-technology campaign', () => { const validate = ajv.compile(schema) expect(validate(manifest), ajv.errorsText(validate.errors)).toBe(true) - const prematurelyOpen = structuredClone(manifest) - prematurelyOpen.status = 'open' - expect(validate(prematurelyOpen)).toBe(false) + const openWithMissingGate = structuredClone(manifest) + openWithMissingGate.availabilityGates[0].status = 'missing' + expect(validate(openWithMissingGate)).toBe(false) expect(ajv.errorsText(validate.errors)).toMatch(/availabilityGates.*status|ready/) }) - it('describes the default-branch intake gap without claiming the older AT form is absent', () => { + it('records the complete public default-branch intake', () => { const gate = manifest.availabilityGates.find(row => row.id === 'default-branch-intake') - expect(gate).toMatchObject({ status: 'missing' }) - expect(gate.detail).toMatch(/older AT form/) - expect(gate.detail).toMatch(/disabled-developer form/) - expect(source('PRIMARY-AT-CAMPAIGN.md')).toMatch(/existing older AT form/) - expect(source('PRIMARY-AT-CAMPAIGN.zh.md')).toMatch(/现有旧 AT 表单/) + expect(gate).toMatchObject({ status: 'ready' }) + expect(gate.detail).toMatch(/bilingual AT and disabled-developer forms/) + expect(gate.detail).toMatch(/automated browser report/) }) it.each(['PRIMARY-AT-CAMPAIGN.md', 'PRIMARY-AT-CAMPAIGN.zh.md'])( - '%s preserves exact setup, non-evidence boundaries, and the closed intake state', + '%s preserves exact setup, non-evidence boundaries, and the open intake state', (file) => { const guide = source(file) expect(guide).toContain(manifest.candidate.revision) expect(guide).toContain(manifest.lab.revision) - expect(guide).toContain('prepared-not-open') + expect(guide).toContain('`open`') expect(guide).toContain('dsh-core-at-lab/1.0.0-draft') expect(guide).toContain('lab:at:core ../deepseek-harness chrome') expect(guide).toMatch(/zero human records|零条真人记录/) diff --git a/tests/primary-at-public-readiness.spec.mjs b/tests/primary-at-public-readiness.spec.mjs index dfc7f43..57e65fe 100644 --- a/tests/primary-at-public-readiness.spec.mjs +++ b/tests/primary-at-public-readiness.spec.mjs @@ -78,7 +78,7 @@ describe('anonymous primary AT public readiness', () => { }) expect(report.gates).toHaveLength(5) expect(report.gates.every(gate => gate.observedStatus === 'ready')).toBe(true) - expect(report.gates.every(gate => gate.manifestMatchesObservation === false)).toBe(true) + expect(report.gates.every(gate => gate.manifestMatchesObservation === true)).toBe(true) const ajv = new Ajv2020({ allErrors: true, strict: true }) addFormats(ajv) const validate = ajv.compile(schema) diff --git a/tests/primary-at-publication-preflight.spec.mjs b/tests/primary-at-publication-preflight.spec.mjs index f316c85..8b1406a 100644 --- a/tests/primary-at-publication-preflight.spec.mjs +++ b/tests/primary-at-publication-preflight.spec.mjs @@ -102,7 +102,7 @@ describe('primary AT publication preflight', () => { const all = createPrimaryAtPublicationPreflight(input({ publicObservation: publicObservation(gateIds) })) expect(all.publicObservation).toMatchObject({ readyToOpen: true, missingGates: [] }) - expect(all.actions.find(item => item.id === 'open-campaign')?.status).toBe('ready') + expect(all.actions.find(item => item.id === 'open-campaign')?.status).toBe('complete') }) it('validates a real report against the public schema', () => {