The test hardcoded 'refs/heads/main' for update-ref, but without
init.defaultBranch config (as in nix sandbox), git defaults to 'master'.
This caused the signed commit to be on a different branch than HEAD,
so arc log showed the unsigned commit instead.
Use 'git symbolic-ref HEAD' to get the actual branch name.
Also fix missing blank line separator between header and body.
Detect GPG vs SSH signatures when displaying commits. GPG-signed
commits from cloned/migrated git repos now show as valid with the
issuer key ID instead of failing SSH signature verification.
- Extract git commit signatures (gpgsig) during clone, migrate, and pull
- Sign git commits on push/sync when a signing key is configured
- Add tests for signature preservation and signed push
The imported counter was incrementing once per ref processed, not once
per commit converted. Since git_to_arc recursively walks the entire
ancestor chain, a single ref import would convert all reachable commits
but only count as 1.
Fix by measuring the growth of the git-to-arc map before and after the
import loop. Also strengthen tests to assert exact counts for commits,
bookmarks, and tags.
Add a centralized ui module with Arc's visual identity: colored commit
IDs (magenta), bookmarks (cyan), tags (yellow), status symbols, and
diff highlighting. Update all command output and tests accordingly.