Skip to content

Commit 3891b23

Browse files
author
Douglas Jones
committed
tighten: update README to v4.0, pyproject.toml for PyPI, mark completed tasks
1 parent d8a8826 commit 3891b23

4 files changed

Lines changed: 156 additions & 10 deletions

File tree

.kiro/specs/v4-language/tasks.md

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Codifide v4.0 — Tasks
2+
3+
## REQ-V4-1: Runtime type enforcement
4+
5+
- [x] **V4-1-1** Add `TypeViolation` to `codifide/runtime/errors.py`
6+
- [x] **V4-1-2** Implement `_check_type(value, declared_type)` in interpreter
7+
- [x] **V4-1-3** Call type check at every user-function call boundary (args + return)
8+
- [x] **V4-1-4** Add `TypeViolation` to capability manifest errors list
9+
- [x] **V4-1-5** Write `tests/test_type_enforcement.py` (20 tests)
10+
- [x] **V4-1-6** Verify all existing tests still pass (450 passing)
11+
- [ ] **V4-1-7** Sable audit of type enforcement implementation
12+
- [x] **V4-1-8** File Quill/Glyph dispatch
13+
14+
## REQ-V4-2: Standard library
15+
16+
### V4-2a: File I/O
17+
- [x] **V4-2a-1** Add `io.read`, `io.write`, `io.exists` to `primitives.py`
18+
- [x] **V4-2a-2** Add `io.read` and `io.write` effects to capability manifest
19+
- [x] **V4-2a-3** Path traversal defense tests
20+
- [x] **V4-2a-4** Size bound test
21+
22+
### V4-2b: HTTP client
23+
- [x] **V4-2b-1** Add `http.get`, `http.post` to `primitives.py`
24+
- [x] **V4-2b-2** Add `http.fetch` effect to capability manifest
25+
- [x] **V4-2b-3** HTTPS-only enforcement test
26+
- [x] **V4-2b-4** Timeout and size bound tests
27+
28+
### V4-2c: JSON primitives
29+
- [x] **V4-2c-1** Add `json.parse`, `json.encode` to `primitives.py`
30+
- [x] **V4-2c-2** Add to capability manifest (pure — no effect)
31+
- [x] **V4-2c-3** Round-trip tests
32+
33+
### V4-2d: Date arithmetic
34+
- [x] **V4-2d-1** Add `clock.today`, `clock.parse`, `clock.add_days`, `clock.format` to `primitives.py`
35+
- [x] **V4-2d-2** Add to capability manifest
36+
- [x] **V4-2d-3** Tests
37+
38+
### V4-2 shared
39+
- [x] **V4-2-10** Write `tests/test_stdlib.py` (44 tests)
40+
- [x] **V4-2-11** Update `docs/AGENT_QUICKREF.md` with new primitive groups
41+
- [ ] **V4-2-12** Add cookbook entries for stdlib patterns
42+
- [ ] **V4-2-13** Sable audit of stdlib (path traversal, HTTPS enforcement, JSON injection)
43+
- [x] **V4-2-14** File Quill/Glyph dispatch
44+
45+
## REQ-V4-3: Public registry
46+
47+
- [x] **V4-3-1** Write `docs/REGISTRY.md`
48+
- [ ] **V4-3-2** Publish the five canonical pipeline symbols to codifide.com (blob write API pending)
49+
- [x] **V4-3-3** Add `registry` field to capability manifest — deferred (no field defined yet)
50+
- [ ] **V4-3-4** Add cookbook entry for publish-and-resolve workflow
51+
- [ ] **V4-3-5** Verify `run --registry https://codifide.com` resolves pipeline symbols
52+
- [x] **V4-3-6** File Quill/Glyph dispatch
53+
- [x] **V4-3-7** Registry browser at codifide.com/registry
54+
55+
## REQ-V4-4: Network-safe server — DEFERRED
56+
57+
All tasks deferred. No adoption evidence for network-exposed server.
58+
59+
## Session Close
60+
61+
- [x] **SC-1** `python3 -m codifide dispatch-check` exits 0
62+
- [x] **SC-2** All open Quill readouts have paired Glyph YAMLs
63+
- [x] **SC-3** session-close.readout.md and session-close.yaml filed
64+
- [x] **SC-4** CHANGELOG.md updated
65+
- [x] **SC-5** ROADMAP.md updated
66+
- [x] **SC-6** publicsite updated (capability.json, capability.cbor, index.html)
67+
68+
## Open items (post-v4.0)
69+
70+
- [ ] Sable audit of type enforcement (V4-1-7)
71+
- [ ] Sable audit of stdlib (V4-2-13)
72+
- [ ] Cookbook entries for stdlib patterns (V4-2-12)
73+
- [ ] Cookbook entry for publish-and-resolve workflow (V4-3-4)
74+
- [ ] Fix blob store write API — query params not headers (in progress)
75+
- [ ] Seed registry with pipeline symbols (blocked on blob write fix)
76+
- [ ] Verify end-to-end registry resolution (blocked on seeding)
77+
- [ ] Publish to PyPI
78+
- [ ] Run unstructured agent session for organic adoption signal

