Releases: Ovecc-labs/ovecc
Releases · Ovecc-labs/ovecc
Release list
Rolling build (634e5c7)
Dev build from 634e5c7c24b4ae52b2f323edc39cd3b0ddbbf10a — Linux + Windows x86_64 binaries. For the supported build, use the newest versioned release.
ovecc 0.2.2
Added
- Behavioral coupling: the files a repository keeps changing in the same
commits, mined from the history and persisted in aco_changestable.ovecc couplingranks the pairs by support, Jaccard and lift, with the witness
commits. - The contract verdict on top of it,
architecture/behavioral-coupling: two
components no import and nodepends_onconnects, whose files keep changing
together across at least two file pairs. No static analysis can produce this
one — the only witness is the history, and the commits ship with the finding.
Low by default,coupling = "medium" | "high" | "off"in the contract moves
or silences it, andcheck --freezeaccepts the pairs one at a time like any
other debt. hotspotsandsummaryreport each module's fix history: how many bug-fix
commits touched it, the same count weighted by age (180-day half-life), and
the date of the last one.ovecc selfcheck: ovecc's own findings measured against the repository's fix
history, as a lift per rule over the repository's own base rate. It ships in
reportand inBENCHMARKS.mdwith the number as it comes — on this
repository two rules of eleven clearly beat the base rate. With no ingested
history it says it had nothing to measure instead of printing a table of
zeros that reads as a rule set predicting nothing.- Line coverage from an LCOV tracefile:
index --coverage <path>, or the
conventional locations (coverage/lcov.info,lcov.info,coverage.lcov)
when none is given. Stored per file, reported per module byhotspots, and
crossed with the ranking to name the hotspot the tests reach least. min_coverageper component in.ovecc/architecture.toml: a verdict when a
component's measured line coverage sits under the floor it declared. A
component the tracefile never mentions is skipped rather than reported at 0%,
because what is known is that it is unmeasured, not that it is untested.reviewandgatereport the shape of a change: the files and head lines it
touches, the contract components it reaches, how evenly it spreads over its
files, the ranked hotspots it lands on, its share of the repository's
age-weighted fix mass, and the mean age of the files it edits. The file,
component, fix-mass and age measurements each carry a percentile against the
repository's own indexed commits, so a change is read against the codebase it
lands in rather than against a constant. Information, never a verdict: no rank
fails the gate, and under 100 indexed commits none is reported at all.
Fixed
- Churn follows renames: a file's history no longer restarts at its new path.
Tree diffs also stopped counting directories as files. grep --limitcuts the definitions returned, not the matches alone, so one
symbol with many call sites no longer crowds every other result out of the
page.audittells an unreadable lockfile apart from an absent one, instead of
reporting both as no dependencies found.impactsays when it answered for a file's module rather than for the file
itself, instead of widening the question in silence.summarycarries the files the index could not read, so a partial index shows
up in the report and not only in the output of the run that produced it.
Changed
- The commit index records where a renamed file came from, and the co-change
pairs get their own table (schema 10). Existing databases migrate on the next
index, which re-ingests the commit history so old renames get linked. - Per-file coverage gets its own table (schema 11), migrated on the next
index. - Finding severities are coloured when stdout is a terminal and left plain when
it is piped or redirected. - The first-run hints name the command that helps instead of describing it.
ovecc 0.2.1
Fixed
reviewno longer blames pre-existing clone families on the change. A family
is charged only when the change touched one of the tokens it is made of, so
reflowing the comments around a clone does not report it as new duplication.reviewscopes an uncommitted change to the lines it touched, by diffing the
working tree against the base commit. Two snapshots sitting on the same commit
— the index, edit, index loop an agent runs — used to fall back to charging
every finding and every clone family in an edited file to the change.- Diffs normalize CRLF, so a working copy checked out under
core.autocrlfno
longer reads as if every line of every file had changed. dupesfolds overlapping instances of one family: a block of near-identical
lines gives consecutive sliding windows the same fingerprint, and one region
was reported as several copies of itself. Duplicated-line counts drop 17 to
30 percent on the six repositories benchmarked.- Building from source on Windows works around the multiple-definition bug in
GCC 16.1.0's libstdc++.
Changed
- The commit index stores whether a commit's subject describes a bug fix
(schema 7). Existing databases gain the columns on the nextindex.
ovecc 0.2.0
Added
- Architecture contracts as code:
.ovecc/architecture.tomldeclares
components (path globs), the only dependencies each may have, virtual
interface files, and per-component external deny-lists. Every index diffs
the code against the contract with reflexion-model verdicts (divergence,
interface bypass, deprecated use, absence) that flow intoviolations,
gate, andreviewas standard findings. ovecc architecture init: drafts the contract from the observed graph —
every entry mirrors an existing import, so the contract starts with zero
violations. Proposes the de facto interface of a component in comments.- Architecture templates:
ovecc architecture init --template <name>writes a
reference architecture instead of mirroring the graph, and needs no index.
Four JavaScript/TypeScript templates ship in the binary:fsd
(Feature-Sliced Design),bulletproof-react(unidirectional shared >
features > app),nx-workspace(Nx module boundaries by library type), and
clean-architecture(Clean/Hexagonal with a pure domain). The diff against a
template is the migration plan;architecture templateslists what ships in
the binary. - Slice isolation:
slices = trueon a component forbids imports between its
sibling slices (each first-level directory under the glob prefix), the rule
behind Feature-Sliced Design and bulletproof-react. FSD's@xpublic-API
notation (<neighbour>/@x/<slice>) is honored as the exception. Reported as
thearchitecture/slice-isolationverdict. - Capability contracts:
deny_capabilitiesforbids a component the ambient
JS/TS capabilities that break functional purity — network, filesystem,
storage, dom, process, time, random — matched against a curated API basket
(globals, ambient receivers, constructors, node builtins) and reported with
the exactfile:lineand API as thearchitecture/capabilityverdict. The
uses are indexed into acapability_usestable. - Per-component complexity budgets:
max_cyclomatic/max_cognitiveset a
per-function ceiling checked against every function the component owns, an
architectural fitness function reported asarchitecture/complexity-budget. ovecc architecture suggest: recognizes which built-in template an indexed
repository most resembles. For each template it detects the root (src/,
apps/web/src/in a monorepo, or the repository root), binds it there, and
scores the fit as coverage × conformance; above a threshold it reports the
best match and the command that applies it. Recognition against a curated
basket of archetypes, deterministic and offline.ovecc architecture diff/check: the reflexion report (declared edges
with occurrence counts, findings with file:line evidence) and its CI gate.
Both re-read the contract on every run; editing it needs no re-index.ovecc architecture check --freezeand a per-component baseline store
(.ovecc/architecture/baseline/, one sorted line per accepted violation,
no line numbers): freeze once, gate new violations from then on. Every
check ratchets — corrected entries leave the store automatically.ovecc architecture show [paths]: the contract resolved for the paths an
agent is about to edit — owning component, what it may import and through
which interface files. Exposed as theovecc_architectureMCP tool in the
agent profile; the SessionStart hook announces the contract.- The GitHub Action gates on
architecture checkand includes the contract
verdicts in its PR comment when a contract exists. - A JSON Schema for the contract at
docs/schemas/architecture.schema.json. ovecc initnow writes a granular.ovecc/*ignore (upgrading an existing
blanket.ovecc/line) so the contract and its baseline stay trackable.ovecc grep <pattern> [paths]: a symbol-aware search built for coding
agents. It answers from the index first (matching symbol definitions with
theirfile:start-end), then scans the working tree like an ignore-aware
grep, deduplicates, and caps the result so an agent gets a few kilobytes
back instead of a whole file's worth of hits.ovecc read <target>: prints one symbol's source, or a file's symbol
outline, straight from the index — a symbol name,file:line,
file:start-end, or a bare path all resolve to the right slice, so an agent
reads a function instead of the file around it.ovecc init --agent: wires a coding agent to the graph, installing the
hooks that route its searches through ovecc.- MCP:
ovecc_grepandovecc_readtools, with an agent profile that leads
with them. cargo xtask: a std-only development task runner (crates/xtask) that
defines every quality gate once for contributors, git hooks, and CI —
check,fix,lint,test,ci,audit,coverage,suppressions,
dogfood,precommit,prepush, andhooks(installs the pre-commit
and pre-push git hooks).- An accuracy corpus (
tests/fixtures/accuracy/): per-detector fixture
repositories withrequire/denymanifests; theaccuracye2e suite
fails when a required finding goes missing or a must-stay-silent probe
fires. - CI: the lint job now runs
cargo xtask lint, a strictcargo-auditpass,
and the suppression report; a newself-reviewjob feeds the freshly
built binary back onto ovecc's own repository and blocks the release when
a change introduces new high-severity findings.
Changed
- Agent search hooks redirect a repository-wide search to
ovecc grepand let
path-scoped ones through, replacing the earlier block-and-unlock window. queryandimpactcap oversized result sets with an "and N more" hint,
and a no-opindexcollapses to a single up-to-date line.- Contributions are Apache-2.0 inbound and carry a Developer Certificate of
Origin sign-off (git commit -s); see CONTRIBUTING.md.
Fixed
- Rust import resolution no longer resolves a bare external-crate path
(use tracing::…,std::fs) to a homonymous local file, which produced
phantom internal edges and dependency cycles on Rust monorepos. ovecc --repo <path> mcpruns its tools against that repository by default
instead of the server's working directory.- Oversized files are skipped by a built-in 5 MiB default, not only when
max_file_size_bytesis set, so an unconfigured repo never tries to parse a
multi-megabyte generated blob. - Complexity findings in test files are down-ranked to Low, and clone families
made only of test files sink below production duplication, sohealthand
dupeslead with what is worth acting on. indexreports how many files parsed with syntax errors, so a partial
extraction from invalid source is no longer silent.
ovecc 0.1.0
Initial public release.
Added
ovecc initto scaffold.ovecc/config.toml, andovecc indexto build the
model: tree-sitter + oxc parsing, import/call resolution, DuckDB persistence,
incremental re-index (unchanged files are never re-parsed).ovecc capabilities: machine-readable contract listing every command, metric,
rule, severity, exit code, and output format.- Analysis commands:
summary,impact,query,violations,security,
audit(offline OSV),hotspots,dupes,health,deadcode,fix,
diagnose,advise,metrics,conventions,diff,drift,history,
gate,review,report,explain,export context,export graph. - Code-smell detectors over the resolved call graph: feature envy, large
class, and data clumps; counted bygateand named byreview. ovecc mcp: Model Context Protocol server over stdio exposing every command
as an agent tool.- Drop-in GitHub Action (
action.yml): indexes base and head of a PR, comments
the named new defects, and gates on severity. - Output formats:
text,json,ndjson,markdown, plussarifand
codeclimate; stable exit codes for CI. - Governance rules in
.ovecc/config.toml: module boundaries, banned imports,
severities, baselines, inlineovecc-ignoresuppressions. - Languages: JavaScript/TypeScript (tree-sitter + oxc resolution, complexity,
exports); Python, Go, Rust, and C++ through a specification-driven adapter.