From 551d8ed84420f83b030e4e4c7a7b89c8ce1931da Mon Sep 17 00:00:00 2001 From: MrAlders0n Date: Fri, 25 Sep 2026 14:42:49 -0400 Subject: [PATCH 1/2] Add a yes/no question to the clear old regions step --- docs/assets/javascripts/scopes-picker.js | 25 ++++++++ docs/assets/styles/scopes-proposal.css | 73 +++++++++++++++++++++++- docs/proposals/onqc-scopes.fr.md | 40 ++++++++++--- docs/proposals/onqc-scopes.md | 39 ++++++++++--- 4 files changed, 162 insertions(+), 15 deletions(-) diff --git a/docs/assets/javascripts/scopes-picker.js b/docs/assets/javascripts/scopes-picker.js index 05b8b87..943ef04 100644 --- a/docs/assets/javascripts/scopes-picker.js +++ b/docs/assets/javascripts/scopes-picker.js @@ -48,6 +48,31 @@ }); }); + // "Any old regions?" question: show only the branch that matches the answer. + var ask = document.querySelector("[data-scp-ask]"); + if (ask) { + var choices = ask.querySelectorAll("[data-scp-choice]"); + var branches = document.querySelectorAll("[data-scp-branch]"); + branches.forEach(function (branch) { + branch.hidden = true; + }); + choices.forEach(function (choice) { + choice.addEventListener("click", function () { + var answer = choice.getAttribute("data-scp-choice"); + choices.forEach(function (other) { + other.setAttribute("aria-pressed", String(other === choice)); + }); + branches.forEach(function (branch) { + branch.hidden = branch.getAttribute("data-scp-branch") !== answer; + }); + }); + }); + ask.hidden = false; + document.querySelectorAll("[data-scp-ask-nojs]").forEach(function (note) { + note.hidden = true; + }); + } + if (!picker) return; var area = picker.querySelector("[data-scp-area]"); diff --git a/docs/assets/styles/scopes-proposal.css b/docs/assets/styles/scopes-proposal.css index ce56e42..e887195 100644 --- a/docs/assets/styles/scopes-proposal.css +++ b/docs/assets/styles/scopes-proposal.css @@ -838,10 +838,81 @@ override the hidden attribute. Keep hidden things hidden. */ .md-typeset .scp-picker[hidden], .md-typeset .scp-picker [hidden], -.md-typeset .scp-card [hidden] { +.md-typeset .scp-card [hidden], +.md-typeset .scp-ask[hidden], +.md-typeset .scp-branch[hidden], +.md-typeset [data-scp-ask-nojs][hidden] { display: none; } +/* ---------- Yes/No question (old regions) ---------- */ + +.md-typeset .scp-ask { + margin: var(--mc-space-4) 0 var(--mc-space-6); + padding: var(--mc-space-4); + border: 1px solid var(--mc-color-border); + border-radius: var(--mc-radius-lg); + background: + linear-gradient(135deg, var(--scp-city-bg), transparent 70%), + var(--mc-color-surface-raised); + box-shadow: var(--mc-shadow-1); +} + +.md-typeset .scp-ask__q { + margin: 0 0 var(--mc-space-3); + font-weight: 700; +} + +.md-typeset .scp-ask__choices { + display: flex; + flex-wrap: wrap; + gap: var(--mc-space-2); +} + +.md-typeset .scp-choice { + flex: 1 1 10rem; + padding: 0.6rem var(--mc-space-3); + border: 1px solid var(--mc-color-border); + border-radius: var(--mc-radius-md); + background: var(--mc-color-surface); + color: var(--mc-color-text); + font: inherit; + font-weight: 650; + cursor: pointer; +} + +.md-typeset .scp-choice:hover { + border-color: var(--scp-city); +} + +.md-typeset .scp-choice[aria-pressed="true"] { + border-color: var(--scp-city); + background: var(--scp-city-bg); + color: var(--scp-city); + box-shadow: inset 0 0 0 1px var(--scp-city); +} + +.md-typeset .scp-choice:focus-visible { + outline: 3px solid var(--mc-color-focus); + outline-offset: 2px; +} + +.md-typeset .scp-branch[data-scp-branch="clean"] { + margin: var(--mc-space-4) 0 var(--mc-space-6); + padding: var(--mc-space-3) var(--mc-space-4); + border-left: 0.25rem solid var(--scp-ok); + border-radius: var(--mc-radius-sm); + background: var(--scp-ok-bg); +} + +.md-typeset .scp-branch[data-scp-branch="clean"] > :first-child { + margin-top: 0; +} + +.md-typeset .scp-branch[data-scp-branch="clean"] > :last-child { + margin-bottom: 0; +} + .scp-picker__field { display: grid; gap: 0.35rem; diff --git a/docs/proposals/onqc-scopes.fr.md b/docs/proposals/onqc-scopes.fr.md index 0e65a4e..f6c609b 100644 --- a/docs/proposals/onqc-scopes.fr.md +++ b/docs/proposals/onqc-scopes.fr.md @@ -17,9 +17,9 @@ destructive: false search: exclude: true page_styles: - - assets/styles/scopes-proposal.css?v=20260924-4 + - assets/styles/scopes-proposal.css?v=20260925-1 page_scripts: - - assets/javascripts/scopes-picker.js?v=20260924-3 + - assets/javascripts/scopes-picker.js?v=20260925-1 --- # Proposition de portées de région ON/QC @@ -425,14 +425,38 @@ par afficher ce qui s’y trouve :
  1. region
