Skip to content

Releases: alexei-led/archfit

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 09:09
v2.0.0
5b9e1be

Archfit v2.0.0

Archfit v2 replaces the repository-level scalar score with a deterministic, evidence-aware architecture state and completes the capability-owned internal architecture migration.

Breaking changes

  • Primary JSON is now archfit.architecture-state.v1.
  • Configuration schema is now v2. Archfit rejects v1 configs with an exact migration hint.
  • archfit check exits:
    • 0healthy
    • 2needs_attention
    • 1blocked
    • 3 — no valid report because of command/config/tool execution error
  • archfit analyze remains report-only and exits 0 for every valid report.
  • Repository-level score_overall and score bands no longer determine architecture health.
  • legacy-json remains available for one compatibility release only.

Architecture state

The report exposes nine independent dimensions:

  1. intent
  2. structure
  3. modularity
  4. coupling
  5. change locality
  6. complexity
  7. testability
  8. operations
  9. drift

Each dimension reports measured, partial, or unmeasured evidence with confidence, denominators, provenance, findings, unknowns, and comparable deltas. Missing evidence is never treated as a healthy zero. Balanced Coupling remains available per edge/seam for ranking and explanation.

JSON, text, Markdown, SARIF, and scorecard now share canonical finding IDs, statuses, metrics, verdicts, and coverage semantics.

Upgrade

Preview the lossless config migration:

archfit config update --migration-only --json -c .archfit.yaml

Apply it after review:

archfit config update --migration-only --apply -c .archfit.yaml

Update CI to handle exit 2 as needs_attention, migrate JSON consumers to archfit.architecture-state.v1, and regenerate baselines only after reviewing the new state.

Language and corpus validation

The release was validated with a strict 11-repository corpus across Go, Python, TypeScript/JavaScript, and Rust. The harness checked config migration/idempotence, repeated JSON byte identity, five-format finding parity, and exit behavior.

Rust validation used rustup toolchain 1.98.0, rust-analyzer 1.98.0, and cargo-modules 0.26.0 across yazi, herdr, ruff, and tokio.

Expected v1 evidence gaps remain explicit: runtime test coverage, cognitive complexity, runtime topology, SBOM, and vulnerability state are partial/unmeasured unless a future analyzer supplies them.

Install

  • Homebrew: brew install alexei-led/tap/archfit
  • Container: ghcr.io/alexei-led/archfit:v2.0.0
  • Standalone binaries and SHA256SUMS are attached below.

The tag is signed and points to merge commit 5b9e1be057a43d1e0914d2445917edcc717972b1.

Full changelog: v1.7.1...v2.0.0

v1.7.1 — capability boundaries and stable report contract

Choose a tag to compare

@github-actions github-actions released this 23 Aug 16:41
df312e5

v1.7.1 — capability boundaries and stable report contract

  • Replace package-shaped self-dogfooding modules with capability-oriented boundaries.
  • Add a stable data-only report contract for scoring, decisions, persistence, and renderers.
  • Keep the engine on stage views instead of the full config model.
  • Move scorecard synthesis to the CLI composition root.
  • Add regression tests and update architecture documentation.
  • Self-dogfood result: 0 blocking findings, 68 advisories, 40/100 coupling score.

v1.7.0 configuration confidence

Choose a tag to compare

@github-actions github-actions released this 22 Aug 05:55
d0b340c

v1.7.0 configuration confidence

New:

  • git_finding_delta on analyze/check --base --json: sorts current
    agent_tasks[] into introduced / pre_existing / unknown_origin. Report-only.
  • archfit config compare : measures one tree under two configs.
  • archfit config update --json: archfit.config-review.v1.

Breaking:

  • archfit baseline --base removed; returns unknown flag, exit 3.

Also: baseline score snapshot records rubric_version; --no-advisories has one
meaning across all output combinations; config update --apply no longer
deletes, comments out, or re-keys a configured module stanza.

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 09 Jul 14:51
dd3fcec

v1.6.0 — CLI redesign: archfit check, clean flag surface, honest diagnostics

  • new check command replaces analyze --gate for CI/agent loops
  • flag renames: --ai-summary/--ai-classify/--ai-provider/--ai-model,
    --refresh, --min-severity, --no-advisories
  • config update survives flow-style paths and adjacent module removals
  • root-aware health hints; grimp unresolved-import disclosure with top roots
  • markdown noise caps: advisory-task top-25, grouped config warnings
  • reusable evaluation workflow: skills/archfit-eval + corpus_sweep helper

v1.5.1

Choose a tag to compare

@github-actions github-actions released this 08 Jul 16:23
37a8dde

v1.5.1: architecture rebalance — frozen model kernel, stage-contract views, fitness gates (coupling_balance 40->71)

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 08 Jul 14:39
a7117ed

