Plans¶
Past plans (done) and future plans (proposed). The roadmap lives here so contributors know what is intended before it is built.
Proposed¶
Correctness¶
- [ ]
addshould clear its destination —cloneRepoonly errors ongit.ErrRepositoryAlreadyExists, which requires a.gitdirectory, butvstrips.gitfrom every tree it writes. Re-adding over an existing vendored path therefore clones into the populated directory and merges new files over stale ones, so files deleted upstream survive.updatealready doesos.RemoveAllfirst;addshould match. (cmd/add.go) - [ ]
update <url> <ref>loses the ref switch when the commit is unchanged — the already-up-to-date branch returns early before the new ref is written back, so switching to a different ref that points at the same commit leaves the old ref recorded invendors.toml. (cmd/update.go) - [ ] Guard the abbreviated-hash slices —
updateslicescommit[:7]unguarded, so a hand-writtenvendors.tomlwith a short or absentcommitpanics instead of erroring. (cmd/update.go) - [ ] Decide what SSH URL support means —
defaultPathrunsurl.Parseon the raw argument, so an scp-stylegit@github.com:org/repo.githas no parseable host and yields no sensible default path, yet the README and both reference pages advertise "HTTPS or SSH". Either normalise scp-style URLs or correct the claim. (cmd/add.go)
Release and packaging¶
- [ ] Replace the placeholder package description —
.goreleaser.ymlshipsdescription: v is a CLI toolto nfpm and Homebrew, so that string appears inapt show v,rpm -qi v, andbrew info v. The nfpmmaintaineralso lacks theName <email>form deb tooling expects. - [ ] Settle the tag prefix — the README's release instructions say
git tag v0.x.0; the repository's actual tags are unprefixed. - [ ] Stop pinning the
install.shURL to a release branch — the README's one-liner needs editing every minor cycle, and published copies end up pointing at stale branches.
Enhancements¶
- [ ] Git round-trip support — make it easy to temporarily restore the
.gitdirectory of a vendored dependency so you can make changes and contribute them back upstream, then re-vendor the updated code. - [ ] Selective vendoring — allow individual dependencies to be
excluded from the
vendor/tree (e.g. for license-compatibility reasons) while still being tracked invendors.toml. - [ ]
v status— verify each vendored tree still matches its recorded commit. Nothing currently detects local drift, which is the gap in the provenance argument the Explanation page makes.v listandv removeare natural companions. - [ ] Run
test:integratedin a temporary directory — it writesvendors.tomlandtest-vinto the repository root, which is the only reasonvendors.tomlis gitignored, directly contradicting the documentation's "always commitvendors.toml". - [ ] Shallow-clone in
cloneRepo— it fetches full history and then deletes.git. A depth-limited or single-branch fetch is materially faster for large upstreams, at the cost of commits not reachable from an advertised ref. - [ ] Add a
.golangci.yml— lint currently runs whatever the pinned version defaults to; an explicit config keeps the gate reproducible across upgrades. - [ ] Automate dependency bumps —
GOLANGCI_LINT_VERSION,MKDOCS_MATERIAL_VERSION,GORELEASER_IMAGE, and the Go base image are all pinned by hand.
Done¶
- [x] Changelog reconciled with the tags — the section published as
0.2.0was never tagged, so its contents moved to[Unreleased]; the missing0.1.0and0.1.1entries were added;updatewas reattributed from0.2.0to0.1.0, where it actually shipped; and0.0.1and0.1.1are now marked as the re-tags they are, pointing at the same commits as0.0.0and0.1.0. - [x] Documentation accuracy pass — corrected
.claude/docs/architectural_patterns.md, which had described a two-stagescratchbuild that never existed and pointed at atask release:snapshotthat is not a task; repointed the deadmain-branch links in Quickstart, Explanation, and Changelog; describedtask checkas the test + lint +test:integratedgate it actually is; moved the generated cobra pages out ofreference/apiintoreference/cli/so they no longer collide with thego docoutput, and gitignored them; completed the README task table; and added the two documentation steps to both "Adding a command" checklists. - [x]
addcommand — vendor a git repository and record it invendors.toml. - [x]
updatecommand — re-fetch vendored repositories at their current or a new ref. - [x] Release pipeline — GoReleaser cross-builds, Linux packages, and a Homebrew formula.