Breaking Changes
- OpenCode: the
opencodetarget now writes for OpenCode 2.x, and a newopencodev1target keeps the previous OpenCode 1.x output. OpenCode 2.x restructured nearly every key Rulesync writes: permissions become the orderedpermissionsarray, MCP servers move undermcp.servers, commandsubtaskbecomessubagent, subagent frontmatter is V2-only, and hooks are a{ id, setup(ctx) }plugin. Projects still on OpenCode 1.x must switch to theopencodev1target and rename theiropencodesections and override keys toopencodev1. (#3614) - Install: refs are resolved exactly and lock pins are bound to the declared ref. Git-transport sources now match
refs/heads/<ref>/refs/tags/<ref>exactly (annotated tags resolve to their commit), and a branch and a tag with the same name that point at different commits are refused as ambiguous. When a source's declaredrefdiffers from the lock'srequestedRef,installre-resolves it andinstall --frozenfails.install --mode apmchecks the locked commit against the ref's history, checks every target before writing under--frozen, and only removes stale files under its deploy directories. (#3622) - MCP server: symbolic links below a feature directory are refused. The
get,listandputoperations no longer follow a symlinked rule, command, skill, subagent or other source file below its feature directory (a symlinked.rulesyncor feature directory still works).addrejectsfile://sources outside the project. (#3621) rulesync gitignoreandinitno longer write through a symbolic link that leads outside the project.gitignorerefuses an outbound or dangling.gitignore/.gitattributeslink;initskips a sample file it would create through such a link, with a warning. (#3623)
What's Changed
New Features
- feat(opencode)!: target OpenCode 2.x and add
opencodev1for OpenCode 1.x (#3614) - feat(doctor): report Codex CLI
AGENTS.mdfiles overproject_doc_max_bytesas acodexcli/agents-md-sizewarning, sodoctor --strictfails on anAGENTS.mdthat Codex would truncate (#3620)
Bug Fixes
- fix(permissions): never auto-approve inputs marked
askordenyin lossy translations (#3613) - fix(install): honor the gh lock pin and refuse in-root symlinks on gh/apm writes (#3611)
- fix(install): harden ref resolution, lock pins and stale-file removal (#3622)
- fix(mcp): refuse symlinked feature files and outside
file://add sources (#3621) - fix(security): confine CLI
init/gitignorewrites and OpenCode{file:}reads to the project (#3623) - fix(fetch): honor source precedence for single-file features under
--conflict skip, and strip terminal control characters fromrelease-notesoutput (#3624)
Contributors
Full Changelog: v40.2.0...v41.0.0