Skip to content

fix(zones): expose source errors to assistive tools - #408

Merged
3esmit merged 2 commits into
mainfrom
fix/407-source-edit-feedback
Sep 16, 2026
Merged

3esmit merged 2 commits into
mainfrom
fix/407-source-edit-feedback

Conversation

@3esmit

@3esmit 3esmit commented Sep 8, 2026 •

Copy link
Copy Markdown
Owner

Summary

Fixes #407.

  • Give both existing source-mutation error Text items an explicit Accessible.StaticText role and an accessible name bound to the current message.
  • Exclude hidden feedback nodes with Accessible.ignored: !visible so section/editor messages are not exposed twice.
  • Add focused editor and section regressions for role, dynamic text, visibility, clearing and draft preservation.
  • Leave visual styling, state-reset behavior, validation and persistence unchanged.

Timestamped native probing corrected the initial diagnosis: the error was rendered, but omitted from the accessibility tree. The observed later state reset happened during window closure, not an unrelated refresh. No state-retention workaround is included.

Verification

  • cargo fmt --all and cargo fmt --all -- --check: passed.
  • python3 scripts/check-build-pipeline.py ci: passed, including workspace Clippy/tests, wallet isolation, native CTest, web checks, headless CLI and 1,344 QML tests.
  • Focused QML component suite: 58 passed; both new role assertions fail against the original accessibility behavior.
  • Native standalone: exact wrong-Channel error accessible; rejected configuration unchanged; error remained accessible through 35 samples over 70 seconds.
  • Native standalone fresh-profile positive control and restart: correct source RPC-attested and selected, live L2 rows loaded, source and attestation retained exactly.
  • Native Basecamp: real module Start, exact wrong-Channel error accessible, rejected configuration unchanged, correct source RPC-attested and selected, live L2 rows loaded, explicit Stop passed.

Native E2E isolated this QML-only change by loading candidate QML with previously verified native artifacts from #406 and blockchain #81. These are not whole-application binaries rebuilt from this branch. Temporary Basecamp QML staging was restored after testing. Screenshots were inspected; this patch has no visual layout or styling change.

The known caught-up catalog warning (#396) and historical provider ancestry issue (#274) remain separate.

Review follow-up

Commit 23a4b6e33f86e3d93e3eeb0fe1d7cdc7589bd226 adds visibility-bound exclusion and extends tests for conflict suppression, non-conflict errors during conflict, editor open/close, and empty feedback. Both new hidden-state assertions fail on the preceding commit.

Full local gate and all 58 component tests passed again on this head. Native standalone baseline exposed two identical errors in the hierarchy including hidden nodes; patched standalone and Basecamp each expose exactly one, preserve the visible rejection, and leave configuration unchanged. Basecamp explicit Stop passed. Temporary staging was restored.

The 70-second retention and valid-source/restart controls above were run on the preceding commit ffc25337; the follow-up reran the exact rejection/hierarchy cases with the same native artifact provenance.

Copilot AI lite review requested due to automatic review settings September 8, 2026 22:25
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-16T15:51:16.422334Z a0f3124 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ffc25337cd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread qml/features/zones/controls/ChannelSourceEditor.qml

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The changes are narrowly scoped to accessibility metadata on existing UI elements and are backed by targeted QML regressions that exercise dynamic updates and clearing behavior.

Pull request overview

This PR fixes an accessibility gap in the Zones “Sources” UI by ensuring existing source-mutation error messages are represented in the native accessibility tree (static-text role + name bound to the current error text), and adds focused QML regressions to prevent regressions in role/name updates, visibility, and editor/section behavior.

Changes:

  • Add Accessible.StaticText role and Accessible.name bindings to the two existing source-mutation error Text elements (editor + section).
  • Add QML component tests asserting the error text becomes accessible, updates dynamically, and clears when the error is empty.
  • Add objectNames for the two error Text items to enable stable test lookups.
File summaries
File Description
tests/qml/tst_zones_components.qml Adds regression tests verifying accessible role/name behavior for source-mutation error feedback in editor and section contexts.
qml/features/zones/controls/ChannelSourcesSection.qml Exposes section-level source-mutation error text to accessibility tools via explicit role/name and adds an objectName for testing.
qml/features/zones/controls/ChannelSourceEditor.qml Exposes editor-level source-mutation error text to accessibility tools via explicit role/name and adds an objectName for testing.
Review details
  • Files reviewed: 3/3 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 39ed96fcd1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +213 to 216
Accessible.ignored: !visible
visible: root.zoneState.sourceMutationError.length > 0
&& (!root.conflict
|| root.zoneState.sourceMutationError.toLowerCase()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Expose the revision-conflict replacement to accessibility

When saving fails with a revision conflict, submit() sets root.conflict while the mutation error contains “revision conflict,” so this newly accessible node becomes hidden and ignored. The remaining visible explanation, “Source revision changed. Draft was not rebased,” is another plain Text item without an accessible role or name—the same configuration this change found was omitted from the accessibility tree—leaving assistive-tool users with a Reload button but no explanation. Give that replacement message an explicit Accessible.StaticText role/name and exclude it when its conflict row is hidden.

Useful? React with 👍 / 👎.

@3esmit
3esmit force-pushed the fix/407-source-edit-feedback branch 2 times, most recently from f140431 to 376c0a4 Compare September 16, 2026 15:32
Give existing source mutation errors an explicit static-text role and bind their accessible name to the current feedback. Cover editor and section feedback without changing validation, persistence, or draft state.

Verification: cargo fmt --all; cargo fmt --all -- --check; python3 scripts/check-build-pipeline.py ci (passed, including 1,344 QML tests); focused component suite (58 passed); native standalone and Basecamp rejection and valid-source E2E; standalone source persistence after restart. Native E2E used candidate QML with the previously verified native artifacts from #406.

Fixes #407
Bind error accessibility exclusion to effective visibility so the hidden section message does not duplicate editor feedback and suppressed revision-conflict text is not exposed.

Extend the component tests for conflict suppression, other errors during conflict, editor open and close, and empty feedback. Native standalone baseline exposes two identical error nodes; the corrected standalone and Basecamp hierarchies expose one.

Verification: cargo fmt --all; cargo fmt --all -- --check; python3 scripts/check-build-pipeline.py ci (passed, including 1,344 QML tests); focused component suite (58 passed); native standalone and Basecamp rejection/hierarchy checks with unchanged source configuration; explicit Basecamp Stop. Native checks use candidate QML with previously verified #406 artifacts.

Refs #407
@3esmit
3esmit force-pushed the fix/407-source-edit-feedback branch from 376c0a4 to a0f3124 Compare September 16, 2026 15:49
@3esmit
3esmit merged commit ed2f693 into main Sep 16, 2026
9 checks passed
@3esmit
3esmit deleted the fix/407-source-edit-feedback branch September 16, 2026 16:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(zones): expose rejected source-edit feedback to accessibility tools

2 participants