mirror of
https://github.com/instructkr/claw-code.git
synced 2026-05-19 05:51:26 +08:00
Stabilize final gate before release checkpoint
Resolve the G012 evidence gate by fixing permission-mode regressions, platform-sensitive tests, and the clippy surface that blocked an all-targets verification run. Constraint: G012 final gate required docs, board, full workspace tests, and clippy -D warnings evidence before checkpointing. Rejected: documenting the worker-2 gate failure as an accepted gap | the failing tests and lints were locally reproducible and fixable. Confidence: high Scope-risk: moderate Directive: Preserve read-only permission requirements for read/glob/grep tools; write/edit remain workspace-write or danger-full-access when outside the workspace. Tested: python3 .github/scripts/check_doc_source_of_truth.py; python3 .github/scripts/check_release_readiness.py; python3 scripts/validate_cc2_board.py --board .omx/cc2/board.json; python3 .omx/cc2/validate_issue_parity_intake.py .omx/cc2/issue-parity-intake.json; cargo fmt --manifest-path rust/Cargo.toml --all -- --check; cargo check --manifest-path rust/Cargo.toml --workspace; cargo test --manifest-path rust/Cargo.toml --workspace -- --nocapture; cargo clippy --manifest-path rust/Cargo.toml --workspace --all-targets -- -D warnings Not-tested: live network provider smoke tests and remote PR/issue mutations.
This commit is contained in:
@@ -997,9 +997,10 @@ fn parse_args(args: &[String]) -> Result<CliAction, String> {
|
||||
// only intercepts the bare single-word form. Catch all multi-word
|
||||
// forms here and return a structured guidance error so no network
|
||||
// call or session is created.
|
||||
"permissions" => Err(format!(
|
||||
"permissions" => Err(
|
||||
"`claw permissions` is a slash command. Start `claw` and run `/permissions` inside the REPL.\n Usage /permissions [read-only|workspace-write|danger-full-access]"
|
||||
)),
|
||||
.to_string(),
|
||||
),
|
||||
"skills" => {
|
||||
let args = join_optional_args(&rest[1..]);
|
||||
match classify_skills_slash_command(args.as_deref()) {
|
||||
@@ -3380,6 +3381,9 @@ fn parse_tmux_pane_snapshots(output: &str) -> Vec<TmuxPaneSnapshot> {
|
||||
}
|
||||
|
||||
fn pane_path_matches_workspace(pane_path: &Path, workspace: &Path) -> bool {
|
||||
if pane_path == workspace || pane_path.starts_with(workspace) {
|
||||
return true;
|
||||
}
|
||||
let pane_path = fs::canonicalize(pane_path).unwrap_or_else(|_| pane_path.to_path_buf());
|
||||
let workspace = fs::canonicalize(workspace).unwrap_or_else(|_| workspace.to_path_buf());
|
||||
pane_path == workspace || pane_path.starts_with(&workspace)
|
||||
@@ -4031,7 +4035,7 @@ fn run_resume_command(
|
||||
message: Some(handle_agents_slash_command(args.as_deref(), &cwd)?),
|
||||
json: Some(
|
||||
serde_json::to_value(handle_agents_slash_command_json(args.as_deref(), &cwd)?)
|
||||
.unwrap_or_else(|_| serde_json::json!(null)),
|
||||
.unwrap_or(Value::Null),
|
||||
),
|
||||
})
|
||||
}
|
||||
@@ -8681,6 +8685,7 @@ fn resolve_cli_auth_source() -> Result<AuthSource, Box<dyn std::error::Error>> {
|
||||
Ok(resolve_cli_auth_source_for_cwd()?)
|
||||
}
|
||||
|
||||
#[allow(clippy::result_large_err)]
|
||||
fn resolve_cli_auth_source_for_cwd() -> Result<AuthSource, api::ApiError> {
|
||||
resolve_startup_auth_source(|| Ok(None))
|
||||
}
|
||||
@@ -12322,6 +12327,9 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn parses_direct_agents_mcp_and_skills_slash_commands() {
|
||||
let _guard = env_lock();
|
||||
let _cwd_guard = cwd_guard();
|
||||
std::env::remove_var("RUSTY_CLAUDE_PERMISSION_MODE");
|
||||
assert_eq!(
|
||||
parse_args(&["/agents".to_string()]).expect("/agents should parse"),
|
||||
CliAction::Agents {
|
||||
@@ -13906,7 +13914,7 @@ UU conflicted.rs",
|
||||
fn resume_usage_mentions_latest_shortcut() {
|
||||
let usage = render_resume_usage();
|
||||
assert!(usage.contains("/resume <session-path|session-id|latest>"));
|
||||
assert!(usage.contains(".claw/sessions/<session-id>.jsonl"));
|
||||
assert!(usage.contains(".claw/sessions/<workspace-fingerprint>/<session-id>.jsonl"));
|
||||
assert!(usage.contains("/session list"));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user