Skip to content

Unify Canadian regions with MeshMapper IATA scopes - #108

Open
n30nex wants to merge 24 commits into
mainfrom
codex/meshmapper-iata-scopes
Open

n30nex wants to merge 24 commits into
mainfrom
codex/meshmapper-iata-scopes

Conversation

@n30nex

@n30nex n30nex commented Sep 25, 2026 •

Copy link
Copy Markdown
Member

Summary

Unifies Canada's region map and configurator with MeshMapper IATA codes, with a clearer English/French proposal and a preparation-first rollout. Includes #112 and #114 and the subsequent review feedback.

Candidate: 6c7562e5e8c6b02f62a44a1557c14887cefe9cd9.
Preview: Canadaverse test site. Production is unchanged; this PR remains open for community review.

Preparation and coordinated activation

This deliberately replaces the earlier instruction to block unscoped floods during Phase 1.

  • Prepare scopes is the default in both tools and the shared generator. It adds/updates named scopes without removing old entries or changing wildcard forwarding (*) or the default scope. Matching entries can move to the flat structure; back up and inspect the current list first. The migration checker checks the combined list against the firmware limits.
  • Coordinated activation requires a known city/edge role and confirmation of a locally announced cutover. ON/QC companion changes, repeater advert scopes and edge blocking are coordinated together in Phase 2, January 2027 at the earliest; the date alone never opens the phase. Other provinces set their own timetable.
  • New/shared visits and back/forward restoration do not inherit confirmation. Changing the selected region, physical province, repeater type or neighbours requires confirmation again.
  • Standard radio/ID/advert/hop changes remain opt-in in the configurator. can and na remain reserved labels, not companion defaults or a promise of international routing. No commands are sent to a radio.

Clearer operator and user journeys

  • The proposal starts with city/IATA lookup and a role choice: companion user, repeater operator, or bot/MeshMapper operator. It uses all 24 ON/QC IATA codes from the shared catalogue, including Quinte, Kingston and Port Hope. Ambiguous locations require a choice; failed searches cannot leave stale commands visible.
  • Independent scope labels are separated from reserved labels. A small forwarding example shows what the selected repeater configuration would do, without pretending to predict radio coverage or a complete route.
  • City/edge guidance asks about regular links to another IATA region and offers Not sure yet. A map boundary alone does not determine the role; unknown roles cannot activate. Neighbour-map links and the sole-local-repeater warning are included.
  • Map, configurator and proposal distinguish boundary publication, local settings confirmation and local rollout. The optional rollout profile record requires a dated public announcement; all current records remain explicitly unconfirmed. No maintainer, adoption or readiness is inferred from map publication or radio traffic.
  • The existing migration tool now supports preparation without removals. The post-change verifier checks a pasted region list, hierarchy, forwarding flags and firmware-specific default scope. Preparation results explicitly limit their claim to named scopes and ask the operator to compare unchanged settings with the backup. Inputs stay in the tab; radio tests and recovery guidance remain separate.
  • Preview pages carry a bilingual review preview, not production or a rollout announcement notice. Older phone screenshots are labelled as activation examples, not preparation instructions.

Try Quinte in English, Quinte in French, or the preparation-first configurator.

Preserved IATA implementation

  • All 33 published MeshMapper polygons retain their coordinates. Canada has 62 IATA codes and 95 boundary features: published zones, separately labelled starter regions and planning extensions. The southern Ontario gap-assignment correction remains in place; no geometry changed in this UX update.
  • Flat local-region + physical-province + ON/QC-only onqc + reserved can/na scopes. Cross-province zones require the repeater's actual province. Neighbouring city scopes are optional; U.S. paths remain explicit and separate from Canadian geography.
  • Shared firmware-aware commands and real command/list limits; browser-local migration comparison; role/community handoffs; historical draft export; and retirement of the census editor/publisher without deleting historical proposals.
  • The official MeshMapper Zones API review importer retains caching/ETags and never publishes changed boundaries automatically. Planning areas are not RF coverage, MeshMapper approval or nationwide adoption.

