Skip to content

Commit dbbe164

Browse files
author
Douglas Jones
committed
2026-05-14: CHANGELOG v2.0.0 entry — v2.0 formally closed
1 parent 1185b65 commit dbbe164

1 file changed

Lines changed: 145 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,151 @@ reach v1.0; until then, the canonical form may change between minor versions.
88
All notable changes to Codifide are recorded here. Releases follow semver once we
99
reach v1.0; until then, the canonical form may change between minor versions.
1010

11+
## [2.0.0] — 2026-05-14
12+
13+
Four requirements driven by the Agent Adoption Initiative. Every friction
14+
point that caused Program 5 (content-addressed composition) to fail across
15+
all three Track 1 case studies is now fixed. The bind-before-when footgun
16+
that Claude hit in T1-4 is now a parse error. The `CODIFIDE_RUNTIME=python`
17+
workaround is gone. The capability manifest now links to human-readable
18+
documentation. A B-Team governance review (GPT-5.4, live interpreter) closed
19+
the release. 341 tests passing, 0 skipped.
20+
21+
### Added — RPC API (`python3 -m codifide serve`)
22+
23+
Program 5 previously required four CLI commands, an index ceremony, and a
24+
runtime flag. The RPC API removes all of it.
25+
26+
- **`codifide/server.py`**`ThreadingHTTPServer` backed by the existing
27+
`SymbolStore`. No new storage logic; the server is a thin HTTP wrapper.
28+
- **`python3 -m codifide serve [--port 7777] [--store ~/.codifide/store]`**
29+
starts a local HTTP server bound to `127.0.0.1`.
30+
- **`POST /symbols`** — publish a symbol by POSTing its canonical CBOR (or
31+
JSON) form. Returns `{"identity": "sha256:<hash>", "name": "<name>"}`.
32+
Idempotent: a second POST of the same symbol returns 200 with the existing
33+
identity.
34+
- **`GET /symbols/{identity}`** — retrieve a symbol by its SHA-256 content
35+
identity. Returns canonical CBOR or JSON depending on `Accept` header.
36+
- **`GET /symbols/{identity}/imports`** — resolve the direct imports of a
37+
stored module. One level only; walk recursively for the full closure.
38+
- **`GET /health`** — liveness check. No store access.
39+
- **`docs/RPC_API.md`** — full endpoint reference, agent workflow for
40+
Program 5, security notes, and the Python alternative to `jq`.
41+
- 36 tests in `tests/test_rpc_program5.py` and `tests/test_server.py`.
42+
- Sable audit: 2 P2 findings fixed (negative Content-Length, socket timeout
43+
not bounding per-request read time), 3 P3 findings fixed or accepted.
44+
45+
**Key design decision:** individual symbol imports do not carry transitive
46+
dependencies. `route_message` calls `moderate` which calls `classify_content`
47+
— all three must be published and imported individually. The `/imports`
48+
endpoint resolves one level only; this is documented, not a bug.
49+
50+
### Added — static bind-before-when detection
51+
52+
The bind-before-when footgun (`when` guards execute before the candidate body,
53+
so a bound name used in a `when` guard is unbound when the guard runs) was
54+
previously a confusing runtime error: `unknown callable: 'label'`. It is now
55+
a parse error with a clear fix message.
56+
57+
- **Python parser** (`codifide/parser/parser.py`) — `_parse_candidate` now
58+
detects bind-before-when at parse time and raises `ParseError` with a
59+
one-line fix hint.
60+
- **Rust parser** (`crates/codifide-interpreter/`) — same detection ported
61+
to `parse_candidate`.
62+
- Runtime hints removed from `interpreter.py` (both parsers catch it now).
63+
- 12 regression tests in `tests/test_bind_before_when.py`.
64+
65+
### Added — `from`-import in Rust parser
66+
67+
`from sha256:<hash> import name1, name2` previously required
68+
`CODIFIDE_RUNTIME=python`. That workaround is gone.
69+
70+
- **`parse_with_store`** in the Rust parser resolves `from`-imports from the
71+
store filesystem at parse time.
72+
- **`run_with_imports`** in the Rust interpreter resolves imported symbols at
73+
call time.
74+
- **`codifide-run`** binary now accepts `--store <path>` (default:
75+
`~/.codifide/store`). The Python CLI passes `--store` to the Rust binary
76+
automatically.
77+
- `CODIFIDE_RUNTIME=python` note removed from `docs/AGENT_QUICKREF.md`.
78+
- 2 conformance tests in `tests/test_rust_interpreter.py::FromImportRust`.
79+
80+
### Added — capability manifest `docs` field
81+
82+
- `docs` field added to `generate_capability()` — links to human-readable
83+
documentation from the machine-readable manifest.
84+
- `docs/CAPABILITY.md` schema updated.
85+
- `docs/capability-0.1.json` regenerated.
86+
- publicsite `capability.json` and `capability.cbor` updated.
87+
88+
### Added — agent adoption infrastructure (Track 2)
89+
90+
Shipped alongside the v2.0 requirements as part of the Agent Adoption
91+
Initiative:
92+
93+
- **`docs/AGENT_COOKBOOK.md`** (v1.1) — 12 failure modes from five external
94+
agent sessions. Entries cover arithmetic operators, string methods,
95+
case-sensitive `contains`, `believe` block shape, `is_bottom` propagation,
96+
bind-before-when, content-addressed imports (CLI and HTTP paths), required
97+
`def` fields, `belief(...)` return type, and the double-print behavior of
98+
`io.say`.
99+
- **`python3 -m codifide agent-quickstart`** — zero-to-running-program CLI
100+
for fresh agents.
101+
- **`docs/AGENT_QUICKREF.md`** updated — direct-call `is_bottom(f())` pattern
102+
documented; `io.say` double-print note added.
103+
- **`docs/AGENT_TASK_SPEC.md`** — pipeline task spec used in all four case
104+
studies. Confidence thresholds corrected (`"uncertain"` at 0.75 clears the
105+
0.70 gate; `"escalate-to-human"` path is now reachable).
106+
107+
### Changed — version bump to 2.0.0
108+
109+
- Python package version: 1.0.0 → 2.0.0.
110+
- Rust crate versions: 1.0.0 → 2.0.0.
111+
112+
### Capability manifest hash at v2.0.0
113+
114+
`sha256:42d73647ba8de29a7d219bf2218bad0a42dc2a11d7878cac12ee931be2a1a185`
115+
116+
### Test count at v2.0.0
117+
118+
- Python: **341 passing, 0 skipped** (was 216 at v1.0.0).
119+
- Rust canonical: **28 passing** (unchanged).
120+
121+
### Governance
122+
123+
v2.0 went through a full A-Team + B-Team governance review before close:
124+
125+
- **A-Team review (2026-05-14):** Axiom, Lumen, Relay, Sable passes. 8
126+
findings: 7 applied, 1 deferred (cookbook HTTP workflow — subsequently
127+
completed).
128+
- **B-Team review (2026-05-14):** GPT-5.4 ran the pipeline task spec with
129+
live interpreter access (found and installed the local repo). 4/5 programs
130+
on first attempt. 4 findings: all applied.
131+
132+
### Known limitations
133+
134+
- **Parallel evaluator branch interpreters do not carry resolved imports.**
135+
Branch interpreters are created with empty `resolved_imports`, so imported
136+
symbols are not available inside parallel branches. Documented in
137+
`crates/codifide-interpreter/` with a clear fix path. Tracked as
138+
AUD-OVERNIGHT-02; scheduled for Sable audit before v3.0 parallel work.
139+
140+
### What shipped across the v2.0 work that made it to this tag
141+
142+
From oldest to newest:
143+
1. Rust interpreter + Rust parser (Shape A milestone, 2026-05-12)
144+
2. Parallel evaluator and benchmarks (2026-05-12)
145+
3. Agent Adoption Initiative — Tracks 1, 2, 3 (2026-05-13)
146+
4. V2-1 RPC API (2026-05-14)
147+
5. V2-2 Static bind-before-when detection (2026-05-14)
148+
6. V2-3 from-import in Rust parser (2026-05-14)
149+
7. V2-4 Manifest docs field (2026-05-14)
150+
8. A-Team + B-Team governance review (2026-05-14)
151+
9. Cookbook v1.1, quickref updates, journalist catch-ups (2026-05-14)
152+
153+
Every item documented in paired dispatches under `dispatches/`.
154+
Browse `dispatches/INDEX.md` for the indexed journal.
155+
11156
## [1.0.0] — 2026-05-11
12157

13158
The v1 cut. A full day's work — four external-model reviews in the

0 commit comments

Comments
 (0)