Skip to content

Port accessibility contracts to DSH 0.2.0-rc.2 with exact-source validation - #6

Draft
mattheliu wants to merge 51 commits into
baseline/dsh-v0.2.0-rc.2from
feat/a11y-core-0.2.0-rc.2
Draft

mattheliu wants to merge 51 commits into
baseline/dsh-v0.2.0-rc.2from
feat/a11y-core-0.2.0-rc.2

Conversation

@mattheliu

@mattheliu mattheliu commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

Scope and exact targets

Port the accessibility core to official DSH 0.2.0-rc.2, based on dsh-v0.2.0-rc.2 / 639ed015397290b3745d163aafe02ffee4aa3f84. The separate 0.2.1-alpha.1 preview is not targeted. Current core candidate: 15a03e6dbb9083ff08560fedac567bd10fa6b9e0. Companion assembled integration still pins 9efb40006952158d75fbdce459a0c4958f4e02be; its evidence is not relabeled as the new pair.

This remains a draft, not complete-accessibility or release-readiness approval. Companion integration and source-bound archives: omdsh-dev/dsh-accessibility#30 . No merge, tag, npm publication, or complete-screen-reader-support claim is made.

Changes

  • Preserve accessible shell navigation, session trees/tabs, composer/model command controls, shared modal focus, readable conversations, pending interactions, and quiet live announcements across the rc.2 port.
  • Repair tooltip description IDs, model-menu focus, duplicate running announcements, and narrow-viewport focused-control hit areas. Recorded-answer review must not announce a new request; subsequent live questions still announce. Reloaded history retains a separate silent baseline.
  • Retain versioned three-engine evidence and CLI accessible/JSON completion and error output. Keyboard, selection, focus, permission and error assertions are not waived.
  • Repair Stagehand-native test-fixture resolution using the real SDK schema and a resolve-only hook for the two external TS fixtures, without replacing runtime schemas.
  • Fix the remaining relative ./stagehand.ts import in that snapshot fixture. A new plain-Node subprocess regression proves shared fixture identity, the real SDK schema identity, browser close and resolver disposal. No production build input or dependency changes in this follow-up commit.
  • Isolate lint probes in an owned full source/config graph rather than short-lived files in the shared checkout; settle parallel copying before failure/cleanup and join setup before teardown. Do not widen deadlines, add retries, skip failures, or serialize the suite.
  • Fix the follow-up type-aware lint failure by explicitly returning unknown for collected rejection reasons. No cast or lint-rule waiver is used.

