|
|
@@ -595,6 +595,21 @@ configuration docs must be able to predict what happens when they set nothing.
|
|
|
Secrets (`CHATTO_TOKEN`, `CHATTO_PASSWORD`) belong in `~/.hermes/.env`, never
|
|
|
in `config.yaml` — docs and setup wizard rely on that split.
|
|
|
|
|
|
+### `plugin.yaml`'s `version:` names a branch, not a release
|
|
|
+
|
|
|
+**This plugin ships no releases, so the field says `main` and is not bumped per
|
|
|
+feature.** The alternative — a `1.0.1` that quietly goes stale, as it did while
|
|
|
+two tools were added without a bump — promises a release cadence nobody runs.
|
|
|
+
|
|
|
+Hermes does not validate the field (`plugins_manifest.py` reads it as a plain
|
|
|
+optional string) and, for a git-class install, never compares it: the update
|
|
|
+check resolves SHA against SHA via `ls-remote` (`plugins_updates.py:222-234`).
|
|
|
+The one reader that parses it is the release-feed branch, where a non-PEP-440
|
|
|
+value yields `update_available = None` — "unknown", not a false update
|
|
|
+(`_version_is_newer`). So the cost lands only if a feed ever appears, and by then
|
|
|
+it is a decision to make, not an accident to inherit. A day that happens, the
|
|
|
+feed's `version:` and this paragraph are the two things that move together.
|
|
|
+
|
|
|
A raw value from **anywhere** is parsed by the field's kind before anything
|
|
|
reads it. `.env` lines are strings whatever the field means: a list field
|
|
|
holding `"a,b"` turns `room_id in require_mention + optional_mention` into a
|