Announcements
Release notes and updates across Codifide — the Codifide Harness framework and harness files, and the Codifide Programming Language.
A CI fix, and the first signed release tag
The example CI workflow checked out GitHub’s synthetic merge commit for pull requests. That commit carries no provenance trailers, so the review-level check failed every pull request that touched a governance file, even with the approval label applied. The workflow now checks out the pull request’s own head commit. If you installed v3.2.0, add the one line by hand: the installer does not overwrite your workflow file.
The v3.2.1 tag is signed with an SSH key. The download is not separately signed; check it against
SHA256SUMS. The whitepaper is retitled
“Codifide Harness: How We Govern AI-Powered Development in Healthcare”.
The fix was found on two of our own repositories, where governance pull requests then passed; it has not been
exercised by anyone else yet. See the
release on GitHub.
A pinned installer, with upgrade and uninstall
The steering files, hooks and four enforcement scripts are unchanged from v3.1.0. What is new is the way to get them into a repository and keep them current, without a network install.
Dry run first
install.sh runs from a downloaded release, prints its plan and writes nothing until you
pass --apply. It targets one or more hosts (Kiro, Claude Code, Cursor, Copilot, Codex) and
refuses to run from anything but a tagged release.
no network · no commits · no git config changes
Your files stay yours
Policy files you own, such as .codifide/immutable-paths, CLAUDE.md and
AGENTS.md, are created only when absent. .claude/settings.json is never
written; the installer prints a snippet to merge instead.
no-clobber · merge snippets · hash manifest
Upgrade and uninstall
upgrade shows a diff and replaces only files you have not edited.
uninstall removes only the unmodified files it installed. Changes then go through a
normal pull request.
manifest-driven · stops on local edits · one version number
What has been checked: the installer’s own suite (367 checks) and one cross-vendor review, after
which eight findings were fixed with regression tests. What has not: any host actually loading the installed
files. The release is not cryptographically signed yet; check the download against SHA256SUMS.
See the quickstart or the
release on GitHub.
Run multiple agents on one codebase — without the mess
The Codifide Harness files were first built for one agent session at a time. Running several against the same repository used to mean clobbered files, tangled git history, and lost handoffs. This update adds a deliberately right-sized way to run concurrent sessions safely — and it stays completely out of the way when you're working solo.
Isolation by worktree
Each concurrent session gets its own git worktree — a separate working directory and branch that share one object store. Two sessions physically cannot overwrite each other's files. External state (ports, scratch databases, caches) is separated per session too, because isolating files is a false comfort if the running processes still collide.
git worktree per session · per-session ports/DB/caches · serialized git metadata
Sharded session state
Each session records its own handoff instead of overwriting a shared one, so no session's notes are silently lost to a last-writer-wins race. An integrator consolidates the per-session handoffs when the parallel work merges.
per-session handoff files · integrator consolidates on merge · solo work unchanged
Verified integration
Each branch passing its own tests does not prove the branches compose — one session can change an interface another still relies on, and every isolated test still passes. When a test suite exists, it runs against the merged state before anything reaches the main branch. A clean textual merge is not a pass; git detects textual conflicts, not semantic ones. This is what turns "we think it's clean" into evidence.
tests run against merged state · catches interface drift · confidence, not hope
This is for one codebase. Coordinating lanes of agents across many codebases, with frozen seam contracts and merged-state verification across them, is the separate, private Codifide Swarm, which is in development. Deliberately right-sized: heavier coordination machinery (scope partitioning, merge queues, flaky-test classification) is left out until collisions recur despite isolation — the same scale-adaptive principle that governs the gates. Read the deep dive on the Codifide Harness page, or copy the open-source harness from GitHub.
What v4.0 adds — the usability release
v4.0 closes the gap between research prototype and usable tool.
Runtime type enforcement makes sig declarations checked at runtime (best-effort: untagged values pass).
A standard library covers file I/O, HTTP, JSON, and date arithmetic.
450 tests passing, 0 skipped.
Runtime type enforcement
sig declarations are now enforced at every call boundary.
Passing a String where Int is declared raises
TypeViolation. Any accepts all values.
Number accepts both Int and Float.
# v4.0 — type mismatch caught at call boundary
def double
intent "double an integer"
sig (n: Int) -> Int
effects {}
cand
add(n, n)
# double("hello") → TypeViolation: parameter 'n' expects Int but got String
New TypeViolation error · 20 new tests · best-effort (untagged values pass)
File I/O and HTTP
io.read, io.write, io.exists for
filesystem access. http.get, http.post for
HTTPS requests. Path traversal defense built in. HTTPS-only enforcement.
def fetch_and_save
intent "fetch a URL and save to disk"
sig (url: String, path: String) -> Unit
effects {http.fetch, io.write}
cand
body <- http.get(url)
io.write(path, body)
{io.read} · {io.write} · {http.fetch} · 30s timeout · 16 MiB limit
JSON and date arithmetic
json.parse and json.encode are pure — no effect
declaration needed. clock.today, clock.parse,
clock.add_days, clock.format for date work.
def days_until
intent "days from today until a target date"
sig (target: String) -> Int
effects {clock.read}
cand
today_ts <- clock.parse(clock.today())
target_ts <- clock.parse(target)
div(sub(target_ts, today_ts), 86400)
json.parse · json.encode · clock.today · clock.parse · clock.add_days · clock.format
V4-4 deferred — network-safe server
Bearer token auth and TLS for the RPC server were scoped for v4.0 but deferred. The public registry (V4-3) must demonstrate multi-machine use cases before the security investment in network exposure is justified. The server remains local-only for now.
What v3.0 adds
Three requirements shipped. Refusal reasons make bottom diagnosable.
Remote symbol resolution makes content-addressed composition work across machines.
Parallel import support closes the last known gap in the parallel evaluator.
383 tests passing, 0 skipped.
Refusal reasons — bottom "reason"
bottom now accepts an optional string payload. The reason propagates
through RefusalError for diagnostics. Bare bottom is
unchanged — existing hashes are not invalidated.
# v3.0 — reason propagates through RefusalError
believe result
ge(conf(result), 0.85) => result
else => bottom "confidence below threshold"
AST · runtime · canonical form · Rust · 24 new tests
Remote symbol resolution
Push a symbol to a remote registry and resolve it from any machine.
codifide serve --read-only enables public registry deployments.
python3 -m codifide store push sha256:1c01… \
--registry https://registry.example.com
python3 -m codifide run pipeline.cod \
--registry https://registry.example.com
RemoteStore · fetch-and-cache · hash-verified · --read-only flag
Parallel evaluator import support
Branch interpreters in the parallel evaluator previously ran with empty
resolved_imports, making imported symbols unavailable inside
parallel branches. Fixed — imported-symbol calls are now eligible for
parallel evaluation.
# Imported symbols now work inside parallel branches
import classify_content = sha256:3770…
def main
intent "classify in parallel"
sig () -> List
effects {}
cand
list(
classify_content("message one"),
classify_content("message two")
)
AUD-OVERNIGHT-02 closed · branch interpreters carry resolved imports
V3-4 deferred — no adoption evidence
Time-indexed types (T@timestamp) were on the v3.0 roadmap but deferred.
No agent session produced evidence that the feature was needed. Adoption evidence
outranks intuition — the feature stays on the roadmap until real usage justifies it.
What v2.0 adds, fixes, and enables
Every friction point that blocked agents from completing Program 5 — content-addressed composition — is now fixed. Four requirements, driven by four LLM-agent case-study sessions (not human users), one governance review.
RPC API — Program 5 without the ceremony
Content-addressed composition previously required four CLI commands, an index ceremony, and a runtime flag. Now: start the server, POST canonical forms, import by the returned hashes. No index. No flag.
python3 -m codifide serve
# Publish a symbol
curl -X POST http://localhost:7777/symbols \
-H 'Content-Type: application/cbor' \
--data-binary @- < canonical.cbor
# Import by hash in your program
import classify_content = sha256:1c01b8b5…
POST /symbols · GET /symbols/{hash} · GET /symbols/{hash}/imports
· idempotent writes · 36 tests · reviewed by an AI persona (Sable)
Static bind-before-when detection
The most common footgun in Codifide — using a bound name in a when guard
before the body runs — was a confusing runtime error. It is now a parse error with a
one-line fix message.
# Before v2.0: runtime error "unknown callable: 'label'"
# After v2.0: parse error with fix hint
cand
label <- moderate(message)
when eq(label, "unsafe") # ← caught at parse time
"blocked"
Python parser + Rust parser · 12 regression tests
from-import in the Rust runtime
from sha256:<hash> import name1, name2 previously required
CODIFIDE_RUNTIME=python. That workaround is gone. Both runtimes
support from-imports as of v2.0.
# Works in both Python and Rust runtimes
from sha256:a8b5f554… import classify_content,
moderate,
route_message
Rust parser + Rust interpreter · --store flag · 2 conformance tests
Capability manifest docs field
The machine-readable capability manifest now links to human-readable documentation. An agent fetching the manifest gets a pointer to the quickref, cookbook, and getting-started guide — no separate discovery step.
python3 -m codifide capability --hash
# sha256:42d73647ba8de29a7d219bf2218bad0a42dc2a11d7878cac12ee931be2a1a185
curl https://www.codifide.com/capability.json | jq .docs
New manifest hash · publicsite updated · docs/CAPABILITY.md schema updated
Informed by four LLM agent sessions
v2.0 requirements were driven by what four LLM-agent case-study sessions needed. Four models (GPT-4o, Gemini 2.5 Pro, Claude, GPT-5.4) ran the pipeline task spec and documented every failure. The friction points they hit became the v2.0 requirements. The B-Team governance review (GPT-5.4, live interpreter) informed the release decision.