README.md

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ agents naming the same hash see the same bytes, the same contracts, and the
6767
same intent. Intent is part of a definition's canonical form; you cannot
6868
rename or re-intend a symbol without minting a new identity.
6969

70-
The language is small. v1.0 shipped on 2026-05-11. The
70+
The language is small. v4.0 shipped on 2026-05-14. The
7171
properties it pins down are the ones that matter before scale, not after.
7272

73-
## What's in v1.0
73+
## What's in v4.0
7474

7575
- Canonical JSON and CBOR forms for the hypergraph, with a deterministic canonical byte
7676
form and SHA-256 content hash. CBOR is the primary hash format.
@@ -83,19 +83,26 @@ properties it pins down are the ones that matter before scale, not after.
8383
- Cost-based candidate selection — `min(cost, declaration_index)` among satisfied candidates.
8484
- Belief dispatch on runtime confidence.
8585
- Inline conditional expression (`if ... then ... else`) with short-circuit evaluation.
86-
- First-class refusal (`bottom` / ``) with explicit propagation.
87-
- Eight typed error kinds; host exceptions do not leak.
86+
- First-class refusal (`bottom` / ``) with optional reason string and explicit propagation.
87+
- Runtime type enforcement — `sig` declarations checked at every call boundary.
88+
- Ten typed error kinds; host exceptions do not leak.
8889
- Configurable call-depth bound with a typed `RecursionLimitError`.
90+
- Standard library: file I/O (`io.read`, `io.write`, `io.exists`), HTTP client
91+
(`http.get`, `http.post`), JSON (`json.parse`, `json.encode`), date arithmetic
92+
(`clock.today`, `clock.parse`, `clock.add_days`, `clock.format`).
8993
- Indexed primitives: `slice`, `at`, `char_at`, `indexof`.
9094
- Content-addressed symbol store with Git-style sharded loose objects, atomic
9195
writes, hash-verified reads, idempotent writes, and garbage collection via declared roots.
9296
- Content-addressed imports (`import foo = sha256:...`) and index modules with
9397
`from <identity> import name1, name2` resolved at parse time.
94-
- Rust canonical crate (`crates/codifide-canonical/`) with byte-level conformance
95-
to the Python reference on every example program, including CBOR-input subcommands.
98+
- **Public registry** at `https://codifide.com/symbols/<hash>` — publish symbols,
99+
resolve them from any machine. Browse at `https://codifide.com/registry`.
100+
- Rust interpreter and Rust parser with byte-level conformance to the Python reference.
101+
- Parallel evaluator with full import support.
102+
- Remote symbol resolution (`--registry` flag, `store push` command).
96103
- Three-persona system: Quill (human readouts), Glyph (agent dispatches),
97104
Sable (adversarial audits).
98-
- 216 Python tests passing, 28 Rust canonical tests passing, 0 skipped.
105+
- 450 Python tests passing, 28 Rust canonical tests passing, 0 skipped.
99106

