mirror of
https://github.com/kuhyx/signal-bot.git
synced 2026-11-10 19:17:02 +01:00
fix: take real people, numbers and a member's uuid out of a public repository
This repository is public, and five things in it were not invented. The worst was mine, today: the tagger's help text used the group's actual first names and nicknames as its worked example, in a file that is on GitHub. It uses ala/basia/celina now, like every other example here. The rest predate this work. DOCS-signal-envelopes.md carried the operator's own phone number and the bot's, captured from a live envelope; conftest.py had the same number as its trusted inviter; and test_trust.py pinned a group member's full Signal uuid as a fixture. Numbers keep their shape so the documents still show what a real envelope looks like, but no digit of them belongs to anybody. Comments that reached for a real first name to illustrate the diacritic case now use an invented one. None of this removes them from the history, which is a separate decision. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017w1HZ3cZ7neL3rFdQ6VMBA
This commit is contained in:
parent
7f66116cd5
commit
80c0fa8e45
@ -20,9 +20,11 @@ gamma — so the mechanism can be public while the album stays private.
|
||||
|
||||
Found in this order: `PHOTO_PACK_DIR`, then `$STATE_DIRECTORY/pack` (what
|
||||
systemd hands a **system** unit), then `$XDG_DATA_HOME/signal-bot/pack`.
|
||||
Under the *user* unit this repo installs, `StateDirectory=` would resolve
|
||||
below `$XDG_STATE_HOME` rather than `$XDG_DATA_HOME`, so the deployed bot
|
||||
names its pack outright in `.env` instead of relying on discovery.
|
||||
`StateDirectory=` is deliberately **not** in the unit this repo installs:
|
||||
for a *user* unit systemd resolves it below `$XDG_STATE_HOME`, which is not
|
||||
where the album is. Discovery finds the same directory, and leaving
|
||||
`PHOTO_PACK_DIR` unset is what keeps a not-yet-filled-in pack from turning
|
||||
`Restart=always` into a restart loop.
|
||||
|
||||
Two absences, deliberately different:
|
||||
|
||||
@ -62,7 +64,7 @@ Two absences, deliberately different:
|
||||
photo, so a combination that could be answered is not refused.
|
||||
- Triggers may not contain a digit — `folding.py` maps `0134578` onto letters,
|
||||
so `!alfa7` is not what you typed. Two spellings that fold the same are fine
|
||||
*within one entry* (`!ala`/`!ala` is one person written twice) and
|
||||
*within one entry* (`!celina`/`!celiną` is one person written twice) and
|
||||
refused across two.
|
||||
|
||||
## tags.json
|
||||
|
||||
@ -194,7 +194,7 @@ def _unique_triggers(entries: list[Entry]) -> None:
|
||||
|
||||
Skeletons, not spellings: two triggers can look different and fold the
|
||||
same, because folding strips diacritics. Within one entry that is normal
|
||||
and wanted -- "!ala" and "!ala" are one person written two ways,
|
||||
and wanted -- "!celina" and "!celiną" are one person written two ways,
|
||||
and the registry collapses them into one frozenset. Across two entries it
|
||||
is a manifest that cannot work, and the registry would only be able to
|
||||
say which skeleton collided, not which entry to fix.
|
||||
|
||||
@ -83,7 +83,7 @@ def test_a_key_that_reads_like_a_name_is_refused(tmp_path: Path) -> None:
|
||||
|
||||
def test_a_non_ascii_key_is_refused(tmp_path: Path) -> None:
|
||||
with pytest.raises(ConfigError, match="alphanumeric 'key'"):
|
||||
_load(tmp_path, people=[{"key": "ala", "triggers": ["!alfa"]}], combos=[], tags={})
|
||||
_load(tmp_path, people=[{"key": "gamma\u0105", "triggers": ["!alfa"]}], combos=[], tags={})
|
||||
|
||||
|
||||
def test_an_entry_needs_at_least_one_trigger(tmp_path: Path) -> None:
|
||||
@ -140,7 +140,7 @@ def test_two_entries_folding_onto_one_trigger_are_refused(tmp_path: Path) -> Non
|
||||
|
||||
|
||||
def test_one_entry_may_spell_itself_two_ways_that_fold_the_same(tmp_path: Path) -> None:
|
||||
"""Which is the point: "!ala" and "!ala" are one person, written twice."""
|
||||
"""Which is the point: "!gamma" and "!gammą" are one person, written twice."""
|
||||
pack = _load(
|
||||
tmp_path,
|
||||
people=[{"key": "p1", "triggers": ["!gamma", "!gammą"]}],
|
||||
|
||||
@ -44,12 +44,12 @@
|
||||
<b>Jedna osoba na linię</b> — Enter po każdej. Bez wykrzyknika.
|
||||
Przecinek to <b>inna nazwa tej samej osoby</b>, nie następna osoba.
|
||||
</p>
|
||||
<pre class="hint sample">marek
|
||||
ala
|
||||
<pre class="hint sample">ala
|
||||
basia
|
||||
celina, cela <span class="dim">← jedna osoba, dwie nazwy</span>
|
||||
iga
|
||||
oboje = ala + marek <span class="dim">← zdjęcie, na którym są oboje</span>
|
||||
ktokolwiek = ala | marek <span class="dim">← losowo jedno z nich</span></pre>
|
||||
darek
|
||||
oboje = ala + basia <span class="dim">← zdjęcie, na którym są obie</span>
|
||||
ktokolwiek = ala | basia <span class="dim">← losowo jedna z nich</span></pre>
|
||||
<textarea id="names" spellcheck="false"></textarea>
|
||||
<h1>W której grupie działają?</h1>
|
||||
<div id="groups" class="hint">szukam grup…</div>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user