tempus-ddb 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. tempus_ddb-0.4.0/.gitattributes +11 -0
  2. tempus_ddb-0.4.0/.github/CODEOWNERS +9 -0
  3. tempus_ddb-0.4.0/.github/ISSUE_TEMPLATE/bug_report.yml +70 -0
  4. tempus_ddb-0.4.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. tempus_ddb-0.4.0/.github/ISSUE_TEMPLATE/feature_request.yml +55 -0
  6. tempus_ddb-0.4.0/.github/PULL_REQUEST_TEMPLATE.md +31 -0
  7. tempus_ddb-0.4.0/.github/dependabot.yml +19 -0
  8. tempus_ddb-0.4.0/.github/workflows/ci.yml +106 -0
  9. tempus_ddb-0.4.0/.github/workflows/release.yml +120 -0
  10. tempus_ddb-0.4.0/.gitignore +101 -0
  11. tempus_ddb-0.4.0/CHANGELOG.md +122 -0
  12. tempus_ddb-0.4.0/CODE_OF_CONDUCT.md +67 -0
  13. tempus_ddb-0.4.0/COMPATIBILITY.md +33 -0
  14. tempus_ddb-0.4.0/CONTRIBUTING.md +64 -0
  15. tempus_ddb-0.4.0/Cargo.lock +1119 -0
  16. tempus_ddb-0.4.0/Cargo.toml +46 -0
  17. tempus_ddb-0.4.0/LICENSE +21 -0
  18. tempus_ddb-0.4.0/MIGRATION_0.4.md +26 -0
  19. tempus_ddb-0.4.0/PKG-INFO +455 -0
  20. tempus_ddb-0.4.0/README.md +420 -0
  21. tempus_ddb-0.4.0/ROADMAP.md +67 -0
  22. tempus_ddb-0.4.0/SECURITY.md +41 -0
  23. tempus_ddb-0.4.0/THREAT_MODEL.md +170 -0
  24. tempus_ddb-0.4.0/assets/logo.png +0 -0
  25. tempus_ddb-0.4.0/build.rs +4 -0
  26. tempus_ddb-0.4.0/config/policy.github.example.json +22 -0
  27. tempus_ddb-0.4.0/config/vault-transit.signer.example.json +11 -0
  28. tempus_ddb-0.4.0/conformance/adapter-v1.json +21 -0
  29. tempus_ddb-0.4.0/docs/VAULT_TRANSIT_SIGNER.md +37 -0
  30. tempus_ddb-0.4.0/examples/basic_record.py +67 -0
  31. tempus_ddb-0.4.0/examples/benchmark.py +73 -0
  32. tempus_ddb-0.4.0/examples/commercial_demo.py +231 -0
  33. tempus_ddb-0.4.0/examples/decision_chain.py +78 -0
  34. tempus_ddb-0.4.0/examples/full_agent_flow.py +76 -0
  35. tempus_ddb-0.4.0/examples/mcp_record_example.md +38 -0
  36. tempus_ddb-0.4.0/examples/tamper_detection_cli.py +90 -0
  37. tempus_ddb-0.4.0/examples/verify_chain.py +56 -0
  38. tempus_ddb-0.4.0/pyproject.toml +68 -0
  39. tempus_ddb-0.4.0/python/tempus_ddb/__init__.py +42 -0
  40. tempus_ddb-0.4.0/python/tempus_ddb/cli.py +774 -0
  41. tempus_ddb-0.4.0/python/tempus_ddb/github_executor.py +327 -0
  42. tempus_ddb-0.4.0/python/tempus_ddb/mcp_server.py +562 -0
  43. tempus_ddb-0.4.0/python/tempus_ddb/web3_adapter.py +47 -0
  44. tempus_ddb-0.4.0/scripts/generate_sbom.py +130 -0
  45. tempus_ddb-0.4.0/src/b2a.rs +1916 -0
  46. tempus_ddb-0.4.0/src/executor.rs +649 -0
  47. tempus_ddb-0.4.0/src/lib.rs +1351 -0
  48. tempus_ddb-0.4.0/src/main.rs +416 -0
  49. tempus_ddb-0.4.0/src/phase3.rs +1044 -0
  50. tempus_ddb-0.4.0/tests/b2a_flow_tests.rs +614 -0
  51. tempus_ddb-0.4.0/tests/conftest.py +28 -0
  52. tempus_ddb-0.4.0/tests/integration_tests.rs +104 -0
  53. tempus_ddb-0.4.0/tests/test_adversarial.py +103 -0
  54. tempus_ddb-0.4.0/tests/test_cli.py +298 -0
  55. tempus_ddb-0.4.0/tests/test_examples.py +36 -0
  56. tempus_ddb-0.4.0/tests/test_executor_e2e.py +190 -0
  57. tempus_ddb-0.4.0/tests/test_github_executor.py +272 -0
  58. tempus_ddb-0.4.0/tests/test_mcp_server.py +155 -0
  59. tempus_ddb-0.4.0/tests/test_python_api.py +239 -0
  60. tempus_ddb-0.4.0/tests/test_sdk.py +33 -0
  61. tempus_ddb-0.4.0/uv.lock +1723 -0