Exact-source verification

  • On current 15a03e6dbb: the new plain-Node regression failed before the fix with the original ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX, then passed together with loader composition (2 tests / 2 files). The broader owning run passed 77 tests / 11 files; the two focused tests are included, not additional. Targeted lint and normal commit/pre-push checks passed. The built CLI's focused Stagehand headless snapshot passed 1 test, with 137 unselected by the name filter; it used the existing 9efb400069 build plus the repaired external fixture, not a fresh full-release acceptance run.
  • Current 15a03e6dbb accessibility browser CI job succeeded: Chromium 14 passed, Firefox 13 passed / 1 skipped, WebKit 13 passed / 1 skipped. The two skips are unsupported forced-colors emulation, not screen-reader certification. This is independent of the historical browser archives below.
  • On 9efb400069: the corrected lint/persistence owner run passed 198 tests in two files; full type-aware lint and duplication passed 2/2 gates, and normal staged hooks and incremental pre-push typecheck passed.
  • On 9efb400069, independent complete unit rerun: 39,157 passed, one expected failure, 239 skipped; 1,874 passed and 21 skipped files; no unhandled error, normal exit 0 in 285.72 seconds. Independent Chromium/Firefox/WebKit accessibility contracts: 40 passed, two unsupported forced-colors emulations skipped, archived byte-identically with SHA-256 7a58ab88367138b349ae3b2f711f2efc1238e55705893e2a973d60070c9291a2.
  • Integration pair core 9efb400069 / companion d7687b233dff8d95f7a56d54cc0299f34563536e: five assembled browser checks and six CLI scenarios independently passed. The actual installed companion tarball also passed five client browser checks through the real ModuleLoader after explicitly installing the laboratory's development-only axe-core@4.13.0 in the private consumer; original missing-test-tool failure is retained. Production dependency/content bytes were not changed. These are machine checks, not real screen-reader speech or user evidence.
  • On historical core 1d321f2053c547d353c0ab033444e0dd148f68ae: complete unit lane 39,157 passed, one expected failure, 239 skipped; 1,874 passed and 21 skipped files; no unhandled error. Independent Chromium/Firefox/WebKit accessibility contracts: 40 passed, two unsupported forced-colors emulations skipped. Byte-identical archive SHA-256 217ef4b6b1a9d0c126f952a6b5e960cbd9de73146b31ccf46b9d651aede73229. Results do not transfer to later SHAs.
  • Historical core 1001be8032 complete Web lane: 603 passed, 16 skipped; complete GUI: 9,597 passed, one skipped. Those exact-source passes and prior failed/interrupted controls remain distinct in the compatibility record.
  • Core 1d321f2053 / companion 8bef25ab93: five assembled browser checks and six CLI scenarios passed. Its actual companion tarball installed normally with exact peers and a plain-Node host import. This does not claim a current installed-client or published-release pass.
  • Five independent authoring/provider package candidates now use DSH rc.2 / Cordis 4.0.4, unpublished 0.1.0-alpha.1; framework-independent testkit remains 0.1.0-alpha.0. 105 unit tests, 20 compatibility checks, type/build gates, four-metric 100% unit coverage and actual local-tarball consumption passed at the precise family revisions in the companion compatibility document. These repositories are still local, without remotes or published alpha.1 packages.
  • Core 1d321f2053 / lab d2c2e2f753: freshly packed six-package graph and the real shipped profile/Loader passed the fixed audit → read → edit → audit loop. The two fixture barriers became zero, with exact expected source repair, two untrusted-data-framed reports and eleven unresolved manual-review rows. Independent allow-once/reject browser checks passed; rejection preserved source bytes and marked only the edit result failed. This is fixed keyless product-loop evidence, not model autonomy, AT or human evidence.

Retained failures and acceptance barriers

  • The 1d321f2053 snapshots/artifacts job failed at type-aware lint; six subsequent gates were not run. The callback fix above passed locally; current CI is independent, and pending jobs are not passes.
  • Historical 9efb400069 CI run 37362851417 finished failed. Windows coverage had 10 failing tests in 3 files: eight ACL fixture cases, one projection-cache v3 rewrite, and one npm-resolution temporary-directory cleanup EPERM. Snapshots/artifacts failed at the Stagehand relative TS import repaired above. Linux coverage and the Python release-shaped plan were canceled; downstream skips are not passes.
  • Current 15a03e6dbb CI run 37529446480, checked 2026-10-06 at 21:19 UTC: 13 jobs succeeded, including static, Node 22.19/24.9/26, accessibility browser contracts, Windows native, Windows build/observational, benchmarks and Python keyless/release-shaped wheel checks. Windows coverage, Linux coverage and snapshots/artifacts are still in progress. No all-green core CI claim is made.
  • The ACL failure logs show retained explicit FullControl ACEs contradicting restricted fixture assumptions, plus access denied while arranging a subtree fixture. Their root-cause repair is not established by a macOS pass. The projection-cache/npm-resolution owning files passed 24 tests / 2 files locally, which does not resolve their Windows signatures. These three files and their workflow/Vitest configuration are unchanged between 9efb400069 and 15a03e6dbb. No security-policy change, blind retry, timeout increase, weaker assertion or failure skip is introduced.
  • Companion CI run 37363239533 attempt 2 completed success at d7687b233d: all six Ubuntu/macOS/Windows × Node 22.19/24.x validation jobs, the assembled browser contract and aggregate gate passed. Original canceled/incomplete attempt remains retained. This validates its pinned 9efb400069 integration, not the newer core candidate.
  • The official packed-release --omit=optional macOS arm64 consumer gate is still failed. Independent controls reproduced npm 11.4.2's peer resolver issue; official npm 11.6.0 passed that control but reached Koffi 3.1.1 source-fallback linking failure when optional platform packages were omitted. Normal installation passing does not replace this failed gate. No dependency override or ignored install script is used.
  • Earlier watcher/projection timeouts and Office stalls remain recorded, even when later focused/full runs passed; those later passes do not explain their causes.
  • Human ledger: zero records; 26 existing coverage-policy requirements missing. Format validation passes but required-baseline coverage correctly fails. Real VoiceOver/NVDA speech/braille and disabled-developer task evidence remain absent. Computer-use automation explicitly stopped this session; it was not retried or bypassed, and VoiceOver/settings were not changed. No AT pass or participant record is invented.
  • The existing Web/CLI coverage baseline is not an exhaustive installed-desktop/onboarding/update/OS-integration certification. A whole-product claim requires explicit version/platform/surface boundaries and actual entry-point evidence.
  • User-perceivable UI changes require designer/product review before merge. Keep this PR draft until the required gates and evidence are satisfied.

