Files
management/analysis/findings/F-002-timestamp-anonymisation-covers-one-of-six-repos.md
T

57 lines
3.2 KiB
Markdown
Raw Normal View History

# F-002: The timestamp anonymisation rule reaches one of six repos; 237 commits still publish real working hours
category: claim-vs-reality
confidence: high
evidence:
- `CLAUDE.md:116-134` declares the rule for "**alle** Repos der Gruppe `axion1337.chat`
und die ThreadNet-Dienste": author *and* committer date set to 12:00:00 UTC, with the
stated purpose "damit sich aus der Historie keine persönlichen Arbeitszeiten ablesen
lassen".
- Measured over every ref of all six repos (`analysis/data/timestamp_anonymisation.tsv`,
produced by `analysis/scripts/inv_timestamps.py`, author time rendered in UTC):
| repo | own/agent commits with real clock time |
|---|---|
| management | 0 |
| axion1337.chat-gitops | 187 |
| threadnet-operating | 21 |
| thread-net-git | 11 |
| threadnet-call | 14 (all on `origin/livekit`) |
| ThreadNet-Web | 4 |
Total 237. Upstream Element/Matrix commits are excluded from that count — they were
never this project's to rewrite.
- `thread-net-git` and `threadnet-operating` were not rewritten at all: they hold **no**
12:00:00 commits and appear in no section of `shared/commit-zuordnung-2026-08-07.md`
(sections cover gitops, management, ThreadNet-Web, threadnet-call only).
- The exposed times are exactly the ones the rule exists to hide. On
`axion1337.chat-gitops`'s `turn-secret-rotation-20260728-192656` branch alone, the
hour-of-day distribution of the 41 commits is 00h ×1, 01h ×6, 21h ×8, 22h ×1, 23h ×6.
- All of this is publicly readable: every one of the six repos mirrors to
`rohana.axion1337.de`, verified in sync by `git ls-remote` (see F-013).
- `CLAUDE.md:143-147` does carry a caveat, but it names push times, issue and comment
timestamps, pipeline runs and package publications — **not** the git history itself.
`shared/commit-zuordnung-2026-08-07.md:41-44` discloses the untouched pre-boundary
commits, but frames it as an SHA matter ("haben ihre SHA behalten"), not as a
147-commit hole in the privacy goal.
impact: The rule's stated goal is not achieved for five of six repos, while both the rule
and its caveat read as though the remaining exposure were limited to non-git surfaces.
Anyone reading `CLAUDE.md` would reasonably conclude the git history is clean. Effort was
spent (a 251-commit rewrite, three restarted release pipelines, a mapping document) for a
result that a `git log` on any side branch undoes.
root-cause pattern: **Rule declared repo-wide, applied to a subset — and the gap between
the two is documented in a third place, in different terms.**
neckbeard mechanism: **Gap in neckbeard.** Nothing in `AGENTS.md`, `WORKFLOW.md`,
`schema.yaml` or `scripts/validate.py` concerns commit hygiene, author identity or history
rewriting; `docs/aar/2026-08-09-neckbeard-v1-creation.md` ("Git is the changelog") treats
git as a given, not as an artifact under governance. The nearest applicable rule is
`AGENTS.md:50-55` ("Never claim something works without evidence... Uncertainty is
reported, never swallowed"), which is a behavioural rule for an agent, not a check on the
repo. A field test finding worth carrying back: a framework that governs documents while
the project's most sensitive claims are about its *git history* leaves that surface
unguarded.