[package]
edition = "2024"
rust-version = "1.88"
name = "saccade"
version = "0.1.2"
build = "build.rs"
exclude = ["report/**"]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Visual-regression CLI for renderers and graphics code, built on NVIDIA FLIP"
readme = "README.md"
keywords = [
"visual-regression",
"flip",
"rendering",
"image-diff",
"ci",
]
categories = [
"graphics",
"development-tools::testing",
"command-line-utilities",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/Tavrin/saccade"
[features]
ai = ["saccade-core/ai"]
default = [
"parallel",
"graphics",
"ai",
"workbench",
"mcp",
"evaluation",
]
evaluation = [
"ai",
"saccade-core/evaluation",
]
graphics = [
"saccade-core/graphics",
"dep:colorvideovdp",
]
mcp = []
parallel = ["saccade-core/parallel"]
prechecks = ["saccade-core/prechecks"]
schema = ["saccade-core/schema"]
workbench = ["saccade-core/workbench"]
[[bin]]
name = "saccade"
path = "src/main.rs"
[[test]]
name = "agent_contract"
path = "tests/agent_contract.rs"
required-features = ["mcp"]
[[test]]
name = "agent_native"
path = "tests/agent_native.rs"
required-features = ["mcp"]
[[test]]
name = "approve_decisions"
path = "tests/approve_decisions.rs"
[[test]]
name = "cli_exit_codes"
path = "tests/cli_exit_codes.rs"
[[test]]
name = "engine_ingest"
path = "tests/engine_ingest.rs"
[[test]]
name = "evidence_contract"
path = "tests/evidence_contract.rs"
[[test]]
name = "f1_compat"
path = "tests/f1_compat.rs"
[[test]]
name = "f1_contract"
path = "tests/f1_contract.rs"
required-features = [
"ai",
"mcp",
]
[[test]]
name = "f2_doctor"
path = "tests/f2_doctor.rs"
[[test]]
name = "feature_boundaries"
path = "tests/feature_boundaries.rs"
[[test]]
name = "git_bisect"
path = "tests/git_bisect.rs"
[[test]]
name = "identity"
path = "tests/identity.rs"
[[test]]
name = "ingest_playwright"
path = "tests/ingest_playwright.rs"
[[test]]
name = "intent"
path = "tests/intent.rs"
[[test]]
name = "judge_contract"
path = "tests/judge_contract.rs"
required-features = [
"evaluation",
"workbench",
"mcp",
"graphics",
]
[[test]]
name = "local_requests"
path = "tests/local_requests.rs"
[[test]]
name = "meta_sidecar"
path = "tests/meta_sidecar.rs"
[[test]]
name = "perf_comparability"
path = "tests/perf_comparability.rs"
required-features = ["graphics"]
[[test]]
name = "perf_evidence"
path = "tests/perf_evidence.rs"
required-features = [
"graphics",
"workbench",
"mcp",
]
[[test]]
name = "precheck_contract"
path = "tests/precheck_contract.rs"
required-features = [
"prechecks",
"mcp",
]
[[test]]
name = "prove"
path = "tests/prove.rs"
[[test]]
name = "r11_review"
path = "tests/r11_review.rs"
[[test]]
name = "r13_docs"
path = "tests/r13_docs.rs"
[[test]]
name = "r8_reports"
path = "tests/r8_reports.rs"
[[test]]
name = "review_contract"
path = "tests/review_contract.rs"
required-features = [
"evaluation",
"mcp",
]
[[test]]
name = "runs_cli"
path = "tests/runs_cli.rs"
required-features = ["mcp"]
[[test]]
name = "s6_contract"
path = "tests/s6_contract.rs"
required-features = [
"graphics",
"workbench",
"mcp",
]
[[test]]
name = "safety"
path = "tests/safety.rs"
[[test]]
name = "v1_action"
path = "tests/v1_action.rs"
[[test]]
name = "v1_contract"
path = "tests/v1_contract.rs"
required-features = [
"graphics",
"mcp",
]
[dependencies.clap]
version = "4"
features = ["derive"]
[dependencies.colorvideovdp]
version = "0.1.1"
features = ["parallel"]
optional = true
default-features = false
[dependencies.fs2]
version = "0.4.3"
[dependencies.globset]
version = "0.4"
[dependencies.image]
version = "0.25"
features = [
"png",
"jpeg",
"exr",
"hdr",
]
default-features = false
[dependencies.saccade-core]
version = "0.1.2"
default-features = false
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
features = ["float_roundtrip"]
[dependencies.sha2]
version = "0.10"
[dependencies.tempfile]
version = "3"
[dev-dependencies.jsonschema]
version = "0.30"
default-features = false
[dev-dependencies.tempfile]
version = "3"
[lints.clippy]
expect_used = "warn"
unwrap_used = "warn"
[lints.rust]
missing_docs = "warn"
unsafe_code = "forbid"