+ + +
+ Vérifiez ensuite la réponse : - **Seulement `*^ F` :** le répéteur n’a pas d’anciennes régions. Rien à - effacer, passez à l’étape 3. -- **D’autres noms aussi**, comme `can`, `on-alg` ou `ott` : retirez chacun - sauf `*` avec `region remove `, un à la fois, en commençant par la ligne - la plus en retrait. Lancez ensuite `region save`, puis `region` de nouveau - pour vérifier. Par exemple, l’ancienne configuration d’Ottawa : + effacer, passez à l’[étape 3](#etape-3-reglages-standard-de-meshcore-canada). +- **D’autres noms aussi**, comme `can`, `on-alg` ou `ott` : retirez-les comme + indiqué ci-dessous. + +
+ + + +
+ +Retirez chaque nom sauf `*` avec `region remove `, un à la fois, en +commençant par la ligne la plus en retrait. Lancez ensuite `region save`, puis +`region` de nouveau pour vérifier. Par exemple, l’ancienne configuration +d’Ottawa :

Exemple : l’ancienne configuration d’Ottawa

@@ -458,6 +482,8 @@ Quand vous avez terminé, `region` devrait afficher seulement `*^ F`.
+
+ ### Étape 3 : Réglages standard de MeshCore Canada
diff --git a/docs/proposals/onqc-scopes.md b/docs/proposals/onqc-scopes.md index b9ca938..67384cc 100644 --- a/docs/proposals/onqc-scopes.md +++ b/docs/proposals/onqc-scopes.md @@ -17,9 +17,9 @@ destructive: false search: exclude: true page_styles: - - assets/styles/scopes-proposal.css?v=20260924-4 + - assets/styles/scopes-proposal.css?v=20260925-1 page_scripts: - - assets/javascripts/scopes-picker.js?v=20260924-3 + - assets/javascripts/scopes-picker.js?v=20260925-1 --- # ON/QC region scopes proposal @@ -399,14 +399,37 @@ avoid conflicts, remove any old ones first. Start by listing what is there:
  1. region
+ + +
+ Then check the reply: - **Only `*^ F`:** the repeater has no old regions. Nothing to clear, go to - step 3. -- **Other names as well**, such as `can`, `on-alg` or `ott`: remove each one - except `*` with `region remove `, one at a time, starting with the most - indented line. Then run `region save`, and `region` again to check. For - example, the old Ottawa layout: + [step 3](#step-3-standard-meshcore-canada-settings). +- **Other names as well**, such as `can`, `on-alg` or `ott`: remove them as + shown below. + +
+ + + +
+ +Remove each name except `*` with `region remove `, one at a time, +starting with the most indented line. Then run `region save`, and `region` +again to check. For example, the old Ottawa layout:

Example: the old Ottawa layout

@@ -431,6 +454,8 @@ Removing `on` and `can` is fine too. Step 4 adds them back. When you are done,
+
+ ### Step 3: Standard MeshCore Canada settings
From e12f72b88a5f47060516bf4f3eb8e44ad2d4bce2 Mon Sep 17 00:00:00 2001 From: MrAlders0n Date: Fri, 25 Sep 2026 15:05:32 -0400 Subject: [PATCH 2/2] Collapse optional explanations in ON/QC scopes proposal --- docs/assets/styles/scopes-proposal.css | 17 +++++++++ docs/proposals/onqc-scopes.fr.md | 48 +++++++++++++++++++++++++- docs/proposals/onqc-scopes.md | 48 +++++++++++++++++++++++++- 3 files changed, 111 insertions(+), 2 deletions(-) diff --git a/docs/assets/styles/scopes-proposal.css b/docs/assets/styles/scopes-proposal.css index e887195..7f9f0f3 100644 --- a/docs/assets/styles/scopes-proposal.css +++ b/docs/assets/styles/scopes-proposal.css @@ -1112,3 +1112,20 @@ grid-template-columns: repeat(3, minmax(0, 1fr)); } } + +/* ---------- Optional explanations (collapsed) ---------- */ + +.md-typeset details.scp-more { + border-color: var(--mc-color-border); + font-size: inherit; + box-shadow: none; +} + +.md-typeset details.scp-more > summary { + background: var(--mc-color-surface-raised); + font-size: 0.85rem; +} + +.md-typeset details.scp-more > summary::before { + background-color: var(--mc-color-text-muted); +} diff --git a/docs/proposals/onqc-scopes.fr.md b/docs/proposals/onqc-scopes.fr.md index f6c609b..47c8ea9 100644 --- a/docs/proposals/onqc-scopes.fr.md +++ b/docs/proposals/onqc-scopes.fr.md @@ -17,7 +17,7 @@ destructive: false search: exclude: true page_styles: - - assets/styles/scopes-proposal.css?v=20260925-1 + - assets/styles/scopes-proposal.css?v=20260925-2 page_scripts: - assets/javascripts/scopes-picker.js?v=20260925-1 --- @@ -133,6 +133,9 @@ Quand un message arrive, le répéteur compare le code à sa liste. ## Comment un répéteur décide +
+Afficher l’explication + Voici un répéteur d’Ottawa configuré selon cette proposition, et ce qu’il fait avec cinq messages différents. @@ -182,6 +185,9 @@ Quatre détails piègent souvent : rien d’autre. Les messages avec portée fonctionnent seulement une fois les répéteurs du trajet configurés. +
+ + ## Les quatre niveaux
@@ -235,6 +241,9 @@ Québec ». ### Pourquoi des codes d’aéroport? +
+Afficher l’explication + - Ce sont les mêmes codes que MeshMapper utilise déjà, par exemple `yow.meshmapper.net`. - MeshCore utilise déjà les codes d’aéroport ailleurs, par exemple pour le @@ -251,12 +260,18 @@ Québec ». La première fois, écrivez toujours le code avec son secteur, par exemple `yow` (secteur Ottawa–Gatineau), pour que les gens l’apprennent. +
+ + ## Lire `region def yow|* on|* onqc|* can` Cette section s’adresse aux propriétaires de répéteurs qui veulent comprendre la commande. Vous pouvez la sauter : l’étape 4 de la phase 1 donne les commandes exactes à entrer. +
+Afficher le fonctionnement de la commande + `region def` construit la liste d’un répéteur en une ligne. La commande garde un **curseur** qui part du sommet, `*`. Chaque nom est créé sous le curseur, et `|*` ramène le curseur au sommet. @@ -306,6 +321,9 @@ jamais ceux qui existent déjà. Lancez `region` ensuite pour voir la liste complète.
+ + + ## Ordre de déploiement Suivez cet ordre. Chaque phase commence seulement quand la précédente est @@ -493,6 +511,9 @@ Quand vous avez terminé, `region` devrait afficher seulement `*^ F`.

