falzmarke

io.github.blitzsicht由 GitHub 帳號 blitzsicht 發布v0.11.2更新於 Nov 3, 2026

在產生的PDF上實測:用Markdown產生DIN 5008信函。目標值來自二手來源。

AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。

原文描述

Am fertigen PDF nachgemessen: DIN-5008-Briefe aus Markdown. Sollwerte aus Sekundärquellen.

已驗證STDIO僅桌面效率與工作流檔案與儲存

概覽

falzmarke 的本機 MCP 服務;無需登入;STDIO。

暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 falzmarke,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README


Andere Werkzeuge erzeugen ein PDF. falzmarke prüft das Ergebnis.

Du schreibst den Inhalt als Markdown. falzmarke setzt daraus einen Geschäftsbrief nach DIN 5008:2020 als PDF/A — und misst anschließend das fertige PDF nach. Sitzt die Falzmarke nicht auf 105,0 mm, endet der Lauf mit einem Fehler statt mit einem Brief, der nur ungefähr stimmt.


In English

DIN 5008 business letters from Markdown, PDF/A, MCP + CLI. falzmarke typesets German business letters as PDF/A and then measures the finished PDF; a folding mark out of place ends the run with an error. It runs as a Claude skill, as a command-line tool (pipx install falzmarke) and as an MCP server (pip install 'falzmarke[mcp]', then falzmarke mcp). The target values come from secondary sources: the comparison against the original text of DIN 5008:2020-03 including Corrigendum 1:2020-07 is still outstanding, and rules backed by a single source act as warnings only. English overview · Website, German

In Bewegung

[Ein Terminal zeigt den Musterbrief als Markdown, danach den Lauf von falzmarke render: PDF und Vorschau werden geschrieben, anschließend läuft der Messbericht durch und endet mit der Zeile, die die eingehaltenen Maße zählt.]

Aufgezeichnet aus der echten CLI mit vhs; das Drehbuch steht in docs/marke/video/readme.tape. Ein Test hält den Mitschnitt gegen einen frischen Lauf, damit hier kein Terminal steht, das es so nie gab (tests/test_tape.py).


Was dabei herauskommt

[Briefkopf, Anschriftfeld, Informationsblock und Betreff]

Und was danach geprüft wird — Auszug aus dem Bericht, den jeder Lauf ausgibt:

OK    Falzmarke 1, y: soll 105.00 ist 105.00 (tol ±0.3)OK    Infoblock, x-links: soll 125.00 ist 125.00 (tol ±0.5)OK    Betreff, y-Oberkante: soll 98.47 ist 97.91 (tol -1.75/+0.6)OK    Abstand Betreff → Anrede (2 Leerzeilen): soll 12.70 ist 12.70 (tol ±0.2)

Das sind vier von 34 Zeilen des Geometrieberichts. Der Film zeigt, wie die übrigen entstehen: Eine Linie fährt das Blatt ab und hält an jedem gemessenen Höhenmaß. Sie hält dort, wo die Messung es sagt — bei diesen Prüfungen ist der gemessene Wert zugleich die Stelle.

[Ein Beispielbrief, daneben ein Textfeld. Eine grüne waagerechte Linie wandert von oben nach unten über das Blatt und hält nacheinander an acht Stellen: Rücksendeangabe bei 46,26 Millimetern, Infoblock bei 50,34, Anschrift erste Zeile bei 62,69 und letzte Zeile bei 77,86, Betreff bei 98,45, Falzmarke 1 bei 105,00, Lochmarke bei 148,50 und Falzmarke 2 bei 210,00. Bei jedem Halt stehen daneben der Name der Prüfung, Sollwert, gemessener Wert, Toleranz und das Wort eingehalten. Am Ende liegen alle acht Linien gleichzeitig auf dem Blatt und daneben steht: 34 von 34 Prüfungen eingehalten.]

Acht der 34 Geometrieprüfungen tragen eine Höhe auf dem Blatt; die übrigen messen Breiten, Abstände und Eigenschaften ohne Ort auf der Seite. Die Zahl 35 weiter oben zählt eine mehr: Nach einem render sieht die CLI zusätzlich die PDF/A-Konformität nach, und die liegt auf keinem Millimeter. Beide Zahlen stimmen, sie zählen Verschiedenes.

Keine Zahl im Film ist abgetippt — sie kommen alle aus verify --json, und tests/test_messfilm.py hält den Film gegen einen frischen Messlauf. Verschiebt jemand die Falzmarke um 2 mm, muss der betroffene Halt rot werden; tut er es nicht, schlägt der Test fehl.

Die erste Zeile des Berichts oben spricht von einem Strich, den man auf einem Vorschaubild kaum sieht — er ist 0,25 pt stark. Vergrößert sieht die Stelle so aus:

[Ausschnitt vom linken Rand eines Briefes, sechs mal vier Millimeter groß: Eine gestrichelte grüne Hilfslinie markiert die Sollposition bei 105,00 Millimetern und geht auf gleicher Höhe in die kurze schwarze Falzmarke über, die knapp die halbe Bildbreite einnimmt. Daneben das ganze Blatt verkleinert, mit einem Rahmen um die vergrößerte Stelle. Darunter steht die gemessene Position 105,00 Millimeter.]

Dort wird der Bogen gefaltet, damit die Anschrift im Fensterumschlag steht. Sitzt die Marke falsch, faltet der Stapel falsch — und das fällt erst nach dem Druck auf.

Das Problem

Eine Briefvorlage kann nicht prüfen, ob das Ergebnis stimmt. Sie wird kopiert, jemand verschiebt eine Zeile, und der Fehler fällt erst am fertigen Stapel auf: Die Anschrift steht nicht mehr im Fensterausschnitt, alles muss neu gedruckt und kuvertiert werden — und wer mit Automationsrabatt einliefert, verliert ihn für diese Sendung.

Sprachmodelle verschärfen das. Sie formulieren gut, aber sie können keinen Text auf 45,0 mm setzen. Wer einen Brief von einer KI schreiben lässt, bekommt zuverlässig guten Inhalt in unzuverlässigem Layout.

Und ein Renderer kann ebenfalls Fehler haben — auch dieser hier.

Deshalb trennt falzmarke drei Dinge: Inhalt kommt als Markdown, lesbar und versionierbar. Das Layout setzt ein Renderer, der es immer gleich macht. Und die Prüfung misst das fertige PDF, statt dem Renderer zu glauben.

Warum nicht einfach Word oder ein Prompt?

Verglichen wird der typische Arbeitsablauf, nicht das Werkzeug an sich — mit einer sorgfältig gepflegten Vorlage lässt sich vieles davon erreichen.

Vorlage in Word / LibreOfficeBrief direkt von einer KIfalzmarke
Quelle diffbar und versionierbarteilweiseseltenja — Markdown und YAML
Layout reproduzierbarhängt an Vorlage und Umgebungnicht zugesichertja — derselbe Renderer, dieselbe Ausgabe
Fertiges PDF wird nachgemessenneinneinja — 35 Maße, jede Seite; belegte Regeln brechen ab, Einzelquellen warnen
Absenderprofilevon Hand gepflegtuneinheitlichja — einmal anlegen, überall nutzen
Prüfbericht maschinenlesbarneinneinja — --json und Exit-Codes
PDF/A als Voreinstellungnicht automatischnicht zugesichertja — ohne zusätzliches Flag

Was du davon hast

  • Der Brief sitzt im Fensterumschlag — Anschriftfeld, Falz- und Lochmarken werden am fertigen PDF vermessen, nicht beim Setzen angenommen.
  • Änderungen bleiben nachvollziehbar — Markdown und YAML sind Textdateien. Ein Diff zeigt, was sich geändert hat; das PDF ist Ergebnis, nicht Quelle.
  • Ein Auftritt, viele Briefe — Profile bündeln Briefkopf, Fußzeile, Logo, Farben und Voreinstellungen. Auch die Unterschrift, je Brief überschreibbar.
  • Fehler sind maschinenlesbar — eigene Exit-Codes für Eingabe-, Geometrie- und Umgebungsfehler, dazu --json. Damit läuft es in CI und in Automatisierungen.
  • Für Langzeitarchivierung ausgelegt — im Normalfall entsteht ein PDF/A-2b ohne zusätzliches Flag, wird eine Datei eingebettet — jede Rechnung tut das —, entsteht stattdessen ein PDF/A-3b (ADR 0033). Dass die Datei die behauptete Stufe wirklich einhält, sagt nicht dieses Werkzeug, sondern veraPDF — die Referenzimplementierung der PDF Association, in CI bei jedem Push. Optional PDF/UA-1 mit --pdfua, ebenfalls dort geprüft.
  • Im Gespräch oder im Terminal — als Claude-Skill oder als CLI, ohne Systeminstallation.

Woran man sieht, dass es stimmt

Das ist der Teil, an dem sich das Versprechen entscheidet — deshalb steht er vor der Installation.

Zwei Aussagen, die gern verwechselt werden, hält das Projekt auseinander:

Der Sollwert ist fachlich belegt und der Verifier erkennt eine Abweichung davon sind verschiedene Dinge. Das Zweite ist bewiesen. Das Erste hat Grenzen.

Woher die Sollwerte stammen: Maße und Schreibregeln folgen öffentlich dokumentierten Quellen (Liste in skill/references/din5008.md); der Abgleich mit dem Originaltext der DIN 5008:2020-03 einschließlich Berichtigung 1:2020-07 steht aus. Regeln aus einzelnen Quellen wirken nur als Warnung. Welche Regel worauf beruht, steht in der Quellenlage je Regel; was daraus rechtlich folgt, in docs/recht.md.

bash
python3 -m pytest -q

Sicherheit

Genannt wird nur, was im Code steht und geprüft ist. falzmarke ist nicht unabhängig auditiert — Sicherheitsrelevantes bitte nach SECURITY.md, nicht als Issue.

  • Verarbeitung bleibt lokal. Der Renderpfad importiert keine Netzwerkbibliothek.
  • YAML wird ausschließlich mit safe_load gelesen — an jeder Stelle, auch beim eingebetteten Profil.
  • Markdown läuft gegen eine Positivliste von Knotentypen. Was nicht daraufsteht, ist ein Fehler mit Zeilenangabe — nie ein stilles Durchreichen.
  • Brieftext wird nie zu Typst-Code. Der Emitter übergibt ihn als maskierte Zeichenkette; Sonderzeichen können die Struktur nicht verlassen.
  • Profil- und Briefdateien bleiben in ihrem Ordner. Logo, Unterschrift und eigener Briefkopf dürfen nicht darüber hinauszeigen, Symlinks werden aufgelöst (Gegenproben).
  • Typst läuft auf ein eigenes Wurzelverzeichnis begrenzt, Systemschriften sind abgeschaltet.
  • Alle Abhängigkeiten des Programms sind permissiv lizenziert — THIRD_PARTY_LICENSES.md.
  • Die CI-Aktionen hängen an vollständigen Commit-SHAs, nicht an verschiebbaren Tags.

Das Release-Asset lässt sich auf seine Herkunft prüfen:

bash
gh attestation verify falzmarke.skill --repo blitzsicht/falzmarke

Das belegt, aus welchem Lauf und welchem Commit die Datei stammt — nicht, dass sie fehlerfrei ist. Die SHA-256-Summe steht in der Release-Notiz und als falzmarke.skill.sha256 daneben.

In 60 Sekunden

Vier Wege, und sie können nicht dasselbe:

Wegrendert ohne NetzGrößewofür
falzmarke.skill hochladennein, der erste Lauf lädt nach~0,8 MBclaude.ai — der Upload-Dialog nimmt höchstens 30 MB
falzmarke-offline.skillja — der Typst-Compiler reist mit~34 MBSandboxen ohne PyPI-Zugriff; zu groß für den Upload-Dialog
pipx / uvxnein, der erste Lauf lädt nach~1 MBTerminal
Repository klonennein, der erste Lauf lädt nach~1 MBMitarbeit am Werkzeug

Die beiden Skill-Pakete unterscheiden sich in genau einer Datei: Das Offline-Paket trägt das typst-Wheel in vendor/, das schlanke nicht. Warum es zwei sind und nicht eines, steht in skill/vendor/README.md.

Mit Claude

  1. falzmarke.skill herunterladen
  2. In Claude unter Einstellungen › Capabilities hochladen (Tarif mit Code-Ausführung nötig). Für Claude Code genügt ein Symlink:
    bash
    ln -s "$PWD/skill" ~/.claude/skills/falzmarke
  3. „Schreib einen Brief an die Muster GmbH, Angebot über …“

Im Terminal

bash
uvx falzmarke init brief.md --profil example --betreff "Angebot Nr. 2026-0815"

