tempus-ddb 0.5.4

Fail-closed policy gate for AI agent actions: signed policies, single-use permits, receipts
Documentation
[build-system]
requires = ["maturin>=1.5,<2.0"]
build-backend = "maturin"

[project]
name = "tempus-ddb"
version = "0.5.4"
description = "Fail-closed security gate for AI agents: every action passes a signed policy or is blocked, with verifiable receipts."
readme = "README.md"
license = {text = "MIT"}
requires-python = ">=3.10"
authors = [
    {name = "Tempus DDB Contributors"}
]
keywords = ["ai-agents", "mcp", "policy-engine", "fail-closed", "zero-trust", "audit", "ed25519", "tamper-evident", "agent-security"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "Intended Audience :: Information Technology",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
    "Programming Language :: Rust",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: Implementation :: CPython",
    "Topic :: Scientific/Engineering :: Artificial Intelligence",
    "Topic :: Security",
    "Topic :: Security :: Cryptography",
    "Topic :: Software Development :: Libraries",
]
dependencies = [
    "mcp>=1.0.0,<3.0.0",
    "python-dotenv>=1.2.3,<2.0.0"
]

[project.optional-dependencies]
dev = [
    "pytest",
    "pytest-asyncio",
    "maturin",
    "ruff==0.17.2",
    "bandit",
    "pip-audit",
    # pip-audit scans these transitive copies. certifi before 2026.10.19 bundles
    # compromised roots. filelock 4.2.1 (the fix) needs Python 3.11, so 3.10
    # stays on the last release from before those bugs.
    "certifi>=2026.10.19",
    "filelock>=4.2.1; python_version>='3.11'",
    "filelock>=3.8.0,<3.20.4; python_version<'3.11'",
]

[project.urls]
Homepage = "https://julio-patron.github.io/tempus-ddb/"
Documentation = "https://julio-patron.github.io/tempus-ddb/docs.html"
Repository = "https://github.com/Julio-Patron/tempus-ddb"
Issues = "https://github.com/Julio-Patron/tempus-ddb/issues"
Changelog = "https://github.com/Julio-Patron/tempus-ddb/releases"
"Rust crate" = "https://crates.io/crates/tempus-ddb"

[project.scripts]
tempus = "tempus_ddb.cli:main"
tempus-github-executor = "tempus_ddb.github_executor:main"
tempus-http-executor = "tempus_ddb.http_executor:main"
tempus-slack-executor = "tempus_ddb.slack_executor:main"
tempus-payment-executor = "tempus_ddb.payment_executor:main"

[tool.maturin]
features = ["pyo3/extension-module"]
python-source = "python"
module-name = "tempus_ddb._tempus_ddb"

[tool.pytest.ini_options]
pythonpath = ["python"]
testpaths = ["tests"]
asyncio_mode = "auto"
filterwarnings = [
    "ignore:tempus. allow-all development policy installed:UserWarning",
]

[tool.ruff]
target-version = "py310"
required-version = ">=0.15.0"

[tool.ruff.lint]
# Keep CI stable while enforcing syntax, import, and runtime-correctness checks.
select = ["E4", "E7", "E9", "F", "I"]