# Changelog

## Score

- CAI 68 → 69 (+0.8)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

## Lenses

- Code Health 80 → 80 (-0.3)
- Architecture 99 → 97 (-2.6)
- Maturity 62 → 62 (+0.2)
- Readiness 85 → 76 (-9.5)
- Security 60 → 66 (+5.6)
- Domain Modelling 100 → 100 (+0.0)
- Performance 91 (new)

## Resolved (7)

- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Hotspot: git-branchless-lib/src/core/rewrite/plan.rs (git-branchless-lib/src/core/rewrite/plan.rs)
- Hotspot: git-branchless-record/src/lib.rs (git-branchless-record/src/lib.rs)
- Hotspot: git-branchless/src/commands/amend.rs (git-branchless/src/commands/amend.rs)
- Hotspot: git-branchless/src/commands/split.rs (git-branchless/src/commands/split.rs)

## New (15)

- End-of-life runtime: Rust 1.86
- Inconsistent cloning method naming. `Repo` uses `try_clone` while `Dag` also uses `try_clone`. However, in Rust, `try_clone` is often associated with file handles or streams, whereas `clone` or `duplicate` might be more semantically appropriate for graph structures. More importantly, if `Repo` and `Dag` are both core entities, they should ideally share a consistent trait or naming convention for duplication (e.g., both `clone` or both `duplicate`).
- Inconsistent entry point naming and signature. The main entry point for the core library is named `main`, while hook and init modules use `command_main`. Furthermore, `main` takes no arguments in the signature provided, whereas `command_main` variants explicitly accept `CommandContext` and specific `Args` types, suggesting a lack of unified command dispatching interface.
- Inconsistent method placement and return type for 'get only parent'. `Commit` has a method `get_only_parent_oid` that returns `NonZeroOid` directly (implying it panics or guarantees existence), while `Dag` has `get_only_parent_oid` that returns `Result`. This creates confusion about whether the operation can fail and where the responsibility for validation lies.
- Inverted test pyramid
- Off the main sequence: git-branchless-invoke
- Off the main sequence: git-branchless-lib
- Off the main sequence: git-branchless-opts
- Outdated: indexmap
- Outdated: thiserror
- Projects may be oversized for their cohesion
- Redundant and confusingly named methods. `find_commit` and `find_commit_or_fail` both return `Result`. The distinction between them is not clear from the signature alone (likely one returns `Option` inside the Result or panics, but the signature says `Result` for both). This suggests a lack of clarity on error handling strategy.
- Same redundancy as `find_commit` and `find_blob`. `find_tree` and `find_tree_or_fail` have identical signatures but different names.
- Same redundancy as `find_commit`. `find_blob` and `find_blob_or_fail` have identical signatures (`Result`) but different names, implying different error handling behaviors that are not visible in the signature.
- Unstable project git-branchless-submit
