Technical overview¶
Status: draft
How the next version (0.1) is built – updated for every version. Proposals by Claude, 2026-10-19; nothing on these pages is binding until Daniel approves it. Questions that block work are collected in Open questions.
Goal¶
Build release 0.1 (Roadmap): the CLI with the open file
format, the adapters Markdown, rST/Sphinx-Needs and plain text, and the
agent skills deciwa-work and deciwa-ask – good enough that Daniel uses
deciwa in his knowledge base instead of [CHECK] markers.
Not in 0.1: push / pull, VS Code, Chrome, hosted
service, Python/HTML adapters. The design must not block them, though –
especially review on results (Reviews happen on results, ... (DEC_REVIEW_ON_RESULTS)).
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
├── 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
Packages¶
The split into packages is deciwa is one repository of... (DEC_PACKAGES).
deciwa is one repository with one package per part – a uv workspace. All
packages share the Python namespace deciwa.
Folder |
Distribution |
Import |
Contains |
Depends on |
|---|---|---|---|---|
|
|
|
model, |
– |
|
|
|
local review server: serves a built site, the JSON API for the review UI, rebuilds and reloads on change; knows no build tool – the caller passes the build command |
core |
|
|
|
the |
core, server |
|
|
|
the review overlay (JavaScript, CSS, logo) in the danwos tool UI kit, including the offline engine; no Python logic |
– |
|
|
|
Sphinx extension: finds the elements of every page, writes the elements index, ships the review UI |
core, ui |
deciwa-sphinx does not import deciwa-server: a static (offline) build
needs no server. With deciwa serve, the server runs the Sphinx build, and
the review UI in the pages talks to the server’s JSON API.
Rules:
Logic lives in
deciwa-coreonly. The offline engine indeciwa-uimirrors its rules for reviews without a server and must be kept in step.deciwa-serveranddeciwa-cliare reused by every integration that reviews in a browser or calls the CLI.An integration package depends on
deciwa-coreand, for a browser UI, ondeciwa-ui– never on another integration.
Setting up¶
$ uv sync # all packages, editable, plus the docs tools
$ .venv/bin/deciwa serve # the CLI from packages/cli
Using deciwa in another Sphinx project:
$ cd ~/workspace/deciwa/packages
$ uv pip install --python <project>/.venv/bin/python -e core -e server -e cli -e ui -e sphinx
Pages¶
Page |
Decides |
|---|---|
language, packaging, tooling |
|
modules of the core and how they depend on each other |
|
how a format turns into elements and selectors |
|
the JSON inside |
|
how the state of an element is computed |
|
commands, element addressing, JSON output |
|
what the two agent skills do and how they ship |
|
how 0.1 gets into Daniel’s knowledge base |
|
docs as the truth, reviewing them in deciwa, from proposal to decision |
All proposals¶
ID |
Title |
Status |
page |
|---|---|---|---|
One small adapter interface for all formats |
draft |
technical/adapters |
|
Annotation structure |
draft |
technical/file-format |
|
deciwa status can fail a CI run on freeze alarms |
draft |
technical/cli |
|
Commands in 0.1 |
draft |
technical/cli |
|
JSON output has one envelope for every command |
draft |
technical/cli |
|
One annotation file per source, deterministic JSON |
draft |
technical/file-format |
|
The fingerprint covers the source text with whitespace normalised |
draft |
technical/state-engine |
|
A free text selection is a text quote inside its nearest element |
draft |
technical/adapters |
|
While an element is unchanged, an author's latest verdict and latest rating replace the earlier ones |
draft |
technical/file-format |
|
The core is split into layers with a strict dependency direction |
draft |
technical/layers |
|
The core and the CLI are written in Python |
draft |
technical/stack |
|
Selectors are tried in a fixed order and the first unique hit wins |
draft |
technical/state-engine |
|
.deciwa/ at the root of the knowledge base, committed |
draft |
technical/rollout |
|
Existing [CHECK] markers are migrated once into requests |
draft |
technical/rollout |
|
The rST adapter parses with docutils, without running Sphinx |
draft |
technical/adapters |
|
A JSON Schema is the documented contract |
draft |
technical/file-format |
|
Element selectors are paths of headings plus a per-section counter |
draft |
technical/adapters |
|
Two skills in the Agent Skills format, shipped in the repository |
draft |
technical/skills |
|
The snapshot of the element text is stored with every annotation |
draft |
technical/file-format |
|
State rules in this order |
draft |
technical/state-engine |
|
Tooling: Python 3.12+, uv, ruff, pytest, click |
draft |
technical/stack |