Privacy and provenance

Public archives contain reviewed synthetic machine evidence only. No credentials, private browser/session content, one-use lab URLs, raw private logs, speech recordings or human identities are attached. Historical archives/protocols and the original human campaign are retained, not relabeled as the new candidate.

# Conflicts:
#	.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.i18n.yaml
#	.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.md
#	.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.zh.md
#	.github/workflows/ci.yml
#	apps/cli/tests/profiles/headless/tests/fixtures/deepseek-defaults.cordis.yml
#	apps/web/tests/expected/agent-preset-selection/menu.expected.md
#	apps/web/tests/live-interactions.e2e.ts
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.md
#	packages/bundle/headless/src/index.ts
#	packages/bundle/headless/tests/headless.spec.ts
#	packages/client/ui-chat/README.i18n.yaml
#	packages/client/ui-chat/README.md
#	packages/client/ui-chat/README.zh.md
#	packages/client/ui-chat/src/client/chat/ChatView.tsx
#	packages/client/ui-chat/src/client/chat/MessageItem.tsx
#	packages/client/ui-conversation/src/client/skeleton/ConversationSession.tsx
#	packages/client/ui-conversation/tests/input-bar.client.spec.tsx
#	packages/client/ui-permission-presets/tests/permission-presets-row.client.spec.tsx
#	packages/client/ui-primitives/README.i18n.yaml
#	packages/client/ui-primitives/README.md
#	packages/client/ui-primitives/README.zh.md
#	packages/client/ui-settings-general/src/client/SettingsRoot.module.css
#	packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx
#	packages/client/ui-trajectory/README.i18n.yaml
#	packages/client/ui-trajectory/README.md
#	packages/client/ui-trajectory/README.zh.md
#	packages/session/session-persistence-sqlite/tests/sqlite.spec.ts
#	packages/session/session-projection-cache/tests/cache.spec.ts
#	scripts/ci-workflow.spec.ts
#	snapshots/web/subagent-conversation/ui-expanded.expected.md
#	snapshots/web/subagent-conversation/ui.expected.md
#	snapshots/web/subagent-interrupt/offline-composer.expected.md
@mattheliu mattheliu added kind/feature Adds or intentionally changes product behavior area/web Browser and Electron graphical interfaces area/cli CLI and headless user-facing presentation area/infra Build, CI, repository gates, dependencies and developer tooling labels Oct 5, 2026
@mattheliu

Copy link
Copy Markdown
Member Author

Update at 15a03e6: fixed relative fixture resolution in the built Stagehand headless snapshot. A new plain-Node subprocess regression failed before the fix with ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX and passes afterward. The hook remains resolve-only, preserves the real SDK schema, shares fixture identity, and restores normal resolution on disposal.

Local evidence: 77 tests across 11 owning files passed (including the 2-test focused loader pair); the real built CLI snapshot passed 1 selected scenario, with 137 not selected by the name filter. Normal commit/push hooks, host build and client typecheck passed. No retries, timeout increases, skipped failing assertions, production dependency changes or archived Session rewrites were used.

Current exact-head CI is pending: https://github.com/omdsh-dev/deepseek-harness/actions/runs/37529446480 . The preceding run remains failed: Windows coverage has 8 ACL fixture failures, 1 projection-cache rewrite failure and 1 npm cleanup EPERM failure; cancelled Linux/Python jobs are not passing evidence. The two non-ACL owning files pass 24 tests on macOS, which does not establish a Windows fix.

This PR remains draft and is not release-ready. Real AT/disabled-user evidence is still empty: 0 records, all 26 current baseline requirements missing. No merge, tag or npm publication was performed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/cli CLI and headless user-facing presentation area/infra Build, CI, repository gates, dependencies and developer tooling area/web Browser and Electron graphical interfaces kind/feature Adds or intentionally changes product behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant