Specifications¶
Every non-trivial change to this module is written down before it is built. A spec captures the problem, the decisions taken, the options rejected and the open questions, so a later reader can see why the code looks the way it does, long after the conversation that produced it is gone.
The specs live in
the project wiki. They
are point-in-time decision records rather than living documentation, and keeping
them in docs/ buries the documentation that is living. This page is the
index; it does not carry the bodies.
| # | Spec | Status |
|---|---|---|
| 0001 | Sampling & reasoning effort | IMPLEMENTED (v0.3.0) |
| 0002 | Prompt caching | IMPLEMENTED (v0.5.0) |
| 0003 | Provider throttling & retry | IMPLEMENTED (v0.4.0) |
| 0004 | ResponseSchema shape validation | IMPLEMENTED (v0.3.1) |
| 0005 | Default model formula | IMPLEMENTED (v0.7.0) |
| 0006 | Capability vocabulary | IMPLEMENTED (v0.6.0) |
| 0007 | Degraded construction | IMPLEMENTED (v0.6.0) |
| 0008 | Typed ResponseSchema | IMPLEMENTED (v0.8.0) |
| 0009 | claude-local MCP tools | DRAFT |
| 0010 | Multimodal input | IMPLEMENTED (in go-tool-base, before the extraction) |
| 0011 | Provider-conformance suite | IMPLEMENTED (suite v0.10.1; history bounding proven by conformance from v0.11.0 / adapters v0.10.0) |
| 0012 | Version compatibility | IMPLEMENTED (v0.9.2 / adapters v0.8.3) |
| 0013 | History-policy application | IMPLEMENTED (v0.11.0 / adapters v0.10.0) |
| 0014 | History compaction | IMPLEMENTED (v0.12.0) |
| 0015 | One construction path | IMPLEMENTED (v0.13.0 / chat-openai v0.10.1 / chat-gemini v0.10.1) |
| 0016 | Slash commands | IMPLEMENTED (v0.14.0 / adapters v0.11.0) |
| 0017 | Vertex AI backend | APPROVED |
How to read one¶
Each spec carries a status in its frontmatter, and that status is the single
source of truth for where the decision stands:
| Status | Meaning |
|---|---|
DRAFT |
Under discussion. Do not implement against it yet. |
IN REVIEW |
Open questions all resolved; awaiting approval. Still not safe to implement against. |
APPROVED |
Agreed. Safe to implement. |
IN PROGRESS |
Being built. Part of it may already have shipped; the status line says which. |
IMPLEMENTED |
Shipped. The release it shipped in is named in the status line. |
REJECTED |
Considered and decided against, or superseded. Kept deliberately. The value is the durable record that the question was asked and answered. |
Decisions are numbered (D1, D2, …) so reviews, merge requests and later
specs can cite one precisely. A withdrawn decision keeps its number rather than
being deleted, because "we proposed this and found it unnecessary" is worth as
much as the decisions that survived.
Wiki pages are named specs/<NNNN>-<slug>, numbered in the order the decisions
were taken. The number is the spec's handle. Cite "0005" rather than a
title, which can be edited.
Where the older specs live¶
This module was extracted from go-tool-base, and the chat specs written before the extraction settled stayed there:
- Module extraction (the core/provider split this module is built on)
- Provider fallback
- Conversation persistence
- Multimodal input
- Stateless one-shot calls
- Provider-conformance suite
They stay there rather than being copied here. A spec belongs with the decision it records, and duplicating one only creates a second copy to drift. New specs for this module and its provider modules land in this project's wiki.
Provider-module specs live in this wiki too, not in the provider repos: the adapters are too tightly coupled to the core to reason about separately, which is the same reason all provider documentation lives on this site.