From 44ad63bfab4ad856b3ec317bc22f797e7893eb87 Mon Sep 17 00:00:00 2001 From: MrAlders0n Date: Sun, 2 Aug 2026 09:39:06 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20collision=20cleanup=20no=20longer=20del?= =?UTF-8?q?etes=20=E2=80=94=20excluded=20rows=20age=20to=20inactive?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follows server 26df9c9, which removed Logic 1 (the prefix-overlap duplicate delete) from repeaters_cleanup.php and widened Logic 3 to enabled IN (1,2). Collisions are now handled entirely by the collision system at ingest; nothing is deleted on a 3× stale timer any more. Instead a colliding repeater that goes silent is marked Inactive at repeater_inactive_days (default 30), which drops it out of the recompute's live set — the comparison only considers enabled 1|2 — so its partner is restored on its next advert rather than being pinned at excluded forever. Two user-visible changes, both worth being explicit about: the timeline moves from 72 hours to 30 days, and the outcome from deleted to Inactive. admins.md - dropped the 72-hour row from the lifecycle table and the whole "Duplicate collision cleanup" subsection, including the survivor restore that no longer exists - 3× stale now attributed to pending resolution alone - Repeater Inactive After covers Excluded rows, and says why - Excluded status and Bypass Auto Delete corrected — the latter no longer skips a stale-duplicate delete, but does now hold a partner excluded while it's away duplicaterepeaterid.md - Automatic Cleanup rewritten: nothing is deleted, the survivor returns on its next advert, and a returning repeater is re-excluded if the ID is still ambiguous Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KojjSrgSQQJW7Z8b3eakEA --- docs/admins.md | 19 ++++++------------- docs/duplicaterepeaterid.md | 10 ++++++---- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/docs/admins.md b/docs/admins.md index 0526f97..0743b96 100755 --- a/docs/admins.md +++ b/docs/admins.md @@ -38,7 +38,7 @@ Manage the repeaters database. - **Disabled:** The repeater is hidden from the public map and leaderboards but remains in the database for historical purposes. - **Inactive:** The repeater hasn't sent an advert within the region's **Repeater Inactive After** window (default 30 days) and has been removed from the map. This is non-destructive — the record is retained and returns to Active automatically the next time the repeater adverts and an observer relays it to MeshMapper. Wardrive pings alone will not bring it back. See [Repeater Lifecycle & Cleanup](#repeater-lifecycle-cleanup). - **Pending:** The repeater has been discovered but is awaiting approval. Pending repeaters are **not** visible on the map and do not associate with coverage data. This state is only used when the "New Repeaters Enter Pending State" setting is enabled for the region. Admins can approve a pending repeater by editing it and setting its status to **Active**. Once a pending repeater has existed for 3× the stale timer it is resolved automatically — approved if it has been heard within 1× the stale timer, deleted if it has not. See [Pending repeater resolution](#pending-repeater-resolution). - - **Excluded:** The repeater is flagged as a duplicate. It appears as a **Red** icon on the map. Coverage data is **not** associated with this repeater to prevent skewing statistics (with the exception of **DISCOVERY** type pings). + - **Excluded:** The repeater is flagged as a duplicate. It appears as a **Red** icon on the map. Coverage data is **not** associated with this repeater to prevent skewing statistics (with the exception of **DISCOVERY** type pings). An Excluded repeater that goes silent is eventually marked **Inactive** like any other, which releases the repeater it was colliding with. !!! warning "Duplicate Repeater Persistence" **You cannot force a repeater with a colliding ID to remain Active.** @@ -51,7 +51,7 @@ Manage the repeaters database. - **Neighbours Cleanup:** Reset the neighbours list for any repeater in the region. Useful for clearing stale or incorrect neighbour associations. - **Notes:** Clicking the note icon will allow you to optionally add a note to the repeater. On multiregion admin panels, if a repeater belongs to multiple single regions, notes will be combined and edits will be saved to the individual regions. - **Lock GPS Coordinates:** Enabling this setting will prevent new adverts from a repeater from updating its location. This can be used in instances where the GPS coordinates set on the repeater are incorrect and need to be manually overridden. - - **Bypass Auto Delete:** When enabled on a repeater, every automatic cleanup routine will skip it entirely. The repeater will not be marked inactive, will not be deleted as a stale duplicate, will not be removed as a stale pending repeater, and will not be removed by the [Repeater Retention / Auto-Delete](#repeater-retention-auto-delete-days) purge. This is useful for repeaters that are known to be offline for extended periods but should remain on the map (e.g. seasonal deployments, repeaters in remote locations with intermittent connectivity). + - **Bypass Auto Delete:** When enabled on a repeater, every automatic cleanup routine will skip it entirely. The repeater will not be marked inactive, will not be removed as a stale pending repeater, and will not be removed by the [Repeater Retention / Auto-Delete](#repeater-retention-auto-delete-days) purge. This is useful for repeaters that are known to be offline for extended periods but should remain on the map (e.g. seasonal deployments, repeaters in remote locations with intermittent connectivity). - **Bulk Select & Edit/Delete:** Use the checkboxes on each row (or the "Select All" checkbox in the header) to select multiple repeaters. A toolbar will appear at the bottom of the screen with options to **Edit Selected** or **Delete Selected**. Bulk edit allows you to change Status, Power, Lock GPS, and Notes for all selected repeaters at once — each field has an "Apply" checkbox so you only change the fields you intend to. Works across multi-region admin panels. !!! warning "Bulk Notes" @@ -212,7 +212,6 @@ If the region is set to the defaults, this is what happens to a repeater that st | Elapsed | What happens | Setting | | --- | --- | --- | | 24 hours | Flagged **stale** on the map. Still Active, still collects pings. | Stale Repeater Age | -| 72 hours | Deleted **only if another repeater still shares its ID**. A unique ID is untouched. | Stale Repeater Age × 3 | | 30 days | Marked **Inactive** and hidden from the map. Reversible — returns to Active when it adverts again. | Repeater Inactive After | | Never | Permanently deleted. **Off by default.** | Repeater Retention / Auto-Delete | @@ -226,18 +225,10 @@ Pending repeaters aren't on this timeline at all — see [Pending repeater resol Hours without an advert before a repeater is flagged stale on the map. It stays Active and still collects pings — this is a visual warning only. -The value also sets the **3×** threshold (72 hours by default) used by the two routines below. +The value also sets the **3×** threshold (72 hours by default) used by [pending repeater resolution](#pending-repeater-resolution) below. Lower it for a map that reacts quickly to outages; raise it if your repeaters advert infrequently and healthy ones keep getting flagged. -##### Duplicate collision cleanup - -After 3× the stale age of silence, a repeater is deleted **only if another repeater still shares the leading bytes of its ID**. Silence alone never deletes anything here — a repeater with a unique ID simply carries on toward Inactive. - -If exactly one other repeater shared that ID and the collision had forced it into **Excluded**, it is restored to **Active** with the clean ID. Collisions blocking a legitimate repeater fix themselves once the stale twin is gone. - -[See Duplicate Repeater IDs](https://wiki.meshmapper.net/duplicaterepeaterid/). - ##### Pending repeater resolution Applies only when **New Repeaters Enter Pending State** is on. This clock starts when the repeater was first added, not when it went quiet. @@ -262,10 +253,12 @@ A repeater with **Bypass Auto Delete** is never deleted here, but can still be a **Default: 30. Always on. Non-destructive.** -Days without an advert before a repeater is marked **Inactive** and hidden from the map. +Days without an advert before a repeater is marked **Inactive** and hidden from the map. This applies to **Active** repeaters and to **Excluded** ones (repeaters parked by an ID collision). Nothing is lost — the record, its notes, its history, and its leaderboard contributions all stay. It returns to Active by itself the next time an advert gets through. +Ageing out Excluded repeaters is what unsticks a stale collision: while a colliding repeater is still Excluded it keeps its partner excluded too, and once it goes Inactive it drops out of that comparison and the partner returns to Active on its next advert. See [Duplicate Repeater IDs](https://wiki.meshmapper.net/duplicaterepeaterid/). + Configurable per region (previously fixed at 30 days). !!! example diff --git a/docs/duplicaterepeaterid.md b/docs/duplicaterepeaterid.md index 702e9ef..686efef 100755 --- a/docs/duplicaterepeaterid.md +++ b/docs/duplicaterepeaterid.md @@ -86,14 +86,16 @@ Wardrivers are encouraged to collect data in **Hybrid** mode, which utilizes **D Collisions are typically resolved in one of two ways: ### Automatic Cleanup -Often, a collision occurs because an old, offline repeater is still in the database when a new one comes online. +Often a collision happens because an old, offline repeater is still in the database when a new one comes online. That resolves itself without any admin action. - MeshMapper runs a cleanup routine every day. - - If one of the colliding repeaters has not been heard from in **3× the region's configured Stale Repeater Age** (e.g., 72 hours at the default 24-hour setting), it is considered gone and is automatically deleted. - - **The Survivor**: Once the duplicate ID is removed, the remaining active repeater is automatically restored to **Active** status. Its icon will turn back to normal, it will reappear on Leaderboards, and new incoming pings will properly associate themselves with this repeater again. + - A colliding repeater that hasn't been heard for the region's **Repeater Inactive After** window (default 30 days) is marked **Inactive** and drops off the map. + - **The Survivor**: an Inactive repeater no longer counts as a competing claim on that ID, so the remaining repeater is restored to **Active** on its next advert. Its icon returns to normal, it reappears on leaderboards, and new pings associate with it properly again. + +Neither repeater is deleted. If the silent one comes back on air, it is reactivated — and if the ID is still ambiguous, both are excluded again. !!! tip "Bypass Auto Delete" - If a repeater is known to go offline for extended periods (seasonal deployment, remote location, etc.), administrators can enable **Bypass Auto Delete** on that repeater via the edit modal. This prevents the cleanup routine from removing or deactivating it, even if it hasn't been heard within the stale timer. + If a repeater is known to go offline for extended periods (seasonal deployment, remote location, etc.), administrators can enable **Bypass Auto Delete** on that repeater via the edit modal. This keeps it out of every automatic routine, including the inactive marking above — which also means it will keep its colliding partner excluded while it's away. ### Manual Resolution If both repeaters are active and legitimate (a true collision between two live devices):