Repository navigation
Releases: marcelocantos/cv
Release list
v0.12.0
What's Changed
- Publish the Homebrew formula with tapper instead of homebrew-releaser by @marcelocantos in #9
Full Changelog: v0.11.0...v0.12.0
v0.11.0
What's Changed
- ci: bump GitHub Actions to Node 24 majors by @marcelocantos in #6
- Land entropy-audit follow-up by @marcelocantos in #7
- Make ** in wildcards match any number of directory levels by @marcelocantos in #8
Full Changelog: v0.10.0...v0.11.0
v0.10.0
Headline: the project formerly known as mk is now cv.
Pure rename release — no behaviour changes, no new features. The name cv (short for converge) reframes the tool around its core function: drive a project toward a declared state, with cv as the imperative verb. Pairs naturally with bullseye (the target system) and the /cv skill (which audits convergence) for a shared vocabulary across the convergence toolchain.
Why rename
Plan 9 mk (Andrew Hume & Bob Flandrena, 1989) is a build tool of the same category, using the same mkfile filename, with 35+ years of prior art. Disambiguating dissolves the PATH/discoverability conflict and lets us acknowledge Plan 9 mk explicitly as the predecessor — many of mk's design choices ($target style metavariables, parallel-by-default, oneshell-by-default, mkfile convention) were independent re-derivations of decisions Plan 9 mk made first. The lineage is preserved verbatim in DESIGN.md, docs/why-cv.md, and docs/discovered-dependencies.md.
Scope of the rename
- Go package
mk→cv; modulegithub.com/marcelocantos/mk→github.com/marcelocantos/cv. (Old URL redirects.) - Binary
cmd/mk→cmd/cv; outputcv. - Conventional file
mkfile→cvfile. - State directory
.mk/→.cv/. - Stdlib files
std/*.mk→std/*.cv; embed directive updated. - Shell completions
completions/cv.bash,completions/cv.zsh; functions renamed to_cv. - CI workflow: ldflags target, tarball naming, Homebrew formula install/test blocks, completion install paths.
- Old Homebrew formula
Formula/mk.rbdeleted frommarcelocantos/homebrew-tap. This release createsFormula/cv.rb.
For existing mk users (i.e., me)
brew uninstall mk
brew update
brew install marcelocantos/tap/cvNo on-disk state needs migration: .mk/ directories from prior builds are simply ignored by cv and can be deleted at leisure. Old mkfiles need to be renamed to cvfile (or you can run cv -f mkfile to keep the old filename per-project).
What's not changing
- The DESIGN.md spec — the language, semantics, and engine are unchanged from v0.9.0.
- The discovered-dependency model (DESIGN.md §11) shipped in v0.9.0 — still here, still working, still self-healing on deleted headers.
- The release-tag history. v0.1.0–v0.9.0 of the project remain in this repo under their original names (the audit log preserves the
mkname for those releases verbatim).
v0.9.0
Headline: include std/c.mk now tracks C/C++ headers correctly with no -include *.d, no -MP, no .d files in the source tree, and no deleted-header crashes. mk learns what each recipe actually read, records it in the content-hashed build database, and self-heals on deletion.
Added
- Discovered-dependency model (DESIGN.md §11). Two edge kinds: hard (declared, ordering + staleness) and soft (discovered, staleness only). A vanished soft-dep counts as "changed," never as "missing input" — the stale edge triggers the very rebuild that erases it.
[deps: <format>]annotation. Recipe writes a depfile to$depfile; mk parses it and folds the reads into the DB. Formats:gcc,makefile,msvc,json,lines,trace.[scan: <cmd>]+[scan-format: <fmt>]. Cheap pre-pass for two-phase analysis; in-graph paths it discovers are built before the heavy recipe runs.[writes: manifest <path>]/[writes: trace]. Dynamic outputs not known statically; mk fingerprints them and tracks them for staleness.[reads: <glob>…]. Declared read envelope; reads outside the envelope are flagged (warn / error under--verify).$depfilerecipe variable. Path mk allocates under.mk/deps/[<config>/]<target>.d.--verifyCLI flag. Errors on undeclared reads of in-graph targets (latent ordering races) and on envelope violations.- Linux trace mode.
[deps: trace]/[writes: trace]runs the recipe understraceand records observed reads/writes from%filesyscalls. macOS returns a clear "not yet implemented" error directing users to the depfile adapter.
Changed
std/c.mkandstd/cxx.mknow carry[deps: gcc]and emit-MMD -MF $depfile.include std/c.mkJust Works for header tracking.NewExecutorcollapsed from three growing constructors into a single struct-argNewExecutor(graph, state, vars, *ExecutorArgs).BuildState.Recordsignature gains adiscovered []stringand adiscoveredOutputs []stringparameter.
Design
The full rationale, prior art (Ninja, tup, Shake, redo, Vesta, Build Systems à la Carte), and non-goals are in docs/discovered-dependencies.md.
v0.8.0
Added
- Inline comments:
target: dep # commentandvar = value # commentare now supported on non-recipe lines STABILITY.mdfor pre-1.0 surface tracking
Changed
- Expanded test coverage for sibling cross-references, nested scoped includes, and nested pattern discovery
v0.7.0
Changed
--help-agentnow prefixes the agents guide with CLI usage text (flags and descriptions)
v0.6.0
Added
-C DIRflag — change to the specified directory before doing anything (likemake -C)
v0.5.0
Added
--versionflag — prints version injected at build time; showsmk devfor local builds
Changed
- Renamed
--agents-guideto--help-agent
Fixed
- Homebrew formula version detection (was showing "64" instead of the actual version)
- Homebrew formula checksum upload no longer fails on scoped tokens
v0.4.0
Fixed
- Recipe indentation is now preserved — only the common base indentation is stripped, keeping relative indentation intact. Previously all leading whitespace was stripped, breaking recipes where indentation is significant (e.g. inline Python scripts).
Changed
- Homebrew formula switched from source build to pre-built binaries (no longer requires Go to install)
- Release tarballs now include shell completion files