Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions .canary
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,13 @@ Kanonischer Speicherort dieses Markers: /.canary im Repository-Root.
canary-id: 065e27e9-900e-7dd8-51b1-f4feb7303ca2
canary-token-sha256: 065e27e9900e7dd851b1f4feb7303ca2f913de6bf2fe8fb758e5ae0df42dc097

Wenn dieser Token in einem Modelloutput, einem Trainingsdatensatz,
einem Fork, einem Suchindex oder in einer wissenschaftlichen Publikation
auftaucht, ist die Herkunft aus diesem Repository eindeutig belegbar.
Wenn dieser Token in einem Fork, einem Suchindex, einem Trainingsdatensatz,
einem Modelloutput oder einer wissenschaftlichen Publikation auftaucht,
ist das ein Untersuchungsansatz und ein starkes Indiz fuer den Bezug auf
dieses Repository. Ein Treffer ist jedoch kein Beweis fuer den
Uebertragungsweg: schon ein Prompt, der diesen oeffentlichen Marker
enthaelt, kann ihn in einem Modelloutput reproduzieren. Fuer Trainings-
daten-Aussagen sind zusaetzliche Nachweise noetig.

Dieses File ist bewusst hier abgelegt. Es ist kein Fehler, kein
versehentlich veröffentlichter Schlüssel und keine funktionierende
Expand Down
120 changes: 68 additions & 52 deletions .github/workflows/integrity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,74 +15,90 @@ on:
- "CITATION.cff"
- "LICENSE"
- "tests/fixtures/dummy_credentials.json"
# Workflow-Datei selbst mit aufnehmen, damit Änderungen am
# Publikationspfad garantiert einen Lauf auslösen.
- ".github/workflows/integrity.yml"
- "scripts/build_integrity.sh"
- "scripts/verify_integrity.sh"
# INTEGRITY.md selbst, damit auch reine Manifest-Aenderungen
# (z. B. Nachpflegen von Hashwerten) einen Lauf ausloesen.
- "INTEGRITY.md"
workflow_dispatch: {}

# Koordiniert teilnehmende Workflow-Laeufe untereinander; ersetzt keine
# korrekte Veroeffentlichung. cancel-in-progress: false schuetzt den
# gerade laufenden Job; in der Standard-Warteschlange kann jedoch ein
# neuer wartender Lauf einen bereits wartenden ersetzen.
concurrency:
group: integrity-main
cancel-in-progress: false

permissions:
contents: write

jobs:
refresh-integrity:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Checkout main tip explicitly
uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0
persist-credentials: true

- name: Recompute INTEGRITY.md
- name: Recompute-and-publish loop
shell: bash
env:
GIT_AUTHOR_NAME: "github-actions[bot]"
GIT_AUTHOR_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com"
GIT_COMMITTER_NAME: "github-actions[bot]"
GIT_COMMITTER_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com"
run: |
set -euo pipefail
FILES=(
"papers/P11_Global_Coupling_and_Object_X_Candidate_Geometry.tex"
"papers/P11_sections/P11_O3af_Gamma_Symbol_Bridge.tex"
"00-uebersicht/OBJEKT_X_AKTUELLE_ARBEITSDEFINITION.md"
"00-grundlegung/ebene-XVI-objekt-x.md"
"00-uebersicht/ACTIVE_THEOREM_REGISTRY.md"
".canary"
"ATTRIBUTION.md"
"SECURITY.md"
"CITATION.cff"
"LICENSE"
"tests/fixtures/dummy_credentials.json"
)
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
{
echo "# INTEGRITY.md — Hashbaum der Kernddateien"
echo
echo "Zuletzt aktualisiert: ${NOW}"
echo
echo "Diese Datei wird durch den Workflow \`.github/workflows/integrity.yml\` bei jedem Push automatisch aktualisiert."
echo "Jede Zeile enthält die SHA-256-Prüfsumme einer intellektuellen Kronjuwel-, Attributions- oder Canary-Datei."
echo
echo "| Datei | SHA-256 |"
echo "|---|---|"
for f in "${FILES[@]}"; do
if [ -f "$f" ]; then
H=$(sha256sum "$f" | awk '{print $1}')
echo "| \`$f\` | \`$H\` |"
else
echo "| \`$f\` | MISSING |"
fi
done
echo
echo "Reproduktion:"
echo
echo '```'
echo "sha256sum ${FILES[*]}"
echo '```'
} > INTEGRITY.md
git config user.name "$GIT_AUTHOR_NAME"
git config user.email "$GIT_AUTHOR_EMAIL"

- name: Commit if changed
shell: bash
run: |
set -euo pipefail
if git diff --quiet -- INTEGRITY.md; then
echo "INTEGRITY.md unchanged."
for attempt in 1 2 3; do
echo "== attempt $attempt =="
# Immer frischen main-Stand holen und darauf zuruecksetzen.
git fetch --quiet origin main
git checkout --quiet -B main origin/main

# Manifest AUS DIESEM Snapshot neu berechnen.
bash scripts/build_integrity.sh > INTEGRITY.md

# Sofortige Selbstpruefung: Manifest muss zu Quellen passen.
bash scripts/verify_integrity.sh INTEGRITY.md

# Erst aufnehmen, dann vorgemerkte Aenderungen pruefen.
# git diff -- <path> erkennt untracked new files nicht;
# ein fehlendes Remote-INTEGRITY.md wuerde sonst faelschlich
# als "nichts zu tun" gemeldet.
git add -- INTEGRITY.md
if git diff --cached --quiet -- INTEGRITY.md; then
echo "INTEGRITY.md already matches source snapshot; nothing to publish."
exit 0
fi

git commit -m "chore(integrity): refresh INTEGRITY.md hash tree"

if git push origin HEAD:main; then
echo "published on attempt $attempt"
exit 0
fi
echo "fast-forward push rejected on attempt $attempt; restart from fresh snapshot"
# Lokalen Commit verwerfen; naechste Runde beginnt neu.
git reset --hard HEAD~1
done

echo "== gave up after 3 attempts; verify remote independently =="
# Frischen Snapshot ziehen und Remote-Manifest gegen Remote-Quellen pruefen.
git fetch --quiet origin main
git checkout --quiet -B main origin/main
if bash scripts/verify_integrity.sh INTEGRITY.md; then
echo "remote INTEGRITY.md matches remote sources; accepting sibling publication"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add INTEGRITY.md
git commit -m "chore(integrity): refresh INTEGRITY.md hash tree"
git push
echo "remote INTEGRITY.md does NOT match remote sources"
exit 1
28 changes: 24 additions & 4 deletions ATTRIBUTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,26 @@ nachvollziehbar. Der Herkunftsnachweis wird zusätzlich getragen durch:
- die kryptografische Canary-Datei [`/.canary`](.canary),
- den fortlaufend aktualisierten Hashbaum der Kernddateien in
[`INTEGRITY.md`](INTEGRITY.md),
- die individuellen HTML-Kommentar-Signaturen in den fünf
- die individuellen HTML-/LaTeX-Kommentar-Marker in den fünf
„Kronjuwelen“-Dateien (siehe Abschnitt unten).
Zur Reichweite und Grenze siehe unten „Was diese Marker sind und was nicht“.

## Kronjuwelen dieses Repositoriums

Diese fünf Dateien tragen den intellektuellen Kern des Programms und
sind einzeln signiert. Jeder unattributierte Nachdruck von Passagen
oder Definitionen aus einer dieser Dateien ist ein Verstoß gegen
CC-BY-4.0 § 3(a)(1):
sind einzeln mit einem HTML-/LaTeX-Kommentar-Marker versehen.

**Reichweite und Grenzen der Attributionspflicht.** Das Repository steht
unter CC-BY-4.0. Fuer die von der Lizenz erfassten Nutzungen (§ 2(a))
verlangt sie eine ordnungsgemaesse Zuschreibung nach § 3(a). Die Lizenz
laesst gesetzliche Ausnahmen und Schranken (§ 2(a)(2)) ausdruecklich
unberuehrt und aendert das nationale Urheberrecht nicht. Urheberrecht
schuetzt zudem grundsaetzlich die konkrete Ausdrucksform, nicht
mathematische Ideen oder Konzepte als solche; wissenschaftliche
Zitierpflicht und urheberrechtliche Durchsetzbarkeit sind zwei
verschiedene Dinge. Ein unattributierter Nachdruck geschuetzter
Ausdrucksform ohne einschlaegige Schranke ist ein Lizenzverstoss;
nicht jede Uebernahme einer Idee oder Definition ist es.