Verification

  • All nine final-candidate GitHub checks passed: 207 JavaScript unit/helper tests and 1,267 browser tests, with 29 platform-specific skips and no flaky tests in the final run. Content/schema checks, generated catalogues, geography and performance budgets also passed.
  • Browser coverage is split into independent firmware/role journeys rather than eight setups inside one timeout. WebKit jobs use a dedicated worker, following Playwright's CI stability guidance. The 30-second test limit, retry policy, assertions and Lighthouse thresholds were not relaxed.
  • All 56 hosted English/French finder, role, activation, verification and styling checks passed on desktop Chromium and mobile WebKit with retries disabled. Earlier local resource-contention timeouts were investigated; the affected mobile journeys and all 12 offline broker-helper fixtures passed their clean reruns.
  • Public verification checked all 131 HTML pages, 19 matching asset hashes, preview noindex/canonicals, the bilingual preview banner and real lookup/configuration journeys. No application JavaScript errors or application CSP violations were found. Quinte/Belleville/Trenton resolve to ytr/on; Gatineau resolves to yow/qc.
  • Production's revision/artifact and the hosting container remained unchanged; the container is healthy with no restart. Worktree is clean and local/remote heads match the candidate.

Preview artifact SHA-256: 6d14d8f49bb0c852e94179843a509f82405d697ba5df37aa008d600e52a48b45.
The previous preview, c0e3054, is retained for rollback. No server restart, production deployment, broker change or radio change is part of this update.

Before merge

Community review of the revised activation timing is still required. This page is a proposal, not a rollout announcement.

The production owner must also deploy and verify the existing gateway-retirement changes: obsolete boundary submissions return 410 without external writes, immutable previews remain accessible, and community submissions still work. Preserve the ledger, secrets, endpoint and ports. See gateway instructions and IATA maintenance guidance.

@n30nex
n30nex marked this pull request as ready for review September 25, 2026 02:25
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 25, 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-25T02:29:43.498496Z 8799f3e Draft marked ready
ℹ️ 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.

@n30nex

n30nex commented Sep 25, 2026

Copy link
Copy Markdown
Member Author

Ready for review at 8799f3e.

All nine GitHub checks passed. The six-browser matrix finished with 715 passed and 29 browser-specific skips. Validation and Lighthouse are green; local checks also covered both production and subpath preview builds, 33 IATA polygons, all 13 province outlines, archived data, old links, firmware variants, and saved-draft recovery.

The map and configurator now share MeshMapper's IATA data. Please pay particular attention to the Canada-wide catalogue change, the ON/QC-only shared scope, and the local-versus-bridge flood policy. This does not claim that every local network has migrated.

Before merge: the production owner still needs to deploy and verify the gateway retirement described in instructions.md. No production service, device, observer account, or broker was changed during this work. Old boundary issues and previews are preserved.

@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: 8799f3eee0