@@ -0,0 +1,11 @@
1
+ * text=auto eol=lf
2
+
3
+ *.png binary
4
+ *.jpg binary
5
+ *.jpeg binary
6
+ *.gif binary
7
+ *.ico binary
8
+ *.whl binary
9
+ *.db binary
10
+ *.sqlite binary
11
+ *.sqlite3 binary
@@ -0,0 +1,9 @@
1
+ # Default ownership
2
+ * @elbuilder77
3
+
4
+ # Security-sensitive protocol and release surfaces
5
+ /src/ @elbuilder77
6
+ /python/tempus_ddb/ @elbuilder77
7
+ /.github/workflows/ @elbuilder77
8
+ /SECURITY.md @elbuilder77
9
+ /THREAT_MODEL.md @elbuilder77
@@ -0,0 +1,70 @@
1
+ name: Bug report
2
+ description: Report a reproducible defect in Tempus DDB
3
+ title: "bug: "
4
+ labels:
5
+ - bug
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for helping improve Tempus DDB. Do not include keys, tokens, private
11
+ payloads, or vulnerability details. Report security issues through the private
12
+ advisory link instead.
13
+ - type: checkboxes
14
+ id: checks
15
+ attributes:
16
+ label: Preflight
17
+ options:
18
+ - label: I searched existing issues for this problem.
19
+ required: true
20
+ - label: This report does not disclose a security vulnerability or secret.
21
+ required: true
22
+ - type: dropdown
23
+ id: surface
24
+ attributes:
25
+ label: Affected surface
26
+ options:
27
+ - Rust core
28
+ - Python API
29
+ - CLI
30
+ - MCP server
31
+ - GitHub executor
32
+ - Vault Transit signer
33
+ - Packaging or CI
34
+ - Documentation
35
+ validations:
36
+ required: true
37
+ - type: input
38
+ id: version
39
+ attributes:
40
+ label: Version or commit
41
+ placeholder: "0.4.0 or git SHA"
42
+ validations:
43
+ required: true
44
+ - type: input
45
+ id: environment
46
+ attributes:
47
+ label: Environment
48
+ placeholder: "OS, Python version, Rust version, installation method"
49
+ validations:
50
+ required: true
51
+ - type: textarea
52
+ id: reproduction
53
+ attributes:
54
+ label: Minimal reproduction
55
+ description: Include sanitized commands, inputs, and the smallest example that fails.
56
+ validations:
57
+ required: true
58
+ - type: textarea
59
+ id: expected
60
+ attributes:
61
+ label: Expected behavior
62
+ validations:
63
+ required: true
64
+ - type: textarea
65
+ id: actual
66
+ attributes:
67
+ label: Actual behavior and logs
68
+ description: Remove secrets and private business data before submitting.
69
+ validations:
70
+ required: true
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Report a security vulnerability
4
+ url: https://github.com/elbuilder77/tempus-ddb/security/advisories/new
5
+ about: Report vulnerabilities privately. Do not open a public issue.
6
+ - name: Discussions
7
+ url: https://github.com/elbuilder77/tempus-ddb/discussions
8
+ about: Ask usage questions and discuss protocol or product ideas.
@@ -0,0 +1,55 @@
1
+ name: Feature request
2
+ description: Propose a focused product or protocol improvement
3
+ title: "feat: "
4
+ labels:
5
+ - enhancement
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Explain the user problem before proposing an implementation. Changes to signed
11
+ contracts or trust boundaries may require a design discussion first.
12
+ - type: checkboxes
13
+ id: checks
14
+ attributes:
15
+ label: Preflight
16
+ options:
17
+ - label: I searched existing issues and the public roadmap.
18
+ required: true
19
+ - label: This request is consistent with the documented product invariant and non-goals.
20
+ required: true
21
+ - type: textarea
22
+ id: problem
23
+ attributes:
24
+ label: Problem
25
+ description: Who is affected, and what cannot be done safely or reliably today?
26
+ validations:
27
+ required: true
28
+ - type: textarea
29
+ id: outcome
30
+ attributes:
31
+ label: Desired outcome
32
+ description: Describe observable behavior and acceptance criteria.
33
+ validations:
34
+ required: true
35
+ - type: dropdown
36
+ id: impact
37
+ attributes:
38
+ label: Security or compatibility impact
39
+ options:
40
+ - No signed-contract or trust-boundary impact
41
+ - Changes a convenience API only
42
+ - Changes a signed contract
43
+ - Changes identity, policy, signer, or executor trust boundaries
44
+ - Unsure
45
+ validations:
46
+ required: true
47
+ - type: textarea
48
+ id: alternatives
49
+ attributes:
50
+ label: Alternatives considered
51
+ - type: textarea
52
+ id: evidence
53
+ attributes:
54
+ label: Additional evidence
55
+ description: Add sanitized examples, measurements, or links that clarify the request.
@@ -0,0 +1,31 @@
1
+ ## Summary
2
+
3
+ Describe what changed and the user-visible outcome.
4
+
5
+ ## Motivation
6
+
7
+ Explain the problem and link the issue with `Fixes #<number>` when applicable.
8
+
9
+ ## Security and compatibility impact
10
+
11
+ - Trust boundary affected:
12
+ - Signed contract affected:
13
+ - Migration required:
14
+ - New failure mode or operational dependency:
15
+
16
+ Write `None` where appropriate. Security-sensitive changes must include an adversarial
17
+ regression test and any required threat-model update.
18
+
19
+ ## Validation
20
+
21
+ List the exact commands and relevant manual checks performed.
22
+
23
+ ## Checklist
24
+
25
+ - [ ] The change is focused and contains no generated artifacts or secrets.
26
+ - [ ] Rust format, Clippy, and tests pass where applicable.
27
+ - [ ] Ruff and pytest pass where applicable.
28
+ - [ ] New behavior has positive and negative test coverage.
29
+ - [ ] Unknown or unsupported states still fail closed.
30
+ - [ ] Public contracts and migration impact were reviewed.
31
+ - [ ] Documentation and `CHANGELOG.md` were updated when needed.
@@ -0,0 +1,19 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: cargo
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ open-pull-requests-limit: 5
8
+
9
+ - package-ecosystem: pip
10
+ directory: /
11
+ schedule:
12
+ interval: weekly
13
+ open-pull-requests-limit: 5
14
+
15
+ - package-ecosystem: github-actions
16
+ directory: /
17
+ schedule:
18
+ interval: weekly
19
+ open-pull-requests-limit: 5
@@ -0,0 +1,106 @@
1
+ name: CI
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ concurrency:
7
+ group: ${{ github.workflow }}-${{ github.ref }}
8
+ cancel-in-progress: true
9
+
10
+ on:
11
+ push:
12
+ branches: [main]
13
+ pull_request:
14
+ branches: [main]
15
+
16
+ jobs:
17
+ rust:
18
+ runs-on: ${{ matrix.os }}
19
+ timeout-minutes: 30
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ os: [ubuntu-latest, windows-latest, macos-latest]
24
+
25
+ steps:
26
+ - uses: actions/checkout@v7
27
+ with:
28
+ persist-credentials: false
29
+
30
+ - name: Set up Rust
31
+ uses: dtolnay/rust-toolchain@stable
32
+ with:
33
+ components: clippy,rustfmt
34
+
35
+ - name: Check Rust formatting
36
+ run: cargo fmt --check
37
+
38
+ - name: Run Cargo Clippy
39
+ run: cargo clippy --all-targets -- -D warnings
40
+
41
+ - name: Install cargo-audit
42
+ run: cargo install cargo-audit
43
+
44
+ - name: Run Cargo Audit
45
+ run: cargo audit
46
+
47
+ - name: Run Rust tests
48
+ env:
49
+ RUST_BACKTRACE: 1
50
+ run: cargo test --all-targets --verbose -- --nocapture
51
+
52
+ python:
53
+ runs-on: ${{ matrix.os }}
54
+ timeout-minutes: 30
55
+ env:
56
+ PYTHONIOENCODING: utf-8
57
+ strategy:
58
+ fail-fast: false
59
+ matrix:
60
+ os: [ubuntu-latest, windows-latest, macos-latest]
61
+ python-version: ['3.10', '3.12']
62
+
63
+ steps:
64
+ - uses: actions/checkout@v7
65
+ with:
66
+ persist-credentials: false
67
+
68
+ - name: Set up Python ${{ matrix.python-version }}
69
+ uses: actions/setup-python@v7
70
+ with:
71
+ python-version: ${{ matrix.python-version }}
72
+
73
+ - name: Install Python test dependencies
74
+ run: |
75
+ python -m pip install --upgrade pip "setuptools>=83.0.0"
76
+ python -m pip install -e .[dev]
77
+ python -m pip install bandit pip-audit
78
+
79
+ - name: Run Bandit
80
+ run: bandit -r python/tempus_ddb/
81
+
82
+ - name: Run pip-audit
83
+ run: pip-audit
84
+
85
+ - name: Run Ruff
86
+ run: ruff check .
87
+
88
+ - name: Validate SPDX SBOM generation
89
+ run: |
90
+ python scripts/generate_sbom.py --version 0.4.0-ci --output artifacts/tempus-ddb.spdx.json
91
+ python -c "import json; d=json.load(open('artifacts/tempus-ddb.spdx.json', encoding='utf-8')); assert d['spdxVersion']=='SPDX-2.3' and d['packages']"
92
+
93
+ - name: Run Python tests
94
+ run: python -m pytest tests/ -vv --tb=long -ra
95
+
96
+ - name: Test CLI basic commands
97
+ run: |
98
+ tempus --version
99
+ tempus --help
100
+ tempus-github-executor --help
101
+
102
+ - name: Smoke test examples
103
+ run: |
104
+ python examples/basic_record.py
105
+ python examples/verify_chain.py
106
+ python examples/full_agent_flow.py
@@ -0,0 +1,120 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+ id-token: write
10
+
11
+ concurrency:
12
+ group: release-${{ github.event.release.tag_name }}
13
+ cancel-in-progress: false
14
+
15
+ jobs:
16
+ build:
17
+ name: Build wheels on ${{ matrix.os }}
18
+ runs-on: ${{ matrix.os }}
19
+ timeout-minutes: 45
20
+ strategy:
21
+ matrix:
22
+ include:
23
+ - os: ubuntu-latest
24
+ target: x86_64-unknown-linux-gnu
25
+ - os: windows-latest
26
+ target: x86_64-pc-windows-msvc
27
+ - os: macos-latest
28
+ target: x86_64-apple-darwin
29
+ - os: macos-latest
30
+ target: aarch64-apple-darwin
31
+ steps:
32
+ - uses: actions/checkout@v7
33
+ with:
34
+ persist-credentials: false
35
+ - uses: PyO3/maturin-action@v1
36
+ with:
37
+ target: ${{ matrix.target }}
38
+ args: --release --out dist
39
+ manylinux: auto
40
+ - name: Upload wheels
41
+ uses: actions/upload-artifact@v7
42
+ with:
43
+ name: wheels-${{ matrix.os }}-${{ matrix.target }}
44
+ path: dist
45
+
46
+ sdist:
47
+ name: Build sdist
48
+ runs-on: ubuntu-latest
49
+ timeout-minutes: 20
50
+ steps:
51
+ - uses: actions/checkout@v7
52
+ with:
53
+ persist-credentials: false
54
+ - uses: PyO3/maturin-action@v1
55
+ with:
56
+ command: sdist
57
+ args: --out dist
58
+ - name: Upload sdist
59
+ uses: actions/upload-artifact@v7
60
+ with:
61
+ name: sdist
62
+ path: dist
63
+
64
+ release:
65
+ name: Release
66
+ runs-on: ubuntu-latest
67
+ timeout-minutes: 30
68
+ needs: [build, sdist]
69
+ permissions:
70
+ contents: write
71
+ id-token: write
72
+ attestations: write
73
+ steps:
74
+ - uses: actions/checkout@v7
75
+ with:
76
+ persist-credentials: false
77
+ - uses: actions/download-artifact@v8
78
+ with:
79
+ pattern: wheels-*
80
+ path: dist
81
+ merge-multiple: true
82
+ - uses: actions/download-artifact@v8
83
+ with:
84
+ name: sdist
85
+ path: dist
86
+ - name: Generate SPDX SBOM
87
+ run: >-
88
+ python scripts/generate_sbom.py
89
+ --version "${{ github.event.release.tag_name }}"
90
+ --output "sbom/tempus-ddb-${{ github.event.release.tag_name }}.spdx.json"
91
+ - name: Attest release provenance
92
+ uses: actions/attest@v4
93
+ with:
94
+ subject-path: dist/*
95
+ - name: Attest release SBOM
96
+ uses: actions/attest@v4
97
+ with:
98
+ subject-path: dist/*
99
+ sbom-path: sbom/tempus-ddb-${{ github.event.release.tag_name }}.spdx.json
100
+ - name: Upload to GitHub Release
101
+ uses: svenstaro/upload-release-action@v2
102
+ with:
103
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
104
+ file: dist/*
105
+ file_glob: true
106
+ tag: ${{ github.event.release.tag_name }}
107
+ overwrite: true
108
+ - name: Upload SBOM to GitHub Release
109
+ uses: svenstaro/upload-release-action@v2
110
+ with:
111
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
112
+ file: sbom/tempus-ddb-${{ github.event.release.tag_name }}.spdx.json
113
+ tag: ${{ github.event.release.tag_name }}
114
+ overwrite: true
115
+
116
+ # Publish to PyPI using Trusted Publishing (recommended: configure at pypi.org/manage/project/tempus_ddb/settings/publishing/)
117
+ - name: Publish to PyPI
118
+ uses: pypa/gh-action-pypi-publish@release/v1
119
+ with:
120
+ packages-dir: dist/
@@ -0,0 +1,101 @@
1
+ # Local configuration and secrets
2
+ .env
3
+ .env.*
4
+ !.env.example
5
+ *.pem
6
+ *.key
7
+ *.p12
8
+ *.pfx
9
+ *.jks
10
+ *.keystore
11
+ *.keys.json
12
+ *_keys.json
13
+ keys.json
14
+ agent_wallet.json
15
+ server_secret.key
16
+ credentials*.json
17
+ *.secrets.json
18
+
19
+ # Local databases and runtime state
20
+ *.db
21
+ *.db-*
22
+ *.sqlite
23
+ *.sqlite3
24
+ *.wal
25
+ *.shm
26
+ *.journal
27
+
28
+ # Rust build output
29
+ /target/
30
+
31
+ # Python bytecode, environments, and tool caches
32
+ __pycache__/
33
+ *.py[cod]
34
+ *$py.class
35
+ .pytest_cache/
36
+ pytest-cache-files-*/
37
+ .ruff_cache/
38
+ .mypy_cache/
39
+ .pyre/
40
+ .hypothesis/
41
+ .tox/
42
+ .nox/
43
+ .venv/
44
+ .venv*/
45
+ venv/
46
+ ENV/
47
+
48
+ # Package and release artifacts
49
+ /build/
50
+ /dist/
51
+ *.egg-info/
52
+ .eggs/
53
+ pip-wheel-metadata/
54
+ *.whl
55
+ *.tar.gz
56
+ /artifacts/
57
+
58
+ # Coverage, profiling, and benchmark output
59
+ .coverage
60
+ .coverage.*
61
+ htmlcov/
62
+ coverage.xml
63
+ *.prof
64
+ *.flamegraph.svg
65
+ /.benchmarks/
66
+ /benchmark-results/
67
+
68
+ # Temporary workspaces and logs
69
+ /.tmp/
70
+ /scratch/
71
+ /tmp/
72
+ /temp/
73
+ /.cache/
74
+ .direnv/
75
+ .python-version
76
+ .envrc
77
+ *.tmp
78
+ *.temp
79
+ *.log
80
+ *.bak
81
+ *.orig
82
+ *.rej
83
+ *.swp
84
+ *~
85
+
86
+ # Editors and operating systems
87
+ .agents/
88
+ .codex/
89
+ .claude/
90
+ .cursor/
91
+ .windsurf/
92
+ .zed/
93
+ .idea/
94
+ .vscode/
95
+ .vs/
96
+ *.suo
97
+ *.user
98
+ *.code-workspace
99
+ .DS_Store
100
+ Thumbs.db
101
+ Desktop.ini
@@ -0,0 +1,122 @@
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+
5
+ ## [0.4.0] - 2026-08-27
6
+
7
+ ### Fixed
8
+
9
+ - Kept the Rust quality gate compatible with current stable Clippy.
10
+ - Validate GitHub executor endpoints as absolute HTTPS URLs before an outbound request;
11
+ malformed, credential-bearing, query-bearing, and plaintext endpoints fail closed.
12
+ - Restored standards-compliant Python package metadata by keeping `keywords` in the
13
+ project metadata rather than treating it as an install extra.
14
+
15
+ ### Changed
16
+
17
+ - Reused a bounded, configurable SQLite connection pool in the mediated executor instead
18
+ of opening a new connection for every state transition.
19
+ - Added a recovery index and concurrent replay regression coverage proving that only one
20
+ contender can consume a permit.
21
+ - Moved runnable demonstrations and the benchmark into `examples/` so the repository
22
+ root contains only project configuration and public documentation.
23
+ - Updated repository, security, discussion, ownership, and SBOM links for
24
+ `elbuilder77/tempus-ddb`.
25
+
26
+ ### Phase 3
27
+
28
+ - A provider-neutral Rust signer boundary and verification-key resolver with compatible
29
+ local Ed25519 and Vault Transit CLI backends. Signer URI, key version, and algorithm are
30
+ bound into signed artifacts; unknown providers, algorithms, versions, and malformed
31
+ responses fail closed.
32
+ - Signed deterministic policy bundles covering tenant, action type, resource, input size,
33
+ optional money constraints, TTL, and allowed executors. Permits now bind the policy
34
+ digest, reproducible evidence digest, executor constraints, and complete reason codes.
35
+ - Tenant-scoped identity delegation plus signed rotation and revocation events. Historical
36
+ receipts resolve the key valid at signing time, while emergency revocation invalidates
37
+ unconsumed permits.
38
+ - `tempus doctor`, policy and identity lifecycle commands, signer conformance checks, and
39
+ a machine-readable adapter conformance fixture.
40
+ - SPDX 2.3 SBOM generation and GitHub artifact provenance/SBOM attestations in the release
41
+ workflow, plus a compatibility policy and Vault Transit operating guide.
42
+ - Package maturity advances to design-partner beta (`0.4.0`). Existing v1 schema names
43
+ remain compatible; the Phase 3 binding fields are additive and enforced by executors.
44
+
45
+ Live credentialed Vault and GitHub checks remain explicit opt-in tests; an integration
46
+ that was not run is never reported as passing.
47
+
48
+ ### Added
49
+
50
+ - First complete local B2A authorization flow: signed action intent, gate permit,
51
+ executor outcome, final receipt, trace reading, and end-to-end verification.
52
+ - Stable versioned JSON contracts and closed machine statuses for autonomous consumers.
53
+ - Signed, immutable agent registration events with a gate delegation root.
54
+ - Deterministic action idempotency, expiring permits, and single-consumption outcomes.
55
+ - Rust, Python, CLI, and MCP B2A surfaces plus replay/tamper/authorization tests.
56
+ - Public protocol boundary and production-oriented threat-model documentation.
57
+ - Signed MCP authorization and outcome tools for clients that keep agent and executor
58
+ private keys outside the gate process.
59
+ - Signed executor observations for `STARTED`, `SUCCEEDED`, `FAILED`, and `UNKNOWN`, plus
60
+ restart recovery that never replays an ambiguous external effect.
61
+ - Packaged `tempus-github-executor` for exactly bound GitHub issue and pull-request
62
+ creation with an executor-only credential.
63
+ - A public product roadmap with ordered Phase 3 trust and adoption milestones.
64
+ - Dependabot coverage for Cargo, Python, and GitHub Actions dependencies.
65
+
66
+ ### Changed
67
+
68
+ - MCP defaults to the autonomous execution-gate surface. Administrative, legacy, and
69
+ destructive tools now require explicit environment flags.
70
+ - Product positioning now treats money as optional action metadata and humans as
71
+ read-only auditors rather than transaction approvers.
72
+ - Default MCP mode now exposes only signed B2A write tools. The compatibility tools
73
+ that receive local keyfile paths require `TEMPUS_LOCAL_KEYFILE_TOOLS=1`.
74
+ - Phase 2 is complete for the single-instance GitHub adapter, including policy-version
75
+ checks, exact argument binding, credential isolation, and crash recovery.
76
+ - Package metadata now reflects the actual Python 3.10+ MCP dependency and alpha status.
77
+ - The Python package exports its installed version and the GitHub executor derives its
78
+ user-agent version from package metadata.
79
+ - Tests and runnable examples use self-cleaning temporary workspaces instead of leaving
80
+ databases and generated keys in the repository root.
81
+
82
+ ### Security
83
+
84
+ - Agent registrations can no longer be silently replaced.
85
+ - The gate signing key is server-controlled for MCP authorization requests.
86
+ - Unregistered agents are blocked before execution and conflicting permit reuse is
87
+ rejected.
88
+
89
+ All notable changes to this project will be documented in this file.
90
+
91
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
92
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
93
+
94
+ ## [0.2.1] - 2026-06-26
95
+
96
+ ### Changed
97
+ - Updated examples to the current free core API.
98
+ - Added smoke-test coverage for runnable example scripts.
99
+ - Stabilized release readiness for the free/open-core packaging and CI path.
100
+
101
+ ## [0.2.0] - 2026-06-26
102
+
103
+ ### Added
104
+ - Comprehensive CLI improvements: `tempus record`, `tempus status`, `tempus --version`
105
+ - Expanded test coverage with Python API tests and CLI integration tests
106
+ - Multiple end-to-end examples in `examples/`
107
+ - GitHub Actions CI workflow for multi-OS/Python testing
108
+ - Module docstrings and improved Python API documentation
109
+
110
+ ### Changed
111
+ - Removed license gate entirely from Rust core and Python bindings for true free/open nature
112
+ - Simplified `TempusDDB` constructor to `TempusDDB(db_path, keyfile)`
113
+ - Updated positioning to emphasize "free, local-first, tamper-evident"
114
+ - Improved error handling and UX across CLI
115
+
116
+ ### Fixed
117
+ - License generation to properly support direct CLI usage
118
+ - Constructor calls in tests and examples
119
+
120
+ ## [0.1.0] - Previous
121
+
122
+ Initial public version with core Rust engine, MCP integration, and basic CLI.