Skip to content

Rebrand MeshChat as OrcMesh - #21

Merged
hardcoreerik merged 2 commits into
mainfrom
codex/orcmesh-rebrand
Aug 9, 2026
Merged

Rebrand MeshChat as OrcMesh#21
hardcoreerik merged 2 commits into
mainfrom
codex/orcmesh-rebrand

Conversation

@hardcoreerik

@hardcoreerik hardcoreerik commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Summary

  • rebrand the product and repository-facing metadata from MeshChat to OrcMesh
  • rename the PyInstaller spec and packaged executable to OrcMesh
  • preserve legacy Qt and local-data identifiers so existing settings, logs, chat history, and monitoring history survive upgrades
  • align installer and source-checkout versions at 0.2.0

Verification

  • .venv\Scripts\python.exe -m pytest tests\test_version.py -q — 7 passed
  • .venv\Scripts\python.exe -m pytest -q — 411 passed
  • .venv\Scripts\python.exe -m meshchat --version — OrcMesh 0.2.0
  • .\scripts\build.ps1 -SkipTests — built dist\OrcMesh\OrcMesh.exe
  • packaged OrcMesh.exe --version smoke — exit code 0

Notes

  • Ruff currently reports four pre-existing unused-code findings in tests; this PR does not mix unrelated cleanup into the rebrand.
  • The optional build-script -NoUpx flag is incompatible with spec-file builds; the normal documented release build succeeds.

Summary by CodeRabbit

  • New Release
    • Rebranded the application from MeshChat to OrcMesh across the interface, documentation, installer, builds, and command-line tools.
    • Updated the displayed version to 0.2.0.
    • Renamed the executable, package, console command, and installer outputs to OrcMesh.
    • Preserved legacy local storage and settings paths to support upgrades from previous versions.
  • Documentation
    • Updated setup, usage, licensing, integration, and development materials with the OrcMesh branding.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@hardcoreerik, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 30 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 0b3d990c-9fc9-41bb-903a-fc3a42b18d5f

📥 Commits

Reviewing files that changed from the base of the PR and between b8e9a54 and 6e011c5.

📒 Files selected for processing (2)
  • tests/test_connection_supervisor.py
  • tests/test_monitor_store_settings.py
📝 Walkthrough

Walkthrough

The project is rebranded from MeshChat to OrcMesh across documentation, packaging, development tooling, and runtime UI. Package metadata, console commands, executable names, and fallback versioning now use OrcMesh. Legacy storage identifiers remain unchanged for compatibility.

Changes

OrcMesh rebranding

Layer / File(s) Summary
Documentation and dependency branding
ARCHITECTURE.md, README.md, THIRD_PARTY_LICENSES.md, docs/mcoreimg-integration.md, requirements*.txt
Documentation, integration notes, license notices, and dependency headers now identify OrcMesh.
Package and build identity
packaging/*, pyproject.toml, scripts/*
Package metadata, console commands, installer settings, PyInstaller outputs, and development scripts now target OrcMesh and version 0.2.0.
Runtime and UI branding
src/meshchat/__init__.py, src/meshchat/app.py, src/meshchat/services/*, src/meshchat/ui/*, src/meshchat/version.py
Runtime metadata, CLI output, dialogs, window labels, logs, map titles, and node-history messages now use OrcMesh. MeshChat identifiers remain for settings and storage compatibility.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 16.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the primary change: rebranding MeshChat as OrcMesh.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/orcmesh-rebrand

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
scripts/bootstrap.ps1 (1)

3-12: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Save both PowerShell files with a UTF-8 BOM.

PSScriptAnalyzer reports PSUseBOMForUnicodeEncodedFile for both files. Add a BOM so Windows PowerShell decodes their non-ASCII content consistently.

  • scripts/bootstrap.ps1#L3-L12: Save the bootstrap script as UTF-8 with BOM.
  • scripts/build.ps1#L75-L81: Save the build script as UTF-8 with BOM.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/bootstrap.ps1` around lines 3 - 12, Save both scripts/bootstrap.ps1
lines 3-12 and scripts/build.ps1 lines 75-81 as UTF-8 files with a BOM; no code
changes are required, only update each file’s encoding so Windows PowerShell
consistently decodes its non-ASCII content.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packaging/installer.iss`:
- Around line 20-24: Update the installer script to remove legacy MeshChat
artifacts during in-place upgrades by adding InstallDelete entries for obsolete
files such as MeshChat.exe and the old installation shortcuts. Keep the existing
AppId and current OrcMesh installation entries unchanged, and cover shortcuts
created by the previous MeshChat installer.

In `@scripts/bootstrap.ps1`:
- Line 3: Update the remaining bootstrap status message at the installation
step, including the corresponding occurrence around line 38 and the additional
reported occurrence, replacing “Installing meshchat[dev]...” with OrcMesh
terminology while preserving the existing installation behavior.

In `@scripts/capture_screenshots.py`:
- Around line 70-71: Update the QApplication organization and application names
in the launcher initialization to use the legacy MeshChat/MeshChat Qt settings
identity expected by MainWindow’s default QSettings(). Keep the settings
namespace aligned with src/meshchat/app.py so the window loads the existing
storage.

In `@src/meshchat/app.py`:
- Around line 94-98: Update the screenshot entry-point Qt identity in the app
initialization around setOrganizationName, setApplicationName, and
setApplicationDisplayName: use MeshChat for both organization and application
names, while retaining OrcMesh only as the application display name so default
QSettings() uses the legacy settings location.

---

Outside diff comments:
In `@scripts/bootstrap.ps1`:
- Around line 3-12: Save both scripts/bootstrap.ps1 lines 3-12 and
scripts/build.ps1 lines 75-81 as UTF-8 files with a BOM; no code changes are
required, only update each file’s encoding so Windows PowerShell consistently
decodes its non-ASCII content.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d24306ed-1838-44a7-8537-8916eab89ade

📥 Commits

Reviewing files that changed from the base of the PR and between ed3b26b and b8e9a54.

📒 Files selected for processing (23)
  • ARCHITECTURE.md
  • README.md
  • THIRD_PARTY_LICENSES.md
  • docs/mcoreimg-integration.md
  • packaging/installer.iss
  • packaging/orcmesh.spec
  • pyproject.toml
  • requirements-dev.txt
  • requirements.txt
  • scripts/bootstrap.ps1
  • scripts/build.ps1
  • scripts/capture_screenshots.py
  • scripts/fetch_vendors.py
  • scripts/run-dev.ps1
  • scripts/test.ps1
  • src/meshchat/__init__.py
  • src/meshchat/app.py
  • src/meshchat/services/app_logging.py
  • src/meshchat/services/monitor_store.py
  • src/meshchat/ui/main_window.py
  • src/meshchat/ui/map/web/index.html
  • src/meshchat/ui/nodes/nodes_page.py
  • src/meshchat/version.py

Comment thread packaging/installer.iss
Comment on lines +20 to +24
#define MyAppName "OrcMesh"
#define MyAppVersion "0.2.0"
#define MyAppPublisher "hardcoreerik"
#define MyAppURL "https://github.com/hardcoreerik/MeshChat-Windows"
#define MyAppExeName "MeshChat.exe"
#define MyAppURL "https://github.com/hardcoreerik/OrcMesh"
#define MyAppExeName "OrcMesh.exe"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Repo files matching installer.iss:\n'
fd -a 'installer\.iss$' . || true

printf '\n.gitignore or uninstall-related mentions:\n'
rg -n "Delete|DeleteRegKey|RegDelete|Del |del |MeshChat|OrcMesh|AppId|Uninstall" -S . --glob '!node_modules' --glob '!dist' --glob '!build' --glob '!*.png' --glob '!*.jpg' | head -200

if [ -f packaging/installer.iss ]; then
  printf '\npackaging/installer.iss outline/size:\n'
  wc -l packaging/installer.iss
  sed -n '1,140p' packaging/installer.iss | nl -ba
fi

Repository: hardcoreerik/OrcMesh

Length of output: 17066


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'packaging/installer.iss contents:\n'
sed -n '1,120p' packaging/installer.iss || cat packaging/installer.iss

printf '\nRead-only verifier for Inno Setup uninstall/delete directives:\n'
python3 - <<'PY'
from pathlib import Path
text = Path('packaging/installer.iss').read_text()
for section in ['[Files]', '[Icons]', '[Run]', '[Registry]', '[UninstallDelete]', '[UninstallRun]']:
    print(f'{section}: ' + str(section.strip('[]') in text))
PY

Repository: hardcoreerik/OrcMesh

Length of output: 3513


🌐 Web query:

Inno Setup upgrade behavior AppId unchanged existing files old shortcuts not removed

💡 Result:

In Inno Setup, the AppId directive is the primary identifier used to maintain the relationship between installations [1][2]. When you keep the AppId the same across versions, Inno Setup treats the new installation as an upgrade to the existing one [1][2]. This behavior is intentional and generally correct for software updates [1][3]. Regarding your observations: 1. Existing Files: Inno Setup does not automatically remove files from a previous installation if they are not part of the new installer's file list [4][1]. It simply installs the new files over the old ones [3]. If you have files that were present in an older version but are no longer needed in the new version, they will remain in the installation directory [4][1]. To handle this, you should use the [InstallDelete] section to explicitly list any obsolete files that need to be removed during the upgrade process [4][1][5]. Avoid using wildcards in this section to prevent accidental deletion of user data or system files [6][3]. 2. Old Shortcuts: If shortcuts (icons) from an old version are not being updated or removed, verify that the [Icons] section entries in your new script match those of the old script. Inno Setup is designed to overwrite existing shortcuts if the name and location match. If you have renamed or removed an icon entry from the [Icons] section, it will not be automatically deleted from the user's system by the installer [6]. To remove old shortcuts that are no longer part of your application, you must include them in the [InstallDelete] section or, more commonly, handle their cleanup via custom Pascal scripting during the install process if necessary [6][5]. 3. Best Practices for Upgrades: - Always keep the AppId consistent across updates for the same application [1][2]. - Set DisableDirPage=auto and DisableProgramGroupPage=auto in the [Setup] section [1]. This ensures the installer defaults to the previous installation path and prevents confusion during upgrades [1]. - Do not attempt to uninstall the previous version before installing the new one; simply installing over the existing files is the standard, recommended approach for Inno Setup [1][3]. - If you find that files are persisting after uninstallation, ensure that the files were actually installed by the Inno Setup installer. Inno Setup's uninstaller only removes files that it tracked during the installation process [6]. If you have files created by the application at runtime (like logs or user data), these will not be removed by default [6]. If you ever intend for a new version to be installed side-by-side with an older one rather than upgrading it, you must change the AppId to a new, unique value for the new installer [7][8].

Citations:


Remove legacy MeshChat files and shortcuts during upgrades.

AppId is unchanged, so this installs over an existing MeshChat installation. Inno Setup does not remove obsolete files or shortcuts that are not part of the current installer script. Add InstallDelete entries for obsolete files such as MeshChat.exe, and clean up old shortcuts if the previous installation created them. Test an in-place upgrade from a previous MeshChat installation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packaging/installer.iss` around lines 20 - 24, Update the installer script to
remove legacy MeshChat artifacts during in-place upgrades by adding
InstallDelete entries for obsolete files such as MeshChat.exe and the old
installation shortcuts. Keep the existing AppId and current OrcMesh installation
entries unchanged, and cover shortcuts created by the previous MeshChat
installer.

Comment thread scripts/bootstrap.ps1
<#
.SYNOPSIS
Bootstrap the MeshChat development environment.
Bootstrap the OrcMesh development environment.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Update the remaining bootstrap status text.

The banner now says OrcMesh, but Line 38 still prints Installing meshchat[dev].... Change the status text to use OrcMesh.

Also applies to: 12-12

🧰 Tools
🪛 PSScriptAnalyzer (1.25.0)

[warning] Missing BOM encoding for non-ASCII encoded file 'bootstrap.ps1'

(PSUseBOMForUnicodeEncodedFile)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/bootstrap.ps1` at line 3, Update the remaining bootstrap status
message at the installation step, including the corresponding occurrence around
line 38 and the additional reported occurrence, replacing “Installing
meshchat[dev]...” with OrcMesh terminology while preserving the existing
installation behavior.

Comment on lines +70 to +71
app.setOrganizationName("OrcMesh")
app.setApplicationName("OrcMesh")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== files =="
git ls-files | sed -n '1,120p'

echo "== locate target files =="
fd -a 'capture_screenshots\.py|app\.py|main_window\.py|project\.py' . | sed 's#^\./##'

echo "== relevant snippets =="
if [ -f scripts/capture_screenshots.py ]; then
  wc -l scripts/capture_screenshots.py
  sed -n '1,140p' scripts/capture_screenshots.py | cat -n
fi

echo "== app.py references =="
if [ -f src/meshchat/app.py ]; then
  wc -l src/meshchat/app.py
  sed -n '1,140p' src/meshchat/app.py | cat -n
fi

echo "== main_window QSettings references =="
if [ -f src/meshchat/ui/main_window.py ]; then
  wc -l src/meshchat/ui/main_window.py
  sed -n '250,290p' src/meshchat/ui/main_window.py | cat -n
  rg -n "QSettings|settings|sync|write|read" src/meshchat/ui/main_window.py
fi

echo "== qt organizationName/applicationName usages =="
rg -n "setOrganizationName|setApplicationName|setApplicationDisplayName|setOrganizationDomain|QSettings\(" -S .

Repository: hardcoreerik/OrcMesh

Length of output: 23735


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== MainWindow settings keys and write path =="
sed -n '268,770p' src/meshchat/ui/main_window.py | cat -n
rg -n "_SETTINGS_KEY|QSettings|settings\.value|settings\.setValue|restoreGeometry|saveGeometry" src/meshchat/ui/main_window.py -C 3

Repository: hardcoreerik/OrcMesh

Length of output: 28295


Preserve the legacy Qt settings identity in scripts/capture_screenshots.py.

MainWindow uses default QSettings() and expects the MeshChat/MeshChat namespace; setting OrcMesh/OrcMesh for this launcher loads a different settings storage before the window is constructed. Keep the launcher aligned with src/meshchat/app.py unless isolated screenshot settings are intentional.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/capture_screenshots.py` around lines 70 - 71, Update the QApplication
organization and application names in the launcher initialization to use the
legacy MeshChat/MeshChat Qt settings identity expected by MainWindow’s default
QSettings(). Keep the settings namespace aligned with src/meshchat/app.py so the
window loads the existing storage.

Comment thread src/meshchat/app.py
Comment on lines +94 to +98
# Keep the legacy Qt identity so upgrades retain existing settings.
app.setOrganizationName("MeshChat")
app.setOrganizationDomain("meshtastic.org")
app.setApplicationName("MeshChat")
app.setApplicationDisplayName("OrcMesh")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 3 \
  'setOrganizationName|setApplicationName|setApplicationDisplayName' \
  --glob '*.py' src scripts

Repository: hardcoreerik/OrcMesh

Length of output: 1286


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '--- candidate files ---\n'
git ls-files | rg '(^scripts/capture_screenshots\.py$|^src/meshchat/app\.py$|settings|QSettings|org\.meshtastic|Meshtastic|app\.py$|capture_screenshots)'

printf '\n--- capture_screenshots.py outline ---\n'
ast-grep outline scripts/capture_screenshots.py --view compact || true

printf '\n--- capture_screenshots.py relevant lines ---\n'
cat -n scripts/capture_screenshots.py | sed -n '1,180p'

printf '\n--- src/meshchat/app.py relevant lines ---\n'
cat -n src/meshchat/app.py | sed -n '1,160p'

printf '\n--- QSettings usages ---\n'
rg -n -C 3 'QSettings|settings\.ini|app\.sync|sync\(\)|value\(|setValue\(' --glob '*.py' src scripts

Repository: hardcoreerik/OrcMesh

Length of output: 249


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- candidate files ---'
git ls-files | rg '(^scripts/capture_screenshots\.py$|^src/meshchat/app\.py$|settings|QSettings|org\.meshtastic|Meshtastic|app\.py$|capture_screenshots)' || true

printf '%s\n' ''
printf '%s\n' '--- capture_screenshots.py outline ---'
ast-grep outline scripts/capture_screenshots.py --view compact || true

printf '%s\n' ''
printf '%s\n' '--- capture_screenshots.py relevant lines ---'
cat -n scripts/capture_screenshots.py | sed -n '1,180p'

printf '%s\n' ''
printf '%s\n' '--- src/meshchat/app.py relevant lines ---'
cat -n src/meshchat/app.py | sed -n '1,160p'

printf '%s\n' ''
printf '%s\n' '--- QSettings usages ---'
rg -n -C 3 'QSettings|settings\.ini|app\.sync|sync\(\)|value\(|setValue\(' --glob '*.py' src scripts || true

Repository: hardcoreerik/OrcMesh

Length of output: 31820


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- main_window settings constants and usages ---'
cat -n src/meshchat/ui/main_window.py | sed -n '1,55p'
cat -n src/meshchat/ui/main_window.py | sed -n '260,290p'
cat -n src/meshchat/ui/main_window.py | sed -n '755,770p'

printf '%s\n' ''
printf '%s\n' '--- map settings usages ---'
cat -n src/meshchat/ui/map/map_widget.py | sed -n '1,30p'
cat -n src/meshchat/ui/map/map_widget.py | sed -n '140,160p'

printf '%s\n' ''
printf '%s\n' '--- exact QSettings() and explicit group searches ---'
rg -n -C 2 'QSettings\(\)|QSettings\(|settings\.value\(|settings\.setValue\(' --glob '*.py' src scripts tests

Repository: hardcoreerik/OrcMesh

Length of output: 8535


Keep the screenshot entry point on the legacy Qt organization.

src/meshchat/ui/main_window.py and src/meshchat/ui/map/map_widget.py read/write default QSettings() under MeshChat. scripts/capture_screenshots.py uses the same default QSettings() path but sets both organization and application names to OrcMesh, so it may create or miss settings intended for the app. Set the script to MeshChat for organization/application names and keep only the display name as OrcMesh.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/meshchat/app.py` around lines 94 - 98, Update the screenshot entry-point
Qt identity in the app initialization around setOrganizationName,
setApplicationName, and setApplicationDisplayName: use MeshChat for both
organization and application names, while retaining OrcMesh only as the
application display name so default QSettings() uses the legacy settings
location.

@hardcoreerik
hardcoreerik merged commit ab75322 into main Aug 9, 2026
3 checks passed
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.

1 participant