# Change log

Slow Thinker is three components, versioned separately (see `src/slow_thinker/versions.py`):
the **Process executor** (`slow-thinker`: planner, prompts of the agents, LLM providers,
storage, database schema), the **Analysis generator** (`slow-thinker-report --analyze`: the
analyst, its prompts and answer models) and the **Report generator** (`slow-thinker-report`:
views and templates). Every change raises the BUILD number of the components it touches and
is noted here, newest first, with the versions it raises. Each run, analysis and report is
stamped with the version of the component that made it. The package version (pyproject)
names a release of the whole.

## 2026-09-21

- **Documentation** — Complete English user and technical reference microsite: the six-stage workflow, report fields and controls, calculation methods, reviewed component versions, real screenshots with provenance, a searchable element directory and this changelog. Documentation-only change; runtime component versions remain unchanged.

- **Report generator 0.1.16** — The run index and the prompt pages redesigned as one
  "history" view (`history.css.j2`, shared): a hero with the counts, two tabs (Runs ·
  Models across runs; on a prompt page, Runs · Full prompt), a toolbar with search, status
  and sort, and one row per run — participants as model chips, collaboration (agents,
  rounds, voters), duration, cost and the selected proposal — grouped by prompt in the
  index and, on a prompt page, with an expandable block of configuration, execution and
  latest-analysis details. The base page gains blocks for the bar (`barmain`, `barlinks`),
  the page's own styles and body attributes, and the head above the tabs (`runhead`); the
  run report and the prompt library use them.
- **Configuration** — `config/slow-thinker.base.json` is published as the starting point
  ("starter 3x2": GPT-5.6 terra, Grok 4.6 and DeepSeek V4 pro, two refinement rounds,
  Claude Opus 5 as analyst); the 5×4 council it held is the `full` profile, next to `cheap`
  and `study`. The example base file goes: the base itself is the example.
- **Report generator 0.1.15** — The project is "Slow Thinker", in two words, wherever the pages
  name it (browser title, brand), as the README has it; the same in the code headers, the
  docstrings and this log. The package description follows the README's tagline. The docs
  catch up with the code: the keys file in the README's start (the example base points to
  it), the Process diagram in the table of views, the early-stage note; in the guides, the
  four final calls of the analysis, the ⓘ icon, the notes only in old runs, the cheap
  profile's analyst, `thinking_budget: 0` and the temperature rule of Claude, and what
  happens with a missing key.
- **Report generator 0.1.14** — The GitHub mark (inline SVG, nothing loaded) before the
  repository link in the footer.
- **Report generator 0.1.13** — In the Process diagram the summary of a box (and of a voter)
  opens from an ⓘ icon in its bottom-right corner, not from the box itself: hovering the
  box lights the lineage and the tooltip no longer covers it.
- **Analysis generator 0.1.4 · Report generator 0.1.12** — The brief: a last call in which the
  analyst sums its whole analysis up in at most eight points — the outcome, what happened
  in the rounds, the problems that matter, the changes that would help — from what it
  already wrote, nothing new. Stored as `final.brief`; the Analysis summary opens with it,
  and an analysis made before says so where it would go.
- **Process executor 0.1.5** — Every timestamp of the trace is time-zone aware
  (`datetime.now().astimezone()`), and PostgreSQL stores the records' own times: the
  proposals, votes, plans and analyses pass their `created_at`, and a status update sets
  `updated_at` from the process clock instead of the server's `CURRENT_TIMESTAMP`. Before,
  a task's naive local `created_at` next to a UTC `updated_at` gave durations of "0 s" in
  the index and a shifted timeline whenever the database ran in another zone (Docker, the
  CI). Reported by a reviewer.
- **Tooling** — `pythonpath = ["."]` in the pytest options: the tests import
  `tests.conftest`, which `uv run pytest` (the CI's command) could not resolve; only
  `python -m pytest` worked. Reported by a reviewer.
- **Process executor 0.1.4** — Claude models with extended thinking (before 4.6) were sent
  the default temperature 0.7 next to `thinking: enabled`, which the API rejects: every
  call of such an agent or analyst failed unless the configuration said `"temperature": 1`.
  Now no temperature is sent with extended thinking, a temperature other than 1 next to it
  is refused when the configuration is loaded (`Provider.check`, a hook every provider may
  refine), and `"thinking_budget": 0` switches thinking off, with the temperature back.
  The example configuration's analyst is Claude Opus 5 with high effort. Reported by a
  reviewer.
- **Process executor 0.1.3** — Security: a provider left without an API key (none in its
  entry, in `api_keys` nor in its environment variable) stops the run with a
  `ConfigurationError` instead of going on as "MISSING"; and a client for a provider at its
  own base URL (xAI, DeepSeek, Alibaba) is never built without a key, because ChatOpenAI
  would otherwise pick up `OPENAI_API_KEY` from the environment and send it to that host.
  Reported by a reviewer.
- **Report generator 0.1.11** — The Selected plan tab shows the winner's success metrics (a
  third pane) and its estimated complexity, and links to the winner's card in its round.
