Changelog
Every release, documented. New features, improvements, and the reasoning behind them.
Subscribe via RSS: calyntro.com/blog/categories/changelog/index.xml
The coupling score now measures structural dependency relative to module size — so a small module that changes almost exclusively with another scores higher than two large modules that occasionally share a commit.
Score is now shared_commits / min(m1_commits, m2_commits) × 100, capped at 100. A score below 20 is incidental; 60 or above indicates structural coupling worth addressing. Pairs are ranked by score, not raw co-change volume.
Two default-on filters clean up the list automatically: Exclude noise removes test and third-party modules that inflate co-change counts; Hide incidental removes pairs with score below 20. Both can be toggled off when auditing the full picture.
Cross-Team Co-Changes now counts distinct commits that touched files from two different teams — not the file-pair multiplied figure that inflated the number. Each counted event is a real synchronisation moment between teams.
Update
./manage.sh pull-latest
./manage.sh up
Tracker-dependent results now report how much of the commit history is backed by resolved ticket data — so engineering teams can judge how reliable the signal is before acting on it.
The bug-magnets endpoint, file detail bug_recency, and the defect_attractor / bug_magnet warning types now each include a confidence object with tracker_coverage_pct (0–100). Git-only warning types are unaffected. No re-import required.
A dedicated /videos/ page now lists the feature episode series. Linked from the main navigation.
Update
./manage.sh pull-latest
./manage.sh up
Files that repeatedly attract bug-fix commits are now surfaced with a decay-weighted Fix-Recency Score. The score weights recent fixes more than older ones, giving teams a ranked list of structurally fragile files — before the next incident.
A dedicated list view ranks all files by Fix-Recency Score — sortable by score, last fix date, recent bug count, and hotspot score. Paginated, filterable by module and date range. Requires Jira or compatible ticket provider configured in config.yaml.
The file detail drawer now shows a fifth KPI card — Fix Activity — when tracker data is available. Displays the Fix-Recency Score, days since last bug fix, and recent bug count (90-day window).
Files with a Fix-Recency Score ≥ 1.5 now appear in the dashboard warnings panel as bug_magnet warnings, ranked alongside existing hotspot, silo, and complexity alerts.
Update
./manage.sh pull-latest
./manage.sh up
Apache Flink added as the fourth repository in the prospective validation study. T1–T4 finding tests now cover MongoDB, uv, Qt Base, and Apache Flink with reproducible, version-controlled results.
AUC 0.682 (T+3M) / 0.710 (T+6M). 50% of bug-affected files ranked in the top quartile of a churn-based risk ranking (25% of codebase). The signal holds across all four codebases.
Statistical validation tests for all four hypotheses are now part of the test suite with versioned JSON reports and data provenance tracking.
Update
./manage.sh pull-latest
./manage.sh up
Consistent parameter vocabulary and URL prefix across all analysis endpoints. Breaking change for clients using the old parameter names.
All analysis endpoints now use start_date / end_date, module_name, and limit — replacing the previous mix of from/to, module/component_name, and nbr_items. The URL prefix /v1/analysis/ is now uniform (previously some routes used /v1/analyze/). The tracker coverage endpoint switched from GET to POST, consistent with all other filter endpoints.
Update
./manage.sh pull-latest
./manage.sh up
Clients using the old parameter names must update their requests. See the API Reference for current parameter names.
Navigation restructured, AI Briefing redesigned and renamed, monthly request cap for shared instances, and OpenAI as an alternative provider.
Set a monthly limit for AI Briefing requests per instance — intended for demo and shared deployments where open-ended LLM usage would be impractical. Counter resets automatically on the first of the following month.
ai_brief:
max_requests_per_month: 50 # 0 = unlimited
AI Briefing now works with OpenAI models in addition to Anthropic and Ollama. Switch provider in config with no code changes required. Based on testing, gpt-4o produces meaningfully better risk synthesis than gpt-4o-mini for this use case.
ai_brief:
provider: openai
model: gpt-4o
api_key: ${AI_BRIEF_API_KEY}
The sidebar now groups related views under labelled sections — Code Analysis (Risk Matrix, Change Coupling, Team Architecture) and Reporting (Review Briefing, AI Briefing). Replaces a flat list with no visible context. All routes and functionality unchanged.
The AI Briefing view is now aligned with the Review Briefing layout. The feature was previously called "AI Brief" and is now called AI Briefing across the interface and navigation.
Patch Releases
manage.sh, docker-compose.yml, and nginx.conf. No registry access required for installation.
Update
./manage.sh pull-latest
./manage.sh up
No database migrations required unless you want the new max_requests_per_month or provider options.