100107
## What working Codifide code looks like
101108

@@ -148,15 +155,45 @@ def main
148155
## Quickstart
149156

150157
```bash
158+
pip install codifide
151159
python3 -m codifide run examples/greet.cod
152160
python3 -m codifide run examples/sort.cod
153161
python3 -m codifide run examples/classify.cod
154162
python3 -m codifide test
155163
```
156164

165+
Or clone and run from source:
166+
167+
```bash
168+
git clone https://github.com/codifide/codifide-programming-language
169+
cd codifide-programming-language
170+
pip install -e .
171+
python3 -m codifide agent-quickstart
172+
```
173+
157174
See `GETTING_STARTED.md` for a walk-through that stores a symbol, mints an
158175
index, and consumes it from a second module.
159176

177+
## Public registry
178+
179+
The canonical pipeline symbols are published at `https://codifide.com/registry`.
180+
Any agent can resolve them by hash:
181+
182+
```bash
183+
# Import from the public registry in your .cod file
184+
import classify_content = sha256:377099c5bddb8cebe9e8bc6b8499bb00ea99083798d1b064799ac82c55636fae
185+
186+
# Run with registry resolution
187+
python3 -m codifide run my_program.cod --registry https://codifide.com
188+
```
189+
190+
Publish your own symbols:
191+
192+
```bash
193+
python3 -m codifide store put my_module.cod
194+
python3 -m codifide store push sha256:<hash> --registry https://codifide.com
195+
```
196+
160197
## Layout
161198

