Testing record
Canonical GitHub source · Pulled from
docs/TESTING.mdat refmainduring this site build. Use Edit this page below to suggest a correction at the source.
Testing and acceptance
Section titled “Testing and acceptance”In use on
Section titled “In use on”Verified installations
Section titled “Verified installations”| Site | Discourse build | Core commit | Verified Brand Navigation coverage |
|---|---|---|---|
| Repeal OBBBA Forum | 2026.7.0-latest+319 |
988c31e00f |
Authenticated desktop render, linked parents and submenus, visible descriptions, core-header icons, administrator settings, and component coexistence |
| DiscussionBridge sandbox | 2026.9.0-latest+338 |
587b564093 |
Authenticated normal-page render, administrator component/settings surface, and canonical-install reconciliation at Brand Navigation c878693612 |
| DiscussionBridge Forum | 2026.9.0-latest+358 |
f914fcb43e |
Configured navigation, four accessible social header links, safe _blank rel, normal authenticated render, full-app embed exclusion, and native d-compat/2026.8 to main transition |
| The Bridge | 2026.9.0-latest+188 |
7dfd824b1 |
Configured publishing navigation, four accessible social header links, safe _blank rel, normal authenticated render, full-app embed exclusion, and native main update |
| Citizen Activist Network | 2026.9.0-latest+358 |
f914fcb43e |
Configured Community/Issues navigation, submenu keyboard smoke, clean console, normal authenticated render, full-app embed exclusion, and native d-compat/2026.8 to main transition |
| RVing Community | 2026.8.0-latest.1+18 |
3f4a87b135 |
Configured Community/RVing Network navigation, three-theme attachment, clean console, normal authenticated render, full-app embed exclusion, and native d-compat/2026.8 update |
| R744 Community | 2026.7.2+14 |
2e46cff73b |
Authenticated normal-page render, submenu/Escape focus behavior, safe _blank rel, administrator settings and object editor, full-app embed exclusion, and native d-compat/2026.7 update |
The original builds were read directly from each site’s administrator dashboard on 2026-09-05. The sandbox identity was refreshed from its running server on 2026-09-07. They are evidence of known compatibility, not minimum-version declarations. Features not named in a row should be evaluated through the acceptance matrix below before claiming coverage on that environment.
Sandbox canonical-install reconciliation — 2026-09-07
Section titled “Sandbox canonical-install reconciliation — 2026-09-07”The sandbox contained three Brand Navigation imports. Read-only inventory
established that component 1 was unattached, component 2 was attached only
to Horizon with an older configuration, and component 3 held the accepted
sandbox configuration on the default Foundation theme. Component 3 was made
canonical: its source branch was changed to main, it updated without an
import error to Brand Navigation commit
c878693612fd6f4b755e7e1a57f73f61c127a711, and it was attached to both
Foundation and Horizon. Its eleven stored setting values retained their exact
pre-update hashes and lengths.
Components 1 and 2 were detached, disabled, and left in place as rollback
copies; they were not deleted. Post-change inventory showed only component 3
enabled and attached, with automatic updates enabled and no remote-theme error.
The public forum returned HTTP 200. This is server-side installation and
availability evidence; it does not replace the earlier browser-rendering
record or claim a fresh anonymous, mobile, accessibility, or embed visual pass.
Sandbox release-tag rollback exercise — 2026-09-07
Section titled “Sandbox release-tag rollback exercise — 2026-09-07”Canonical component 3 was disabled through Discourse’s component-level
Enabled? control, then changed from repository-default main to immutable
tag v0.9.0. Read-only inventory confirmed exact release commit
d2527bfb3acdcf4204a33d35e0b13504f6d7c36e, no import error, and preserved
Foundation and Horizon attachments. Phil enabled the v0.9.0 legacy internal
setting and confirmed the navigation rendered correctly.
The exercise exposed a product flaw: Discourse’s component-level Enabled?
control and the component’s legacy internal Enabled setting could contradict
one another and did not synchronize. The v1.0.0-rc.1 correction removes the
internal setting and relies only on Discourse’s native control.
Component 3 was then disabled through the native control and returned to a
blank Branch field. Discourse resolved repository-default main at exact
commit 56ee6f874efb85dfd6976928954f0dcd74aab3c8, with zero commits behind and no
import error. Both parent-theme attachments and every recorded setting hash
were preserved. The component was re-enabled through the native control and
the public forum returned HTTP 200. Final human visual confirmation of the
returned main rendering was not separately recorded before the RC test began.
For the single-switch RC test, component 3 was disabled and changed to
release/v1.0.0-rc.1 at exact commit
86c9083b8f83dc21d95fc772d5fc7b08e475bc14. The import reported no error, zero
commits behind, preserved settings and both parent-theme attachments, and no
longer defined enabled as a component setting. The earlier value remains as
an inert stored row, which allows an intentional v0.9.0 rollback to recover
it. Component 3 was enabled through Discourse’s native control and the public
forum returned HTTP 200. Phil then confirmed the RC rendered correctly in the
sandbox and that Discourse reported the component up to date with
release/v1.0.0-rc.1. Server inspection separately confirmed that the
administrator schema no longer defines an internal enabled setting.
Single-switch CI correction — 2026-09-07
Section titled “Single-switch CI correction — 2026-09-07”Pull request 19’s first CI run after removal of the internal enabled setting
passed configuration, lint, backend, and frontend coverage but failed the
explicit rendered-presence example in all four system-test lanes. The normal
Brand Navigation system suite still rendered successfully. Inspection showed
that the shared core-feature fixture no longer persisted the uploaded component
after its obsolete theme-setting assignment was removed.
Commit f6ca29b9b911936df1cbb4306411574b5bd50e34 corrected both system fixtures
to persist Discourse’s native Theme.enabled state. Configuration workflow run
34176240352 passed, and Discourse Theme workflow run 34176242873 then passed
lint, backend, frontend, and system coverage on current Discourse, 2026.8, and
both 2026.7 targets. This verifies that the automated fixture now exercises the
same single activation source as the product.
Sandbox embed and RTL browser evidence — 2026-09-07
Section titled “Sandbox embed and RTL browser evidence — 2026-09-07”The sandbox remained on Discourse 2026.9.0-latest at exact core commit
587b564093f20285dd15a02aea3eeb54886870e8. Canonical component 3 was on
main at Brand Navigation commit
56de8bd30f4d4e1deb5ce766dab4fa62f216d1ec, tree
176d51fa7b5eed30833258b73befe99f3173d2b7, with no import error and with both
Foundation and Horizon attached. The later repository changes through merged
main commit dc0e935ab54eead212e41681320470b52fc6a775 are documentation-only; an
exact runtime-path diff from 56de8bd is empty.
A temporary allowed host at localhost:8765, a dedicated temporary topic with
one reply, and an exact TopicEmbed mapping supplied a real classic-comments
fixture. Chromium 152.0.7977.76 loaded the external page at a 1280 by 1200
viewport. The rendered classic embed contained the reply count, author, reply
content, timestamp route, and Continue Discussion route. Its response and
render contained no Brand Navigation bar, mobile trigger, header icon, runtime
asset, or component class. The screenshot was visually inspected during the
test.
With Discourse’s native full-app embed setting temporarily enabled, the same
topic was loaded with embed_mode=true and an allowed external referrer at
1440 by 1000 and 390 by 844 viewports. Both loads contained zero Brand
Navigation bars, navigation landmarks, submenu summaries, and mobile triggers.
Core Discourse still exposed the topic-progress landmark, post content, reply
button, logged-out like prompts, copy-link actions, and Sign in to reply
composer call to action. This confirms exclusion and availability; quote
selection, completed sign-in, and authenticated composer submission were not
executed in this pass.
For RTL evidence, the sandbox default locale was temporarily set to Arabic.
The browser reported lang=ar and computed direction=rtl. Foundation and
Horizon were each exercised on desktop and in the component’s mobile menu at
390 by 844. The logical right section mirrored to the physical left, ordinary
items remained grouped at the physical right, and every tested submenu stayed
within the viewport. Keyboard Enter opened Resources, Tab reached its
first child, and Escape closed it. Desktop focus returned to the submenu
summary; mobile Escape closed the containing menu and returned focus to the
Brand Navigation header control. RTL full-app desktop and mobile embeds also
contained no Brand Navigation surface. Browser screenshots and computed
geometry were inspected during the pass.
The test restored default_locale=en, embed_full_app=false, and
embed_any_origin=false, removed the temporary allowed-host and topic-embed
records, and soft-deleted the dedicated topic. Post-cleanup verification found
zero embeddable hosts, no active temporary mapping, and no active temporary
topic.
This is reproducible browser/runtime evidence, not a claim of completed human assistive-technology acceptance. A preparatory Chromium accessibility-tree pass also exposed the named Brand Navigation landmark, distinct linked-parent and submenu-caret controls, focusable child links, visible-description association, named social icon links, mobile control name/state, and embed exclusion. The human screen-reader gate below remains open.
Partial iPhone VoiceOver evidence — 2026-09-07
Section titled “Partial iPhone VoiceOver evidence — 2026-09-07”An anonymous portrait-mode pass on the public Repeal OBBBA Forum used Safari with iPhone VoiceOver. The exact iPhone model, iOS build, and VoiceOver version were not recorded, so this is bounded evidence rather than a completed screen-reader acceptance pass.
VoiceOver announced the mobile trigger as Brand Navigation, button and
activation exposed the menu items. A submenu control announced its open action
and collapsed state. After activation, VoiceOver exposed each tested child’s
name and link role and read the visible description associated through
aria-describedby. VoiceOver did not speak the outer mobile trigger’s
collapsed/expanded state during the observed sequence. Its two-finger scrub did
not close the open submenu, and direct-toggle closure was not completed before
the session ended. These observations remain open for a controlled follow-up.
The same portrait session exposed a separate responsive-capacity limitation. With five Brand Navigation social destinations configured for mobile alongside Discourse’s Log In, Search, and Navigation controls, the Brand Navigation menu trigger was largely obscured by Log In. A Chromium-compatible 390 by 844 reproduction measured the fixed header panel at approximately 375px inside an approximately 369px content row; the trigger’s outlet consequently collapsed to zero width. Operators should currently reserve mobile header capacity by marking additional social destinations Desktop only. Automatic overflow or priority handling is not implemented and requires separate product treatment. Changing one of the observed mobile social destinations to Desktop only on the Repeal installation stopped the overflow and restored the complete Brand Navigation menu trigger on the tested iPhone portrait viewport.
DiscussionBridge Forum native compatibility transition — 2026-09-07
Section titled “DiscussionBridge Forum native compatibility transition — 2026-09-07”The DiscussionBridge Forum was running Discourse
2026.8.0-latest.1+414 at core commit
36698aae084678151dffa875d49c8d59216d2733. Its single Brand Navigation
installation, component 3, followed the repository’s default branch and was
attached to both Foundation and Horizon.
Discourse’s native update check selected d-compat/2026.8, reporting candidate
commit a628dcd74c9465903c7eacd59f63e50f6c9d37b6. The normal remote-theme update
advanced the component from b0b5354481c30e1db1daf4db682368a6f9c9994d
to that candidate. Post-update inspection reported the same local and remote
commit, zero commits behind, matching local and remote compatibility refs, and
no import error. All 15 stored setting values retained their exact pre-update
hashes and lengths, both theme attachments remained present, and the public
forum returned HTTP 200.
This establishes a successful native compatibility-branch update with settings preservation on the recorded 2026.8 build. It is server-side installation and availability evidence; it does not claim a fresh browser visual, anonymous, mobile, accessibility, or embed pass.
Phil then upgraded the forum through Discourse’s administrator UI. During the
upgrade, the public site served its branded maintenance page with a temporary
unavailability explanation and automatic two-minute refresh. The forum
returned successfully on Discourse 2026.9.0-latest+358 at core commit
f914fcb43e349d1b3bd6e6dc6106ca78a1e2cc74.
Post-upgrade inspection confirmed that Discourse automatically moved Brand
Navigation from d-compat/2026.8 to the repository default branch at main
commit 56de8bd30f4d4e1deb5ce766dab4fa62f216d1ec. Local and remote commits
matched, zero commits were behind, both compatibility refs were empty, and no
import error was present. The component remained enabled and attached to both
Foundation and Horizon. All 15 setting hashes and lengths still matched the
pre-update snapshot, the public forum returned HTTP 200, and Phil confirmed the
administrator UI reported Theme is up-to-date, last checked: just now. This
proves the native compatibility-to-default-branch transition and configuration
preservation across the recorded Discourse core upgrade; a fresh post-upgrade
browser interaction matrix remains separate.
The Bridge native update — 2026-09-07
Section titled “The Bridge native update — 2026-09-07”The Bridge was running Discourse 2026.9.0-latest+188 at core commit
7dfd824b151fc5b206812e72f3aca6078a71b75f. Its single Brand Navigation
installation, component 6, followed the repository’s default branch and was
attached to both Foundation and Horizon.
Discourse’s native update check selected the repository default branch with no
compatibility ref and reported commit
56de8bd30f4d4e1deb5ce766dab4fa62f216d1ec. The normal remote-theme update
advanced the component from b0b5354481c30e1db1daf4db682368a6f9c9994d
to that commit. Post-update inspection reported matching local and remote
commits, zero commits behind, no compatibility ref, and no import error. All 15
stored setting values retained their exact pre-update hashes and lengths, both
theme attachments remained present, and the public site returned HTTP 200.
The refreshed administrator UI reported the theme up to date; this Discourse
build omitted the implicit default-branch name from that message.
This establishes a successful native default-branch update with settings preservation on the recorded 2026.9 build. It is server-side installation and availability evidence plus administrator status confirmation; it does not claim a fresh visual, anonymous, mobile, accessibility, or embed pass.
Citizen Activist Network native compatibility transition — 2026-09-07
Section titled “Citizen Activist Network native compatibility transition — 2026-09-07”Citizen Activist Network was running Discourse 2026.8.0-latest.1+414 at core
commit 36698aae084678151dffa875d49c8d59216d2733. Its single Brand
Navigation installation, component 1, followed the repository’s default
branch and was enabled on Foundation and Horizon.
Discourse’s native update check selected d-compat/2026.8 at commit
a628dcd74c9465903c7eacd59f63e50f6c9d37b6. The normal remote-theme update
advanced the component from 04dbb3d994362f3f900d3f10a916ae4ac7245713
to that compatibility commit. Post-update inspection reported matching local
and remote commits, zero commits behind, matching local and remote
compatibility refs, and no import error. All three stored setting values
retained their exact pre-update hashes and lengths, both theme attachments
remained present, and the public forum returned HTTP 200. Phil refreshed the
administrator UI and confirmed Theme is up-to-date with
d-compat/2026.8.
This establishes a successful native compatibility-branch update with settings preservation on the recorded 2026.8 build. It is server-side installation and availability evidence plus administrator status confirmation; it does not claim a fresh visual, anonymous, mobile, accessibility, or embed pass.
Phil then upgraded the forum’s PostgreSQL and Discourse containers. The forum
returned on Discourse 2026.9.0-latest+358 at core commit
f914fcb43e349d1b3bd6e6dc6106ca78a1e2cc74. Post-upgrade inspection
confirmed that Discourse automatically moved Brand Navigation from
d-compat/2026.8 to repository-default main commit
56de8bd30f4d4e1deb5ce766dab4fa62f216d1ec. Local and remote commits
matched, zero commits were behind, both compatibility refs were empty, and no
import error was present. The component remained enabled on Foundation and
Horizon, and all three setting hashes and lengths still matched the pre-update
snapshot. The public forum returned HTTP 200, and Phil confirmed the refreshed
administrator UI reported the theme up to date.
This proves the native compatibility-to-default-branch transition and configuration preservation across the recorded PostgreSQL and Discourse core upgrade. A fresh post-upgrade browser interaction matrix remains separate.
RVing Community native compatibility update — 2026-09-07
Section titled “RVing Community native compatibility update — 2026-09-07”RVing Community was running Discourse 2026.8.0-latest.1+18 at core commit
3f4a87b13554cb3ea366cb3a29ed56fd4b2c3d03. Its single Brand Navigation
installation, component 16, followed the repository’s default branch and was
enabled on Default, Foundation, and Horizon.
Discourse’s native update check selected d-compat/2026.8 at commit
a628dcd74c9465903c7eacd59f63e50f6c9d37b6. The normal remote-theme update
advanced the component from 04dbb3d994362f3f900d3f10a916ae4ac7245713
to that compatibility commit. Post-update inspection reported matching local
and remote commits, zero commits behind, matching local and remote
compatibility refs, and no import error. All four stored setting values
retained their exact pre-update hashes and lengths, all three theme attachments
remained present, and the public forum returned HTTP 200. Phil refreshed the
administrator UI and confirmed Theme is up-to-date with
d-compat/2026.8.
This establishes a successful native compatibility-branch update with settings preservation on the recorded 2026.8 build. It is server-side installation and availability evidence plus administrator status confirmation; it does not claim a fresh visual, anonymous, mobile, accessibility, or embed pass. Two failed email jobs observed during administration are attributable to the site’s intentionally unconfigured outbound mail provider and are unrelated to Brand Navigation.
R744 Community native compatibility update — 2026-09-07
Section titled “R744 Community native compatibility update — 2026-09-07”R744 Community was running Discourse ESR 2026.7.2+14 at core commit
2e46cff73b07ecddbcc5603eb3fbf41d563577f6. Read-only inventory found two
Brand Navigation records. Component 1 was the live installation, enabled on
Foundation and Horizon and following the repository default branch. Component
2 was an unattached historical compatibility-test copy pinned to
codex/r744-compatibility; its Brand Navigation enabled setting was false,
although the unattached Discourse theme record’s enabled flag remained true.
Discourse’s native update check for live component 1 selected
d-compat/2026.7 at commit
a628dcd74c9465903c7eacd59f63e50f6c9d37b6. The normal remote-theme update
advanced it from 04dbb3d994362f3f900d3f10a916ae4ac7245713 to that
compatibility commit. Post-update inspection reported matching local and
remote commits, zero commits behind, matching local and remote compatibility
refs, and no import error. Its stored enabled setting retained its exact
pre-update hash and length, both live theme attachments remained present, and
the public forum returned HTTP 200. Phil refreshed the administrator UI and
confirmed Theme is up-to-date with d-compat/2026.7. Historical component
2 was not changed.
This establishes the oldest recorded supported-line native update with settings preservation. It is server-side installation and availability evidence plus administrator status confirmation; it does not claim a fresh visual, anonymous, mobile, accessibility, or embed pass.
R744 will intentionally remain on the supported 2026.7 ESR line as Brand Navigation’s oldest real-world compatibility canary. Its Discourse core should advance when security or support requirements demand it, or before that release line leaves support, rather than solely to match newer test sites.
Automated release compatibility
Section titled “Automated release compatibility”PR 9 implementation commit 24071e75f189cb4512cf8ce37d8b1576aa0f652d
passed configuration run 34144739257 (24/24) and Discourse Theme run
34144739800. The expanded theme matrix passed current Discourse plus exact
Repeal and R744 2026.7 cores and exact Discourse v2026.8.0 core commit
badad7b0456a628e578bc48b9f8c1259422b5d58. Each core passed backend,
frontend (23/23), and system (30/30) lanes; current linting also passed. This is
automated compatibility evidence, not a claim of manual 2026.8 browser
acceptance.
Initial verification record
Section titled “Initial verification record”The initial implementation candidate was verified on
codex/v0.9.0-verification in pull request
https://github.com/CodeWorksLabs/brand-navigation/pull/1, which has since
merged. At implementation commit 13005b7, official Discourse Theme workflow
run 34010799758 passed linting, English-locale validation, frontend QUnit,
backend, and Ruby system tests. Configuration workflow run 34010799448
passed all 18 Node bundle tests. This is historical implementation evidence,
not the immutable v0.9.0 candidate. The accepted release candidate is commit
9f2a6e0c0c18b075e796ff0e7a15e1e8917b6d8b, tree
8eca2b3bb2137ea2a24c4cc4574f518e9227e2a9; configuration run
34080419543 and Discourse Theme run 34080419924 passed before manual
acceptance and merge.
The same branch was installed as sandbox component id 2 and verified for the
desktop, 390px mobile menu/bar/hidden, keyboard submenu, safe external-link,
structured import, site-header icon, full-app embed-exclusion, and structured
editor save-stay cases. Classic embedded comments remain unverified because the
sandbox has no embed hosts configured. Anonymous browser, light/dark, RTL,
screen-reader, current export-download delivery, and older-version checks also
remain open manual cases; automated visibility/export logic is green.
After pull request 1 merged as e22dce2, sandbox component id 2 was switched
to main and reported up to date. A focused post-merge smoke test reconfirmed
authenticated normal rendering, safe submenu behavior and Escape focus return,
successful structured re-import with reload persistence, and complete
Brand Navigation exclusion from ?embed_mode=true while core main content
remained. No production or consumer site was changed during this check.
Top-level behavior candidate
Section titled “Top-level behavior candidate”Merged pull request 3 (codex/top-level-link-behavior, implementation commit
e53a7d0, merge commit 317c4be) adds an
explicit link_mode to each top-level navigation item. GitHub Actions run
34019282463 passed the official Discourse lint, frontend QUnit, backend, and
Ruby system jobs; configuration run 34019282181 passed all 19 Node tests.
Sandbox component id 2 was switched from main to the candidate branch for
live verification. The administrator editor displayed Top-level behavior,
accepted group for Resources, kept /about in the editor, and stayed on the
editor after saving. On the normal forum page Resources rendered as one
submenu-only button and opened its About and Discourse Meta children. A group
selection on Community, which had no actionable children, was rejected with
the expected validation message and was not saved. Resources was then restored
to link; the normal page again rendered /about as the parent link with a
separate submenu caret. The final sandbox setting is therefore Link, matching
its pre-test behavior.
After this round trip, ?embed_mode=true returned zero Brand Navigation
surfaces, one #main-outlet, no broken-theme warning, and no captured console
errors. The first save immediately after changing the component source loaded
the new schema alongside the previous single-page-app validator and failed
closed; reloading synchronized the assets and all subsequent saves passed.
After pull request 3 merged, sandbox component id 2 was returned to main
and reported up to date. The final post-merge smoke reconfirmed the linked
Resources parent at /about, its separate submenu caret, submenu open and
Escape focus return, and the Meta child link’s _blank target with
noopener noreferrer. The normal page had one Brand Navigation surface, one
#main-outlet, no broken-theme warning, and no captured console errors.
Full-app ?embed_mode=true again excluded Brand Navigation while retaining
#main-outlet, with no warning or captured console error. The browser was
restored to the normal sandbox forum page.
After that smoke test, Phil chose the new behavior for the live sandbox sample.
Resources is currently saved as group: browser inspection confirmed a
submenu button is present and no Resources parent link is rendered. Its saved
/about value and both child destinations remain available in configuration.
Remaining compatibility targets
Section titled “Remaining compatibility targets”- The original R744 test on unsupported
2026.2.0-latestexposed older module APIs and is not a compatibility claim. On 2026-09-05 the site was backed up, pinned torelease/2026.7, rebuilt successfully as2026.7.2+14(2e46cff73b), and verified with Brand Navigation. Live component id1is enabled on Foundation and Horizon and now followsd-compat/2026.7. The duplicate component id2remains preserved and unattached on historical branchcodex/r744-compatibility; its legacy Brand Navigationenabledsetting is false while its unattached Discourse theme-record flag is true. Draft pull request 2 is no longer needed to support this site and was closed without merge. - Refresh installation records when these sites change Discourse release lines or Brand Navigation compatibility refs.
Automated gates
Section titled “Automated gates”- JavaScript, template, style, formatting, and type linting.
- Discourse shared core-feature system specification with Brand Navigation enabled through Discourse’s native component state, plus an explicit rendered-presence assertion.
- Normal-page rendering of brand, direct links, and native submenu.
- Mobile compact-menu behavior.
- Negative render assertion for
embed_mode=true. - Unit coverage for audience visibility and
_blanklink safety. - Unit coverage for backward-compatible desktop/mobile item visibility.
- Unit coverage for left/right navigation section grouping.
- Unit coverage for excluding site-header items from the brand bar.
- Unit coverage for optional visible submenu descriptions.
- Unit coverage for delayed primary-sprite readiness, shared notification and teardown, production-sprite icon membership, replacement icon IDs, icon/label presentation, unavailable bar/submenu fallback, and omission of unavailable direct site-header icons.
- Rendered component coverage for a retained site-header item that starts mobile-hidden, becomes eligible before sprite readiness, subscribes once, and appears after the delayed primary symbol arrives.
- Rendered system coverage for visible label fallback when a bar icon is
unavailable. The prebuilt system harness cannot dynamically register a new
api.headerIconsentry after the component initializer has run. - Scoped administrator save behavior that remains in the navigation editor.
- Fail-closed bundle schema, URL, size, nested-field, and conditional validation.
- Bounded local bundle validation without forum credentials or network access.
- Schema-scoped object-editor identity and five-setting component-panel signature, including locally uploaded components and incomplete-signature rejection.
- Complete bundle preflight, immutable persistence snapshots, strict color types, inert diagnostics, whole-file symmetry, and Discourse’s per-object setting byte limit, including a rendered assertion that an oversized object sends no persistence request and changes no setting.
- Component-action deferred-completion coverage for submitted appearance and bundle snapshots, in-flight state, model reconciliation, dirty state, success state, current/exported settings, and unrelated color-draft preservation.
- Deferred file-selection coverage proving that only the latest selected file or pasted bundle may replace pending import state.
- Mobile-menu geometry coverage proving that an open linked-parent submenu occupies layout space before its following navigation item.
- Browser-backed import coverage for persisted appearance reload, synchronized picker state, and a clean post-import save state.
Manual acceptance matrix
Section titled “Manual acceptance matrix”Test the current stable and tests-passed Discourse branches where practical.
| Context | Required result |
|---|---|
| Desktop, anonymous | Allowed links render; only one submenu opens and Escape restores focus |
| Desktop, authenticated | Authenticated entries render; anonymous-only entries do not |
| Mobile menu | One header control opens usable brand navigation |
| Mobile bar | Responsive bar wraps navigation and exposes unclipped submenus |
| Mobile hidden | No brand-navigation surface renders |
| Site-header item | Direct icon appears once with its tooltip, audience, target, and safe rel |
| Device-specific item | Renders only for its selected device class, unchanged across phone rotation |
| Descriptive submenu | Description appears below its label; empty entries remain compact |
| Administrator object save | Settings persist and the structured editor remains open |
| Administrator bundle import | Prepare through an enabled non-live staging theme; complete preflight occurs before one update request |
| Light/dark schemes | Correct logo fallback and readable scheme colors |
| RTL locale | Logical positioning and submenu alignment remain usable |
embed_mode=true full app |
No bar or mobile trigger mounts |
| Classic embedded comments | No global brand/navigation content appears |
| Embedded interaction | Core topic, sign-in, reply, like, quote, and composer behavior is unchanged |
| Normal sign-in | Full-application sign-in remains core Discourse behavior |
Also test long labels, empty configuration, missing optional icons, external links, browser zoom, reduced viewport width, keyboard-only use, and screen reader navigation landmarks.
Remaining manual gates for v1.0.0
Section titled “Remaining manual gates for v1.0.0”The v0.9.0 preview does not claim completed human verification for these
three cases. The browser/runtime evidence above materially advances the first
two but does not substitute for final human confirmation:
- A classic Discourse comments embed on an allowed external host, proving that Brand Navigation does not mount while embedded discussion content and core interaction controls remain available.
- A complete RTL-locale desktop/mobile pass covering layout, submenu alignment, focus, keyboard behavior, responsive modes, themes, and embed exclusion.
- Complete the human screen-reader testing begun in the partial iPhone VoiceOver pass above, covering the navigation landmark, accessible names, expanded/collapsed state, linked-parent and caret actions, dismissal and focus return, visible descriptions, icon links, responsive controls, and embed exclusion.
Execute these on a controlled test environment after the operator-documentation correction closes. Record the Discourse build and core commit, Brand Navigation commit/ref, theme, browser, viewport/device, account state, assistive technology and version when applicable, exact steps, and pass/fail result. Gather all findings before making a correction batch; automated accessibility tests do not substitute for these human checks.