Releases: oratis/deepcode
Release list
v0.3.0
[0.3.0] — 2026-08-08
A workspace-governance layer: what the agent may touch, what it changed, and how
to undo it. Derived from a first-hand study of Floatboat's open Selfware
protocol — see docs/research/floatboat.md for
the research (with evidence grading) and
docs/FLOATBOAT_ADOPTION_PLAN.md for what was
adopted, what was rejected, and where the implementation diverged from the plan.
⚠️ Breaking
- The CLI is published as
@deepcode/cli, notdeepcode-cli. Install with
npm i -g @deepcode/cli. The unscoped name on npm belongs to an unrelated
project, so it was never ours to publish to. The binary is stilldeepcode
and nothing about the tool's behaviour changes. (#249) - Unattended runs no longer inherit a permissive permission mode. A
permissions.defaultModeofbypassPermissionsoracceptEdits— chosen for
interactive convenience — is clamped todefaultfor scheduled jobs, which
run with nobody present to approve anything. Set a job'sprofile.mode
explicitly to opt back in. The clamp names itself and the fix in the job log
on the first run after upgrading. (#244)
🔒 Security
.envcould be read, and there was no way to say otherwise. Permission
rules match on the tool; their only path-aware match is a prefix compare
against an argument that is usually an absolute path, soRead(.env*)matched
nothing. The new file contract adds the missing axis —
glob × read/write/execute × allow/ask/deny — composed with the existing rules
by most-restrictive-wins. It can only tighten. (#238, #239)- A contract
denycannot be waived bybypassPermissions. It states
something standing about a path rather than prompting about one call, so the
mode that exists to skip prompts has no business clearing it. (#239) - Plugin subprocesses are gated by the same path rules; the capability bridge
previously called the dispatcher without a contract. (#239) /combodrafts exclude paths the contract denies reading and redact
credential-shaped values. A rule that stops at the tool call but not at the
export is not much of a rule. (#243)
✨ Added
- File contract —
deepcode contract <show|init|check>. Optional; with no
contract file, behaviour is unchanged. (#238, #239) - Change ledger —
deepcode ledger <list|show|export|rollback>. An
append-only record pairing each mutation with the request that motivated it
and the checkpoint that reverses it, on two timelines (changes,
governance). Stored outside the repository sogit statusstays clean.
(#240, #241) - No Silent Apply — explain, preview, accept/reject/defer, rollback point
first.confirmis a required argument, so a caller that cannot ask a human
cannot apply. (#241) runtime/capabilities— a protocol method answering what the runtime may
write and which actions always stop for a human, distinct frominitialize's
protocol-feature flags. The CLI and app-server build it through one function,
with a test asserting they agree field-for-field. (#242)/combo— distil a finished thread into aSKILL.mddraft, with
allowed-toolsderived from the tools actually called. (#243)- Trigger profiles — per-job
mode,permissions, andsandboxfor
scheduled work. Permissions and sandbox can only tighten. (#244) onApprovalRequired: 'abort'for scheduled jobs, plus exit code6. A job
whose first write is refused otherwise grinds on and reports a confidently
wrong result. (#237)deepcode doctorprints the runtime capability declaration and the
file-contract warnings. (#242)
🐛 Fixed
- Aborting mid-batch left
tool_useblocks unanswered, which a provider rejects
on resume. Remaining calls now get an explicit "never ran" result. (#237) docs/cli-flags.md's exit-code table contradicted the implementation (it
listed3as "tool denied" and5as "API key invalid"). Corrected against
apps/cli/src/headless.ts, which owns the contract. (#237)
📄 Documentation
- New:
docs/file-contract.md,
docs/change-ledger.md,
docs/combo.md,
docs/research/floatboat.md,
docs/FLOATBOAT_ADOPTION_PLAN.md. docs/security-model.mdgains threats #8–#10 and a residual-risk section
stating plainly that the file contract is policy, not a boundary: it does not
constrain Bash, and only the sandbox does.
🚫 Deliberately not adopted
.self self-executing distribution (a supply-chain surface for a coding agent),
Floatboat's passive habit observation across files and browser tabs (a privacy
line, and unnecessary — /combo gets the value from an explicit invocation),
cross-organisation agent networks, and a second loopback HTTP runtime alongside
the app-server. Reasoning in the adoption plan §3.
No macOS build in this release. Apple signing credentials were not configured when it was cut; see
docs/RELEASING.md.
Not published to npm.
NPM_TOKENwas not configured when this release was cut; install the VSIX below or build from source.
Full commit list: v0.3.0 compare view