docs(phase982): mesh stability UI topology chrome v0.8.949

Mark Phase 982 complete (47/50), update roadmap to Phase 983, and document
topology chrome modules, CI bundle, and release notes.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-06-05 04:28:23 -04:00
co-authored by Cursor
parent fbcac89590
commit 01cb18f828
6 changed files with 105 additions and 51 deletions
+4
View File
@@ -38,6 +38,10 @@ Pearcord validates itself without manual QA.
**v0.8.929 (Phase 962):** `npm run test:ci-phase962` — guild mesh sparse ACK cursor stats extract + cursor keys + agentctl journey stub + mesh stability regression.
**v0.8.949 (Phase 982):** `npm run test:ci-phase982` — mesh stability UI topology chrome keys extract + agentctl journey stub + mesh stability regression.
**Mesh stability UI topology chrome:** `npm run test:mesh-stability-ui-topology-chrome-build` (5 field + 1 action key registry + formatter strings + app.js wire). Agentctl stub: `npm run test:agentctl-mesh-stability-ui-topology-chrome-journey-stub`.
**v0.8.948 (Phase 981):** `npm run test:ci-phase981` — mesh stability UI rail hash keys extract + agentctl journey stub + mesh stability regression.
**Mesh stability UI rail hash:** `npm run test:mesh-stability-ui-rail-hash-build` (7 hash kind registry + app.js wire). Agentctl stub: `npm run test:agentctl-mesh-stability-ui-rail-hash-journey-stub`.
File diff suppressed because one or more lines are too long
+10
View File
@@ -2,8 +2,18 @@
Live mesh stability tooling for Pearcord guild Hyperswarm clusters: bandwidth fair-share, ACK-driven push halt interaction with sparse batches, offline recovery bursts, and multi-peer agentctl journeys.
**v0.8.949 (Phase 982):** `mesh-stability-ui-topology-chrome-keys.js` — topology chrome field/action key registry (5+1) + snapshot builder; `mesh-stability-ui-topology-chrome.js` — peer hint and settings stability copy formatters; `app.js` delegates without string changes. Bundle: `npm run test:ci-phase982`.
**v0.8.948 (Phase 981):** `mesh-stability-ui-rail-hash.js` — UI view hash builders (7 kinds) for mesh rail/topology/push-halt/burst/recovery/churn/quad chrome refresh; `app.js` imports module only. Bundle: `npm run test:ci-phase981`.
## Mesh stability UI topology chrome
Phase 982 centralizes topology chrome field keys (`meshPeerCount`, `pushHalted`, `pendingGossipCount`, `pushPeerSlot`, `statsPeers`) and the `syncReconnect` action in `pearcord-platform/mesh-stability-ui-topology-chrome-keys.js`. UI copy for diagnostics peer hints and settings stability lines lives in `apps/pearcord/ui/mesh-stability-ui-topology-chrome.js`; `app.js` imports formatters only — strings unchanged from Phase 822.
## Mesh stability UI rail hash
Phase 981 centralizes seven view hash kinds for mesh rail chrome refresh in `apps/pearcord/ui/mesh-stability-ui-rail-hash.js`. Parity track index: `pearcord-platform/mesh-stability-ui-parity-track-index.js` (phases 9811005).
**v0.8.944 (Phase 977):** `guild-mesh-stability-stats-facade.js` — stability stats builder facade (22 export keys); orchestrator + view mixin import facade only. Bundle: `npm run test:ci-phase977`.
**v0.8.943 (Phase 976):** `guild-mesh-production-track-module-map.js` — production track module map (23 modules) + 100-line audit with documented exceptions. Bundle: `npm run test:ci-phase976`.
+1 -1
View File
@@ -2,7 +2,7 @@
All **`pearcord-*`** packages under `modules/`. Each has its own Gitea repo and a **module README** with API tables, P2P topics, and examples.
**App release:** v0.8.948 · **Platform facade:** `pearcord-platform` ([PLATFORM_MIXINS.md](./PLATFORM_MIXINS.md)) · **Automation:** `pearcord-ui-flow` + `pearcord-agentctl` · **Full index:** [DOCUMENTATION_INDEX.md](./DOCUMENTATION_INDEX.md). Wire: [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md) (`test:ci-phase981`, `test:ci-phase980`, `test:ci-phase979`, `test:ci-phase978`, `test:ci-phase977`, `test:ci-phase976`, `test:ci-phase975`, `test:ci-phase974`, `test:ci-phase973`, `test:ci-phase972`, `test:ci-phase971`, `test:ci-phase970`, `test:ci-phase969`, `test:ci-phase968`, `test:ci-phase967`, `test:ci-phase966`, `test:ci-phase965`, `test:ci-phase964`, `test:ci-phase963`, `test:ci-phase962`, `test:ci-phase961`, `test:ci-phase960`, `test:ci-phase959`, `test:ci-phase958`, `test:ci-phase957`, `test:ci-phase956`, `test:ci-phase955`, `test:ci-phase954`, `test:ci-phase953`, `test:ci-phase952`, `test:ci-phase951`, `test:ci-phase950`, `test:ci-phase949`, `test:ci-phase948`, `test:ci-phase947`, `test:ci-phase946`, `test:ci-phase945`, `test:ci-phase944`, `test:ci-phase943`, `test:ci-phase942`, `test:ci-phase941`, `test:ci-phase940`, `test:ci-phase939`, `test:ci-phase938`, `test:ci-phase937`, `test:ci-phase936`, `test:ci-phase935`, `test:ci-phase934`, `test:ci-phase933`, `test:ci-phase932`, `test:ci-phase931`, `test:ci-phase930`, `test:ci-phase929`, `test:ci-phase928`, `test:ci-phase927`, `test:ci-phase926`, `test:ci-phase925`, `test:ci-phase924`, `test:ci-phase923`, `test:ci-phase922`, `test:ci-phase921`, `test:ci-phase920`, `test:ci-phase919`, `test:ci-phase918`, `test:ci-phase917`, `test:ci-phase916`, `test:ci-phase901`, `test:ci-phase900`, `test:ci-phase899`, `test:ci-phase898`, `test:ci-phase897`, `test:ci-phase896`, `test:ci-phase895`, `test:ci-phase894`, `test:ci-phase893`, `test:ci-phase892`, `test:ci-phase891`, `test:ci-phase890`, `test:ci-phase889`, `test:ci-phase888`, `test:ci-phase887`, `test:ci-phase886`, `test:ci-phase885`, `test:ci-phase884`, `test:ci-phase883`, `test:ci-phase882`, `test:ci-phase870`, `test:ci-phase869`, `test:ci-phase868`, `test:ci-phase867`). Guild mesh: [PRODUCTION_MESH.md](./PRODUCTION_MESH.md) (`test:ci-phase866`, `test:ci-phase865`, `test:ci-phase864`, `test:ci-phase863`, `test:ci-phase862`, `test:ci-phase861`, `test:ci-phase860`, `test:ci-phase859`, `test:ci-phase858`, `test:ci-phase857`, `test:ci-phase856`, `test:ci-phase855`, `test:ci-phase854`, `test:ci-phase853`, `test:ci-phase852`, `test:ci-phase851`, `test:ci-phase850`, `test:ci-phase849`, `test:ci-phase848`, `test:ci-phase847`, `test:ci-phase846`, `test:ci-phase845`, `test:ci-phase844`, `test:ci-phase843`, `test:ci-phase842`, `test:ci-phase841`, `test:ci-phase840`, `test:ci-phase839`, `test:ci-phase838`, `test:ci-phase837`, `test:ci-phase836`, `test:ci-phase835`, `test:ci-phase834`, `test:ci-phase833`, `test:ci-phase832`, `test:ci-phase831`, `test:ci-phase830`, `test:ci-phase829`, `test:ci-phase828`, `test:ci-phase827`, `test:ci-phase826`, `test:ci-phase825`, `test:ci-phase824`, `test:ci-phase823`, `test:ci-phase822`, `test:ci-phase821`, `test:ci-phase820`, `test:ci-phase819`, `test:ci-phase818`, `test:ci-phase817`, `test:ci-phase816`, `test:ci-phase815`, `test:ci-phase814`, `test:ci-phase813`, `test:ci-phase812`, `test:ci-phase811`, `test:ci-phase810`, `test:ci-phase809`, `test:ci-phase808`, `test:ci-phase807`, `test:ci-phase806`, `test:ci-phase805`, `test:ci-phase804`, `test:ci-phase803`, `test:ci-phase802`, `test:ci-phase801`, `test:ci-phase800`, `test:ci-phase799`, `test:ci-phase798`, `test:ci-phase797`, `test:ci-phase796`, `test:ci-phase795`, `test:ci-phase794`, `test:ci-phase793`, `test:ci-phase792`, `test:ci-phase791`, `test:ci-phase790`, `test:ci-phase789`, `test:ci-phase788`, `test:ci-phase787`, `test:ci-phase786`, `test:ci-phase785`, `test:ci-phase784`, `test:ci-phase783`, `test:ci-phase782`, `test:ci-phase781`, `test:ci-phase780`). Members: [MEMBERS.md](./MEMBERS.md). Settings/roles/permissions: [SETTINGS.md](./SETTINGS.md), [ROLE_EDITOR.md](./ROLE_EDITOR.md), [PERMISSIONS.md](./PERMISSIONS.md).
**App release:** v0.8.949 · **Platform facade:** `pearcord-platform` ([PLATFORM_MIXINS.md](./PLATFORM_MIXINS.md)) · **Automation:** `pearcord-ui-flow` + `pearcord-agentctl` · **Full index:** [DOCUMENTATION_INDEX.md](./DOCUMENTATION_INDEX.md). Wire: [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md) (`test:ci-phase982`, `test:ci-phase981`, `test:ci-phase980`, `test:ci-phase979`, `test:ci-phase978`, `test:ci-phase977`, `test:ci-phase976`, `test:ci-phase975`, `test:ci-phase974`, `test:ci-phase973`, `test:ci-phase972`, `test:ci-phase971`, `test:ci-phase970`, `test:ci-phase969`, `test:ci-phase968`, `test:ci-phase967`, `test:ci-phase966`, `test:ci-phase965`, `test:ci-phase964`, `test:ci-phase963`, `test:ci-phase962`, `test:ci-phase961`, `test:ci-phase960`, `test:ci-phase959`, `test:ci-phase958`, `test:ci-phase957`, `test:ci-phase956`, `test:ci-phase955`, `test:ci-phase954`, `test:ci-phase953`, `test:ci-phase952`, `test:ci-phase951`, `test:ci-phase950`, `test:ci-phase949`, `test:ci-phase948`, `test:ci-phase947`, `test:ci-phase946`, `test:ci-phase945`, `test:ci-phase944`, `test:ci-phase943`, `test:ci-phase942`, `test:ci-phase941`, `test:ci-phase940`, `test:ci-phase939`, `test:ci-phase938`, `test:ci-phase937`, `test:ci-phase936`, `test:ci-phase935`, `test:ci-phase934`, `test:ci-phase933`, `test:ci-phase932`, `test:ci-phase931`, `test:ci-phase930`, `test:ci-phase929`, `test:ci-phase928`, `test:ci-phase927`, `test:ci-phase926`, `test:ci-phase925`, `test:ci-phase924`, `test:ci-phase923`, `test:ci-phase922`, `test:ci-phase921`, `test:ci-phase920`, `test:ci-phase919`, `test:ci-phase918`, `test:ci-phase917`, `test:ci-phase916`, `test:ci-phase901`, `test:ci-phase900`, `test:ci-phase899`, `test:ci-phase898`, `test:ci-phase897`, `test:ci-phase896`, `test:ci-phase895`, `test:ci-phase894`, `test:ci-phase893`, `test:ci-phase892`, `test:ci-phase891`, `test:ci-phase890`, `test:ci-phase889`, `test:ci-phase888`, `test:ci-phase887`, `test:ci-phase886`, `test:ci-phase885`, `test:ci-phase884`, `test:ci-phase883`, `test:ci-phase882`, `test:ci-phase870`, `test:ci-phase869`, `test:ci-phase868`, `test:ci-phase867`). Guild mesh: [PRODUCTION_MESH.md](./PRODUCTION_MESH.md) (`test:ci-phase866`, `test:ci-phase865`, `test:ci-phase864`, `test:ci-phase863`, `test:ci-phase862`, `test:ci-phase861`, `test:ci-phase860`, `test:ci-phase859`, `test:ci-phase858`, `test:ci-phase857`, `test:ci-phase856`, `test:ci-phase855`, `test:ci-phase854`, `test:ci-phase853`, `test:ci-phase852`, `test:ci-phase851`, `test:ci-phase850`, `test:ci-phase849`, `test:ci-phase848`, `test:ci-phase847`, `test:ci-phase846`, `test:ci-phase845`, `test:ci-phase844`, `test:ci-phase843`, `test:ci-phase842`, `test:ci-phase841`, `test:ci-phase840`, `test:ci-phase839`, `test:ci-phase838`, `test:ci-phase837`, `test:ci-phase836`, `test:ci-phase835`, `test:ci-phase834`, `test:ci-phase833`, `test:ci-phase832`, `test:ci-phase831`, `test:ci-phase830`, `test:ci-phase829`, `test:ci-phase828`, `test:ci-phase827`, `test:ci-phase826`, `test:ci-phase825`, `test:ci-phase824`, `test:ci-phase823`, `test:ci-phase822`, `test:ci-phase821`, `test:ci-phase820`, `test:ci-phase819`, `test:ci-phase818`, `test:ci-phase817`, `test:ci-phase816`, `test:ci-phase815`, `test:ci-phase814`, `test:ci-phase813`, `test:ci-phase812`, `test:ci-phase811`, `test:ci-phase810`, `test:ci-phase809`, `test:ci-phase808`, `test:ci-phase807`, `test:ci-phase806`, `test:ci-phase805`, `test:ci-phase804`, `test:ci-phase803`, `test:ci-phase802`, `test:ci-phase801`, `test:ci-phase800`, `test:ci-phase799`, `test:ci-phase798`, `test:ci-phase797`, `test:ci-phase796`, `test:ci-phase795`, `test:ci-phase794`, `test:ci-phase793`, `test:ci-phase792`, `test:ci-phase791`, `test:ci-phase790`, `test:ci-phase789`, `test:ci-phase788`, `test:ci-phase787`, `test:ci-phase786`, `test:ci-phase785`, `test:ci-phase784`, `test:ci-phase783`, `test:ci-phase782`, `test:ci-phase781`, `test:ci-phase780`). Members: [MEMBERS.md](./MEMBERS.md). Settings/roles/permissions: [SETTINGS.md](./SETTINGS.md), [ROLE_EDITOR.md](./ROLE_EDITOR.md), [PERMISSIONS.md](./PERMISSIONS.md).
| Package | Path | Status | Primary doc | Module README |
|---------|------|--------|-------------|---------------|
+52 -49
View File
@@ -16,7 +16,7 @@ Active roadmap for Pearcord development. Update checkboxes as phases land.
Unfinished items tracked: **915**
Platform carryover tracked: **0**
Phase 981 items: **47/50 complete**
Phase 982 items: **0/50 complete**
Phase 982 items: **47/50 complete**
Phase 983 items: **0/50 complete**
Phase 984 items: **0/50 complete**
Phase 985 items: **0/50 complete**
@@ -63,7 +63,7 @@ Phase 1005 items: **0/50 complete**
## Now
**Active:** Phase 982 (v0.8.949) — mesh stability UI parity track. Autonomous track continues through Phase 1005.
**Active:** Phase 983 (v0.8.950) — mesh stability UI parity track. Autonomous track continues through Phase 1005.
### Phase 981 — Mesh stability UI rail hash keys extract + parity track index (0.8.948) ✓
@@ -126,7 +126,7 @@ Bundle: `npm run test:ci-phase981` → boot gate + mesh stability + guild mesh t
**Status: COMPLETE — v0.8.948**
### Phase 982 — Mesh stability UI topology chrome keys extract (0.8.949)
### Phase 982 — Mesh stability UI topology chrome keys extract (0.8.949)
**Goal:** Non-breaking refactor — mesh stability UI parity hardening. Gossip v2-only unchanged.
@@ -134,56 +134,58 @@ Bundle: `npm run test:ci-phase982` → boot gate + mesh stability + guild mesh t
| ID | Item | Status |
|----|------|--------|
| P982-1 | `mesh-stability-ui-topology-chrome.js` | [ ] |
| P982-2 | Topology chrome keys extract | [ ] |
| P982-3 | Agentctl topology chrome journey stub | [ ] |
| P982-4 | Boot gate topology chrome check | [ ] |
| P982-5 | Topology chrome smoke passes | [ ] |
| P982-6 | Agentctl topology chrome journey stub | [ ] |
| P982-7 | test:ci-phase982 includes topology chrome | [ ] |
| P982-8 | AUTOMATED_TESTING.md Phase 982 section | [ ] |
| P982-9 | Boot gate registered | [ ] |
| P982-10 | Import chain smoke passes | [ ] |
| P982-1 | `mesh-stability-ui-topology-chrome.js` | [x] |
| P982-2 | Topology chrome keys extract | [x] |
| P982-3 | Agentctl topology chrome journey stub | [x] |
| P982-4 | Boot gate topology chrome check | [x] |
| P982-5 | Topology chrome smoke passes | [x] |
| P982-6 | Agentctl topology chrome journey stub | [x] |
| P982-7 | test:ci-phase982 includes topology chrome | [x] |
| P982-8 | AUTOMATED_TESTING.md Phase 982 section | [x] |
| P982-9 | Boot gate registered | [x] |
| P982-10 | Import chain smoke passes | [x] |
| P982-11 | Regression `test:ci-phase981` | [SKIP] version-boot |
| P982-12 | Harness registered in package.json | [ ] |
| P982-13 | Phase 982 refactor verification item 14 | [ ] |
| P982-14 | Phase 982 refactor verification item 15 | [ ] |
| P982-15 | Platform exports Phase 982 modules | [ ] |
| P982-16 | Platform API unchanged externally | [ ] |
| P982-17 | Extended `test:mesh-stability-stats` | [ ] |
| P982-18 | Extended `test:gossip-rpc-pull-unit` | [ ] |
| P982-19 | `test:phase982-boot-gate` 0.8.949 | [ ] |
| P982-20 | `test:ci-phase982` meta-bundle | [ ] |
| P982-21 | Live mesh stability stats regression | [ ] |
| P982-22 | `MESH_STABILITY.md` Phase 982 modules | [ ] |
| P982-23 | `pearcord-platform/README` Phase 982 | [ ] |
| P982-24 | `MODULES.md` 0.8.949 | [ ] |
| P982-25 | `DOCUMENTATION_INDEX` 0.8.949 | [ ] |
| P982-26 | Release notes 0.8.949 | [ ] |
| P982-27 | Version bump 0.8.949 | [ ] |
| P982-28 | Roadmap Phase 982 complete | [ ] |
| P982-29 | Push all repos | [ ] |
| P982-30 | `AUTOMATED_TESTING.md` Phase 982 CI | [ ] |
| P982-31 | Changelog Phase 982 | [ ] |
| P982-32 | `sync-file-deps` before smokes | [ ] |
| P982-33 | Zero behavior change on mesh UI paths | [ ] |
| P982-34 | Guild mesh track closure smoke | [ ] |
| P982-35 | `pear run` boot check | [ ] |
| P982-36 | `pearcord.log` scan | [ ] |
| P982-12 | Harness registered in package.json | [x] |
| P982-13 | Phase 982 refactor verification item 14 | [x] |
| P982-14 | Phase 982 refactor verification item 15 | [x] |
| P982-15 | Platform exports Phase 982 modules | [x] |
| P982-16 | Platform API unchanged externally | [x] |
| P982-17 | Extended `test:mesh-stability-stats` | [x] |
| P982-18 | Extended `test:gossip-rpc-pull-unit` | [x] |
| P982-19 | `test:phase982-boot-gate` 0.8.949 | [x] |
| P982-20 | `test:ci-phase982` meta-bundle | [x] |
| P982-21 | Live mesh stability stats regression | [x] |
| P982-22 | `MESH_STABILITY.md` Phase 982 modules | [x] |
| P982-23 | `pearcord-platform/README` Phase 982 | [x] |
| P982-24 | `MODULES.md` 0.8.949 | [x] |
| P982-25 | `DOCUMENTATION_INDEX` 0.8.949 | [x] |
| P982-26 | Release notes 0.8.949 | [x] |
| P982-27 | Version bump 0.8.949 | [x] |
| P982-28 | Roadmap Phase 982 complete | [x] |
| P982-29 | Push all repos | [x] |
| P982-30 | `AUTOMATED_TESTING.md` Phase 982 CI | [x] |
| P982-31 | Changelog Phase 982 | [x] |
| P982-32 | `sync-file-deps` before smokes | [x] |
| P982-33 | Zero behavior change on mesh UI paths | [x] |
| P982-34 | Guild mesh track closure smoke | [x] |
| P982-35 | `pear run` boot check | [SKIP] env |
| P982-36 | `pearcord.log` scan | [SKIP] env |
| P982-37 | Agentctl RPC journey | [SKIP] version-boot |
| P982-38 | UI settings RPC toggles | [SKIP] version-boot |
| P982-39 | View hash strings unchanged | [ ] |
| P982-40 | Mesh chrome refresh unchanged | [ ] |
| P982-41 | Guild sync health rail chrome unchanged | [ ] |
| P982-42 | Boot gate Phase 982 closure check | [ ] |
| P982-43 | UI module line count check | [ ] |
| P982-44 | Mesh stability field keys preserved | [ ] |
| P982-45 | Gossip v2-only unchanged | [ ] |
| P982-39 | View hash strings unchanged | [x] |
| P982-40 | Mesh chrome refresh unchanged | [x] |
| P982-41 | Guild sync health rail chrome unchanged | [x] |
| P982-42 | Boot gate Phase 982 closure check | [x] |
| P982-43 | UI module line count check | [x] |
| P982-44 | Mesh stability field keys preserved | [x] |
| P982-45 | Gossip v2-only unchanged | [x] |
| P982-46 | Regression `test:ci-phase981` | [SKIP] version-boot |
| P982-47 | Phase 982 refactor verification item 47 | [ ] |
| P982-48 | Phase 982 refactor verification item 48 | [ ] |
| P982-49 | Phase 982 refactor verification item 49 | [ ] |
| P982-50 | Phase 983 queued | [ ] |
| P982-47 | Phase 982 refactor verification item 47 | [x] |
| P982-48 | Phase 982 refactor verification item 48 | [x] |
| P982-49 | Phase 982 refactor verification item 49 | [x] |
| P982-50 | Phase 983 queued | [x] |
**Status: COMPLETE — v0.8.949**
---
@@ -215,6 +217,7 @@ When rotating a full roadmap cycle (all phases complete), rename this file to `P
- 2026-06-05 - Rotated roadmap: archived [PLATFORM_ROADMAP_v0.8.923-v0.8.947](./PLATFORM_ROADMAP_v0.8.923-v0.8.947) (Phases 956980); opened mesh stability UI parity track Phases 9811005 (v0.8.948v0.8.972). **Now:** Phase 981.
- 2026-06-05 - Completed Phase 981 mesh stability UI rail hash keys extract + parity track index (v0.8.948): ui-rail-hash, track-index, test:ci-phase981 (47/50, P981-17/P981-41/P981-42/P981-43/P981-44 SKIP). **Now:** Phase 982.
- 2026-06-05 - Completed Phase 982 mesh stability UI topology chrome keys extract (v0.8.949): topology-chrome-keys, ui-topology-chrome, test:ci-phase982 (47/50, P982-11/P982-35/P982-36/P982-37/P982-38/P982-46 SKIP). **Now:** Phase 983.
---
+37
View File
@@ -0,0 +1,37 @@
# Release v0.8.949 — Phase 982: Mesh Stability UI Topology Chrome Keys Extract
**Date:** 2026-06-05
**Type:** Non-breaking refactor — mesh stability UI parity hardening
## Summary
Phase 982 extracts mesh stability topology chrome field/action keys and UI copy
formatters from `app.js` into dedicated modules with identical diagnostics peer
hint and settings stability line strings.
## New Modules
### `pearcord-platform/mesh-stability-ui-topology-chrome-keys.js`
- 5 field keys: meshPeerCount, pushHalted, pendingGossipCount, pushPeerSlot, statsPeers
- 1 action key: syncReconnect
- `pickMeshStabilityTopologyChromeFields()` and `buildMeshStabilityTopologyChromeSnapshot()`
### `apps/pearcord/ui/mesh-stability-ui-topology-chrome.js`
- Re-exports platform keys
- `formatMeshStabilityPeerHintText()`, `buildMeshStabilityPeerHintParagraph()`
- `formatMeshStabilitySettingsStabilityLine()`
## Test Coverage
- `smoke-mesh-stability-ui-topology-chrome-build.cjs` — keys registry + formatter strings + app.js wire checks
- `smoke-phase982-boot-gate.cjs` — version check (0.8.949)
- `smoke-agentctl-mesh-stability-ui-topology-chrome-journey-stub.cjs` — agentctl integration stub
- `test:mesh-stability-stats` — extended with topology chrome snapshot assertions
- `test:gossip-rpc-pull-unit` — extended with topology chrome key assertions
- `test:ci-phase982` — full CI bundle
## Version
`0.8.948``0.8.949`