This release improves balanced coupling evidence and report-only diagnostics, with safer Rust config updates and better config-update suggestions.

  • Cleaner dynamic connascence reporting

    • Dynamic report-only "still unmeasured" lists now disclose only dynamic categories (execution, timing, value, identity) in deterministic order.
    • Added regression coverage so static kinds like position cannot leak into the dynamic block.
  • Safer Rust config updates

    • Rust deep-analysis config edits now ignore blank and comment lines when scanning YAML section boundaries.
    • Explicit analyzer opt-outs (cargo_modules.enabled: false, scip.enabled: false) are preserved.
    • Added regression tests for comment-heavy configs and explicit opt-outs.
  • Better config-update suggestions

    • Deploy-unit suggestions now use the discovered/path-drifted module map, so newly discovered modules still receive deterministic hints.
  • No intentional CLI breaking changes.

  • No new manual release steps: tagging remains the only supported release trigger.

Verified before release:

  • go test ./...
  • make lint
  • CI: lint, test, linux/darwin builds

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 17:35
e596a7d

This release tightens how archfit gathers architecture evidence and makes TypeScript/JavaScript analysis more consistent across modern source-file variants.

  • Cleaner architecture evidence packs

    • README, architecture docs, and repo doc maps are now prioritized more deliberately when building the off-gate evidence pack.
    • Archived, completed, generated, and stale documentation paths are excluded more aggressively so prompts stay focused on current architecture intent.
  • Better TS/JS coverage across file variants

    • Shared TypeScript/JavaScript source-extension handling is now applied consistently across graph conventions, dependency extraction, dynamic-import detection, LOC classification, runtime async detection, and clone filtering.
    • Regression coverage was added for non-.ts variants including .mts, .cts, and .mjs, plus generated declaration files such as .d.mts and .d.cts.
  • Book-alignment docs cleaned up

    • Superseded design notes and completed planning artifacts were moved into archived/completed locations.
    • Cross-references were updated so historical material remains available without polluting the active design surface.
  • Centralized dynamic-import kind constants to reduce string drift across extractors, reports, and evaluation tooling.

  • Removed dead evidence-pack scoring branches uncovered during PR review.

  • Added focused regression tests around file classification, runtime detection, clone filtering, and evidence-pack behavior.

  • No intentional CLI breaking changes in this release.

  • No new manual release steps: tagging remains the only supported release trigger.

Verified with the standard local gates before release:

  • make lint
  • make test
  • make build
  • make archfit / arch-lint

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 10:47
83cfb99

v1.3.0

  • align balanced-coupling tooling, scoring, and validation across deterministic and semantic paths
  • add structured LLM draft citations and evidence-pack review metadata
  • improve dogfood config/update flows and fix review-followup issues
  • clean up report/archive layout and current CLI/docs guidance

archfit v1.2.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 08:31
5e789fe

archfit v1.2.0

This release adds deterministic coupling gating, book-aligned coupling
classification updates, warm fact-cache reuse, and off-gate LLM review
workflows.

Breaking metric change: ScoreVersion is now bc_score.v4. v4 scores are NOT
comparable to bc_score.v3 scores — treat the first v4 run as a new
measurement, and re-baseline (archfit baseline) before relying on
coupling.gate.max_drop. score_version now appears at the top level of
--json output so consumers can key on it.

  • New coupling.gate controls let CI fail on a minimum coupling band and/or a
    maximum score drop, separate from rule violations; verdict reporting now
    keeps per-metric gate reasons explicit.
  • Three classification changes keep the book formula intact while fixing the
    inputs: const/var reads score Model (not Functional), pure-data Go DTOs can
    reach Contract across declared public boundaries, and declared
    external_systems enter scoring at D=10.
  • Warm runs now reuse unchanged extractor subprocess facts via the
    content-addressed fact cache; use --no-cache for a cold control run.
  • archfit config enrich labels and config enrich abstained draft review-only
    LLM labels for weak or abstained edges, and config update --llm proposes
    review material for subdomains, roles, and volatility. Approved labels stay
    deterministic YAML; stale evidence is ignored; LLM output never decides the
    gate.

archfit v1.1.2 — multi-language reliability fixes

Choose a tag to compare

@github-actions github-actions released this 01 Jul 15:18
6140aba

archfit v1.1.2 — multi-language reliability fixes

Root-cause fixes across Go/Python/Rust/TypeScript coupling analysis, no CLI or
config interface changes:

  • AugmentCargoCrateNodes gated to Rust-only (was leaking phantom modules into
    any Go/Python repo using cargo_modules-style config)
  • ModuleForFile bridges file-path consumers (CODEOWNERS, clone-pairing,
    dynamic imports) to per-language node-key matching
  • Synthetic module attribute inheritance now copies Volatility/Subdomain/
    Layer/DeployUnit, not just Owner
  • Volatility cascade no longer triggers on clone-detected (accidental)
    coupling
  • Deploy-unit detection requires a module-root main.go, not any nested one
  • Clone-instance evidence (real file:line pairs) now reaches findings
    instead of a generic Cargo.toml:0
  • TypeScript extraction: per-extractor failure isolation, Src no longer
    derived from module glob order, --ts-config resolves correctly in subtree
    mode, dependency-cruiser's package name is pinned for npx/bunx
  • git-history owner resolution bounded by commit count with a distinct
    timeout diagnostic (was silently timing out on large repos)
  • encapsulation's zero-contract evidence string clarified for repos with no
    public: globs declared