Skip to content

envsbot v2.1.0

Choose a tag to compare

@cremesk cremesk released this 18 Sep 12:14
· 70 commits to main since this release
v2.1.0
7df937a

envsbot v2.1.0 focuses on runtime/reconnect hardening, clearer operator diagnostics, deployment consistency, and a more usable RSS administration workflow.

Highlights

  • Added scoped RSS subscription search with ,rss search.
  • Hardened XMPP session startup and reconnect handling against stale session work.
  • Added true in-process XMPP reconnect using the shared envs-xmpp 1.3.0 reconnect runtime, so an ordinary transport loss no longer requires a full process/systemd restart.
  • Reduced normal room-startup log noise with compact per-room MUC join reporting.
  • Unified task and room health/status presentation with the shared envs-xmpp operator primitives.
  • Added runtime dependency-drift checks to deployment validation.
  • Improved release/version observation and post-release operational guidance.
  • Adopted shared JID text normalization from envs-xmpp 1.2.0.

RSS

A new ,rss search subcommand makes large subscription sets easier to manage.

Search is case-insensitive and matches:

  • stable feed number;
  • feed title;
  • subscribed feed URL;
  • website URL advertised by the feed.

Examples:

,rss search linux
,rss search 42
,rss search own example.org
,rss search room@conference.example.org kernel 2
,rss search linux all

Search follows the same visibility rules as RSS listing:

  • room/MUC-PM searches stay scoped to that room;
  • trusted users in direct chat see only their own direct subscriptions;
  • global RSS managers can use broader permitted scopes;
  • direct subscriber identities are not exposed in search results.

The RSS command implementation was also split so the command module remains within the repository's architecture boundary.

Runtime and reconnect handling

  • Separated process initialization from per-session XMPP startup.
  • Migrated retry/backoff/readiness orchestration to the shared envs-xmpp 1.3.0 reconnect runtime used by both envsbot and muc_banbot.
  • Unexpected XMPP transport loss now keeps process-lifetime storage, plugins, caches, outbox and watchdog state alive while only the XMPP session is recovered.
  • systemd Restart=on-failure remains the final process-failure safety net rather than the normal reconnect mechanism.
  • Made reconnect startup generation-aware so stale session work is rejected/cancelled.
  • Moved room reconciliation and profile updates into explicit session lifecycle hooks.
  • Compacted successful session-start room joins to one log line per MUC while keeping detailed warnings/results for later recovery and rejoin attempts.
  • Hardened cleanup/rollback when later startup phases fail or are cancelled.
  • Ignored delayed MUC history arriving after reconnect so old room history is not treated as fresh traffic.
  • Reduced unnecessary vCard work during rapid MUC join/leave churn.
  • Avoided negative birthday caching after transient vCard lookup failures.
  • Corrected target handling for timezone-related vCard lookups.

Operator status and diagnostics

  • Unified task status rendering with the shared operator layout.
  • Added focused task views such as problems/stale/restarting/restarted.
  • Aligned room status/listing with joined/offline/problems filters.
  • ,status full now favors health-first output instead of dumping complete healthy inventories.
  • Added session/reconnect health visibility.
  • Added a structured 72-hour production-observation checklist.

Deployment and release tooling

  • Added runtime dependency-drift detection to deploy checks.
  • Added shared-core release consistency checks.
  • Added config-free runtime version visibility through the CLI.
  • Hardened the mutmut bootstrap test so mutation runs resolve the standalone deployment bootstrap correctly.

Shared JID normalization

envsbot now uses the shared JID normalization introduced in envs-xmpp 1.2.0 for common room/feed identity keys.

This includes protection against copied JIDs containing the known zero-width presentation artifacts handled by the shared core, while stricter Slixmpp-based validation remains application-owned.

Compatibility / configuration

  • Requires Python 3.12+.
  • Requires envs-xmpp >= 1.3.0, < 2.0.
  • The reviewed constraint snapshots pin envs-xmpp 1.3.0.
  • No new mandatory configuration options were introduced.
  • No database schema migration is required for this release.

Testing and quality

The release candidate passes the project's full warning-strict quality/test gate after the envs-xmpp 1.3.0 reconnect integration.

Production startup validation also completed cleanly with all configured plugins loaded and all configured rooms joined successfully. A final live transport-reconnect smoke test should be completed on the release commit before tagging so the new in-process reconnect path is production-verified.

Upgrade notes

For production deployments, update to the stable v2.1.0 tag rather than running from main.

After deployment, verify:

envsbot --version
./scripts/deploy.sh status
./scripts/deploy.sh check

Then use the normal XMPP smoke/status commands and follow docs/production-observation.md for the post-release observation window.

Full changelog

v2.0.0...v2.1.0