-
v0.20.0
StableSome checks faileddrift / govulncheck (pull_request) Has been skippeddrift / surface-diff (pull_request) Successful in 30sdrift / forgejo-smoke (pull_request) Has been skippedci / mcp-conformance (pull_request) Successful in 1m33sci / mcp-conformance (push) Successful in -31sdrift / govulncheck (push) Has been skippeddrift / surface-diff (push) Successful in -39sdrift / forgejo-smoke (push) Has been skippedci / gate (push) Failing after 2m21sci / gate (pull_request) Failing after 9m20sreleased this
2026-10-18 05:28:05 +00:00 | 58 commits to main since this releaseChangelog
Features
33173ccfeat(adr)!: #530 resolve cross-repo record links and rename the skip flagf6fc229feat(adr)!: adr check reads only the Decision issues listfcff867feat(adr): #492 group adr check problems by file with plain messages and JSONf4a7763feat(adr): #508 add adr rebuild and report index status/title drift8f514e4feat(adr): #508 flag an index date drift in adr checkbc222e8feat(adr): read a cross-forge decision-issue link on its own forge75f9c1afeat(adr): remove the legacy docs/adr layoutf5a8416feat(adr): verify every file reference in a record5929085feat(forge-test): #796 cache pinned binaries in a host store and copy them into the VM1c9eea6feat(gate): scan every lockfile with osv-scanner975e6d1feat(git): require git 2.38, run git in the C locale, and pin the porcelain format9dedee7feat(guard): #653 add the guard package with its three write effects4e97354feat(guard): #654 declare effects for every operation and spec endpointa702760feat(guard): #659 route git pushes through a guarded writer999b838feat(guard): #660 enforce the ADR 0046 forge write guard on the first-class CLI and MCP surfacesb948530feat(guard): #665 remove the default-branch commit override04f2520feat(guard): #666 require forge proof before a removal destroys a refcb566d0feat(guard): #784 #785 route the raw api passthrough through the write guard9f9ad88feat(httpx): add the hardened HTTP client builder675f981feat(install): one verifying install commandbccf0c2feat(mcp): refuse owner_repo= forge writes to a populated repo outside the session's scope3667635feat(serve): add pi (Oh My Pi) as a first-class MCP harness08a73e2feat(testforge): #677 forge-test harness scaffolding (work in progress, not yet compiling)4c28163feat(testforge): #677 test each forge at a baseline and latest versionb0606edfeat(testforge): #692 bring the forge-test VM standup into the repo
Bug Fixes
10f6646fix(auth): strip userinfo from the URLs that whoami prints5d17aa8fix(config)!: remove the legacy OAuth client-id fallbackfd7e0d6fix(config): #715 run RequireSecureScheme in the env credential resolverd870ef9fix(config): key credentials by the forge host alone, per ADR 00250dab4acfix(config): refuse a token over non-loopback http on every config request7d33b59fix(config): refuse a token over non-loopback http on every config requestde0de75fix(config): require consent for the plaintext git helper, and URL-parse credential host keys571d05ffix(config): route the bootstrap HTTP client through internal/httpx871c75cfix(conformance): bump mcp SDK and proxy-addr past known CVEsc18b0e6fix(forge): provision removes stray VM devices and asserts the device setd87ec34fix(forge): reset via snapshot revert, drop the manual stop dance7de976afix(forge): surface incus start and stop errors, stop swallowing them3981659fix(gate): check only git-visible Go files for formattinge06ed72fix(gate): run the osv-scanner step on a copy of the files that git listsc665828fix(git): #710 guard tag create name and ref against a leading dash2460e6bfix(git): write a per-repo plaintext token only with recorded consent67998abfix(gitea): #711 escape repo-flags path segmentsec55514fix(gitea): escape every value joined into an API path or queryc3d5a96fix(gosec): enforce G104, drop dead G704, record kept exclusions8890a34fix(guard): #666 give the forge-reachable test worktree its own branch6a4bd2bfix(guard): #786 classify the diffpatch endpoint as a content write9494fcefix(http): strip the Authorization header on a non-same-origin redirect hopf5c1cf0fix(install.sh): read only primary fingerprints, and never run an unverified binaryaed5df0fix(licenses): declare the vendored MADR templates, and fail on undeclared vendored licenses4a101f8fix(mcp): bound the run_watch summary and stop the watch on cancel78b4336fix(mcp): bump go-sdk to v1.8.0 so tool results carry resultTypef762fd5fix(mcp): cap the inline artifact download at 10 MiB93edff6fix(mcp): carry resultType on unknown-argument rejections9b15ef3fix(mcp): lower the inline artifact download cap to 1 MiB597729afix(mcp): remove serve KeepAlive that the current client drops5912825fix(remote-add): route the credential write through the posture-aware helpera752300fix(scripts): cite the reason, not a tracker number, in shipped strings5e144e8fix(test): stop a config test writing into the source tree7310b3dfix: reject leading-dash values passed to git in option position
Refactors
655929brefactor(forge): push the committed tree into the VM instead of mounting it69c965frefactor(gitea): build HTTP clients through internal/httpx4109bc7refactor(guard): #654 use slices.Contains in effect membership checks4de3b7crefactor(setup): route the connectivity probe through internal/httpx
Documentation
2a93f4bdocs(adr): 0052 keeps forge-test caches on VM-local disk9d22505docs(adr): accept 0053, the gosec gate exclusions record647291fdocs(adr): accept ADR 004908d3f35docs(adr): add ADR 0046 and 0047, accept 0039, and edit 0031, 0037, and 0043 in placef1169f7docs(adr): add proposed 0050 and 0051 for release-notes and attribution gates9029a95docs(adr): add proposed ADR 0049 for the HTTP transport chokepoint1941c93docs(adr): align ADR 0039 and WirePi output with official omp docs7065973docs(adr): consolidate the decision records into their end-state form6a98932docs(adr): forge tests run against throwaway Forgejo and Gitea servers25c5602docs(adr): propose that the MCP surface reads no local filescb2ae89docs(adr): record that adr check enforces a stricter version of MADR 4.0.0 (0037)1c5a465docs(adr): record the forge-test rules as 0052 and point 0014/0017/0022 at it2d42584docs(adr): track the ADR 0039 phase-2 follow-ups as issuesbdbf046docs(adr): write ADR 0039 with plain hyphens01f3e6fdocs(ci): state that the CI checks on main are advisoryd11ad0edocs(mcp): use a plain hyphen in the madt_branches_remote description69c2eabdocs(security): report vulnerabilities by email onlyf4f7d02docs: finish a green branch at once, never hold or batch0c07f78docs: replace undefined acronyms and invented jargon with plain language
Other
efbc3bbbuild(gate): time-box staticcheck while it lacks Go 1.27.2 supportb1f9ad6revert(gate): restore ADR 0039 to proposed — acceptance is the decision-maker's call2fdf502style: apply gopls quick fixes9651258style: apply the gopls quick fixes and fix their stale commentsc33a0a7style: restore the whoami dash and fix the failResult comment
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads