Fix: Markdown-Downloads nicht mehr als application/zip ausliefern

Ursache: nginx location /downloads/ mit default_type application/zip —
.md fehlt in mime.types, Browser speichern Listen als .zip.

- fulfill/nginx.snippet.conf: types für zip/md/txt/pdf, default octet-stream
- HTML: download="<dateiname>.md" an allen Markdown-Links (33)
- HANDOFF Abschnitt 13, README-Hinweis

Live-Site-Config (/etc/nginx/sites-available/ki-buch-archive) braucht
noch sudo-Anpassung + nginx reload; nicht in diesem Commit.
This commit is contained in:
grok-bot committed 2026-11-09 09:17:01 +01:00
1 parent 7d1f65ea5b
commit 9b5db2d3eb
17 files changed
+62 -35

No files matched your search

+7
View File
@@ -7,6 +7,13 @@
## Letzte Arbeit (committed)
### 13. Markdown-Downloads als ZIP (09.11., Branch `md-download-2026-11-09`, nicht gepusht)
- Symptom: Listen wie „Drei Fragen an das System“ speichern der Browser als `.zip`, Inhalt ist `.md`.
- Ursache Live (nginx VM 300, `/etc/nginx/sites-available/ki-buch-archive`): `location /downloads/ { default_type application/zip; … }` — `.md` fehlt in `mime.types`, landet deshalb als ZIP; `Content-Disposition: attachment` ohne Dateiname.
- Repo-Fix: `fulfill/nginx.snippet.conf` mit korrekten `types` (zip/md/txt/pdf) und `default_type application/octet-stream`; alle Markdown-Links bekommen `download="<dateiname>.md"` (33 Stellen in 14 HTML-Dateien).
- Live-Schaltung braucht zusätzlich sudo-Edit der Site-Config + `nginx -t` + reload (siehe Commit/HANDOFF); Snippet allein ändert den laufenden nginx nicht.
### 13. Coding-Agents-Buchseite 07.11. (Branch `coding-agents-buchseite-2026-11-07`, ff nach `main`, gemergt, nicht deployt)
- Auftrag: Buchseite im Schwesterprojekt aktualisieren (Richie 07.11.2026).
- Buch-Repo `main` = `origin/main` = `a1b2505` (AP4–AP8 + BP-07 gepusht). eBook 252 S., Print 300 S., Wörter 58 389. Behebungsplan abgeschlossen; Ampel GELB (AP3-Band 214 Rest; Rescore 81,3 als Untergrenze).
+1
View File
@@ -72,6 +72,7 @@ ki-buch-archive/ # Repo-Name; Domain: books.maatini.space
| `/projects/agents-angular-spring-quarkus/` | Begleit-Service Agents mit Angular, Spring Boot & Quarkus |
| `/downloads/<slug>/*.zip` | Mitmach-Material |
| `/downloads/<slug>/MANIFEST.txt` | SHA256 und material-Version |
| `/downloads/<slug>/*.md` | Markdown-Spiegel (MIME `text/markdown`, siehe `fulfill/nginx.snippet.conf`) |
---
+21 -2
View File
@@ -1,5 +1,7 @@
# In den Server-Block von books.maatini.space einfügen.
# Statische Site unverändert; nur /api/ und /d/ an den Python-Dienst.
# In den Server-Block von books.maatini.space einfügen
# (Live: /etc/nginx/sites-available/ki-buch-archive auf VM 300).
# Statische Site unverändert; /api/ und /d/ an den Python-Dienst;
# /downloads/ mit korrekten MIME-Typen (nicht alles als ZIP).
location /api/ {
proxy_pass http://127.0.0.1:8787;
@@ -15,3 +17,20 @@ location /d/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 120s;
}
# Mitmach-Material: ZIP, Markdown, TXT, PDF.
# Wichtig: default_type darf NICHT application/zip sein — sonst werden
# .md-Dateien (fehlen in mime.types) als ZIP ausgeliefert und Browser
# speichern sie mit .zip-Endung (Stand vor Fix 2026-11-09).
location /downloads/ {
types {
application/zip zip;
text/markdown md markdown;
text/plain txt;
application/pdf pdf;
}
default_type application/octet-stream;
charset utf-8;
charset_types text/markdown text/plain;
add_header Content-Disposition attachment;
}
@@ -132,7 +132,7 @@
<p><strong>Buch-Konzept bleibt gültig.</strong> Prinzipien tool-frei; Copilot = Worked Example.</p>
<p>
<strong>Buch:</strong> Kap. 2, Anhang&nbsp;C ·
<strong>Material:</strong> <a href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download><code>agent-mapping.md</code></a>
<strong>Material:</strong> <a href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download="agent-mapping.md"><code>agent-mapping.md</code></a>
</p>
</article>
@@ -74,7 +74,7 @@
Prinzipien sind tool-unabhängig; die Concrete-Beispiele nutzen
<strong>GitHub Copilot</strong> (Instructions, path-instructions, Skills).
Anderer Harness: Mapping unter
<a href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download><code>agent-mapping.md</code></a>
<a href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download="agent-mapping.md"><code>agent-mapping.md</code></a>
(Anhang&nbsp;C) und Schwester-Begleit-Services bei Bedarf.
</p>
</div>
@@ -157,7 +157,7 @@
</p>
<p class="filename">command-referenz.md · companion-0.1.0</p>
</div>
<a class="btn btn--primary" href="/downloads/agents-angular-spring-quarkus/command-referenz.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/agents-angular-spring-quarkus/command-referenz.md" download="command-referenz.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -169,7 +169,7 @@
</p>
<p class="filename">agent-mapping.md · companion-0.1.0</p>
</div>
<a class="btn btn--primary" href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download="agent-mapping.md">Markdown herunterladen</a>
</article>
</div>
<p class="reviewed-line">
@@ -110,7 +110,7 @@
SHA256: 1dd82775e62685767a16dac4cc22a9f27b7261019caf59eb59834bb121800b3a
</p>
</div>
<a class="btn btn--primary" href="/downloads/agents-angular-spring-quarkus/command-referenz.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/agents-angular-spring-quarkus/command-referenz.md" download="command-referenz.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -126,7 +126,7 @@
SHA256: 4e54d504e0de639375a40692e0360ef803ea3395d4476b615ba41a6510b455d1
</p>
</div>
<a class="btn btn--primary" href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download="agent-mapping.md">Markdown herunterladen</a>
</article>
</div>
@@ -116,8 +116,8 @@
<ul>
<li>Buch: Kap. 1–2 (These&nbsp;7 invers, mentales Modell), Kap. 4 (Repo-Zielbild), Kap. 8–9 (Slices, DoD/Verify), Kap. 10 (Instructions/Skills/MCP)</li>
<li>Material: <a href="/projects/agents-angular-spring-quarkus/material/">Vorlagen, Checklisten &amp; Anhänge</a></li>
<li>Commands: <a href="/downloads/agents-angular-spring-quarkus/command-referenz.md" download><code>command-referenz.md</code></a></li>
<li>Transfer: <a href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download><code>agent-mapping.md</code></a></li>
<li>Commands: <a href="/downloads/agents-angular-spring-quarkus/command-referenz.md" download="command-referenz.md"><code>command-referenz.md</code></a></li>
<li>Transfer: <a href="/downloads/agents-angular-spring-quarkus/agent-mapping.md" download="agent-mapping.md"><code>agent-mapping.md</code></a></li>
<li>Symptom-Hilfe: <a href="/projects/agents-angular-spring-quarkus/hilfe/">Schnelle Hilfe</a></li>
<li>Stack-Primärdoku + eure gepinnten Versionen (Node, JDK, Angular, Spring, Quarkus)</li>
</ul>
@@ -208,7 +208,7 @@
<p>
<strong>Buch:</strong> Kap. 15, Anhang&nbsp;B ·
<strong>Material:</strong>
<a href="/downloads/coding-agents-praxis/stack-orientierung.md" download><code>stack-orientierung.md</code></a>
<a href="/downloads/coding-agents-praxis/stack-orientierung.md" download="stack-orientierung.md"><code>stack-orientierung.md</code></a>
</p>
</article>
+2 -2
View File
@@ -89,7 +89,7 @@
und Reife-Assessment (über den PDF-Snapshot Anhang&nbsp;A hinaus — Vereinfachung, kein Erratum).
Download unter <a href="/projects/coding-agents-praxis/material/">Material</a>
bzw. direkt
<a href="/downloads/coding-agents-praxis/stack-orientierung.md" download><code>stack-orientierung.md</code></a>.
<a href="/downloads/coding-agents-praxis/stack-orientierung.md" download="stack-orientierung.md"><code>stack-orientierung.md</code></a>.
</p>
</div>
@@ -245,7 +245,7 @@
</p>
<p class="filename">stack-orientierung.md · companion-0.1.6</p>
</div>
<a class="btn btn--primary" href="/downloads/coding-agents-praxis/stack-orientierung.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/coding-agents-praxis/stack-orientierung.md" download="stack-orientierung.md">Markdown herunterladen</a>
</article>
</div>
@@ -114,7 +114,7 @@
SHA256: 1443cebf5d6a582c7e465fe35f8524e9b2990949b3acf25ef381607daed84328
</p>
</div>
<a class="btn btn--primary" href="/downloads/coding-agents-praxis/stack-orientierung.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/coding-agents-praxis/stack-orientierung.md" download="stack-orientierung.md">Markdown herunterladen</a>
</article>
</div>
@@ -120,7 +120,7 @@
<ul>
<li>Buch: Kap. 1–4 (Thesen, Context, Praxis-Artefakte), Kap. 10 (DoD), Kap. 15 (Stack-Wahl), Kap. 19 (Katalog)</li>
<li>Material: <a href="/projects/coding-agents-praxis/material/">Vorlagen, Checklisten &amp; Stack-Orientierung</a></li>
<li>Stack-Rankings: <a href="/downloads/coding-agents-praxis/stack-orientierung.md" download><code>stack-orientierung.md</code></a> (Anhang&nbsp;B)</li>
<li>Stack-Rankings: <a href="/downloads/coding-agents-praxis/stack-orientierung.md" download="stack-orientierung.md"><code>stack-orientierung.md</code></a> (Anhang&nbsp;B)</li>
<li>Symptom-Hilfe: <a href="/projects/coding-agents-praxis/hilfe/">Schnelle Hilfe</a></li>
<li>Euer Tool: aktuelle Doku, <code>--help</code> / Slash-Menü, Versionsstring notieren</li>
</ul>
+1 -1
View File
@@ -194,7 +194,7 @@
<p>
<strong>Buch:</strong> Kap.&nbsp;10 ·
<strong>Material:</strong>
<a href="/downloads/ki-hinterm-vorhang/lese-checkliste.md" download><code>lese-checkliste.md</code></a>
<a href="/downloads/ki-hinterm-vorhang/lese-checkliste.md" download="lese-checkliste.md"><code>lese-checkliste.md</code></a>
</p>
</article>
+4 -4
View File
@@ -329,7 +329,7 @@
</p>
<p class="filename">lese-checkliste.md · material-2026-11-01</p>
</div>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/lese-checkliste.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/lese-checkliste.md" download="lese-checkliste.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -341,7 +341,7 @@
</p>
<p class="filename">denk-checkliste.md · material-2026-11-01</p>
</div>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/denk-checkliste.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/denk-checkliste.md" download="denk-checkliste.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -353,7 +353,7 @@
</p>
<p class="filename">ampel-matrix.md · material-2026-11-01</p>
</div>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/ampel-matrix.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/ampel-matrix.md" download="ampel-matrix.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -365,7 +365,7 @@
</p>
<p class="filename">kernbegriffe.md · material-2026-11-01</p>
</div>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/kernbegriffe.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/kernbegriffe.md" download="kernbegriffe.md">Markdown herunterladen</a>
</article>
</div>
@@ -77,7 +77,7 @@
SHA256: 6c3cab433b713a01ccf87bcf7e3fab615b56d04d6cec7f50557678ba773011cc
</p>
</div>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/lese-checkliste.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/lese-checkliste.md" download="lese-checkliste.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -92,7 +92,7 @@
SHA256: ca4deb96ba5ab4a46dfdf10891a2674ded04ca3ca51dcc5d3e7dd8fad64cfbd3
</p>
</div>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/denk-checkliste.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/denk-checkliste.md" download="denk-checkliste.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -109,7 +109,7 @@
SHA256: c4fe1b854ee5dc740373079923a0331b0b03aab09c4b49f1edcf0c36ad1ec02a
</p>
</div>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/ampel-matrix.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/ampel-matrix.md" download="ampel-matrix.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -124,7 +124,7 @@
SHA256: 2e2e427ab9ce8fb683ab8124ba358399d3d01b8d48b87d878faa92ebd4b8e882
</p>
</div>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/kernbegriffe.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/ki-hinterm-vorhang/kernbegriffe.md" download="kernbegriffe.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -66,7 +66,7 @@
<p>
<strong>Buch:</strong> Kap.&nbsp;1 ·
<strong>Material:</strong>
<a href="/downloads/was-bleibt-vom-menschen/drei-fragen.md" download><code>drei-fragen.md</code></a>
<a href="/downloads/was-bleibt-vom-menschen/drei-fragen.md" download="drei-fragen.md"><code>drei-fragen.md</code></a>
</p>
</article>
@@ -138,7 +138,7 @@
<p>
<strong>Buch:</strong> Kap.&nbsp;10 ·
<strong>Material:</strong>
<a href="/downloads/was-bleibt-vom-menschen/pruefbedingungen.md" download><code>pruefbedingungen.md</code></a>
<a href="/downloads/was-bleibt-vom-menschen/pruefbedingungen.md" download="pruefbedingungen.md"><code>pruefbedingungen.md</code></a>
</p>
</article>
@@ -192,7 +192,7 @@
<p>
<strong>Buch:</strong> Kap.&nbsp;26, Epilog ·
<strong>Material:</strong>
<a href="/downloads/was-bleibt-vom-menschen/sechs-hebel.md" download><code>sechs-hebel.md</code></a>
<a href="/downloads/was-bleibt-vom-menschen/sechs-hebel.md" download="sechs-hebel.md"><code>sechs-hebel.md</code></a>
</p>
</article>
+4 -4
View File
@@ -183,7 +183,7 @@
</p>
<p class="filename">drei-fragen.md · material-2026-10-31</p>
</div>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/drei-fragen.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/drei-fragen.md" download="drei-fragen.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -195,7 +195,7 @@
</p>
<p class="filename">pruefbedingungen.md · material-2026-10-31</p>
</div>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/pruefbedingungen.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/pruefbedingungen.md" download="pruefbedingungen.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -207,7 +207,7 @@
</p>
<p class="filename">sechs-hebel.md · material-2026-10-31</p>
</div>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/sechs-hebel.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/sechs-hebel.md" download="sechs-hebel.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -219,7 +219,7 @@
</p>
<p class="filename">kernbegriffe.md · material-2026-10-31</p>
</div>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/kernbegriffe.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/kernbegriffe.md" download="kernbegriffe.md">Markdown herunterladen</a>
</article>
</div>
@@ -77,7 +77,7 @@
SHA256: ed16a0ed6f53fd84572ab7619797cb5affa105d8c2269c026deb1bccaf9a6b3b
</p>
</div>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/drei-fragen.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/drei-fragen.md" download="drei-fragen.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -92,7 +92,7 @@
SHA256: 0ad91b9a4fa80e93bedfaf847f2567fc6df59c96873db05723a74912b33362b0
</p>
</div>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/pruefbedingungen.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/pruefbedingungen.md" download="pruefbedingungen.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -107,7 +107,7 @@
SHA256: f42d130853675ef20646a92c1ced630d76d6d5b0b7ae2565f0fc25511ca6d42f
</p>
</div>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/sechs-hebel.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/sechs-hebel.md" download="sechs-hebel.md">Markdown herunterladen</a>
</article>
<article class="download-card">
@@ -122,7 +122,7 @@
SHA256: f426ead8d999f219b0a2c1289a847625164c3bad9d6a18d4024c27feabf7bec3
</p>
</div>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/kernbegriffe.md" download>Markdown herunterladen</a>
<a class="btn btn--primary" href="/downloads/was-bleibt-vom-menschen/kernbegriffe.md" download="kernbegriffe.md">Markdown herunterladen</a>
</article>
<article class="download-card">