Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ milestone.
| **Every Ubuntu LTS validated** — 22.04, 24.04 and 26.04 all at 79/79, each with a replay twin that reproduces it | ✅ |
| Telegram approval interface | 📋 roadmap |

**1,845 Rust tests and 72 frontend tests** form the current deterministic
**1,846 Rust tests and 72 frontend tests** form the current deterministic
release baseline.

## Configure your LLM
Expand Down
24 changes: 22 additions & 2 deletions crates/sysknife-brain/src/planner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -754,6 +754,10 @@ impl LlmPlanner {
/// HTTP client cannot be initialised (rare; only fails if the TLS
/// subsystem is unavailable).
///
/// Safety-fence rejection logging is enabled by default and writes to
/// [`SafetyAuditLog::default_path`]. Use [`Self::new`] for a planner
/// without runtime defaults.
///
/// Rate limiting is **enabled by default** at [`DEFAULT_MAX_RPM`] requests
/// per minute. Override with the `SYSKNIFE_MAX_RPM` environment variable.
/// Call `with_rate_limiter` after this to replace the default limiter, or
Expand Down Expand Up @@ -859,9 +863,13 @@ impl LlmPlanner {
None => provider,
};

let mut planner = Self::new(provider, state_client, config.max_turns);
let mut planner = Self::new(provider, state_client, config.max_turns)
.with_audit_log(SafetyAuditLog::new(SafetyAuditLog::default_path()));
// `from_config` is the production construction path used by the CLI,
// MCP server, and shell. Attach the default safety log here so every
// runtime planner records fence rejections; direct `new` remains
// opt-in for callers such as tests and embedded consumers.
planner.prefs_path = Some(sysknife_core::config::prefs_path());

if replaying {
// No rate limiter under replay. It exists to bound spend and load on a
// provider, and a replay reaches neither: every answer comes off disk.
Expand Down Expand Up @@ -1516,6 +1524,18 @@ mod tests {
.expect("ollama defaults need no credentials")
}

/// The integration test exercises the rejection path and reads the JSONL;
/// this test pins that the production constructor actually attaches the
/// log without mutating process-global path configuration.
#[test]
fn configured_planner_attaches_audit_log() {
let planner = ollama_planner();
assert!(
planner.audit_log.is_some(),
"from_config must attach the safety audit log"
);
}

#[test]
fn into_authorized_replaces_every_step_risk() {
let step = |name: &str, risk| {
Expand Down
2 changes: 1 addition & 1 deletion docs/distro-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ family and the atomic story family are implemented and covered by the workspace
suite. What is missing is a way to put the helpers somewhere the daemon's own
grants already point.

The deterministic workspace baseline is 1,845 Rust tests plus 72 frontend
The deterministic workspace baseline is 1,846 Rust tests plus 72 frontend
tests. Those tests verify action construction, policy, approval, storage, and
UI behavior, but they do not replace a real distribution VM run.

Expand Down
2 changes: 1 addition & 1 deletion docs/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ flow.

## Status

190 typed actions · 1,845 Rust tests + 72 frontend tests · MIT
190 typed actions · 1,846 Rust tests + 72 frontend tests · MIT

SysKnife is the reference implementation of the
[LACS specification](https://github.com/lacs-project/specification) — a
Expand Down
2 changes: 1 addition & 1 deletion tests/evidence/workspace-tests.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
"tests": "cargo nextest run --workspace --locked"
},
"frontend_tests": 72,
"tests": 1845,
"tests": 1846,
"version": 2
}
Loading