- **Analysis generator 0.1.3 · Report generator 0.1.10** — The process evaluation is a call
  of its own (asked at the end of the outcome call, Opus 5 left it empty after 15k
  characters of answer); an empty evaluation is refused. The final summary is asked as a
  list (one item per proposal, one on what they share). In the report: the Analysis
  summary opens with "At a glance" (first choice, vote and agreement, against the initial
  proposals, rounds, process) linking to each section; the blind ranking says how it was
  obtained and puts "why this order" before the list; the process evaluation says how it
  was obtained and announces an empty answer instead of showing "none"; each proposal's
  plan is shown in panes — Graph (open by default) · Steps · Success metrics · Raw prompt
  and response — under "The plan produced", the selected plan in Graph · Steps; the costs
  by model join the Totals section and their own section goes.

## 2026-09-20

- **Process executor 0.1.2 · Report generator 0.1.9** — The notes are removed from the
  process: refining agents answer with the plan alone, every previous proposal is shown
  alike (no "your own previous proposal" mark) and one strict schema serves every round.
  Reason: a note about a proposal reached the others two versions late, after its author
  had rewritten once without it; not a feedback loop. The report still shows the notes of
  the runs that have them (executor up to 0.1.1) and says so in the influence legend; the
  "no notes" line under proposals goes; the footer drops "static file, nothing is loaded
  from the network".
- **Report generator 0.1.8** — In a proposal's tab, the analyst's ideas are headed "Ideas the
  analyst saw taken…" / "…saw rejected", and a refined proposal without notes says so where
  they would be (the run predates the notes, or the model left them out).
- **Report generator 0.1.7** — Smaller type in the cells of the influence table (labels 9 px,
  numbers 11.5 px); the agent names in its column headers are no longer forced to upper case.
- **Report generator 0.1.6** — The influence table explains itself: each cell's lines are
  labelled (same titles · agent says · analyst sees · kept · new) and every number has a
  tooltip saying what it counts and how it was obtained (titles only, or the whole proposal)
  and listing the items behind it: the matched steps, the agent's note (verdict, adopted,
  rejected) or the analyst's ideas with their evidence. The legend names the three sources.
- **Process executor 0.1.1 · Analysis generator 0.1.2 · Report generator 0.1.5** — Component
  versions: `versions.py`; the executor stamps `executor_version` on the task, the analyst
  `analyst_version` on each analysis (PostgreSQL schema 1.8 adds both columns); the report
  footer names the three versions that made the page, the About tab too; the indexes say
  "executor x.y.z" in Made with; this log and a test that every current version is in it.
  Legends of P1, P2… (the analyst's proposal numbers) in the round summaries and the
  Analysis tab.
- **Analysis generator 0.1.1 · Report generator 0.1.4** — The analyst gets its own writing
  guidance (skimmable: short sentences, lists, the point before the evidence, proposals and
  steps by number) and answers two lists per round: what the proposals share and what
  separates them (round 0), what still separates them and who took what from whom
  (refinement rounds); `what_changed`, `improvement_summary`, `process_evaluation` and the
  vote comment asked as short sentences or lists. Analysis schema 5 (2–4 still rendered).
  The Round summary shows the lists and, below, one bar per agent with the time of its
  call against the slowest; the same bars for the voters in the Votes tab.
- **Report generator 0.1.3** — Tooltips placed from their measured size and kept inside the
  viewport; a pinned tooltip can be dragged by its head.
- **Report generator 0.1.2** — The Process tab is a diagram: lanes per round, a box per
  proposal, barriers between rounds, lines with the steps taken between proposals, dots
  listing them, the full lineage of a proposal's steps on hover, selection, zoom and pan.
- **Report generator 0.1.1** — Footer as a strip always in view, with the author (linked to
  the web), the license and the repository, links opening in a new tab; pages start at the
  doctype.
