Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
238ed28
refactor(ui): streamline component templates and styles for improved …
Sep 5, 2026
6586c98
refactor(ui): integrate Svelte ConfirmDialog and improve map componen…
Sep 5, 2026
aae4aa5
feat(ui): add Svelte support with new feature modules and integrate S…
Sep 5, 2026
7781283
feat(forwarder): implement forwarding feature with Svelte component a…
Sep 5, 2026
87090d5
refactor(ui): remove unused components and update routing to Svelte f…
Sep 5, 2026
8170d61
refactor(major): vue+js -> svelte+ts and various cleanup and changes …
Sep 5, 2026
a7e5d1a
feat(conversation): add share contact and telemetry history modals, e…
Sep 5, 2026
65b6ed4
refactor(major): more migrations and updates
Sep 5, 2026
1172f76
feat(refactor): migrate archives feature to Svelte components, includ…
Sep 5, 2026
259e5b5
refactor: update SPDX license headers and update code documentation a…
Sep 5, 2026
bfcbbe2
refactor: rewrite and update license
Sep 5, 2026
02fd05d
refactor: update licensing information and various refactors and migr…
Sep 5, 2026
1d40eab
refactor: update frontend build process with chunk size budget checks…
Sep 5, 2026
a2abb48
migrate(call): add svelte/ts call management components including act…
Sep 5, 2026
6274e7f
migrate(call): svelte/ts CallPage and related components for call man…
Sep 5, 2026
f41aca4
migrate(all): complete migration to svelte/ts (the motherlode of a co…
Sep 5, 2026
ec32010
refactor: update Svelte configuration to use .mjs extension and adjus…
Sep 5, 2026
57c7fa3
refactor: standardize border styles across call components and update…
Sep 5, 2026
00959d2
refactor: major frontend overhaul to Svelte/TS, improve backend maint…
Sep 5, 2026
434fed6
refactor: transition frontend from Vue to Svelte, update related docu…
Sep 5, 2026
257be3d
refactor: implement new Svelte components for app shell, including he…
Sep 5, 2026
3aa09a8
refactor: clean up and standardize Svelte component code, improving r…
Sep 5, 2026
5c6885d
localization: update translations for delivery help tips, map data, a…
Sep 5, 2026
68b4bd2
refactor: various refactors and updates to codebase, moving things fr…
Sep 5, 2026
ce8df0e
refactor: update documentation and conventions for agent structure
Sep 6, 2026
78185a2
chore: update WASM integrity hashes for geo-wasm and visualiser-wasm
Sep 6, 2026
f8ab677
refactor: migrate ChannelPromptModal to svelte and update tests
Sep 6, 2026
ac1c98f
chore: remove unused dependency comment from requirements.txt
Sep 6, 2026
c4499aa
chore: update docs
Sep 6, 2026
76757e5
chore: update package.json and pnpm-lock.yaml to remove Vue dependenc…
Sep 6, 2026
26ac33d
chore: remove Vue dependencies from configuration files and update re…
Sep 6, 2026
a761002
chore: update licenses and third-party notices, removing outdated ent…
Sep 6, 2026
d9eaecc
chore: remove Vue components and related files, transitioning to Svel…
Sep 6, 2026
451b4c2
refactor: update documentation and conventions for agent structure
Sep 6, 2026
91d5b2f
chore: simplify plugin array formatting in vite.config.js for better …
Sep 6, 2026
c450513
chore: drop Vue DevTools env and Svelte-only tooling leftovers
Sep 6, 2026
86844d7
fix: clear typecheck:features strict errors after Vue removal
Sep 6, 2026
8ee4f36
chore: scrub leftover Vue wording from frontend comments
Sep 6, 2026
8f46bf2
chore: refresh licenses and SPDX mapper after Vue removal
Sep 6, 2026
1b3a2e6
docs: drop vue-tsc from contributor lint guidance
Sep 6, 2026
bdd9e89
test: retarget shell contracts away from Vue wording
Sep 6, 2026
47819b6
feat: add Japanese, Korean, and Polish UI locale packs
Sep 6, 2026
9374608
chore: update pre-commit configuration to include Svelte file types f…
Sep 6, 2026
255910b
chore: update pre-commit script to reflect Svelte file types
Sep 6, 2026
3ee5ab3
fix: update comments to reflect Svelte terminology in middleware
Sep 6, 2026
3f11d1e
feat: restore relay chat room reorder and hub sidebar actions
Sep 6, 2026
fc16afd
feat: add map drop import, remote overlays, and telemetry trails
Sep 6, 2026
7cf52bb
feat: add conversation lightbox context menu and viewer extracts
Sep 6, 2026
d86f719
feat: extract nomad browser data, downloads, and path finder helpers
Sep 6, 2026
ae93c58
fix: persist web UI IP allowlist through server security API
Sep 6, 2026
d66aee0
fix: gate I2P interface add on transport mode and uniqueness
Sep 6, 2026
dba8364
feat: add Brazilian Portuguese, Turkish, and Ukrainian UI locales
Sep 6, 2026
9dd4b8a
refactor: trim unused app-shell imports and parameters
Sep 6, 2026
eb9a122
refactor: replace JSDoc with TypeScript types across frontend modules
Sep 6, 2026
808ccb0
test: expand svelte shell migration regression coverage
Sep 6, 2026
ade104c
chore: refresh WASM SRI digests and feature module LOC caps
Sep 6, 2026
d9bc341
chore: enable prettier cache and eslint concurrency in lint hooks
Sep 6, 2026
8977532
fix: parse map tile ZXY path segments without regex
Sep 6, 2026
27b2b21
refactor: rename shell navigation tokens to generation counters
Sep 6, 2026
b25717c
fix: harden toast i18n key detection and icon size parsing
Sep 6, 2026
f1e2767
chore: add oxlint gate and browser/e2e Task targets
Sep 6, 2026
7500681
feat: add core OpenAPI UI contract and Schemathesis hook
Sep 6, 2026
8a8e1fe
fix: harden SQLite closed-connection detection and Ruff cleanups
Sep 6, 2026
44acac7
fix: treat ignored-only oxlint pre-commit runs as success
Sep 6, 2026
09b97ad
fix: stop PageOutlet remount loops and harden shell chrome
Sep 6, 2026
05b9ae6
feat: improve messages audio decode, emoji picker, and reaction drag
Sep 6, 2026
aa2a90c
fix: restore Nomad crash-tab host and renderer chip states
Sep 6, 2026
65bf65c
fix: improve Relay Chat mobile header and member drawers
Sep 6, 2026
4d3f7c1
fix: harden map layer controls and OpenLayers service wiring
Sep 6, 2026
0905e3d
fix: restore call overlay minimize bar and byte counters
Sep 6, 2026
379fb5c
fix: extract battery settings UI and harden plugin settings cards
Sep 6, 2026
24c51ec
fix: tighten interfaces docs navigation and filename sanitizers
Sep 6, 2026
5268fc2
fix: route network visualiser opens through aspect-aware navigation
Sep 6, 2026
1a27673
fix: polish archives, bots, filesync, RNCP, and tools Svelte pages
Sep 6, 2026
8d78723
test: add Vitest browser smoke and Playwright Electron harness
Sep 6, 2026
a7d1274
docs: document oxlint, OpenAPI, and browser/Electron test targets
Sep 6, 2026
f4f852a
test: expand page and shell migration regression coverage
Sep 6, 2026
f8117ec
build(deps): update Python uv lock and requirements
Sep 6, 2026
ac08a35
build(deps): update pnpm dependencies and add vis-util
Sep 6, 2026
4c0e89e
chore(changelog): reset to 5.0.0 and document Svelte/TS migration
Sep 6, 2026
c88a136
ci: add next branch triggers to workflows
Sep 6, 2026
de5d8dc
fix(nomad): call onrenderdone when crash tab render is done and posted
Sep 6, 2026
cc6a787
fix(build): ignore es5-ext postinstall to unblock pnpm install --froz…
Sep 6, 2026
33447ba
fix(build): add es5-ext to pnpm allowBuilds so install --frozen-lockf…
Sep 6, 2026
2c279f5
ci(frontend): raise chunk budgets for CallPage, shared-async and vend…
Sep 6, 2026
bf4a4c1
chore(licenses): regenerate embedded license artifacts for updated deps
Sep 6, 2026
f8c77eb
fix(frontend): work around svelte-check 4.7.6 --tsconfig parser bug u…
Sep 6, 2026
5d4d407
style(licenses): prettier format regenerated license json
Sep 6, 2026
d023ba5
fix(backend): add missing public API re-exports for path_probe, rnx/r…
Sep 6, 2026
5928450
test(backend): update module-ownership fixture to match current backe…
Sep 6, 2026
8ba9e8f
fix(frontend): wrap state-initial prop reads in closures to clear sve…
Sep 6, 2026
a2ceccf
fix(next): backport security, build, and reactivity fixes from master
Sep 8, 2026
78a3554
fix(next): resolve frontend and backend CI regressions for Svelte mig…
Sep 8, 2026
1e5c71f
merge: master into next for 4.9.0 catch-up
Sep 13, 2026
bf464f5
feat(backend): port master lifecycle config, flood lock, and reload o…
Sep 13, 2026
cc6d378
feat(backend): port database route upload limits and error handling
Sep 13, 2026
4ac4626
fix(rrc): port oversized resource notice fallback and atomic hub saves
Sep 13, 2026
b55bcfc
refactor(ui): back modal, dialogs, and toggles with bits-ui primitives
Sep 13, 2026
d881cff
fix(bots): unify lxmf config types with form module
Sep 13, 2026
0592e3a
feat(translator): port bergamot offline translation frontend to svelte
Sep 13, 2026
02c6994
refactor(ui): replace manual outside-click listeners with runed
Sep 13, 2026
09da1ae
refactor(ui): persist interface filters and debounce contact search w…
Sep 13, 2026
e871d11
feat(backend): port master http route hardening and nomad ws ordering
Sep 13, 2026
65453a1
feat(bots): port bot setup page to svelte
Sep 13, 2026
b872327
feat(relay): port bots and search views to svelte
Sep 13, 2026
41ea42c
feat(map): port map tab context menu to svelte
Sep 13, 2026
368e56e
feat(micron-editor): port publish site modal to svelte
Sep 13, 2026
da8018f
refactor(ui): share colour picker and extract color utils
Sep 13, 2026
c3f5fbe
test(frontend): cover ported svelte bot, relay, and micron components
Sep 13, 2026
d068b0a
fix(frontend): satisfy strict svelte-check across shared modules
Sep 13, 2026
1fc01a9
refactor(bots): drop superseded start modal after setup page port
Sep 13, 2026
aef64d2
fix(bots): re-export normalize_rrc_bot_config from package init
Sep 13, 2026
7736b43
test(settings): assert screen security switch via aria-checked
Sep 13, 2026
7ffa46b
refactor(ui): replace remaining manual listeners with runed
Sep 13, 2026
570c189
fix(frontend): isolate ws event handler errors and show sandbox abi
Sep 13, 2026
a8b55ec
test(contracts): match canonical ws origin rejection literal
Sep 13, 2026
86e247b
test(frontend): retire stale vue-era and pinia-era test harnesses
Sep 13, 2026
4fb8e3e
feat: port dev 4.9.1 backend, packaging, and tooling deltas
Sep 13, 2026
234a6ab
fix(backend): repair route-package name resolution and stale patch ta…
Sep 13, 2026
c52684c
fix(backend): restore self-test isolated checks and env access contract
Sep 13, 2026
b98ad6b
feat(nomad): port image policy, crash tab teleport, and list context
Sep 13, 2026
59e26ad
feat(messages): port conversation resync and relay dev fixes
Sep 13, 2026
29505a8
test(frontend): raise loc caps for grown shells and format stragglers
Sep 13, 2026
5b5aeea
fix(backend): harden page-node media inputs and address review findings
Sep 13, 2026
d7bf719
fix(frontend): address review findings across messages, relay, nomad
Sep 13, 2026
1de7ac5
perf(frontend): binary-search virtual windows and lazy-load bergamot
Sep 13, 2026
d4a57fb
chore: silence bounded-regex lint warnings and format generated files
Sep 13, 2026
c229c35
merge: master into next for 4.9.1 catch-up
Sep 21, 2026
ab1fed4
fix: resolve CI lint/test failures and review findings on next
Sep 21, 2026
f27db37
fix(ci): resolve lint, shard-1, lighthouse, and frozen-sandbox failures
Sep 21, 2026
81c8570
fix(backend): inline libretranslate api key normalization
Sep 21, 2026
4c67027
fix(ci): prettier pass and strict features typecheck errors
Sep 21, 2026
8cea85b
fix(ci): tolerate legacy commit messages in commitlint gate
Sep 21, 2026
cc5b840
merge: master into next for post-4.9.1 catch-up
Sep 22, 2026
66308d6
Merge remote-tracking branch 'origin/master' into next
Sep 22, 2026
a41ca29
perf: defer mdi vendor chunk, cache config reads, add vitals gates
Sep 22, 2026
d8e97e1
fix: repair frontend/backend contract drift found in audit
Sep 22, 2026
d19a8d9
fix: expose nomad image policy control and drop dead map prop alias
Sep 22, 2026
9a8d93c
test: raise default lighthouse lcp budget for shared ci runners
Sep 22, 2026
2ed892d
ci: run heap-profile leak gate in the ui lighthouse job
Sep 22, 2026
5422525
perf: cut vitest suite time with vmThreads, fsModuleCache, compile cache
Sep 22, 2026
3e8485b
fix: restamp wasm integrity.json to match committed binaries
Sep 22, 2026
84d7b9b
ci: add gitleaks secret scan and zizmor workflow audit
Sep 22, 2026
363367a
build: expand oxlint to type-aware mode and ratchet vitest coverage
Sep 22, 2026
d559e1e
feat: add helm chart for kubernetes and k3s deployment
Sep 22, 2026
3bbf191
feat: add deterministic god-class splitter for meshchat.py
Sep 22, 2026
58f7094
ci: publish helm chart to ghcr oci on tag pushes
Sep 22, 2026
8ecf580
ci: ratchet typescript by rejecting new frontend .js files on prs
Sep 22, 2026
27d4120
feat: fts5 trigram index for message body search (schema v60)
Sep 22, 2026
383ffc0
feat: offload micron wasm and markdown parsing to render worker, chun…
Sep 22, 2026
735e72b
feat: key-scoped GlobalState subscriptions and config domain store
Sep 22, 2026
866d119
chore: restamp wasm integrity and sync helm docs into bundled copy
Sep 22, 2026
afcc9cb
fix: keep migration-safety marker inline on fts5 probe drop
Sep 22, 2026
a6548ba
refactor: split ReticulumMeshChat into 29 mixin modules
Sep 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 7 additions & 7 deletions .agents/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# .agents index

Agent guidance only. End-user docs: `docs/en/`.
Entry: root `AGENTS.md`.
Agent guidance only. End-user docs: docs/en/.
Entry: root AGENTS.md. Always-on rules: .agents/conventions/core.md and .agents/conventions/reticulum-zen.md.

## Open by need

Expand All @@ -11,14 +11,14 @@ Entry: root `AGENTS.md`.
| Domain to manager / HTTP / WS / tests | [module-ownership.md](module-ownership.md) |
| Mesh Zen gates | [conventions/reticulum-zen.md](conventions/reticulum-zen.md) |
| Always-on standards | [conventions/core.md](conventions/core.md) |
| Vue UI | [conventions/frontend.md](conventions/frontend.md) |
| Frontend (Svelte 5) | [conventions/frontend.md](conventions/frontend.md) |
| Python / HTTP / SQLite | [conventions/backend.md](conventions/backend.md) |
| Local FS jail | [conventions/path-jail.md](conventions/path-jail.md) |
| Android WebView | [conventions/android.md](conventions/android.md) |
| Tests / references / contracts | [conventions/tests.md](conventions/tests.md) |
| Tests / references / contracts | [conventions/tests.md](conventions/tests.md) |
| Commit messages | [conventions/commits.md](conventions/commits.md) |

Skills: one file each at `skills/<name>/SKILL.md`. Open the matching skill before coding that surface.
Skills: one file each at skills/<name>/SKILL.md. Open the matching skill before coding that surface.

## Skills (trigger to path)

Expand All @@ -38,7 +38,7 @@ Skills: one file each at `skills/<name>/SKILL.md`. Open the matching skill befor
| privacy mode / clearnet HTTP | [privacy-mode-clearnet](skills/privacy-mode-clearnet/SKILL.md) |
| new page, toast, i18n | [page-toast-tests](skills/page-toast-tests/SKILL.md) |
| nav, tools, commands, WS registry | [contribution-registries](skills/contribution-registries/SKILL.md) |
| Vue mega-page extract | [vue-mega-page-split](skills/vue-mega-page-split/SKILL.md) |
| Svelte 5 / feature modules | [svelte-feature-modules](skills/svelte-feature-modules/SKILL.md) |
| HTTP/WS extract from meshchat.py | [meshchat-orchestration-split](skills/meshchat-orchestration-split/SKILL.md) |
| identity key vs zip restore | [identity-restore](skills/identity-restore/SKILL.md) |
| identity switch teardown | [identity-switch-teardown](skills/identity-switch-teardown/SKILL.md) |
Expand All @@ -52,7 +52,7 @@ Skills: one file each at `skills/<name>/SKILL.md`. Open the matching skill befor
| Electron frozen packaging | [electron-frozen-packaging](skills/electron-frozen-packaging/SKILL.md) |
| Android bridge | [android-webview-bridge](skills/android-webview-bridge/SKILL.md) |
| focused test loops | [test-loop](skills/test-loop/SKILL.md) |
| property / fuzz references | [test-oracles](skills/test-oracles/SKILL.md) |
| property / fuzz references | [test-oracles](skills/test-oracles/SKILL.md) |
| exploratory bug hunt | [exploratory-testing](skills/exploratory-testing/SKILL.md) |
| releases, tags, immutability | [release-immutability](skills/release-immutability/SKILL.md) |
| experimental WebTransport live | [webtransport-experimental](skills/webtransport-experimental/SKILL.md) |
Expand Down
10 changes: 5 additions & 5 deletions .agents/conventions/android.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Android conventions

Applies when editing `android/**/*.{java,kt}`.
Applies when editing android/**/*.{java,kt}.

- WebView `accept` extension tokens are not valid MIME types. Map `.ext` to `application/octet-stream` / `*/*` before `EXTRA_MIME_TYPES`.
- Set `EXTRA_ALLOW_MULTIPLE` only when the chooser mode is multi-open.
- Prefer existing bridge patterns in `MainActivity` for storage, file pick, and push.
- WebView accept extension tokens are not valid MIME types. Map .ext to application/octet-stream / _/_ before EXTRA_MIME_TYPES.
- Set EXTRA_ALLOW_MULTIPLE only when the chooser mode is multi-open.
- Prefer existing bridge patterns in MainActivity for storage, file pick, and push.
- After Android bridge changes, note whether emulator smoke or unit coverage is needed.
- WebView navigation uses `RemoteBackendUrl.isAllowedShellNavigation` (backend origin only). Deny `data:` and userinfo. Keep file access off and mixed content never-allow. The JS bridge follows every loaded page. See `.agents/skills/url-origin-allowlists/SKILL.md`.
- WebView navigation uses RemoteBackendUrl.isAllowedShellNavigation (backend origin only). Deny data: and userinfo. Keep file access off and mixed content never-allow. The JS bridge follows every loaded page. See .agents/skills/url-origin-allowlists/SKILL.md.
33 changes: 17 additions & 16 deletions .agents/conventions/backend.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
# Backend conventions

Applies when editing `meshchatx/**/*.py`.
Applies when editing meshchatx/**/*.py.

- Prefer `uv run` / `task` for pytest and ruff.
- HTTP handlers: return 400 for `ValueError` / bad input, 503 for retryable SQLite/Landlock unavailability, 500 only for unexpected failures.
- Thin HTTP handlers live under `meshchatx/src/backend/http/routes/`. Parse the request, call a manager or app method, map errors. Do not add new business logic in route modules.
- Shared HTTP helpers: `backend/http/errors.py`, `backend/http/context.py`, `backend/http/middleware.py`, `backend/http/register.py`, `backend/http/uploads.py`. Wire constants (`API_V1_PREFIX`, `WsInboundType`) live in `backend/constants.py`.
- JSON error responses go through `errors.py` helpers (`http_bad_request` / `http_unavailable` / `http_not_found` / `http_error_from_exception` ...). Canonical payload is `{"error", "code", "message"}`; the contract test `test_http_error_shape_contract.py` enforces it.
- In `except` blocks use `http_error_from_exception(exc)` instead of reflecting `str(exc)`; it maps PathJailError reasons to 400/403/404 and keeps OSError internals server-side. Pass `key=`/`extra=` to preserve route payload shapes.
- Client-supplied bodies and multipart fields must flow through `uploads.py` (`read_json_limited` for JSON bodies, `read_field_limited`/`read_field_text_limited` for multipart fields, `write_field_to_path` for streamed uploads) with an explicit per-endpoint byte cap from the `UPLOAD_LIMITS` table or a feature-owned constant.
- When splitting or moving handlers among `routes/<domain>.py`, follow `.agents/skills/meshchat-orchestration-split/SKILL.md` and `.agents/module-ownership.md`. Mechanical moves only (no behaviour change in the same change).
- Prefer uv run / task for pytest and ruff.
- HTTP handlers: return 400 for ValueError / bad input, 503 for retryable SQLite/Landlock unavailability, 500 only for unexpected failures.
- Thin HTTP handlers live under meshchatx/src/backend/http/routes/. Parse the request, call a manager or app method, map errors. Do not add new business logic in route modules.
- Shared HTTP helpers: backend/http/errors.py, backend/http/context.py, backend/http/middleware.py, backend/http/register.py, backend/http/uploads.py, backend/http/meshchat_names.py. Wire constants (API_V1_PREFIX, WsInboundType) live in backend/constants.py.
- errors.py and context.py are intentional scaffolding. Adopt http_bad_request / http_unavailable / http_unexpected only when a handler is already thin. Do not refactor fat handlers only to call them.
- JSON error responses go through errors.py helpers (http_bad_request / http_unavailable / http_not_found / http_error_from_exception ...). Canonical payload is {"error", "code", "message"}; the contract test test_http_error_shape_contract.py enforces it.
- In except blocks use http_error_from_exception(exc) instead of reflecting str(exc); it maps PathJailError reasons to 400/403/404 and keeps OSError internals server-side. Pass key=/extra= to preserve route payload shapes.
- Client-supplied bodies and multipart fields must flow through uploads.py (read_json_limited for JSON bodies, read_field_limited/read_field_text_limited for multipart fields, write_field_to_path for streamed uploads) with an explicit per-endpoint byte cap from the UPLOAD_LIMITS table or a feature-owned constant.
- When splitting or moving handlers among routes/<domain>.py, follow .agents/skills/meshchat-orchestration-split/SKILL.md and .agents/module-ownership.md. Mechanical moves only (no behaviour change in the same change).
- Multipart parsers must not assume field order.
- SQLite worker connections must set `temp_store=MEMORY` in `DatabaseProvider` (Landlock-safe).
- SQLite worker connections must set temp_store=MEMORY in DatabaseProvider (Landlock-safe).
- Under Landlock, memory-pressure must not force FILE temp for conversation queries.
- Subprocess or user-local CLI features must remain usable under Landlock. Extend `landlock_sandbox.py` read/RW roots and add a probe in `tests/backend/test_landlock_integration_surfaces.py` (see `landlock-sqlite` skill).
- Keep conversation list queries slim: truncate content, derive attachment flags in SQL, avoid shipping full `fields` blobs.
- Subprocess or user-local CLI features must remain usable under Landlock. Extend landlock_sandbox.py read/RW roots and add a probe in tests/backend/test_landlock_integration_surfaces.py (see landlock-sqlite skill).
- Keep conversation list queries slim: truncate content, derive attachment flags in SQL, avoid shipping full fields blobs.
- Identity restore validates size and empty payloads. Preserve existing identity metadata on re-import.
- No backticks in code comments. Prefer plain words or quoted identifiers.
- RRC / LXMF / LXST changes: open the matching skill under `.agents/skills/` and run reference-style tests when behaviour changes.
- Local filesystem browse/upload/download/delete: follow `.agents/conventions/path-jail.md` and `.agents/skills/path-jail-local-fs/SKILL.md`.
- File persistence: write via `atomic_write_bytes`/`atomic_write_text` or `json_store.save_json`; read state via `json_store.load_json` (default on corrupt/missing) or `load_json_required` (raise). Do not hand-roll mkstemp+os.replace or bare open+json.load.
- Manager result envelopes use `backend/results.py` (`ok_result`, `err_result`, `err_result_from`); never return `str(exc)` from OSError to clients.
- RRC / LXMF / LXST changes: open the matching skill under .agents/skills/ and run oracle-style tests when behaviour changes.
- Local filesystem browse/upload/download/delete: follow .agents/conventions/path-jail.md and .agents/skills/path-jail-local-fs/SKILL.md.
- File persistence: write via atomic_write_bytes/atomic_write_text or json_store.save_json; read state via json_store.load_json (default on corrupt/missing) or load_json_required (raise). Do not hand-roll mkstemp+os.replace or bare open+json.load.
- Manager result envelopes use backend/results.py (ok_result, err_result, err_result_from); never return str(exc) from OSError to clients.
20 changes: 10 additions & 10 deletions .agents/conventions/commits.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Commit message conventions

MeshChatX uses [Conventional Commits](https://www.conventionalcommits.org/) for git history on GitHub. LXMF patch contributors can use any short message in their local commit before `git format-patch`.
MeshChatX uses [Conventional Commits](https://www.conventionalcommits.org/) for git history on GitHub. LXMF patch contributors can use any short message in their local commit before git format-patch.

## Format

Expand All @@ -12,7 +12,7 @@ MeshChatX uses [Conventional Commits](https://www.conventionalcommits.org/) for
[optional footer]
```

- **type**: one of `feat`, `fix`, `refactor`, `chore`, `docs`, `test`, `ci`, `build`, `perf`, `style`, `revert`
- **type**: one of feat, fix, refactor, chore, docs, test, ci, build, perf, style, revert
- **subject**: imperative, lowercase after the colon, no trailing period, max 120 characters for the full header
- **body**: wrap at 72 characters when you need context. Mention AI tooling here if required by CONTRIBUTING.md

Expand All @@ -36,15 +36,15 @@ This repo's local git config signs with rngcs (Reticulum identity, SSH signature

## Validation

- **manual**: `task check:commits` or `./node_modules/.bin/commitlint --from origin/master --to HEAD`
- **CI**: `task check:commits` on pull requests
- **manual**: task check:commits or ./node_modules/.bin/commitlint --from origin/master --to HEAD
- **CI**: task check:commits on pull requests

## Related commands

| Command | Purpose |
| ------------- | ------------------------------------------------- |
| `task format` | Format the full tree (Prettier, ESLint fix, Ruff) |
| `task lint` | Full lint gate (same as CI lint job) |
| `task check` | format, lint, and test before push |
| Command | Purpose |
| ----------- | ------------------------------------------------- |
| task format | Format the full tree (Prettier, ESLint fix, Ruff) |
| task lint | Full lint gate (same as CI lint job) |
| task check | format, lint, and test before push |

Config: `commitlint.config.cjs`.
Config: commitlint.config.cjs.
23 changes: 14 additions & 9 deletions .agents/conventions/core.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
# Core conventions

Progressive load: root `AGENTS.md`, then one skill and one surface convention. Full index: `.agents/README.md`.
Progressive load: root AGENTS.md, then one skill and one surface convention. Full index: .agents/README.md.

- Architecture / storage / security / env: `.agents/overview.md` (only when needed).
- Mesh-facing work: `.agents/conventions/reticulum-zen.md` then `.agents/skills/reticulum-design-gates/SKILL.md`.
- Prefer Taskfile targets (`format`, `lint`, `test:quick`, `test:backend`, `test:frontend`).
- Commit messages on GitHub: `.agents/conventions/commits.md`.
- Minimal diffs. Match nearby style. Keep SPDX headers on new project files (`0BSD` unless file already differs).
- Architecture / storage / security / env: .agents/overview.md (only when needed).
- Mesh-facing work: .agents/conventions/reticulum-zen.md then .agents/skills/reticulum-design-gates/SKILL.md.
- Prefer Taskfile targets (format, lint, test:quick, test:backend, test:frontend).
- Commit messages on GitHub: .agents/conventions/commits.md.

Hard rules below are always on.

- Minimal diffs. Match nearby style. Keep SPDX headers on new project files (0BSD unless file already differs).
- No emojis in repo text or agent replies. No emoji arrows or decorative unicode arrows at all.
- No TODO/FIXME comment noise.
- No emdashes or semicolons in comments or docs you write.
Expand All @@ -16,13 +19,15 @@ Progressive load: root `AGENTS.md`, then one skill and one surface convention. F
- Do not commit/push unless asked.
- User-visible UI strings: i18n keys. Action feedback: ToastUtils.
- Do not invent install/run flows when Taskfile already covers them.
- Do not create markdown docs unless asked (except agent guidance under `.agents/` when requested).
- Do not create markdown docs unless asked (except agent guidance under .agents/ when requested).
- Do not generate exploit PoCs, malware, or attack tooling.

## Prose

Before writing or editing prose, read `.agents/skills/no-ai-slop/SKILL.md` and self-check against `.agents/skills/no-ai-slop/references/ai-writing-detection.md`. The 24 rules are in `.agents/skills/no-ai-slop/references/rules.md`.
Before writing or editing prose, read .agents/skills/no-ai-slop/SKILL.md and self-check against .agents/skills/no-ai-slop/references/ai-writing-detection.md. The 24 rules are in .agents/skills/no-ai-slop/references/rules.md.

Say what the thing is. Headings name the section contents. Every claim ends on a checkable detail (a path, an API, a status code, a measured quantity). Do not invent numbers, quotes, or incidents.

Load `.agents/skills/rossmann-voice/SKILL.md` only when the user asks for that voice. Do not rewrite MeshChatX technical docs into that voice by default.
When editing CHANGELOG.md, use the current CHANGELOG.md as the style reference: terse bullets, **Area**: detail, imperative mood, and specific checkable facts.

Load .agents/skills/rossmann-voice/SKILL.md only when the user asks for that voice. Do not rewrite MeshChatX technical docs into that voice by default.
Loading
Loading