From 959bf882e906c1ff0bd48af3f2414afdd0f31fb7 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Mon, 10 Aug 2026 12:00:00 +0000 Subject: [PATCH] analysis: resolve SHA references and measure timestamp anonymisation Two checks the human asked for after Phase 1: whether the mapping list from the 2026-08-07 history rewrite still resolves older references, and how far the anonymisation rule actually reaches. sha_refs.tsv verifies all 251 mapping rows against the repos and resolves every SHA cited in a management doc. timestamp_anonymisation.tsv separates the project's own commits from upstream fork history before counting non-compliant timestamps. --- analysis/data/sha_refs.tsv | 280 ++++++++++++++++++++++ analysis/data/timestamp_anonymisation.tsv | 145 +++++++++++ analysis/scripts/common.py | 14 +- analysis/scripts/inv_shas.py | 144 +++++++++++ analysis/scripts/inv_timestamps.py | 86 +++++++ analysis/scripts/run_all.sh | 8 + 6 files changed, 674 insertions(+), 3 deletions(-) create mode 100644 analysis/data/sha_refs.tsv create mode 100644 analysis/data/timestamp_anonymisation.tsv create mode 100644 analysis/scripts/inv_shas.py create mode 100644 analysis/scripts/inv_timestamps.py diff --git a/analysis/data/sha_refs.tsv b/analysis/data/sha_refs.tsv new file mode 100644 index 0000000..b296d24 --- /dev/null +++ b/analysis/data/sha_refs.tsv @@ -0,0 +1,280 @@ +kind repo path line sha status resolved_in note +doc-reference management .gitlab/issue_templates/Deploy-Übergabe.md 14 b6007c5 resolves threadnet-operating Beispiel: axion1337.chat/threadnet-operating @ main, b6007c5 --> +doc-reference management decisions/0009-commit-konventionen-und-historien-anonymisierung.md 77 3cb43f5 resolves ThreadNet-Web ThreadNet-Web#14; die Sperre ist seit `3cb43f5` scharf. +doc-reference management hosts/cfgmon.md 54 dfe04c4a orphan dort direkt nach Gitea gepusht (dfe04c4a), vom Mirror überschrieben, vom Mac aus +doc-reference management hosts/cfgmon.md 55 6ffab68 resolves threadnet-operating per Patch gerettet und kanonisch als `6ffab68` neu aufgelegt (inhaltsgleich, +doc-reference management hosts/cfgmon.md 60 a876758 resolves ThreadNet-Web - `ThreadNet-Web`: alle `.github/workflows/`-Dateien entfernt (Commit `a876758`) +doc-reference management hosts/cfgmon.md 62 5e46a24 resolves axion1337.chat-gitops (Commit `5e46a24`, Pipeline grün, Mirror→Gitea verifiziert; `milestone-release.yml` +doc-reference management hosts/cfgmon.md 64 d904734 resolves thread-net-git - `thread-net-git`: Runner-Service/Config/`.env.example` per Commit `d904734` entfernt +doc-reference management hosts/cfgmon.md 73 d904734 resolves thread-net-git Stolperstein dabei: Rückbau-Commit `d904734` hinterließ ein verwaistes +doc-reference management hosts/cfgmon.md 75 15c8f2d resolves thread-net-git Mac→git.lab→Mirror (`15c8f2d`), Hergang in thread-net-git#1 (geschlossen). +doc-reference management hosts/cfgmon.md 248 02b3224 resolves thread-net-git **2026-07-30 nach `main` gemergt** (`origin/main` == `origin/rework/stack` auf `02b3224`, +doc-reference management hosts/cfgmon.md 276 a400f8a resolves threadnet-operating Behoben in `threadnet-operating`, Commit `a400f8a`. Cert von Let's Encrypt (YR2) +doc-reference management hosts/cfgmon.md 288 edac97e resolves threadnet-operating Behoben durch ein `alloy_data`-Volume, Commit `edac97e`. Verifiziert: Positions +doc-reference management hosts/matrix.md 49 228807f resolves axion1337.chat-gitops **Fix (gitops `228807f`, Weg A aus gitops#45):** HelmRelease + Alloy-Scrape entfernt, +doc-reference management hosts/overmind.md 23 7645a2b orphan | Windows-Build-VM | Dokploy-Stack `windows-runner` (live seit 2026-07-31) | Image `registry.git.lab/axion1337.chat/vendor/windows:stable` (Eigenbau aus reviewt +doc-reference management hosts/overmind.md 87 5bc25447 orphan pusht per `CI_JOB_TOKEN` in die Lab-Registry — verifiziert, Tags `5bc25447` + `stable` +doc-reference management roadmap.md 54 6b0261d resolves ThreadNet-Web Commit `6b0261d`). Offen: Web-Client-Icons/`brand`, About-Attribution. +doc-reference management shared/branding.md 87 b10b607 resolves axion1337.chat-gitops übernommen** (gitops `b10b607`), nachdem eine erste Fassung die Namen frei +doc-reference management verfahren/aar/2026-08-01-cve-pipeline-gitops47.md 13 2b715ca orphan `alertmanager.yml` auf einen Null-Receiver (Commit `2b715ca` in +doc-reference management verfahren/aar/2026-08-01-cve-pipeline-gitops47.md 24 cdfadc0 resolves threadnet-operating | 5 | Grafana-Provisioning für den Security-Ordner fehlte — das Dashboard wäre nie erschienen | — | vom Autor selbst behoben (`cdfadc0`), bevor ausgerollt wurde +doc-reference management verfahren/aar/2026-08-02-wiki-und-desktop-clients.md 27 c51b681 resolves ThreadNet-Web | 6 | **Nur macOS bekam neue Icons** — Windows (`.ico`) und Web (`res/vector-icons/`, `manifest.json`) blieben auf Element | MEDIUM | gelöst, `c51b681` | +doc-reference management verfahren/aar/2026-08-02-wiki-und-desktop-clients.md 147 80fcf6c resolves ThreadNet-Web **Korrigiert:** gitops `b10b607` (Web, live verifiziert) · ThreadNet-Web `80fcf6c` +doc-reference management verfahren/aar/2026-08-02-wiki-und-desktop-clients.md 147 b10b607 resolves axion1337.chat-gitops **Korrigiert:** gitops `b10b607` (Web, live verifiziert) · ThreadNet-Web `80fcf6c` +doc-reference management verfahren/deploy-uebergabe.md 84 6ffab68 resolves threadnet-operating überschrieben** (zweimal passiert: dfe04c4→6ffab68 am 01.08. nachts, +doc-reference management verfahren/deploy-uebergabe.md 84 dfe04c4 orphan überschrieben** (zweimal passiert: dfe04c4→6ffab68 am 01.08. nachts, +doc-reference management verfahren/deploy-uebergabe.md 85 0bd77e2 resolves threadnet-operating 2b715ca→0bd77e2 am 01.08. nachmittags). Deshalb gehört zu jeder Übergabe: +doc-reference management verfahren/deploy-uebergabe.md 85 2b715ca orphan 2b715ca→0bd77e2 am 01.08. nachmittags). Deshalb gehört zu jeder Übergabe: +doc-reference management vision/threadnet.md 33 51ea513 resolves axion1337.chat-gitops steht Commit `51ea513` — *„remove plaintext TURN shared secret, rotate leaked +doc-reference management vision/threadnet.md 44 6b0261d resolves ThreadNet-Web seit `6b0261d` ThreadNet und trägt die eigene Marke, der Web-Client zeigt weiter +mapping-entry management shared/commit-zuordnung-2026-08-07.md 001f59fe44->97fe9e0fa8 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 00bf0403c7->e21a895390 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 019c5cb6c9->9e0af1370b ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 01f0f9ad07->d3869e081e ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 0242238597->51ea51352b ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md 029ee29d9c->ff21788692 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 02c60cbbe5->52573634df ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 03ddd7b1d8->fdf30d42e1 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 04d61ec6ac->cd7b2d0b75 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 05197c40aa->f687b41441 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 054fac4383->8e489415cd ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 05900602c6->44305556c3 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md 077dd43af2->ac688d36f7 ok threadnet-call new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 07b5b7b17d->cb2ffa6a08 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 082817a0d7->2932ffffc3 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 09bdd94da6->f3c5603955 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 09f6e8c333->751df7dc01 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 0b27c26bec->3aa34f8635 ok management new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md 0be204e6d7->3f0f55e6bd ok threadnet-call new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 0cd5a33402->aecbea0c89 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 0cfbb4a89f->42632d6b2a ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 0db7fc1573->736c39a413 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md 10f76f2942->0b6060339e ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 1354767643->bc0769809d ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 142b24d65a->019c3e7279 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 15fd90655c->a2bfaaec8f ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 161df3a9cc->bd83975b2f ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 163504efc6->bd8298db39 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 170d6c3538->77ffeb4514 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 18c9f1ed20->e5c78edb14 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 194d47a0ef->100b46ec91 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 1b1fa2b719->376772078a ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 1c5e21ce43->34686ee2e1 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 1cbd2001db->59025c2e15 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 1dd8f282d8->8e98a39447 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 1e5da7e630->77a9a94a7f ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 1e8ee1c4ac->4e03950d3f ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 20e4a8da48->c0cb864ca2 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 214fd5b70a->8faade6c7b ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 24ab87e398->e7f1b5d6f8 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 24cacf1000->c0774b5f58 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 282540be9f->624274f5f0 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 28cd06c13b->fa5c7a8681 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 290709a900->3fe05e7bd1 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 29ffb88cdd->9e2f49b3dd ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 2a2575781d->bd8486960f ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 2a294f2261->d31fef4b28 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 2a2bb3778d->6e021ee853 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 2b1f791fe6->1b8ef35e9b ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 2b7f42dc8c->932443df63 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 2ec9858a91->9c3d2529b4 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 30578abaaf->8f1d39b7a8 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 314cf6dedb->80714fe901 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 328b028c5d->6973a8dbc7 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 32e2c8e556->7b19586179 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 375259061f->f656c5d8b3 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 39037d85cc->ccf6856f42 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 3b42b220a0->22a0823b7e ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 3c30dd512f->9ac56d671b ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 3e147554eb->e094c4ab29 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 3e38955c12->9fa88bda5c ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 404a12d97c->c079ec2d7d ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 418d787f77->5091ba8f3f ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 41bf33fcfd->7d352fbf20 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 420f779711->09e4225de5 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md 425a2645b6->71975d5d41 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 42d76cc13d->b28ef2c97a ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 44aa5a918e->79db6a8e49 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md 4597ea1cc3->f22ede5124 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 480d80e783->c3e84c53bf ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 480e28180c->f5fe27336f ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 49441bf332->cbfbf4b36e ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 49f3f38b06->92dac0be23 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 4a8e1b6ffd->830c740a58 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 4c792172f8->bb5778e121 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 4d8fa5f06c->174c58001b ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 4dd452e0fa->49faf20243 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 50bc39c0d1->490c2b7257 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 50c2fc2889->e462980dac ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md 5275bef15b->d019bfedda ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 52b0de1b5a->eabde3747e ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 55e1a0949f->80fcf6c227 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 574c1bf89c->a8767583da ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 57a355ac38->a85d082f10 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 58fcc4ab42->337dbe85ac ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md 590a80f510->efbb4b9a1a ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 59e1719a10->5505b9cfc1 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 59f9c81ef8->8d46fb33d2 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 5bcbadd06a->be95bd921c ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md 5d18924d28->8aebe3b03d ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 5e3254d8a8->1822fe80f0 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 5eeddc8a0a->1eb4968968 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 60f2cda962->45fb329577 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md 6260cc4962->8fb630cfb3 ok-both-present threadnet-call old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 62b05c51c4->233b13f972 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 62d4bf6630->d742c99ba5 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 640c93480d->717638d12c ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 64670c51b6->f1b60d815b ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 6575cb942a->3c26cf2504 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 65f6aa813d->1bb1bc9610 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 686f50db8e->c8fc91ff1d ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 697e1674c0->5a8c42b5e9 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 6a628533c2->42285021cb ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 6a8a2bb1a9->71ac7c4346 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 6a90a12b2c->252b16ca71 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 6c693c9a8a->a81ea0dd2e ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 703cf1ff1c->3054037480 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 7248da62bc->c7d4b6f376 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 75a319a7e3->ba9783fa08 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md 760c6af264->6f94e6a8a3 ok threadnet-call new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 7735c504f2->8ad921519f ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 7839b56a65->306cca041c ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 784459beed->d2bcd90291 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 7871e038c7->fad91b6a05 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 7972034298->2aed6e4932 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 7b9d13199e->9607687e4e ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 7bd67a53a6->2e53387650 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 7dc4e5bf8e->15396d53e8 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 7f42a456eb->7cd177f744 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md 7fb6251e1c->a6e555ac3f ok threadnet-call new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 7ff3fb65e8->5f7fd8bc46 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 81f207e9c3->786ca28895 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 826fc8dbd3->e9b24a6d1f ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 82827c4857->018a4b7d83 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 83150c3d8e->9cc5ba4fe0 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 838a186c91->02946481ae ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 83d733b9f5->26b6fd8938 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 85aa8ef22d->3eb27b3a62 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 88127d9876->1d5a136dff ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 88f9bdb8d7->f4995e5882 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 891adc6944->59df406a19 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 893fe32976->f58add72ae ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 8a3274dd33->4ca87a68c7 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md 8a38224f51->846135e48d ok threadnet-call new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 8a9d778973->b10b607d70 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 8cfa7cb83e->d7aca3bd0c ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 8ec67463b1->c1a604bd19 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 8ee937e56d->5c3a7b798a ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 8fb32d9360->f2abae85dd ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 90251e4a55->e21e101004 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 93a0c9cecb->98c6483b9f ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 93ee6a3549->228807fcc8 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 94244736c9->d4f3fc4c97 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 94596c2933->3c6f3645b3 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 947eaab71c->ac7e65100d ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 95ab6db12f->5ca8f00d58 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 95d43bcade->97e18bbf2f ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 961641004f->7a1710c78d ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 977903bdf7->f47baa553a ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md 99a87a2cef->4fdad89fa6 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 9aa42f96bc->11f97b935f ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 9aec29f605->09aaf1b2b5 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 9b8145540f->0f28acb626 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md 9e15ba57c5->712cd430bf ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md 9f78b04419->88850809c7 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md a23a149c0d->ce62396f0b ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md a2438e1b2b->b15a9f578c ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md a29235cd54->b4b4893389 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md a3965d2eb6->6f1dfedde2 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md a3c7fb3c17->8465457a48 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md a3d51ddf70->cf66ff018d ok ThreadNet-Web new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md a40a8665ee->a414bb8585 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md a4df631ee6->4f7500c00c ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md a5597f0f8b->0d0c1659c6 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md a64ce123c1->63fd0b460a ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md a777f973cb->316178bd51 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md a9b8ca05ca->d9db323b62 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md aa3f47d4ec->0b518bb3b1 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md aa42d0530a->235306a840 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md aa6d5fc13a->a053fd9271 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md ac11c274e4->83cee828b8 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md ad3c956cb5->b51a07b068 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md ae982cdb4b->164d96dddd ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md b11284b844->777f8c375f ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md b13bb2381d->0274f9316c ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md b24ce732dc->0f1d31021c ok ThreadNet-Web new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md b265395e6d->84419133b3 ok threadnet-call new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md b4ee92fe9a->0abd26e416 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md b51986de9f->ae62727a50 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md b647645d2a->3e226fba40 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md b73d88729d->6f761da1a4 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md b9358d91f7->6f33c7277a ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md b96793da98->cc0d4d3e02 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md baf0863a2f->af73cf770b ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md bccd265302->49005ed325 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md bd25486e56->11a079db57 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md bdb2c766e9->0671da1040 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md bfd72cdf3e->580827f7ca ok ThreadNet-Web new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md c01d55d517->0823c8a866 ok threadnet-call new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md c0be911797->4a3d7c70a6 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md c1c189d281->debf980d5f ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md c262d47809->bb51047e1d ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md c47b0a3312->ac0afaf3d9 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md c52b792511->0d0255cb7f ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md c52ff97502->414ada956a ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md c631b0a917->44d3e7dae1 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md c6e72ac9bb->f1d732afbe ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md c8d458734a->6b0261d66c ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md cacb89175b->666aa9004a ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md cc3f860bf8->c51b68194a ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md cc6565e494->0213b0fe58 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md cf24a1a396->edf224e450 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md d10a9285b9->60248bfd92 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md d1f9f22455->0f3f155bc5 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md d21eabb77f->a5eacfe39e ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md d24dbf84f7->9fa947cc21 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md d24e37619c->25d1742d61 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md d31cc19fab->5e16719bfe ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md d43bb05d77->4c870854f1 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md d4ed5e8cc0->c401f54e4d ok ThreadNet-Web new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md d5046621ca->b6aaad7abe ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md d54c4aec65->2803fb384c ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md d6c98632f0->889cd47be7 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md d8acc1e26c->13385b68f2 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md d967654077->e549de8247 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md da6d352902->42da25d0a6 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md db77785b6b->9db1ee6f45 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md dc856186d1->7ac584d27b ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md de2af6e199->e659242990 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e0db79a3f1->b32920c48f ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e14d1be69d->34442df75c ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md e1f508d12e->b656eefdc7 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e51142ec5b->1b35766ad3 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e53896e02c->7795f89fc9 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e54a1d57e0->ebb1d4e2a7 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e54ec10fd9->2c5f77686d ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e58b8db8fe->5e46a24e7d ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e5d74662a0->c1ee776070 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md e7675d7b9f->a55adfdd65 ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e8ba7589dd->5aca738f55 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry threadnet-call shared/commit-zuordnung-2026-08-07.md e8c7dfed36->e793902ae0 ok threadnet-call new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md e8e1b36224->ea026a0057 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e963203376->af63755f1e ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md e9f000f87b->23c66c97b8 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md ea72f5b357->37aea0254b ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md eab452b3d5->e4991c050f ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md eb9ada6427->3e81f40178 ok management new resolves, old gone as expected +mapping-entry ThreadNet-Web shared/commit-zuordnung-2026-08-07.md ed1c7ff5bc->965c456dee ok ThreadNet-Web new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md ed73a42772->8331bb212d ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md ee476782bb->0a07da260f ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md ee91f121b8->0f7ff1a896 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md efb25f31a2->f0174decc1 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md eff643edf6->cdecb006d4 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md f030586956->dfe7ff9fc0 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md f0b0019ee7->191981aefe ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md f30d2f582b->802e09cd9c ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md f56f8c2479->105194d450 ok axion1337.chat-gitops new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md f5e9fc5d2b->ba270bce71 ok-both-present axion1337.chat-gitops old SHA still reachable from some ref +mapping-entry management shared/commit-zuordnung-2026-08-07.md f6055ee47c->2be5fb6f60 ok management new resolves, old gone as expected +mapping-entry management shared/commit-zuordnung-2026-08-07.md fcfe3b681d->7d7c1e86b0 ok management new resolves, old gone as expected +mapping-entry axion1337.chat-gitops shared/commit-zuordnung-2026-08-07.md fe575808b3->027f567c8b ok-both-present axion1337.chat-gitops old SHA still reachable from some ref diff --git a/analysis/data/timestamp_anonymisation.tsv b/analysis/data/timestamp_anonymisation.tsv new file mode 100644 index 0000000..089d859 --- /dev/null +++ b/analysis/data/timestamp_anonymisation.tsv @@ -0,0 +1,145 @@ +repo identity_class author timestamp_state reachable_from commits +ThreadNet-Web own Thore Cimbal anonymised main 49 +ThreadNet-Web own ScrublordMcBad real-clock-time main 1 +ThreadNet-Web own sorB real-clock-time main 2 +ThreadNet-Web own ScrublordMcBad real-clock-time side-branch-only 1 +axion1337.chat-gitops own Thore Cimbal anonymised main 120 +axion1337.chat-gitops own Scrublord MacBad real-clock-time main 135 +axion1337.chat-gitops own ScrublordMcBad real-clock-time main 10 +axion1337.chat-gitops own Scrublord MacBad real-clock-time side-branch-only 2 +axion1337.chat-gitops own Thore Cimbal real-clock-time side-branch-only 40 +axion1337.chat-gitops upstream-or-bot turn-secret-rotation anonymised main 2 +axion1337.chat-gitops upstream-or-bot Flux <> real-clock-time main 2 +axion1337.chat-gitops upstream-or-bot turn-secret-rotation real-clock-time side-branch-only 1 +management own Thore Cimbal anonymised main 86 +management own Thore Cimbal anonymised side-branch-only 2 +thread-net-git agent Claude real-clock-time main 9 +thread-net-git own Thore Cimbal real-clock-time main 2 +threadnet-call own Thore Cimbal anonymised main 12 +threadnet-call own Thore Cimbal real-clock-time side-branch-only 14 +threadnet-call upstream-or-bot Abhi Jain real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot Alexander Mnich <56564725+a-mnich@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Andrew Ferrazzutti real-clock-time side-branch-only 25 +threadnet-call upstream-or-bot Angel Mendez real-clock-time side-branch-only 5 +threadnet-call upstream-or-bot Angel Mendez Cano real-clock-time side-branch-only 12 +threadnet-call upstream-or-bot Ariodaad real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Avery real-clock-time side-branch-only 11 +threadnet-call upstream-or-bot Ben Banfield-Zanin real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Danial Behzadi real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Daniel Abramov real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Daniel Abramov real-clock-time side-branch-only 46 +threadnet-call upstream-or-bot Daniel Abramov real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot Daniel Kilimnik real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot DarkCoder15 real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot David Baker real-clock-time side-branch-only 517 +threadnet-call upstream-or-bot David Baker real-clock-time side-branch-only 303 +threadnet-call upstream-or-bot Davide Girardi real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Dimitris Vagiakakos real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Dino <23552286+dinosmm@users.noreply.github.com> real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Doug <6060466+pixlwave@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Edgars Andersons real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Element Translate Bot real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot ElementRobot real-clock-time side-branch-only 21 +threadnet-call upstream-or-bot Enrico Schwendig real-clock-time side-branch-only 27 +threadnet-call upstream-or-bot Erik Bedami real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Erik Johnston real-clock-time side-branch-only 11 +threadnet-call upstream-or-bot Erik Johnston real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Erkin Alp Güney real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Genbuchan real-clock-time side-branch-only 23 +threadnet-call upstream-or-bot Glandos real-clock-time side-branch-only 24 +threadnet-call upstream-or-bot Gordnho real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Half-Shot real-clock-time side-branch-only 17 +threadnet-call upstream-or-bot Harshal Taori real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Harshal-Taori-11 <75373361+Harshal-Taori-11@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Hugh Nimmo-Smith real-clock-time side-branch-only 28 +threadnet-call upstream-or-bot Hugh Nimmo-Smith real-clock-time side-branch-only 94 +threadnet-call upstream-or-bot Ihor Hordiichuk real-clock-time side-branch-only 29 +threadnet-call upstream-or-bot Jake Janicke <37964537+JakeTripplJ@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Jake Janicke real-clock-time side-branch-only 11 +threadnet-call upstream-or-bot Jeff Huang real-clock-time side-branch-only 15 +threadnet-call upstream-or-bot JephDiel real-clock-time side-branch-only 7 +threadnet-call upstream-or-bot Johannes Marbach real-clock-time side-branch-only 4 +threadnet-call upstream-or-bot Johannes Marbach real-clock-time side-branch-only 50 +threadnet-call upstream-or-bot Jorge Martin Espinosa real-clock-time side-branch-only 4 +threadnet-call upstream-or-bot Jorge Martín real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Jozef Gaal real-clock-time side-branch-only 19 +threadnet-call upstream-or-bot Kalissaac real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Kat Gerasimova real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Kim Brose <2803622+HarHarLinks@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot LinAGKar real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot Linerly real-clock-time side-branch-only 25 +threadnet-call upstream-or-bot Marcel Ackermann <31695+dreamflasher@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot MarySue real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Matthew Hodgson real-clock-time side-branch-only 14 +threadnet-call upstream-or-bot Michael Kaye <1917473+michaelkaye@users.noreply.github.com> real-clock-time side-branch-only 24 +threadnet-call upstream-or-bot Michael Telatynski <7t3chguy@gmail.com> real-clock-time side-branch-only 18 +threadnet-call upstream-or-bot Milton Moura real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Mohammed Tayeh real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot MomentQYC <62551256+MomentQYC@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot MomentQYC real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Murat Ersin real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Nui Harime real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Open Culture Foundation real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Peter Chen real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Platon Terekhov real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Priit Jõerüüt real-clock-time side-branch-only 25 +threadnet-call upstream-or-bot Przemysław Romanik real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Quentin Gliech real-clock-time side-branch-only 14 +threadnet-call upstream-or-bot Richard van der Hoff <1389908+richvdh@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Robert Long real-clock-time side-branch-only 471 +threadnet-call upstream-or-bot Robin real-clock-time side-branch-only 1557 +threadnet-call upstream-or-bot Robin Townsend real-clock-time side-branch-only 360 +threadnet-call upstream-or-bot Rodion Borisov real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Ryan Emmick real-clock-time side-branch-only 11 +threadnet-call upstream-or-bot Slavi Pantaleev real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot SmallJinn real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Someone real-clock-time side-branch-only 4 +threadnet-call upstream-or-bot Stefan Ceriu real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Strac Consulting Engineers Pty Ltd real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Suguru Hirahara real-clock-time side-branch-only 5 +threadnet-call upstream-or-bot Suguru Hirahara real-clock-time side-branch-only 21 +threadnet-call upstream-or-bot Theo real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Thibault Martin real-clock-time side-branch-only 4 +threadnet-call upstream-or-bot Timo <16718859+toger5@users.noreply.github.com> real-clock-time side-branch-only 250 +threadnet-call upstream-or-bot Timo real-clock-time side-branch-only 102 +threadnet-call upstream-or-bot Timo K real-clock-time side-branch-only 470 +threadnet-call upstream-or-bot Toomore Chiang real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot Travis Ralston real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Travis Ralston real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot Valere real-clock-time side-branch-only 377 +threadnet-call upstream-or-bot Valere Fedronic real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot Valere Fedronic real-clock-time side-branch-only 8 +threadnet-call upstream-or-bot Valere Fedronic real-clock-time side-branch-only 75 +threadnet-call upstream-or-bot Vri real-clock-time side-branch-only 29 +threadnet-call upstream-or-bot Weblate real-clock-time side-branch-only 30 +threadnet-call upstream-or-bot Will Hunt <2072976+Half-Shot@users.noreply.github.com> real-clock-time side-branch-only 4 +threadnet-call upstream-or-bot Will Hunt real-clock-time side-branch-only 29 +threadnet-call upstream-or-bot Will Hunt real-clock-time side-branch-only 4 +threadnet-call upstream-or-bot Youngbin Han real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot aethralis real-clock-time side-branch-only 10 +threadnet-call upstream-or-bot afr4283 real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot alariej real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot alutarius <35006594+alutarius@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot davidegirardi <16451191+davidegirardi@users.noreply.github.com> real-clock-time side-branch-only 2 +threadnet-call upstream-or-bot dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot fkwp <5071496+fkwp@users.noreply.github.com> real-clock-time side-branch-only 17 +threadnet-call upstream-or-bot fkwp real-clock-time side-branch-only 321 +threadnet-call upstream-or-bot fkwp real-clock-time side-branch-only 195 +threadnet-call upstream-or-bot joemama real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot kongo09 real-clock-time side-branch-only 4 +threadnet-call upstream-or-bot lunarna-gh real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot manfrommedan real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot mmehdishafiee real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot phardyle real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot random real-clock-time side-branch-only 9 +threadnet-call upstream-or-bot raspin0 real-clock-time side-branch-only 12 +threadnet-call upstream-or-bot renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> real-clock-time side-branch-only 824 +threadnet-call upstream-or-bot robintown <48614497+robintown@users.noreply.github.com> real-clock-time side-branch-only 3 +threadnet-call upstream-or-bot robintown real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot snoutie <71790678+SnoutBug@users.noreply.github.com> real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot waclaw66 real-clock-time side-branch-only 1 +threadnet-call upstream-or-bot Šimon Brandner real-clock-time side-branch-only 331 +threadnet-call upstream-or-bot Руся real-clock-time side-branch-only 1 +threadnet-operating agent Claude real-clock-time main 6 +threadnet-operating own Thore Cimbal real-clock-time main 10 +threadnet-operating own sorb real-clock-time main 5 diff --git a/analysis/scripts/common.py b/analysis/scripts/common.py index 01c59ee..850eef2 100644 --- a/analysis/scripts/common.py +++ b/analysis/scripts/common.py @@ -82,11 +82,19 @@ def assert_untouched(): "field-test mandate forbids:\n " + "\n ".join(offending)) -def git(repo, *args): - """Run git in repo, return stdout as text. Raises on non-zero exit.""" +def git(repo, *args, env_tz=None): + """Run git in repo, return stdout as text. Raises on non-zero exit. + + env_tz pins the timezone git renders dates in. Date rules in this + project are stated in UTC; rendering them in the machine's local zone + silently misclassifies every commit. + """ + env = None + if env_tz: + env = dict(os.environ, TZ=env_tz) res = subprocess.run( ["git", "-C", str(repo), *args], - capture_output=True, text=True, errors="replace", + capture_output=True, text=True, errors="replace", env=env, ) if res.returncode != 0: raise RuntimeError(f"git {' '.join(args)} in {repo}: {res.stderr.strip()}") diff --git a/analysis/scripts/inv_shas.py b/analysis/scripts/inv_shas.py new file mode 100644 index 0000000..d038748 --- /dev/null +++ b/analysis/scripts/inv_shas.py @@ -0,0 +1,144 @@ +"""Resolve commit-SHA references -> analysis/data/sha_refs.tsv. + +Added at the human's prompt during Phase 2: the 2026-08-07 history +rewrite gave 251 commits new SHAs, and shared/commit-zuordnung-2026-08-07.md +is the mapping list meant to keep older references resolvable. This +script tests whether that actually holds. + +Two row kinds share one file: + + doc-reference a SHA cited in a management-repo doc + mapping-entry an (old -> new) pair from the mapping table itself + +Scope note: only management-repo docs are scanned for references. The +component repos are forks whose upstream docs cite thousands of upstream +SHAs that were never part of this project's history; including them +would bury the signal. +""" + +import re + +from common import ( + DOC_SUFFIXES, MGMT_REPO, cell, git, repos, tracked_files, write_tsv, +) + +MAPPING_DOC = "shared/commit-zuordnung-2026-08-07.md" + +# Section heading -> repo name used elsewhere in the analysis. +SECTION_REPO = { + "gitops": "axion1337.chat-gitops", + "management": "management", + "ThreadNet-Web": "ThreadNet-Web", + "threadnet-call": "threadnet-call", +} + +MAPPING_ROW = re.compile(r"^\|\s*`([0-9a-f]{7,40})`\s*\|\s*`([0-9a-f]{7,40})`\s*\|") +SECTION = re.compile(r"^##\s+(.+?)\s+—\s+(\d+)\s+Commits\s*$") + +# A SHA-shaped token: 7-40 hex chars, mixing letters and digits so that +# plain numbers and hex-free words do not qualify. +SHA_TOKEN = re.compile(r"(?{new}", + status, repo if status.startswith("ok") else "", note]) + + # 2. Every SHA cited in a management doc. + docs = [f for f in tracked_files("management", MGMT_REPO) + if any(f.endswith(s) for s in DOC_SUFFIXES)] + for src in sorted(docs): + text = (MGMT_REPO / src).read_text(encoding="utf-8") + for lineno, line in enumerate(text.splitlines(), start=1): + if src == MAPPING_DOC and MAPPING_ROW.match(line): + continue # already covered as mapping-entry rows + for sha in SHA_TOKEN.findall(line): + hits = resolve(sha, index) + if hits: + status = "resolves" + note = f"found in {','.join(hits)}" + elif sha in old_to_new: + repo, new = old_to_new[sha] + if repo in known_repos and resolve(new, {repo: index[repo]}): + status = "resolves-via-mapping" + note = f"pre-rewrite SHA; mapping -> {new} in {repo}" + hits = [repo] + else: + status = "mapping-stale" + note = f"mapping points to {new} in {repo}, which does not exist" + else: + status = "orphan" + note = "resolves in no analysed repo and is not in the mapping table" + rows.append(["doc-reference", "management", src, lineno, sha, + status, ",".join(hits), cell(line.strip())[:160]]) + + rows.sort(key=lambda r: (r[0], r[2], r[3] if r[3] != "" else 0, r[4])) + write_tsv( + "sha_refs.tsv", + ["kind", "repo", "path", "line", "sha", "status", "resolved_in", "note"], + rows, + ) + + counts = {} + for r in rows: + counts[(r[0], r[5])] = counts.get((r[0], r[5]), 0) + 1 + for key in sorted(counts): + print(f" {key[0]:<14} {key[1]:<22} {counts[key]}") + + +if __name__ == "__main__": + main() diff --git a/analysis/scripts/inv_timestamps.py b/analysis/scripts/inv_timestamps.py new file mode 100644 index 0000000..3ebba0e --- /dev/null +++ b/analysis/scripts/inv_timestamps.py @@ -0,0 +1,86 @@ +"""Measure the 2026-08-07 timestamp anonymisation -> timestamp_anonymisation.tsv. + +CLAUDE.md:116-134 requires author *and* committer date of every commit in +the group to be 12:00:00 UTC, so that personal working hours cannot be +read out of the history. This script measures how far that holds. + +Upstream fork history is separated out: threadnet-call and ThreadNet-Web +carry thousands of commits by Element/Matrix contributors that were never +this project's to rewrite. Counting those as a leak would be dishonest, +so every row carries the author identity and an `own_identity` flag. + +Own identities are listed explicitly rather than guessed, and were read +off the actual author list of the six repos. +""" + +import re +from collections import Counter + +from common import cell, git, repos, write_tsv + +# The one person behind this project, in every spelling that appears in +# the six repos' author fields -- including the malformed one. +OWN_IDENTITIES = { + "thore cimbal ", + "scrublord macbad ", + "scrublordmcbad ", + "sorb ", + "sorb ", +} +# Agent-authored commits: not a person's working hours, but they were made +# during one, so they are reported separately rather than ignored. +AGENT_IDENTITIES = {"claude "} + +ANONYMISED = "12:00:00" + + +def classify(ident): + low = ident.lower() + if low in OWN_IDENTITIES: + return "own" + if low in AGENT_IDENTITIES: + return "agent" + return "upstream-or-bot" + + +def main(): + rows = [] + for name, repo in repos(): + # Author time forced to UTC: the rule is stated in UTC, and reading + # it in local time silently classifies every commit as non-compliant. + log = git(repo, "log", "--all", "--date=format-local:%H:%M:%S", + "--format=%H%x09%ad%x09%an <%ae>", env_tz="UTC") + main_shas = { + line.strip() + for line in git(repo, "log", "--format=%H", "origin/main").splitlines() + if line.strip() + } + + buckets = Counter() + for line in log.splitlines(): + if not line.strip(): + continue + sha, when, ident = line.split("\t", 2) + anon = when == ANONYMISED + buckets[(classify(ident), anon, sha in main_shas, ident)] += 1 + + for (who, anon, on_main, ident), n in sorted(buckets.items()): + rows.append([name, who, ident, + "anonymised" if anon else "real-clock-time", + "main" if on_main else "side-branch-only", n]) + + rows.sort(key=lambda r: (r[0], r[1], r[3], r[4], r[2])) + write_tsv( + "timestamp_anonymisation.tsv", + ["repo", "identity_class", "author", "timestamp_state", "reachable_from", + "commits"], + rows, + ) + + leak = sum(int(r[5]) for r in rows + if r[1] in ("own", "agent") and r[3] == "real-clock-time") + print(f" commits by own/agent identities still carrying real clock time: {leak}") + + +if __name__ == "__main__": + main() diff --git a/analysis/scripts/run_all.sh b/analysis/scripts/run_all.sh index cba21f4..7b5151c 100755 --- a/analysis/scripts/run_all.sh +++ b/analysis/scripts/run_all.sh @@ -64,5 +64,13 @@ echo echo "== claims" python3 "$SCRIPTS/inv_claims.py" +echo +echo "== commit-SHA references and the 2026-08-07 rewrite mapping" +python3 "$SCRIPTS/inv_shas.py" + +echo +echo "== timestamp anonymisation coverage" +python3 "$SCRIPTS/inv_timestamps.py" + echo echo "done. raw data in $MGMT_REPO/analysis/data/"