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:
Krzysztof Rudnicki 2026-08-30 23:01:26 +02:00
parent 7f66116cd5
commit 80c0fa8e45
4 changed files with 14 additions and 12 deletions

View File

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

View File

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

View File

@ -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ą"]}],

View File

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