Technischer Überblick¶
Status: Entwurf
Wie die nächste Version (0.1) gebaut wird – für jede Version aktualisiert. Vorschläge von Claude, 2026-10-19; nichts auf diesen Seiten ist verbindlich, bis Daniel es freigibt. Fragen, die die Arbeit blockieren, sind in Offene Fragen gesammelt.
Ziel¶
Release 0.1 bauen (Roadmap): die CLI mit dem offenen Dateiformat, die Adapter für Markdown, rST/Sphinx-Needs und reinen Text sowie die Agent-Skills deciwa-work und deciwa-ask – gut genug, dass Daniel deciwa in seiner Wissensbasis statt [CHECK]-Markierungen nutzt.
Nicht in 0.1: push / pull, VS Code, Chrome, monsterbrain, gehosteter Dienst, Python-/HTML-Adapter, die eigenständige Engine. Das Design darf sie aber nicht blockieren – vor allem nicht das Review am Ergebnis (Reviews finden auf den Erge... (DEC_REVIEW_ON_RESULTS)) und Host-Apps (Host-Apps und die eigenständige Engine).
Architektur¶
Jedes Frontend – die Integrationen wie auch die Agent-Skills – spricht mit der deciwa-CLI und ihrer Core-Bibliothek, nie direkt mit den Dateien (Die CLI ist der Master, mit... (DEC_CLI_MASTER)). Die CLI speichert Reviews in .deciwa/ im Repository oder später im gehosteten Dienst.
Repository¶
deciwa/
├── packages/ one package per part – see below
│ ├── core/ deciwa-core model, .deciwa/ store, engine
│ ├── server/ deciwa-server review server
│ ├── cli/ deciwa-cli the deciwa command
│ ├── ui/ deciwa-ui review overlay (JS/CSS)
│ ├── sphinx/ deciwa-sphinx Sphinx extension
│ ├── client/ @danwos/deciwa-client engine client for host apps (TypeScript)
│ └── monsterbrain/ deciwa-monsterbrain the monsterbrain extension
├── docs/ these docs – product, integrations, decisions,
│ technical details
├── .deciwa/ review data of these docs (config.toml: what must be approved)
├── mockups/ first clickable mock-up of the feedback UI, demo recorder
├── pyproject.toml the uv workspace (all packages + docs tools)
└── uv.lock
Pakete¶
Die Aufteilung in Pakete ist deciwa ist ein Repository a... (DEC_PACKAGES).
deciwa ist ein Repository mit einem Paket pro Teil – ein uv-Workspace. Alle Pakete teilen sich den Python-Namespace deciwa.
Ordner |
Distribution |
Import |
Enthält |
Hängt ab von |
|---|---|---|---|---|
|
|
|
Modell, |
– |
|
|
|
lokaler Review-Server: liefert eine gebaute Site aus, die JSON-API für die Review-Oberfläche, baut bei Änderungen neu und lädt neu; kennt kein Build-Tool – der Aufrufer übergibt den Build-Befehl |
core |
|
|
|
der Befehl |
core, server |
|
|
|
das Review-Overlay (JavaScript, CSS, Logo) im danwos-Tool-UI-Kit, inklusive der Offline-Engine und des Web-Skripts; Quellen in |
– |
|
|
|
Sphinx-Erweiterung: findet die Elemente jeder Seite, schreibt den Elemente-Index, liefert die Review-Oberfläche mit |
core, ui |
|
|
– |
findet, startet und prüft die Engine für eine Host-App, typisierte Aufrufe der JSON-API (Host-Apps) |
die Engine ( |
|
|
– |
die monsterbrain-Erweiterung: Overlay auf dargestellten Dateien, Seitenpanel, Markierungen im Baum, MCP-Tools; |
client, ui |
deciwa-sphinx importiert deciwa-server nicht: ein statischer (Offline-)Build braucht keinen Server. Mit deciwa serve führt der Server den Sphinx-Build aus, und die Review-Oberfläche in den Seiten spricht mit der JSON-API des Servers.
Regeln:
Logik lebt nur in
deciwa-core. Die Offline-Engine indeciwa-uispiegelt ihre Regeln für Reviews ohne Server und muss mit ihr Schritt halten.deciwa-serverunddeciwa-cliwerden von jeder Integration wiederverwendet, die im Browser reviewt oder die CLI aufruft.Ein Integrationspaket hängt von
deciwa-coreund, für eine Browser-Oberfläche, vondeciwa-uiab – nie von einer anderen Integration.
Einrichten¶
$ uv sync # all packages, editable, plus the docs tools
$ .venv/bin/deciwa serve # the CLI from packages/cli
deciwa in einem anderen Sphinx-Projekt nutzen:
$ cd ~/workspace/deciwa/packages
$ uv pip install --python <project>/.venv/bin/python -e core -e server -e cli -e ui -e sphinx
Seiten¶
Seite |
Entscheidet |
|---|---|
Sprache, Packaging, Tooling |
|
Module des Cores und wie sie voneinander abhängen |
|
wie ein Format zu Elementen und Selektoren wird |
|
das JSON in |
|
wie der Zustand eines Elements berechnet wird |
|
Befehle, Adressierung von Elementen, JSON-Ausgabe |
|
was die zwei Agent-Skills tun und wie sie ausgeliefert werden |
|
wie 0.1 in Daniels Wissensbasis kommt |
|
Docs als Wahrheit, sie in deciwa reviewen, vom Vorschlag zur Entscheidung |
Alle Vorschläge¶
ID |
Title |
Status |
page |
|---|---|---|---|
Eine kleine Adapter-Schnittstelle für alle Formate |
draft |
technical/adapters |
|
Aufbau einer Annotation |
draft |
technical/file-format |
|
deciwa status kann einen CI-Lauf bei Einfrier-Alarmen scheitern lassen |
draft |
technical/cli |
|
Befehle in 0.1 |
draft |
technical/cli |
|
JSON-Ausgaben haben für jeden Befehl dieselbe Hülle |
draft |
technical/cli |
|
Reviews und Entscheidungen finden nur auf den englischen Docs statt |
draft |
technical/working |
|
Englisch ist die Quelle der Docs; Deutsch ist eine Übersetzung in gettext-Katalogen |
draft |
technical/working |
|
Das Web-Skript findet die Elemente einer gerenderten Seite selbst |
draft |
technical/adapters |
|
Die Engine wird mit PyInstaller gebaut, ein Ordner pro Plattform |
draft |
technical/hosts |
|
Eine Annotationsdatei pro Quelle, deterministisches JSON |
draft |
technical/file-format |
|
Der Fingerprint umfasst den Quelltext mit normalisierten Leerzeichen |
draft |
technical/state-engine |
|
Eine freie Textauswahl ist ein Textzitat innerhalb ihres nächsten Elements |
draft |
technical/adapters |
|
Solange ein Element unverändert ist, ersetzen das neueste Urteil und die neueste Bewertung einer Person die früheren |
draft |
technical/file-format |
|
Der Core ist in Schichten mit strenger Abhängigkeitsrichtung aufgeteilt |
draft |
technical/layers |
|
Das Overlay ist aufgeteilt in Elementquelle, Speicher und Oberfläche |
draft |
technical/web |
|
Core und CLI sind in Python geschrieben |
draft |
technical/stack |
|
Selektoren werden in fester Reihenfolge probiert, und der erste eindeutige Treffer gewinnt |
draft |
technical/state-engine |
|
.deciwa/ im Wurzelverzeichnis der Wissensbasis, committet |
draft |
technical/rollout |
|
Bestehende [CHECK]-Markierungen werden einmalig in Anfragen überführt |
draft |
technical/rollout |
|
Der rST-Adapter parst mit docutils, ohne Sphinx auszuführen |
draft |
technical/adapters |
|
Ein JSON Schema ist der dokumentierte Vertrag |
draft |
technical/file-format |
|
Element-Selektoren sind Pfade aus Überschriften plus ein Zähler pro Abschnitt |
draft |
technical/adapters |
|
Zwei Skills im Agent-Skills-Format, im Repository mitgeliefert |
draft |
technical/skills |
|
Der Schnappschuss des Elementtexts wird mit jeder Annotation gespeichert |
draft |
technical/file-format |
|
Zustandsregeln in dieser Reihenfolge |
draft |
technical/state-engine |
|
Tooling: Python 3.12+, uv, ruff, pytest, click |
draft |
technical/stack |
|
VS Code bekommt ein Paket pro Plattform mit der Engine darin |
draft |
technical/hosts |
|
Ein Bundle, gebaut mit esbuild, die Oberfläche in einem Shadow DOM |
draft |
technical/web |
|
Webseiten ohne Quelldatei werden unter ihrer Adresse gespeichert |
draft |
technical/file-format |
|
Das Web-Skript wird mit der Doku unter einem versionierten Pfad gehostet |
approved |
technical/web |
|
Der Browser merkt sich die Elemente jeder besuchten Seite |
draft |
technical/web |
|
Das Skript zu laden genügt – deciwa erscheint immer |
approved |
technical/web |
|
Seiten, die sich nach dem Laden ändern, werden erneut gescannt |
draft |
technical/web |
|
Eine Seite wird erkannt an ihrem Meta-Tag, einer Zuordnungsregel oder ihrer Adresse |
approved |
technical/web |