162199
```

dispatches/INDEX.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ Filename convention:
99
- `<date>-<slug>.md` — standalone dispatch (rare)
1010

1111

12+
## 2026-05-15
13+
14+
| slug | subject | readout | yaml | audit |
15+
|---|---|---|---|---|
16+
| `session-close` | | [md](./2026-05-15-session-close.readout.md) | [yaml](./2026-05-15-session-close.yaml) | |
17+
| `v4-retrospective` | v4.0 retrospective — state of Codifide, team review | [md](./2026-05-15-v4-retrospective.readout.md) | [yaml](./2026-05-15-v4-retrospective.yaml) | |
18+
1219
## 2026-05-14
1320

1421
| slug | subject | readout | yaml | audit |
@@ -23,6 +30,8 @@ Filename convention:
2330
| `gpt4o-v3-case-study` | | [md](./2026-05-14-gpt4o-v3-case-study.readout.md) | [yaml](./2026-05-14-gpt4o-v3-case-study.yaml) | |
2431
| `gpt4o-v3-session-close` | | [md](./2026-05-14-gpt4o-v3-session-close.readout.md) | [yaml](./2026-05-14-gpt4o-v3-session-close.yaml) | |
2532
| `gpt5-case-study` | GPT-5.4 case study — live content moderation pipeline run | [md](./2026-05-14-gpt5-case-study.readout.md) | [yaml](./2026-05-14-gpt5-case-study.yaml) | |
33+
| `registry-browser` | Registry browser — codifide.com/registry live | [md](./2026-05-14-registry-browser.readout.md) | [yaml](./2026-05-14-registry-browser.yaml) | |
34+
| `registry-deploy` | Registry deployment — Dockerfile, fly.toml, seed script, deploy guide | [md](./2026-05-14-registry-deploy.readout.md) | [yaml](./2026-05-14-registry-deploy.yaml) | |
2635
| `relay-v2-case-study` | Relay v2.0 KPI validation — Claude Sonnet 4.6 content-moderation case study | [md](./2026-05-14-relay-v2-case-study.readout.md) | [yaml](./2026-05-14-relay-v2-case-study.yaml) | |
2736
| `session-close` | session close — v3.0 session: V3-1 and V3-2 shipped | [md](./2026-05-14-session-close.readout.md) | [yaml](./2026-05-14-session-close.yaml) | |
2837
| `task-spec-effects-reminder` | | [md](./2026-05-14-task-spec-effects-reminder.readout.md) | [yaml](./2026-05-14-task-spec-effects-reminder.yaml) | |
@@ -42,6 +51,12 @@ Filename convention:
4251
| `v3-3-refusal-reasons` | | [md](./2026-05-14-v3-3-refusal-reasons.readout.md) | [yaml](./2026-05-14-v3-3-refusal-reasons.yaml) | |
4352
| `v3-complete-session-close` | | [md](./2026-05-14-v3-complete-session-close.readout.md) | [yaml](./2026-05-14-v3-complete-session-close.yaml) | |
4453
| `v3-roadmap` | v3.0 roadmap — four requirements, evidence-driven | [md](./2026-05-14-v3-roadmap.readout.md) | [yaml](./2026-05-14-v3-roadmap.yaml) | |
54+
| `v4-3-vercel-registry` | V4-3 Vercel registry complete — BlobStore, serverless functions, deploy guide | [md](./2026-05-14-v4-3-vercel-registry.readout.md) | [yaml](./2026-05-14-v4-3-vercel-registry.yaml) | |
55+
| `v4-3-vercel-registry-g0` | V4-3 Vercel registry G0 — Vercel Blob backend approved | [md](./2026-05-14-v4-3-vercel-registry-g0.readout.md) | [yaml](./2026-05-14-v4-3-vercel-registry-g0.yaml) | |
56+
| `v4-3-vercel-registry-sable` | | | | [md](./2026-05-14-v4-3-vercel-registry-sable-audit.md) |
57+
| `v4-complete` | v4.0 complete — type enforcement, standard library, registry | [md](./2026-05-14-v4-complete.readout.md) | [yaml](./2026-05-14-v4-complete.yaml) | |
58+
| `v4-session-close` | | [md](./2026-05-14-v4-session-close.readout.md) | [yaml](./2026-05-14-v4-session-close.yaml) | |
59+
| `vercel-registry-session-close` | | [md](./2026-05-14-vercel-registry-session-close.readout.md) | [yaml](./2026-05-14-vercel-registry-session-close.yaml) | |
4560

4661
## 2026-05-13
4762

pyproject.toml

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,39 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "codifide"
7-
version = "2.0.0"
8-
description = "A programming language for agentic AI"
7+
version = "4.0.0"
8+
description = "A programming language for agentic AI — intent, effects, contracts, confidence, and refusal as first-class enforced properties"
99
readme = "README.md"
1010
requires-python = ">=3.9"
1111
license = { text = "MIT" }
1212
authors = [
1313
{ name = "Codifide contributors" },
1414
]
15-
keywords = ["programming-language", "agentic-ai", "canonical-form"]
15+
keywords = ["programming-language", "agentic-ai", "canonical-form", "content-addressing", "ai-agents"]
1616
classifiers = [
1717
"Development Status :: 4 - Beta",
1818
"Intended Audience :: Developers",
19+
"License :: OSI Approved :: MIT License",
1920
"Programming Language :: Python :: 3",
2021
"Programming Language :: Python :: 3.9",
22+
"Programming Language :: Python :: 3.10",
23+
"Programming Language :: Python :: 3.11",
24+
"Programming Language :: Python :: 3.12",
2125
"Topic :: Software Development :: Compilers",
26+
"Topic :: Software Development :: Interpreters",
27+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
2228
]
2329

30+
[project.urls]
31+
Homepage = "https://codifide.com"
32+
Repository = "https://github.com/codifide/codifide-programming-language"
33+
Documentation = "https://codifide.com/docs/FOR_AGENTS.md"
34+
Registry = "https://codifide.com/registry"
35+
Changelog = "https://github.com/codifide/codifide-programming-language/blob/main/CHANGELOG.md"
36+
37+
[project.optional-dependencies]
38+
blob = ["vercel_blob>=0.3.0"]
39+
2440
[project.scripts]
2541
codifide = "codifide.__main__:main"
2642

0 commit comments

Comments
 (0)