@@ -8,6 +8,151 @@ reach v1.0; until then, the canonical form may change between minor versions.
88All notable changes to Codifide are recorded here. Releases follow semver once we
99reach 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
13158The v1 cut. A full day's work — four external-model reviews in the
0 commit comments