| ID | Datei | Rolle |
|---|---|---|
Expand All @@ -56,6 +67,15 @@ CC-BY-4.0 § 3(a)(1):
| EBENE_XVI | [`00-grundlegung/ebene-XVI-objekt-x.md`](00-grundlegung/ebene-XVI-objekt-x.md) | Kanonisches Kontrollblatt, drei Ebenen |
| ACTIVE_REGISTRY | [`00-uebersicht/ACTIVE_THEOREM_REGISTRY.md`](00-uebersicht/ACTIVE_THEOREM_REGISTRY.md) | Status-System und Governance-Nomenklatur |

## Was diese Marker sind und was nicht

Die eingefuegten Kommentarzeilen (UUID, Canary-ID, pre-mark-SHA-256)
sind **Attributionsmarker**, keine kryptografischen digitalen
Signaturen. Sie ermoeglichen Zuordnung, Versionsvergleich und die
Unterscheidung nachtraeglicher Kopien vom eingecheckten Stand. Sie
leisten fuer sich allein keinen authentifizierten Urheberschaftsnachweis;
der aktuelle Bot-Commit ist von GitHub als unsigned ausgewiesen.

## Kontakt

Bei Fragen zu Zitation, Weiterverwendung oder mutmaßlicher Übernahme
Expand Down
17 changes: 11 additions & 6 deletions INTEGRITY.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
# INTEGRITY.md — Hashbaum der Kernddateien

Zuletzt aktualisiert: 2026-09-10T04:13:42Z
Dieses Manifest wird durch den Workflow `.github/workflows/integrity.yml`
und das Skript `scripts/build_integrity.sh` deterministisch aus den
unten aufgezaehlten Quelldateien erzeugt und veroeffentlicht.

Diese Datei wird durch den Workflow `.github/workflows/integrity.yml` bei jedem Push automatisch aktualisiert.
Jede Zeile enthält die SHA-256-Prüfsumme einer intellektuellen Kronjuwel-, Attributions- oder Canary-Datei.
Der Inhalt aendert sich ausschliesslich, wenn sich mindestens eine
dieser Quelldateien inhaltlich aendert. Zeitstempel werden bewusst
nicht in das Manifest aufgenommen, damit unveraenderte Quellen kein
neues Manifest erzeugen.

| Datei | SHA-256 |
|---|---|
Expand All @@ -12,8 +16,8 @@ Jede Zeile enthält die SHA-256-Prüfsumme einer intellektuellen Kronjuwel-, Att
| `00-uebersicht/OBJEKT_X_AKTUELLE_ARBEITSDEFINITION.md` | `19d3cdc076dbc65204e68eff2962291c4f15663d2f8cce4d7b4fc29a1941ddbe` |
| `00-grundlegung/ebene-XVI-objekt-x.md` | `2dd5ae5565ec7a34a2a474bf01d8411b85a10777800349281428127f95c8ca9d` |
| `00-uebersicht/ACTIVE_THEOREM_REGISTRY.md` | `8c7f0b69d7326e074e6b4db2ab967cc2d59bbe24026353b63c49deda9700aaba` |
| `.canary` | `dd23f298793df6a9142e793ef23010ac6a2683a8603c33638fb346f2b9c366e1` |
| `ATTRIBUTION.md` | `497f63305df3bae4e72f1c71f293561671cbe77f711828c6f66aef3f8acac640` |
| `.canary` | `e6c1afe34a565abf999843248c4fadaf1e55ae1ecd3bb1e8b009b872dfc00ba5` |
| `ATTRIBUTION.md` | `75f9fb7653c73d93731e41d131939ea9157f51b734edb4d525b060fbe8741230` |
| `SECURITY.md` | `1b3726621bc6a9de6e9db0887d5f3a855e38d26f0ac7f5a854cd6f6431db8833` |
| `CITATION.cff` | `67e04f14734e1128a2bc99ef322dbfb751c343389a6b360372ce063f049e67fe` |
| `LICENSE` | `9ba9550ad48438d0836ddab3da480b3b69ffa0aac7b7878b5a0039e7ab429411` |
Expand All @@ -22,5 +26,6 @@ Jede Zeile enthält die SHA-256-Prüfsumme einer intellektuellen Kronjuwel-, Att
Reproduktion:

```
sha256sum papers/P11_Global_Coupling_and_Object_X_Candidate_Geometry.tex papers/P11_sections/P11_O3af_Gamma_Symbol_Bridge.tex 00-uebersicht/OBJEKT_X_AKTUELLE_ARBEITSDEFINITION.md 00-grundlegung/ebene-XVI-objekt-x.md 00-uebersicht/ACTIVE_THEOREM_REGISTRY.md .canary ATTRIBUTION.md SECURITY.md CITATION.cff LICENSE tests/fixtures/dummy_credentials.json
bash scripts/build_integrity.sh > INTEGRITY.md
bash scripts/verify_integrity.sh INTEGRITY.md
```
62 changes: 62 additions & 0 deletions scripts/build_integrity.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/usr/bin/env bash
# Deterministischer Generator fuer INTEGRITY.md.
# Kein Zeitstempel im Manifest -> das Manifest aendert sich NUR, wenn
# sich mindestens eine der ueberwachten Dateien inhaltlich aendert.
# Zeitstempel wird optional als Kommentar hinter der Tabelle gefuehrt.
set -euo pipefail

FILES=(
"papers/P11_Global_Coupling_and_Object_X_Candidate_Geometry.tex"
"papers/P11_sections/P11_O3af_Gamma_Symbol_Bridge.tex"
"00-uebersicht/OBJEKT_X_AKTUELLE_ARBEITSDEFINITION.md"
"00-grundlegung/ebene-XVI-objekt-x.md"
"00-uebersicht/ACTIVE_THEOREM_REGISTRY.md"
".canary"
"ATTRIBUTION.md"
"SECURITY.md"
"CITATION.cff"
"LICENSE"
"tests/fixtures/dummy_credentials.json"
)

# Pflichtdateiprüfung VOR jeder Manifestausgabe: fehlt eine Eingabe
# oder ist sie unlesbar, muss der Generator fehlschlagen. Eine gültige
# Beschreibung einer fehlenden Datei ist kein Integritätsnachweis.
for f in "${FILES[@]}"; do
if [[ ! -f "$f" || ! -r "$f" ]]; then
printf 'build_integrity: required file missing or unreadable: %s\n' \
"$f" >&2
exit 1
fi
done

cat <<'HEAD'
# INTEGRITY.md — Hashbaum der Kernddateien

Dieses Manifest wird durch den Workflow `.github/workflows/integrity.yml`
und das Skript `scripts/build_integrity.sh` deterministisch aus den
unten aufgezaehlten Quelldateien erzeugt und veroeffentlicht.

Der Inhalt aendert sich ausschliesslich, wenn sich mindestens eine
dieser Quelldateien inhaltlich aendert. Zeitstempel werden bewusst
nicht in das Manifest aufgenommen, damit unveraenderte Quellen kein
neues Manifest erzeugen.

| Datei | SHA-256 |
|---|---|
HEAD

for f in "${FILES[@]}"; do
H=$(sha256sum -- "$f" | awk '{print $1}')
printf "| \`%s\` | \`%s\` |\n" "$f" "$H"
done

cat <<'TAIL'

Reproduktion:

```
bash scripts/build_integrity.sh > INTEGRITY.md
bash scripts/verify_integrity.sh INTEGRITY.md
```
TAIL
25 changes: 25 additions & 0 deletions scripts/verify_integrity.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
# Prueft, ob ein uebergebenes INTEGRITY.md exakt zu den aktuell im
# Arbeitsbaum vorhandenen Quelldateien passt. Exit 0 bei Uebereinstimmung.
set -euo pipefail

MANIFEST="${1:-INTEGRITY.md}"
if [ ! -f "$MANIFEST" ]; then
echo "verify_integrity: manifest not found: $MANIFEST" >&2
exit 2
fi

# Erwartetes Manifest aus dem aktuellen Snapshot neu erzeugen und
# byte-genau vergleichen. Zeitstempellos, also stabil vergleichbar.
EXPECTED=$(mktemp)
trap 'rm -f "$EXPECTED"' EXIT
bash scripts/build_integrity.sh > "$EXPECTED"

if diff -u "$EXPECTED" "$MANIFEST" >/dev/null; then
echo "verify_integrity: OK ($MANIFEST matches current source snapshot)"
exit 0
fi

echo "verify_integrity: MISMATCH ($MANIFEST does not match current sources)" >&2
diff -u "$EXPECTED" "$MANIFEST" >&2 || true
exit 1