ℹ️ 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 scripts/fetch-meshmapper-regions.mjs Outdated
properties: {
code: zone.code,
tag: zone.code.toLowerCase(),
name: zone.name.replace(/, CA$/, ""),

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 Populate the map label expected by the renderer

Every boundary produced by this importer, including the committed snapshot, exposes properties.name but not properties.label. The interactive map still reads feature.properties.label in loadInteractiveMap for both the tooltip and the location selected on click, so hovering displays YOW - undefined and clicking a zone records coordinates instead of its city name. Emit label here or normalize name into label before rendering.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Fixed in 5c3d54ba1a1a1cfed857c034f3bdfd2028834340. The shared map renderer now uses name (or nameFr in French) when label is absent, for both hover text and the clicked location. It also disables polygon click bubbling: the background map handler was otherwise overwriting the selected name with coordinates.

English/French regressions verify the displayed name and selected location on desktop Chromium and mobile WebKit. The approved boundary snapshot is unchanged. The fix is deployed to the preview map.

@n30nex

n30nex commented Sep 25, 2026

Copy link
Copy Markdown
Member Author

PR #108 is now deployed to the Canadaverse test site at 8799f3e.

Verified against the public host:

  • Served manifest matches the exact PR revision and built artifact (aae4518c9e60eed5116974200c22ceb269a7d0b3ed6ae8f7318e02a8a95b5307).
  • 119 browser checks passed, with 5 browser-specific skips, on desktop Chromium and mobile WebKit. English/French IATA lookup, bridge commands, older firmware, saved-link migration, language switching, and mobile layouts are covered.
  • All 131 public HTML pages returned successfully with preview noindex protections. Nine key assets, including both boundary layers and the configurator, match their local hashes.
  • Additional unmocked English desktop/French mobile checks confirmed real map tiles, yow lookup for Gatineau with qc, flat bridge commands, and no application JavaScript/CSP errors.
  • No server restart or Caddy configuration change was needed. The previous 7344fcb preview release is retained for rollback.

This is a preview-only deployment. Meshcore.ca production and its submission gateway were not changed; the production-owner gateway verification remains a pre-merge requirement.

Preview deployment and verification are now a required handoff step for future meshcore.ca work.

@MrAlders0n

Copy link
Copy Markdown
Member
  1. Let's wait, we need to propose this to the MeshCore Canada discord and on the forum I think
  2. Let's not scrap MeshMapper lol I'll create a proper api give me a day

@n30nex

n30nex commented Sep 25, 2026

Copy link
Copy Markdown
Member Author

Added and deployed the six complementary IATA starter regions at 8115063:

Area Scope
PEI yyg
Newfoundland yyt
Labrador yyr
Yukon yxy
Northwest Territories yzf
Nunavut yfb

Try them on the preview map or read the starter-region guide.

The 33 MeshMapper geometries remain unchanged. The six additions are separately labelled MeshCore Canada starter regions, use the same flat scope syntax, and do not generate onqc. Geometry checks prove full coverage of their five jurisdictions without starter overlap or displacement of published zones. Labrador uses the official Statistics Canada division split, not a guessed radius.

Verification for this exact commit:

  • All nine CI checks passed: 787 browser tests passed, 29 platform-specific skips, and Lighthouse green.
  • 52 hosted browser checks passed in English/French on desktop Chromium and mobile WebKit.
  • All 131 public HTML pages and 10 key asset hashes verified. Real-map/command checks showed no application JavaScript or CSP errors.
  • Served artifact SHA-256: 6f43a41f3b07ecf63e12f0586f5884845559db472683859871087f7e2dd88feb.
  • The previous 8799f3e preview release is retained for rollback. No Caddy change or restart was needed.

Production meshcore.ca and its submission gateway were not changed. The gateway owner's pre-merge verification remains required.

@n30nex

n30nex commented Sep 25, 2026

Copy link
Copy Markdown
Member Author

All seven follow-up improvements are now included in d74f4e9 and deployed to the Canadaverse preview.

  • 62 mapped IATA regions: 33 unchanged MeshMapper zones plus 29 labelled planning regions, completing all 13 provinces and territories.
  • Province-aware place lookup, shared guide/configurator commands, a browser-local migration comparison with explicit removal review, region profiles and contextual links, weekly upstream-change review, and a maintainer/settings-confirmation workflow. English and French are covered.
  • All nine GitHub checks passed: 835 browser checks, 29 platform-specific skips, and unchanged performance/accessibility budgets.
  • Public verification checked all 131 preview pages, 16 matching assets, real map tiles and real place searches. All 68 hosted regression checks passed on desktop Chromium and mobile WebKit.

Preview artifact: 5e7554e0a3f210643c3b2609eb100006dfeb7e0969e7afa26c3e23cd2c460e56. The previous preview is retained for rollback; no host restart was needed. Production, brokers and radios are untouched.

Review entry points: region map, migration checker in step 4, French map, and ON/QC guide.

The pre-existing production-gateway retirement step remains a production-owner action before merge, as documented in the PR. The new weekly review workflow activates after merge and never publishes boundaries automatically.

@n30nex

n30nex commented Sep 25, 2026

Copy link
Copy Markdown
Member Author

The incorrect gap boundaries are fixed in 9e89b26 and deployed to the Canadaverse preview.

The reported point now resolves to YKF, Goderich to YXU, and Kincardine to YLK. Sudbury remains YSB around Sudbury. Gap assignments now consider all eligible regional centres, including existing MeshMapper regions, instead of making newly added hubs absorb the rest of a province.

Published MeshMapper polygons are unchanged. Added areas remain separate, labelled planning extensions using the nearby IATA code. The map, configurator, profiles and directory distinguish published boundaries from planning areas in English and French. Saved coordinate links carrying the old incorrect YSB assignment cannot generate commands until corrected. The Canada overview and map height are also fixed.

Verification for this exact candidate:

  • 2,584 independent geographic gap checks, named-town regressions, full jurisdiction coverage and input-order independence.
  • All nine GitHub checks green: 883 browser tests passed, 29 platform-specific skips, and unchanged Lighthouse budgets.
  • All 84 hosted browser regressions passed; public verification checked 131 pages and 16 matching assets, plus real map/place-search journeys and the original problem point.
  • Current main's ordered rollout guidance is included; the merge conflict is resolved.

Preview artifact SHA-256: da3a58c4ffaafc79ed52cf9d7b8347f8ea89779b2ea7fa3369e3d5dba5c5697f. Previous preview retained for rollback. No host restart, production deployment, broker change or radio change.

If you copied a configuration for an affected gap location from the previous preview, regenerate and review it. The existing production-gateway retirement step remains an owner action before merge, as documented in the PR.

Preserve MrAlders0n's clarification and align English/French configurator and reference wording. Keep legacy URLs and forwarding commands compatible; cover boundary and shared-IATA cases.
@n30nex

n30nex commented Sep 25, 2026

Copy link
Copy Markdown
Member Author

Folded #112 into this PR at 32ae219e4232204e5d3566e53312eff49341fe78, preserving @MrAlders0n's original 55122f6 commit.

The guide, configurator and reference now use city repeater / edge repeater consistently in English and French. A location on the outer boundary alone stays city mode; edge mode is for regular links between different IATA regions. Ottawa and Gatineau still count as one region (yow), and extra city scopes remain optional.

The preview is deployed and verified at this exact commit. Try the configurator or the updated guide.

  • All nine GitHub checks passed: 895 browser tests, 29 platform-specific skips.
  • 197 local unit tests, 74 focused local browser tests and 88 hosted desktop/mobile regressions passed.
  • All 131 preview pages and 16 key assets were verified; English/French journeys and real searches passed without application errors.
  • Generated commands matched the previous version in 520 combinations. The corrected boundaries and existing links are preserved.

The previous preview is retained for rollback. Production, brokers and radios are unchanged. The production-owner gateway step documented above is still required before merging #108.

@MrAlders0n

Copy link
Copy Markdown
Member

Hey, heads up, we just shipped a proper zones API so you don't have to scrape the homepage anymore: https://wiki.meshmapper.net/zones-api/

https://meshmapper.net/get_zones.php?country=CA gives you every enabled Canadian region (code, name, center, url, whether it has a boundary, and its group). Then hit <url>get_geojson.php for each one to get the boundary as GeoJSON, already lon,lat and closed.

A few things this fixes vs the current fetch script:

  • Disabled zones never show up, so a lookup can't come back empty and kill the whole run.
  • A zone with no drawn boundary comes back with geometry: null instead of erroring.
  • Codes aren't always 3 letters, so I'd drop that check.

It's cached for an hour and has an ETag, so your weekly check is basically free. Let me know if you need anything else in it.

Preserve the shared IATA generator while including neighbour lookup, cleanup choices and expandable explanations in both languages.
Cache public API responses with ETags, review null boundaries and 2-6 character region codes, and preserve the approved map snapshot. Fix polygon labels and prevent background clicks from overwriting selected region names.
@n30nex

n30nex commented Sep 26, 2026

Copy link
Copy Markdown
Member Author

Updated at 5c3d54ba1a1a1cfed857c034f3bdfd2028834340 and deployed to the preview.

@MrAlders0n — the importer now uses the official Zones API, not the homepage or private map endpoints. It follows the returned region URLs, supports 2–6-character codes and null boundaries, and records group metadata. The weekly review caches responses for an hour, uses ETags after expiry, and spaces requests below the shared limit. HTTP errors stop the run without replacing its candidate.

All 33 live API boundaries validated. A second import passed with network requests blocked, confirming cache reuse. The approved map snapshot remains unchanged: the API's shape differences are within its documented rounding precision, and future boundary changes still require review rather than automatic publication.

Also included:

  • Current main, including the newer Clarify city vs edge repeaters in ON/QC scopes proposal #112 neighbour guidance, yes/no cleanup step and collapsible explanations. The merge conflicts are resolved, and the shared command generator is preserved.
  • The outstanding map-label fix: hover and selection use the region name; polygon clicks no longer get overwritten by the background handler. English and French are covered.

All nine GitHub checks passed. CI recorded 930 browser passes, one Firefox navigation test that passed on retry, and 29 platform-specific skips. That Firefox journey then passed three live-preview runs with retries disabled. All 100 hosted desktop/mobile regressions passed, along with verification of 131 public pages and 17 asset hashes.

The previous preview is retained for rollback. Production, brokers and radios are unchanged. #108 remains unmerged pending community discussion and approval, plus the existing production-owner gateway verification. No Discord or forum messages were posted.

Gate personal companion scope changes on the announced Phase 2, preserve standard-settings opt-in, distinguish scope-only output, and clarify Phase 3 and planning assignments in English and French.
@n30nex

n30nex commented Sep 26, 2026

Copy link
Copy Markdown
Member Author

Aligned the rollout guidance at 9a8a594f7a236db70b9291e43bfb5c17a764182b, now deployed to the preview.

  • All six English/French companion-start, companion-flashing and scope-reference pages now keep personal companions unscoped until Phase 2 is announced: January 2027 at the earliest, after repeaters are ready. The date does not automatically activate the change.
  • Bot/MeshMapper city scopes are end-of-Phase-1 work. The optional unscoped hop limit is Phase 3, after Phase 2 and a local announcement.
  • Standard settings remain opt-in, as requested. The configurator now explains when it generates scope commands without the full Phase 1 settings, and shows ON/QC rollout guidance alongside the choice and result.
  • Planning regions/extensions are explicitly separate proposals, not adopted additions to the ON/QC rollout. The command generator and approved boundaries are unchanged.

All nine GitHub checks passed: 967 browser passes, 29 platform-specific skips, no flaky tests. Local checks included 203 unit/helper tests and 72 targeted browser checks.

All 12 focused live-preview checks passed with retries disabled, plus public verification of 131 pages and 17 assets. An initial run hit Cloudflare 502 pages; the origin stayed healthy, affected routes recovered, and the unchanged checks then passed. No server settings or test thresholds were changed.

Previous preview retained for rollback. Production, brokers and radios are unchanged. Community review and the existing production-owner gateway verification remain required before merging.

@n30nex

n30nex commented Sep 26, 2026

Copy link
Copy Markdown
Member Author

The configurator and region map now share the ON/QC proposal's colours, rounded cards, buttons and command-copy controls in both languages and themes. The scope labels use the same blue, green, purple and dashed-neutral styling. This reuses the existing shared design tokens; no new dependency.

Preview is updated to 3d269d93259771fa226f6ac122d4a4877ce2d5bc:

All nine GitHub checks passed. The browser run recorded 989 passes, two mobile Safari timeouts that passed on retry, and 29 platform skips. Both timed-out journeys also passed three hosted repetitions each with retries disabled. The 28 focused hosted language/theme/contrast/rollout checks passed without retries, and public verification matched all 131 pages and 18 key assets with no application errors or CSP violations.

Boundaries, generated commands, rollout guidance and opt-in settings are unchanged. Production is untouched; the previous preview (9a8a594) remains available for rollback. The existing community-review and production-owner deployment gates still apply.

@n30nex

n30nex commented Sep 26, 2026

Copy link
Copy Markdown
Member Author

#114 is incorporated into #108 and deployed to preview at c8844650dc399e92ab48195868c23566ddce41e0.

  • Preserved the upstream English/French five-level proposal, diagrams and examples.
  • Added na alongside can in the shared policy and generator, so the proposal picker, configurator, migration comparison, budgets and map notes agree. All four guide firmware variants carry the new flat scope.
  • Kept both names reserved for later, not companion defaults or automatic U.S. routing. City/edge behavior, opt-in standard settings, rollout phases and all 95 boundary features are unchanged.
  • Labelled the older phone screenshots that omit na; readers are directed to the current commands and the expected na F entry.

All nine CI checks passed: 999 browser passes, four mobile WebKit styling cases that passed on retry after 30-second timeouts, and 29 platform skips. All 32 focused hosted English/French checks passed with retries disabled, including those four styling cases. Public verification matched all 131 pages and 18 assets, with no application errors or CSP violations. The 203 unit/helper tests and 2,584 independent geographic checks also passed.

The previous preview (3d269d9) is retained for rollback. Production was not deployed; the existing community-review and production-owner gates remain in place.

@n30nex

n30nex commented Sep 26, 2026

Copy link
Copy Markdown
Member Author

Quinte feedback addressed in c0e3054; the exact candidate is deployed and verified on preview.

The proposal now uses the shared catalogue for all 24 ON/QC IATA codes, not four hardcoded area choices. Quinte (ytr), Kingston (ygk) and Port Hope (xph) are included. The neighbour selector uses that same catalogue.

The English and French pages now have a city/IATA finder near the top, a scope summary, direct command links and shareable settings. Search failures clear old commands, ambiguous places require a choice, and proposed areas remain labelled. Live Quinte, Belleville and Trenton searches resolve to ytr/on; Gatineau resolves to yow/qc.

Verification: all nine GitHub checks passed, 203 local unit/helper tests passed, all 60 new finder cases passed across six browser configurations, and all 60 focused hosted checks passed with retries disabled. CI had one existing French migration timeout on mobile WebKit that passed on retry; it also passed on preview without retries. Public checks verified 131 pages and 18 asset hashes with no application errors or CSP violations.

No boundary, rollout-phase or production changes. The configurator's standard settings remain opt-in, can/na remain reserved, and the previous preview (c884465) is retained for rollback. #108 is still open; the existing community review and production-owner gateway verification remain pre-merge requirements.

@n30nex

n30nex commented Sep 27, 2026

Copy link
Copy Markdown
Member Author

Implemented the region/proposal UX update and the requested preparation/activation split.

  • The proposal now starts with area and role, with concise English/French guidance for companions, repeater operators and bot/MeshMapper operators.
  • Preparation is the default: named scopes are added/updated, but old entries, wildcard forwarding and the default scope are retained. Activation requires a locally announced, coordinated cutover and fresh confirmation. This supersedes the earlier Phase 1 edge-blocking instructions.
  • Local-region, province and mesh labels are independent; can and na remain reserved. The forwarding example distinguishes a planned activated profile from preparation, where retained scopes and the current wildcard flag may be unknown.
  • Map, proposal and configurator show rollout status separately from published boundaries and local settings. No adoption or maintainer is invented; dated public evidence is required for a rollout record.
  • The existing migration checker and new pasted-output verifier keep data in the browser, flag mismatches, and separate configuration-text checks from radio tests. Preparation checks explicitly ask the operator to compare unchanged settings with the backup.
  • The preview has a bilingual review-only notice. Production and radios are unchanged.

English proposal · Proposition en français · Configurator

Verified candidate: 6c7562e5e8c6b02f62a44a1557c14887cefe9cd9, now served on preview. All nine GitHub checks passed: 207 unit/helper tests and 1,267 browser tests, with 29 platform-specific skips and no final-run flakes. All 56 focused hosted checks passed with retries disabled. Public checks verified 131 pages, 19 asset hashes and real English/French journeys without application errors or CSP violations.

The browser matrix now tests each firmware setup independently, and WebKit jobs use a dedicated worker to avoid contention. Timeouts, retry policy, assertions and performance thresholds are unchanged. The previous preview (c0e3054) is retained for rollback; no server restart was needed.

Please review the revised cutover timing in particular. #108 is still open; a preview deployment is not a rollout announcement. The existing production-owner gateway verification remains a pre-merge requirement.

This branch has not been deployed

No deployments
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.

2 participants