Ces commandes sont pour un répéteur de ville du secteur d’Ottawa avec le micrologiciel 1.16 ou plus récent. Activez JavaScript pour les adapter à votre répéteur.

+
+Que font ces commandes? +
path.hash.mode 2
Utilise des identifiants de répéteur de 3 octets dans les chemins, pour que moins de répéteurs partagent un identifiant. Exige le micrologiciel 1.14 ou plus récent.
advert.interval 240
Annonce ce répéteur à ses voisins directs toutes les 4 heures.
@@ -500,6 +521,8 @@ Quand vous avez terminé, `region` devrait afficher seulement `*^ F`.
flood.max 16
Aucune diffusion ne fait plus de 16 sauts, avec ou sans portée.
+
+ Ces réglages s’enregistrent d’eux-mêmes. Pas besoin de `region save`. Si une commande répond `Err - ??`, votre micrologiciel n’a pas ce réglage; passez-la. @@ -527,6 +550,9 @@ Ces commandes suivent vos réponses de l’étape 1. Lancez-les dans l’ordre.

Ces commandes sont pour un répéteur de ville du secteur d’Ottawa avec le micrologiciel 1.16 ou plus récent. Activez JavaScript pour les adapter à votre répéteur.

+
+Que font ces commandes? +
region def / region put
Porter votre ville, votre province, onqc et can.
region allowf * / region denyf *
Les répéteurs de ville relaient les messages sans portée (déjà permis par défaut, réglé pour que vous le voyiez). Les répéteurs de bordure les rejettent.
@@ -534,6 +560,8 @@ Ces commandes suivent vos réponses de l’étape 1. Lancez-les dans l’ordre.
region save
Conserve les réglages de région après un redémarrage.
+
+
@@ -579,6 +607,9 @@ se place sur `*`. Vous pouvez l’ignorer. ### Permettre ou rejeter : aide-mémoire +
+Afficher l’aide-mémoire + | Commande | Effet | | --- | --- | | `region allowf ` | Relayer les messages portant ce nom | @@ -587,6 +618,9 @@ se place sur `*`. Vous pouvez l’ignorer. | `set flood.max.unscoped ` | Une limite de sauts séparée pour les messages sans portée. Elle compte seulement si elle est plus basse que `flood.max`. `0` a le même effet que `region denyf *`. | | `region save` | À lancer après chaque `allowf` ou `denyf` | +
+ + ### Robots et MeshMapper Ceci se fait à la fin de la phase 1, une fois que les répéteurs autour de vous @@ -732,6 +766,9 @@ nom de votre nœud et la version de l’application. ### Pourquoi l’appareil compagnon utilise `onqc` par défaut +
+Afficher l’explication + On ne peut pas choisir la portée d’un seul message privé. Quand un MP n’a pas encore de chemin connu, il est diffusé avec votre **portée par défaut**. La réponse qui indique le chemin à votre appareil compagnon revient avec la portée par @@ -771,6 +808,9 @@ l’étape 2 de la configuration de l’appareil compagnon les règle sur votre ville.
+ + + ## Phase 3 : Seulement au besoin Si les messages sans portée sont encore trop bruyants dans une ville après la @@ -781,6 +821,9 @@ que c’est annoncé pour votre ville. ## Qui reçoit quoi +
+Afficher les exemples + Quand les répéteurs de bordure rejettent les messages sans portée, un nouvel utilisateur qui n’a pas encore réglé de portée joint quand même tout le monde dans sa ville. Ses messages ne passent simplement pas dans la ville voisine. @@ -839,6 +882,9 @@ C’est pourquoi les robots et MeshMapper devraient avoir la portée de leur vil ils restent contenus quoi qu’il arrive, et les nouveaux utilisateurs qui n’ont pas encore réglé de portée fonctionnent quand même localement. +
+ + ## À savoir - **Les messages avec portée ont environ 10 caractères de moins.** diff --git a/docs/proposals/onqc-scopes.md b/docs/proposals/onqc-scopes.md index 67384cc..b7f9710 100644 --- a/docs/proposals/onqc-scopes.md +++ b/docs/proposals/onqc-scopes.md @@ -17,7 +17,7 @@ destructive: false search: exclude: true page_styles: - - assets/styles/scopes-proposal.css?v=20260925-1 + - assets/styles/scopes-proposal.css?v=20260925-2 page_scripts: - assets/javascripts/scopes-picker.js?v=20260925-1 --- @@ -122,6 +122,9 @@ the repeater checks the code against its list. ## How a repeater decides +
+Show the explanation + Here is an Ottawa repeater under this proposal, and what it does with five different messages. @@ -169,6 +172,9 @@ Four details catch people out: nothing else. Scoped messages only work once the repeaters along the way are set up. +
+ + ## The four levels
@@ -221,6 +227,9 @@ Québec mesh". ### Why airport codes? +
+Show the explanation + - They are the same codes MeshMapper already uses, for example `yow.meshmapper.net`. - MeshCore already uses airport codes elsewhere, such as the @@ -235,11 +244,17 @@ Québec mesh". Always write the code with its area the first time, for example `yow` (Ottawa / NCR area), so people learn it. +
+ + ## Reading `region def yow|* on|* onqc|* can` This section is for repeater owners who want to understand the command. You can skip it: step 4 of Phase 1 gives you the exact commands to type. +
+Show how the command works + `region def` builds a repeater's list in one line. It keeps a **cursor** that starts at the top, `*`. Each name is created under the cursor, and `|*` jumps the cursor back to the top. @@ -288,6 +303,9 @@ the cursor back to the top. there. Run `region` afterwards to see the full list. +
+ + ## Rollout order Do this in order. Each phase starts only once the one before it is done, and @@ -465,6 +483,9 @@ Removing `on` and `can` is fine too. Step 4 adds them back. When you are done,