oder dauerhaft installiert, danach genügt falzmarke render brief.md --png:

bash
pipx install falzmarke

Das Paket liegt auf PyPI. Wer den unveröffentlichten Stand von main will, nimmt weiterhin die Adresse:

bash
pipx install git+https://github.com/blitzsicht/falzmarke

Der Typst-Compiler kommt als Python-Wheel mit: keine Systeminstallation, kein LaTeX, kein wkhtmltopdf, keine Schriftinstallation.

In einem Repository voller Briefe

Wer seine Briefe versioniert, lässt sie bei jedem Push setzen und nachmessen:

yaml
- uses: blitzsicht/falzmarke@main  with:    briefe: "briefe/*.md"    profile: "profile"

Die PDFs hängen danach als Artefakt am Lauf. Hält ein Brief die Maße nicht ein, wird der Lauf rot und nennt Datei und Maß — ein Serienbrief-Archiv merkt einen verrutschten Betreff damit beim Push und nicht beim Empfänger. Die Eingaben stehen in action.yml; die Aktion installiert falzmarke von PyPI und baut keine zweite Installationsstrecke auf. Wer den Lauf nachfahrbar halten will, nennt eine feste Fassung: paket: "falzmarke==0.7.3".

In einem anderen KI-Client

falzmarke spricht MCP — damit setzen auch Clients Briefe, die keinen Claude-Skill kennen.

bash
pip install 'mcp>=2,<3'          # das SDK ist nicht in der Grundausstattungfalzmarke mcp                    # Server über stdio

Der Server steht im offiziellen MCP-Registry unter io.github.blitzsicht/falzmarke. Die Zeile im Kommentar darüber ist kein Schmuck: Das Registry prüft damit, dass dieses PyPI-Paket zu diesem Servernamen gehört — es liest die Projektbeschreibung auf PyPI, und die ist diese Datei.

Vier Werkzeuge: brief_rendern, email_setzen, brief_pruefen, profile_auflisten. Der Messbericht kommt bei jedem Rendern mit — ein Dienst, der ein PDF zurückgibt und offenlässt, ob die Maße stimmen, wäre ein PDF-Generator wie jeder andere.

Im Container — so bauen ihn auch die MCP-Verzeichnisse, das Dockerfile liegt im Wurzelverzeichnis:

bash
git clone https://github.com/blitzsicht/falzmarke.git && cd falzmarkedocker build -t falzmarke-mcp .docker run --rm -i falzmarke-mcp   # `-i` ist nötig: der Server liest von stdin

Das Absenderprofil darf als Objekt im Aufruf stehen. Ein Client ohne Zugriff auf das Dateisystem des Servers kann so seinen eigenen Absender mitgeben, statt mit den Profilen zu leben, die dort zufällig liegen.

Was der Dienst nicht tut: versenden, ablegen, zustellen. Er setzt und prüft (ADR 0029).

Aus einem Clone, ohne Installation
bash
git clone https://github.com/blitzsicht/falzmarke.gitcd falzmarkepython3 skill/scripts/bootstrap.pypython3 skill/scripts/falzmarke.py render examples/brief-form-b.md --png

Einen Brief schreiben

markdown
---profil: exampleempfaenger:  - Muster GmbH  - Frau Erika Muster  - Musterstraße 1  - 12345 Musterstadtdatum: 2026-08-25betreff: Angebot Nr. 2026-0815 über die Neugestaltung Ihrer Websiteanrede: Sehr geehrte Frau Muster,anlagen:  - Angebot 2026-0815---vielen Dank für Ihre Anfrage vom 20. August 2026. Anbei erhalten Sie unser Angebot.
Die Umsetzung dauert ab Ihrer Freigabe **sieben Werktage**.
bash
python3 skill/scripts/falzmarke.py render brief.md --png

Alle Felder stehen im Datenvertrag. Ein Feld, das dort nicht steht, bricht mit Zeilennummer und Vorschlag ab — es wird nie stillschweigend verworfen.

Was im Brieftext erlaubt ist

Der Text unter dem Frontmatter ist falzmarke-Markdown, eine dokumentierte Teilmenge von CommonMark:

Das gehtDas erledigt falzmarke selbst
Absätze, **fett**, *kursiv*§ 5 mit geschütztem Leerzeichen
Aufzählungen und nummerierte Listen-- wird zum Halbgeviertstrich – so
Harter Umbruch mit \ am Zeilenende"Wort" wird zu „Wort“
Pipe-Tabellen mit Ausrichtung

Abkürzungen (z. B.), Datum (25. August), Einheiten (10 %, 5 kg) und Kürzel vor einer Angabe (Tel., Nr.) setzt falzmarke nicht von selbst: Keine dieser Regeln steht auf mehr als einer Quelle, die etwas dazu sagt — bei Abkürzungen und Datum trägt nur Wikipedia, die zweite volle Quelle schweigt (#31). Deshalb warnt lint, statt zu ersetzen. Es meldet die Stelle mit Zeile — dann setzt du das Leerzeichen selbst, mit &nbsp; (5&nbsp;km). Welche Regeln mehrfach belegt sind, steht in der Tabelle Quellenlage je Regel.

Links, Bilder und HTML sind Fehler — mit Zeile, Grund und Korrektur, nie stillschweigend. Auf Papier gibt es keinen Link, und ein Bild im Fließtext verschöbe die Geometrie, die danach gemessen wird.

Zwischenüberschriften (# bis ####), tiefere Aufzählungen, Blockzitate und wortgetreue Auszüge gibt es für lange Schreiben: dialekt: "1.1" im Frontmatter schaltet sie frei. Ein Auszug bleibt Zeichen für Zeichen stehen — keine typografischen Ersetzungen, kein Umbruch, keine Einfärbung, und nichts darin wird ausgeführt. Ohne das Feld gilt Fassung 1.0, und ein bestehender Brief rendert unverändert.

Die vollständige Liste: falzmarke-Markdown.

Dieselbe Datei als E-Mail

Ein Schreiben mit typ: email im Frontmatter wird keine PDF-Seite, sondern eine .eml — dieselbe Quelle, dasselbe Profil, dieselbe Signatur.

bash
falzmarke email nachricht.md --html
OK  geschrieben: nachricht.emlOK  geschrieben: nachricht.htmlOK  verify: 22/22 Prüfungen bestanden

Die .eml öffnet das Mailprogramm, die .html der Browser. Mit --oeffnen legt falzmarke auf macOS gleich einen Entwurf an — in Thunderbird, mit Absender, Empfängern, Betreff, Rumpf und Anhängen, mit Senden-Knopf, und erst nach bestandener Prüfung; Outlook für Mac nur mit --programm outlook. Wo dieser Weg nicht gemessen ist (Windows, Linux, Apple Mail), wird die Datei übergeben; sie erscheint dort als Lesefenster, nicht als Entwurf, und das ist eine Eigenschaft des Formats. Geprüft wird die fertige Datei: MIME-Aufbau, format=flowed, Space-Stuffing, die Signaturtrennzeile, und ob im HTML nichts steht, was dort nicht hingehört — kein Skript, kein externes Stylesheet, kein Zählpixel, keine Tabelle als Layout. falzmarke verify --email misst auch Dateien, die von woanders kommen.

falzmarke versendet nichts. Es gibt keinen Versandbefehl und keine Option, die sendet: Wer eine Datei erzeugt, haftet für ihren Inhalt; wer sie befördert, für Zustellung und Nachweis. Das sind zwei Versprechen, und falzmarke gibt nur das erste (ADR 0034). Der Entwurf ist davon nicht berührt und geht keinen Schritt weiter: Entwurf ja, Senden nie — im Steuerskript steht kein Versandbefehl, und ein Test misst das am ganzen Paket (ADR 0038).

Wie die Datei aufgebaut ist, was bewusst fehlt und wo die Grenzen liegen: Die E-Mail-Fassung. Vier Beispiele liegen unter examples/email/.

Rechnungen: ZUGFeRD und XRechnung

Ein Schreiben mit typ: rechnung wird wie ein Brief gesetzt und trägt zugleich einen Datensatz, den keine Person liest: An Firmen geht die Rechnung als PDF mit eingebetteter ZUGFeRD-XML, an Behörden geht dieselbe Rechnung als reine XRechnung-XML, ohne PDF.

bash
falzmarke render rechnung.md                 # PDF/A-3b mit eingebetteter ZUGFeRD-XMLfalzmarke xml xrechnung.md -o rechnung.xml   # nur die XML, für eine Behörde

Abgenommen wird das Ergebnis nicht von falzmarke selbst, sondern von zwei fremden Werkzeugen in der CI: Mustang 2.26.0 prüft PDF und eingebettete XML gegen die Schematron-Regeln der jeweiligen Fassung, der KoSIT-Validator 1.6.3 prüft eine XRechnung ein zweites Mal mit der amtlichen Konfiguration.

falzmarke rechnet nicht. Es überträgt Positionen, Steuersätze und Summen aus der Quelle, ohne sie zu bilden — es vergibt keine Rechnungsnummern, bucht nicht, mahnt nicht und versendet nichts. Was das im Einzelnen heißt und was ausdrücklich nicht behauptet wird: Rechnungen mit falzmarke.

Urkunden: ein Schriftstück ohne Anschriftfeld

Eine Vereinbarung, eine Erklärung, ein Nachweis: Ein Schreiben mit typ: urkunde trägt einen Titel statt eines Betreffs, kein Anschriftfeld und Linien zum Unterschreiben von Hand. Briefkopf, Fußzeile, Schrift und Raster kommen aus demselben Profil wie beim Brief.

bash
falzmarke render vereinbarung.md   # setzt und misst nach — auch die Unterschriftslinien

Im Text gibt es dafür zwei Elemente mehr (dialekt: "1.2"): das Ausfüllfeld, eine Kette aus Unterstrichen, die zu einer Linie fester Länge wird, und die Angabentabelle ohne Kopfzeile. Mit seiten_max: 1 wird der Lauf rot, wenn das Schriftstück nicht auf eine Seite passt.

Die Maße einer Urkunde sind Setzungen des Werkzeugs, keine der DIN 5008 — die Norm sagt zu einem Blatt ohne Anschriftfeld nichts, und die Zahl der Maße, die oben für den Brief steht, gilt hier nicht. Über Form oder Wirksamkeit eines Schriftstücks sagt falzmarke nichts; es kennt auch keine Klauseln. Was das im Einzelnen heißt: Urkunden mit falzmarke. Zwei Beispiele liegen unter examples/urkunde/.

Beispiele

StandardbriefEinschreibenMehrseitig
[Form B][Vermerkzone][Folgeseiten]
Form B mit InformationsblockZusatz- und VermerkzoneKopfzeile und Seitenzählung

Dazu Form A, Auslandsanschrift, Tabelle, ein Brief mit langem Informationsblock und einer mit englischer Beschriftung (sprache: en — deutsche Maße, englische Wörter) — alle Beispiele und ihre vollständigen Renderings.

Grenzen

  • falzmarke-Markdown (CommonMark-Teilmenge): Absätze, fett, kursiv, Aufzählungen, nummerierte Listen, harter Umbruch, Pipe-Tabellen. Alles andere bricht mit Zeilenangabe ab, statt still etwas anderes zu setzen.
  • Zonengrößen der Norm: Anschrift höchstens 6 Zeilen, Vermerke höchstens 3, Werte im Informationsblock höchstens 21 Zeichen.
  • Keine Bilder im Fließtext — ein Logo gehört ins Profil.
  • Nur DIN 5008. Schweiz (SN 010130) und Österreich (ÖNORM A 1080) sind vorgemerkt (#10); das Frontmatter-Feld norm: ist dafür reserviert.
  • Keine Signatur. Das Unterschriftsbild ist Erscheinungsbild, kein Nachweis. Eine kryptografische Signatur ist Gegenstand von #14.

Weiterlesen

Befehlealle Unterbefehle, Exit-Codes, was geprüft wird
AbsenderprofileProfil anlegen, Suchreihenfolge, eigener Briefkopf
Die E-Mail-FassungAufbau der .eml, ihre Teile und Grenzen
Rechnungen mit falzmarkeZUGFeRD, XRechnung, was geprüft wird und was nicht
Datenvertragjedes Frontmatter-Feld mit Beispiel
falzmarke-Markdownwas im Brieftext möglich ist
Normmaße und QuellenlageSollwerte und ihre Herkunft
Was falzmarke behauptet — und was nichtGrenzen der Normaussage
Aufbau des RepositorysSchichten, Vendoring, warum das Paket unter skill/ liegt
Roadmapin welcher Reihenfolge gearbeitet wird, und was noch offen ist
Changelog · Releaseswas sich geändert hat

Mitmachen

Fehlerberichte und Vorschläge sind willkommen — siehe CONTRIBUTING.md. Bei einem Geometriefehler bitte die Ausgabe von verify mitschicken; ohne sie lässt sich nicht unterscheiden, ob das Layout oder die Messung danebenliegt.

Sicherheitsrelevantes bitte nicht als Issue, sondern nach SECURITY.md.

Herkunft und Dank

Markdown wurde 2004 von John Gruber gemeinsam mit Aaron Swartz entworfen. Die Spezifikation dazu ist CommonMark (John MacFarlane und Mitwirkende). falzmarke setzt eine dokumentierte Teilmenge davon um — falzmarke-Markdown — und weicht an drei Stellen bewusst ab: HTML wird nie durchgereicht, Links werden nie gesetzt, und eine einzelne 2. Text-Zeile ohne weitere Listenpunkte wird gemeldet — gesetzt mit erhaltenem Startwert, damit nichts still umnummeriert wird.

Das Seitenlayout stammt von typst-letter-pro (MIT) von Sematre und ist unverändert vendort — Prüfsumme in vendor/README.md. falzmarke ergänzt die Schicht darüber: Datenvertrag, Profile, Markdown-Eingabe, Messung und den Skill.

Gesetzt wird mit Typst (Apache-2.0), geparst mit markdown-it-py (MIT), gemessen mit pdfplumber (MIT) und pypdf (BSD-3). Schriften: Libertinus und Source Sans 3 (beide OFL 1.1). Die vollständige Aufstellung samt der Begründung, warum PyMuPDF (AGPL-3.0) ersetzt wurde, steht in THIRD_PARTY_LICENSES.md.

Alle Abhängigkeiten des Programms sind permissiv lizenziert — falzmarke lässt sich damit auch in geschlossene Systeme einbauen. Nicht permissiv ist allein Remotion, womit der Erklärfilm gerendert wird: am Programm ist es nicht beteiligt und wird nicht mitgeliefert.

DIN 5008 ist eine Norm des DIN Deutsches Institut für Normung e. V. falzmarke ist kein Produkt des DIN, steht in keiner Verbindung zum DIN und behauptet keine Zertifizierung. Wie die Maße gemessen wurden, steht in docs/normmasse.md.

Was sich zuletzt getan hat

Die letzten zwei Versionen im Wortlaut. Erzeugt aus CHANGELOG.md — dort ändern, dann python3 scripts/changelog.py.

v0.11.2 — 03.11.2026

Behoben
  • email --oeffnen prüft, ob das Fenster die Empfänger des Entwurfs zeigt. Ein Verfassen-Fenster ging ohne An, Cc und Bcc auf, und der Befehl meldete OK. Die Ursache saß im Add-on: Der Befehl fenster, den das Mitaufräumen (ADR 0062) unmittelbar nach dem Öffnen schickt, rief GetComposeDetails() an einem noch ladenden Fenster, und dieser Aufruf überträgt die noch leeren Adresszeilen in die Felder, aus denen sich das Fenster gleich darauf füllt. Entwurfsbrücke 0.3.8 liest erst, wenn das Fenster fertig geladen ist, und meldet beim Öffnen Absender, An, Cc und Bcc des Fensters; falzmarke vergleicht sie mit dem Entwurf und schreibt OK Empfänger im Fenster wie in der Nachricht: …, bei Abweichung EMPFÄNGER PRÜFEN … statt der grünen Zeile (entwurf-oeffnen endet dann mit Exit 3). Mit einem älteren Add-on steht NICHT GEPRÜFT Empfänger im Fenster da, und das Mitaufräumen fragt nicht nach offenen Fenstern, solange das eben geöffnete nicht als geladen gemeldet ist oder ungewiss bleibt, ob eines aufging. Der Tagebucheintrag geoeffnet trägt die Adressen (#464).

  • Eine nackte Adresse im Mailtext ist im HTML-Teil wieder anklickbar. Aus https://… und http://… wird beim Lesen ein Link wie bei einem Markdown-Link mit Linktext: im HTML ein <a href>, im Textteil die Adresse in spitzen Klammern. Satzzeichen am Ende bleiben draußen, eine schließende Klammer nur, wenn die Adresse keine öffnende trägt. Nicht verlinkt werden www. ohne Schema, Adressen in Code und Adressen, die schon Linktext sind; im Brief bleibt die Adresse Text. Die Warnungen zu http:// und Kurz-URLs gelten auch für die nackte Adresse, und ___ in einer Adresse wird kein Ausfüllfeld mehr und bricht eine Mail mit dialekt: 1.2 nicht mehr ab (#424).

  • aufraeumen sagt nach einem Abbruch, ob überhaupt etwas bewegt sein kann. Bisher hieß es bei jedem Abbruch, es sei nicht geprüft, ob der Server schon etwas bewegt habe, auch wenn UID MOVE nie hinausging, etwa weil der Server kein MOVE kennt. Jetzt steht dort „nichts bewegt“, und nur ein Abbruch im Zug selbst lässt es offen. Im JSON zeigt das das neue Feld zug_gesendet. Der ganze Bericht eines abgebrochenen Laufs geht auf stderr, nicht mehr nur seine erste Zeile, und aus „1 Nachrichten“ wird „1 Nachricht“.

  • Der Anmeldename geht zitiert an den IMAP-Proxy. imaplib zitiert nur das Kennwort. Ein Leerzeichen im Namen oder ein {5} am Ende wurde als weiteres Argument oder als Literal gelesen. emailproxy nimmt die Anführungszeichen wieder ab. Lehnt imaplib ein Argument mit ValueError ab, wie Python 3.14 bei Steuerzeichen, gibt es jetzt einen Grund statt eines Tracebacks, und die Sitzung wird abgemeldet.

  • Eine Message-ID mit einzelner oder doppelter spitzer Klammer gilt nicht mehr als Treffer. Der Vergleich nimmt genau ein vollständiges Paar <…> ab. Bisher galten abc@x> und <<abc@x>> als <abc@x>, und die Mail wäre mit --machen verschoben worden.

  • fenster_nur_uid heißt seit 0.11.1 auch: Das Fenster meldet einen anderen Absender. Das betrifft etwa eine Alias-Identität desselben Kontos. Die Beschreibung bei 0.11.0 nennt nur den Fall ohne Absender.

v0.11.1 — 03.11.2026

Neu
  • Plugin-Bündel für das Anthropic-Verzeichnis. skill/ trägt jetzt ein Manifest, ein README und ein Icon. Das .skill-Paket bleibt, wie es war.
Behoben
  • Ein Entwurf in einem Fenster mit Alias-Absender gilt wieder als offen. Thunderbird meldet als Identität das From des Fensters, nicht das Konto. Ein Alias desselben Kontos fiel deshalb aus der Zuordnung, und aufraeumen --entwuerfe konnte den Entwurf aus dem offenen Fenster in den Papierkorb ziehen. Jetzt hält das Fenster den Entwurf; status sagt dazu, dass die Zuordnung nur an der UID hängt, und nennt den gemeldeten Absender.

  • Eine Absenderadresse mit Umbruch oder Nullbyte meldet sich nicht mehr an. LOGIN lief als einziger Befehl mit frei belegtem Argument an der Prüfung vorbei; auf Python 3.12 wäre der Rest der Adresse als zweiter IMAP-Befehl auf die Leitung gegangen.

  • aufraeumen nennt die gefundenen Mails auch dann, wenn der Zug abbricht. Bisher stand im Text nur NICHT GEPRÜFT …, die UIDs standen nur in --json, obwohl der Server einen Teil schon bewegt haben kann.

  • aufraeumen verschiebt nur noch den exakten Treffer. Eine Kennung ohne spitze Klammern fand per Teilkette auch fremde Mails, und --machen hätte sie verschoben.

Davor liegen 37 weitere Versionen — der vollständige Verlauf steht in CHANGELOG.md.

Lizenz

MIT

來源:README.md,提交 a8e131b

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:伺服器未能啟動。

版本歷史

9
  1. v0.11.2最新Nov 3, 2026
  2. v0.11.1Nov 3, 2026
  3. v0.11.0Nov 3, 2026
  4. v0.10.0Oct 25, 2026
  5. v0.9.15Oct 8, 2026
  6. v0.9.14Oct 7, 2026
  7. v0.9.13Oct 1, 2026
  8. v0.9.12Sep 27, 2026
  9. v0.9.11Sep 27, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分