git_commit_count_since() and git_log_since(): the git
count/log primitives behind heartbeat(), for downstream tooling that
composes its own activity reports. git_log_since() supports an
unbounded window (since_date = NULL) and an "iso" line format.heartbeat(): cross-project git activity summary. Scans every
repository under scan_dir, reports projects with commits in the lookback
window (busiest first), and writes briefs/_heartbeat.md. The one-glance
complement to briefing().Consolidates the 0.7.1.x development cycle.
fn_graph() now accepts cache_dir, mirroring blast_radius() and
symbols(). The default is unchanged. The example and tinytest pass
tempdir() so R CMD check no longer leaves files under
tools::R_user_dir("saber", "cache") (#32).briefing_git() no longer leaks a system2() "had status 128" warning
when run against a non-repository (e.g. a worktree, an invalid .git, or
a dubious-ownership directory). It now confirms the working tree with
git rev-parse and suppresses the warning, returning empty silently (#33).R/ when that package
is saber itself, so a same-named function exported by another project on the
load path is no longer picked up in place of saber's (#31).briefing() now emits output via message() instead of cat() for CRAN compliance.agent_context() examples use \donttest{} instead of \dontrun{}.agent_context() and the SessionStart hook now load memory reciprocally:
Codex receives Claude Code MEMORY.md, while Claude Code, Corteza, and
other non-Codex agents receive Codex memories.[features].hooks instead of deprecated
[features].codex_hooks.Depends: R (>= 4.4.0) and removed local %||% definition (now in base R).person("cornball.ai", role = "cph") to Authors@R.?saber package-level help page.r -e to Rscript -e for portability.blast_radius() vignette scan crashing on Windows paths (backslashes
were interpreted as regex backreferences).@title lines with colons to keep the
generated Rd files ASCII-clean.agent_context() assembles agent context from memory, instructions, and identity files.fn_graph(), pkg_graph(), and graph_svg() render interactive SVG call graphs.blast_radius() gains include parameter for scanning @examples and vignettes.briefing() gains agent parameter for multi-agent support.