v0.2.0 (2026-07-04)
This release is published under the MIT License.
Bug Fixes
-
cli: _now() returns aware UTC — the clock source behind every Z-stamped timestamp (
88a1aed) -
cli: Fail loud on an unreadable run.json at cairn run's resume entrances (
ec58509) -
cli: Guard the run --run-dir resume entrance too (
e430094) -
cli: Honest preflight docstring + guards-then-tools order on every resume entrance (
b8e2062) -
doctor: Codex hook-probe recipe — mirror the live 0.142.5 exec argv, pin gpt-5.5 (
0e36527) -
doctor: Retry hook-probe canary cleanup once; surface a surviving leftover as a warning (
8943e48) -
executors/codex: Drop dead -a flag, add --skip-git-repo-check (0.142.5) (
bdfa1f5) -
executors/grok: Live-verify against grok 0.2.82 — --prompt-file delivery, bypassPermissions, native --effort (
6bb055a) -
gatekit: Canonical format_at shape for gate decision timestamps (
e1ceced) -
release: Allow_zero_version so first automated release is 0.2.0, not 1.0.0 (
e3aed3e) -
scaffold: Open-pr re-validates targets in-script — the gate-time veto path is post-validation (
33da00f) -
scaffold: Self-improve quality pass — matrix retrofit append, gate-edit resilience, legible failures, ladder tokens (
f6633c1) -
tests: Pin executor health in doctor-probe exit tests — claude CLI absent on CI runners (
5e2aaf4) -
trail: Redact the envelope object before serialization, not the line (
46ee214) -
walk: Honest usage precedence on empty dict + no stale beat after stop (
b87f438) -
walk: Z-terminated UTC created_at + prefer executor-reported usage (
291f312)
Chores
-
activation: Fill gabros20/cairn URLs, check off repo-creation steps (
5613c3c) -
doctor: Drop vacuous render ternary; pin env lockstep + auth-copy OSError contracts (
324654b) -
package: Rename distribution to cairn-pipelines + publish metadata (
dc1602e)
Code Style
- cli: Hoist the proc.SubprocessRunner alias import to the top import block (
c450414)
Continuous Integration
-
Plan + offline-replay both live smoke workspaces (
b8d1ae4) -
Plan + offline-replay the mixed-fleet live workspace (
a11ae1f) -
Plan + offline-replay the workspace-grok live smoke workspace (
e41bb66)
Documentation
-
Backlog wave shipped — heartbeats, webhook sink, redaction, version gates, tool enforcement, UTC clock (
9f80d84) -
C4 shipped — codex live-verified + hook probe settles guard posture (
803bfbb) -
C5 shipped — all three executors live, grok hook-primary, mixed fleet proven (
8294978) -
Fix review round on getting-started + docs index (
5f61110) -
Getting-started tutorial + Diátaxis docs index (
1fc3963) -
Self-improve ships as scaffold furniture; brease=on is workspace-migration scope (
059e557) -
Test count 659 → 664 after the C4 fix rounds (
91138e5) -
api: Add annotated workspace-layout orientation tree (real scaffold) + concrete run-dir layout (
4e57495) -
api: Add internal .cairn/ + .cairn.lock to run-dir tree; annotate runs/ as created-on-first-run; fix .cK suffix prose (c1 is logged) (
395c627) -
architecture: Add component-flow + step-lifecycle mermaid diagrams; sharpen guard-engine status (post enforces; hook/shim install_guards still stubbed); de-link PORT-DESIGN ref (
f1faafd) -
architecture: Correct §4 guard status — shim+post enforce today (cli.py GuardedExecutor prepends per-run .cairn/shims to PATH); only the hook-layer install_guards is the no-op (
720cf06) -
architecture: Refresh stale kernel-size figure to a rounded ~9,000 lines / ~two dozen modules (
b70b0e6) -
concepts: Add noun/verb model mermaid map; de-link cross-repo PORT-DESIGN refs to prose (
6db093c) -
distribution: Retense packaging/release to the shipped cairn-pipelines setup (
c1e6698) -
example: Reframe intro for a public reader (
6cba40e) -
implementation-plan: Mark as a historical build record up top (
f1aa8ab) -
observability: Add trail-protocol flow mermaid (redact→serialize→jsonl authority→tee); correct guard-deny status (not emitted yet; surfaces as step-fail today) (
b422344) -
observability: Quote mermaid edge label with arrow for parser safety (
009ac0c) -
readme: Review nits — annotate runs/ as created-on-first-run, note abridged run-dir tree (
c2c8ad4) -
readme: Rewrite publish-grade for external OSS audience (
b795511) -
releasing: Branch-protection bypass + origin-remote preview caveat (
ad44674) -
releasing: Check off GitHub-side activation items (pypi env, write perms) (
503be49) -
releasing: Release how-to + first-publish activation checklist (
cf8fb53) -
scaffold: Fix hello.yaml agent-upgrade comment — [executors.claude] already ships enabled (
ef55e4f) -
scheduling: Add install-time-vs-fire-time sequence diagram (
f019a6d) -
scheduling: Harden the sequence mermaid — drop angle-bracket and arrow labels (
44cf123) -
security,tooling: Correct the allowlist-enforcement status to shipped reality (
18e1475) -
testing: Render the L0–L4 validation pyramid as an ASCII diagram (
cfe492f) -
tooling,distribution: Fix guards-layer over-claim + OWNER placeholder (
604a8ad)
Features
-
cli: Cairn run/resume hard-stop on unverified in-range tools (
6553b4c) -
cli: Cross-version resume gate — refuse cross-major run dirs without --force (
e2d1cf7) -
config: Version_compat — classify recorded vs installed cairn for the resume gate (
918b6ac) -
doctor: "satisfies requires" line — say whether installed cairn meets the pin (
cbe5d54) -
doctor: Add empirical hook-firing probe engine (C4) (
9af80e7) -
doctor: Codex hook-probe auth seam — copy auth.json (only) into the canary CODEX_HOME (
eb52511) -
doctor: Grok hook-probe recipe (C5) — live-verified fires+blocks (
e5bb984) -
doctor: Wire --probe-hooks into doctor, replacing the C4 stub (
80b3483) -
release: Semantic-release-driven release + PyPI publish workflow (
ed689b3) -
scaffold: Self-improve template — the learning loop's curate→promote as packaged workspace furniture (
b9c13df) -
security: Redact declared secrets from step logs and the trail (
a99c459) -
trail: Single-source format_at Z-terminated UTC timestamp formatter (
10f8217) -
trail: Sink seam — jsonl authority + webhook tee + redactor factory (
0370d01) -
types: Add optional Result.usage for step-completion usage plumbing (
676f55e) -
walk: Periodic heartbeat events for long-running steps (
1d0969a)
Performance Improvements
- plan: Lazy workspace fallback for needed_by scope matching (
0d7d816)
Refactoring
-
batch: Honest char-cap name + salient last-line error preview (
1a8c239) -
cli: Alias _SubprocessRunner to the shared proc.SubprocessRunner (
6beff76) -
doctor: Hoist requires_satisfied import + channel-neutral requires hint (
066a359) -
doctor: Hookprobe review minors — shared auth seam + fragility notes (
9e31463) -
kernel: Unify batchkit spawn + schedkit Runner behind proc.py (
f3e4343)
Testing
-
config: Pin pre/dev same-minor pairs in the version_compat matrix (
55ca4ec) -
executors/codex: Pin exact no-effort argv (
654f788) -
live: Codex executor live smoke workspace + recorded offline regression (
97137a2) -
live: Mixed-fleet workspace — codex+claude+grok cooperate in one pipeline, live-verified + recorded offline replay (
c2ecccb) -
live: State the vendor-pin intent in build.json's schema description (
3cc6867) -
live: Workspace-grok — live-verified smoke + smokefail on grok 0.2.82, recorded offline replay (
1c27462)
Detailed Changes: v0.1.0...v0.2.0