These commands are for an Ottawa-area city repeater on firmware 1.16 or newer. Turn on JavaScript to match them to your repeater.

+
+What do these commands do? +
path.hash.mode 2
Uses 3-byte repeater IDs in message paths, so fewer repeaters share an ID. Needs firmware 1.14 or newer.
advert.interval 240
Announces this repeater to direct neighbours every 4 hours.
@@ -472,6 +493,8 @@ Removing `on` and `can` is fine too. Step 4 adds them back. When you are done,
flood.max 16
No flood message travels more than 16 hops, scoped or not.
+
+ These save by themselves. No `region save` is needed for them. If a command answers `Err - ??`, your firmware does not have that setting, so skip it. @@ -499,6 +522,9 @@ These follow your answers in step 1. Run them in order.

These commands are for an Ottawa-area city repeater on firmware 1.16 or newer. Turn on JavaScript to match them to your repeater.

+
+What do these commands do? +
region def / region put
Carry your city, your province, onqc and can.
region allowf * / region denyf *
City repeaters forward messages with no scope (on by default, set so you can see it). Edge repeaters drop them.
@@ -506,6 +532,8 @@ These follow your answers in step 1. Run them in order.
region save
Keeps the region settings after a reboot.
+
+
@@ -551,6 +579,9 @@ ignore it. ### Allow or drop, quick reference +
+Show the quick reference + | Command | What it does | | --- | --- | | `region allowf ` | Forward messages with that name | @@ -559,6 +590,9 @@ ignore it. | `set flood.max.unscoped ` | A separate hop limit for messages with no scope. It only matters when it is lower than `flood.max`. `0` has the same effect as `region denyf *`. | | `region save` | Always run it after `allowf` or `denyf` | +
+ + ### Bots and MeshMapper This comes at the end of Phase 1, once the repeaters around you carry your @@ -700,6 +734,9 @@ the exact limit, and it can vary with your node name and app version. ### Why the companion default is `onqc` +
+Show the explanation + You cannot pick a scope for a single direct message. When a DM has no known path yet, it floods using your **default scope**. The reply that tells your companion the path comes back using **your contact's** default scope. @@ -737,6 +774,9 @@ companion the path comes back using **your contact's** default scope. companion setup sets those to your city.
+ + + ## Phase 3: Only if needed If messages with no scope are still too noisy inside a city after Phase 2, @@ -746,6 +786,9 @@ Messages with no scope then stop after 3 hops. Scoped messages still reach ## Who hears what +
+Show the examples + With edge repeaters dropping messages with no scope, a new user who hasn't set a scope yet still reaches everyone in their own city. Their messages just don't cross into the next city. Here is the Ottawa to Montréal link through @@ -803,6 +846,9 @@ This is why bots and MeshMapper should be scoped to their city: they stay contained no matter what, and new users who haven't set a scope yet still work locally. +
+ + ## Things to know - **Scoped messages are about 10 characters shorter.** The app lowers the