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.
- tempus_ddb-0.4.0/.gitattributes +11 -0
- tempus_ddb-0.4.0/.github/CODEOWNERS +9 -0
- tempus_ddb-0.4.0/.github/ISSUE_TEMPLATE/bug_report.yml +70 -0
- tempus_ddb-0.4.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
- tempus_ddb-0.4.0/.github/ISSUE_TEMPLATE/feature_request.yml +55 -0
- tempus_ddb-0.4.0/.github/PULL_REQUEST_TEMPLATE.md +31 -0
- tempus_ddb-0.4.0/.github/dependabot.yml +19 -0
- tempus_ddb-0.4.0/.github/workflows/ci.yml +106 -0
- tempus_ddb-0.4.0/.github/workflows/release.yml +120 -0
- tempus_ddb-0.4.0/.gitignore +101 -0
- tempus_ddb-0.4.0/CHANGELOG.md +122 -0
- tempus_ddb-0.4.0/CODE_OF_CONDUCT.md +67 -0
- tempus_ddb-0.4.0/COMPATIBILITY.md +33 -0
- tempus_ddb-0.4.0/CONTRIBUTING.md +64 -0
- tempus_ddb-0.4.0/Cargo.lock +1119 -0
- tempus_ddb-0.4.0/Cargo.toml +46 -0
- tempus_ddb-0.4.0/LICENSE +21 -0
- tempus_ddb-0.4.0/MIGRATION_0.4.md +26 -0
- tempus_ddb-0.4.0/PKG-INFO +455 -0
- tempus_ddb-0.4.0/README.md +420 -0
- tempus_ddb-0.4.0/ROADMAP.md +67 -0
- tempus_ddb-0.4.0/SECURITY.md +41 -0
- tempus_ddb-0.4.0/THREAT_MODEL.md +170 -0
- tempus_ddb-0.4.0/assets/logo.png +0 -0
- tempus_ddb-0.4.0/build.rs +4 -0
- tempus_ddb-0.4.0/config/policy.github.example.json +22 -0
- tempus_ddb-0.4.0/config/vault-transit.signer.example.json +11 -0
- tempus_ddb-0.4.0/conformance/adapter-v1.json +21 -0
- tempus_ddb-0.4.0/docs/VAULT_TRANSIT_SIGNER.md +37 -0
- tempus_ddb-0.4.0/examples/basic_record.py +67 -0
- tempus_ddb-0.4.0/examples/benchmark.py +73 -0
- tempus_ddb-0.4.0/examples/commercial_demo.py +231 -0
- tempus_ddb-0.4.0/examples/decision_chain.py +78 -0
- tempus_ddb-0.4.0/examples/full_agent_flow.py +76 -0
- tempus_ddb-0.4.0/examples/mcp_record_example.md +38 -0
- tempus_ddb-0.4.0/examples/tamper_detection_cli.py +90 -0
- tempus_ddb-0.4.0/examples/verify_chain.py +56 -0
- tempus_ddb-0.4.0/pyproject.toml +68 -0
- tempus_ddb-0.4.0/python/tempus_ddb/__init__.py +42 -0
- tempus_ddb-0.4.0/python/tempus_ddb/cli.py +774 -0
- tempus_ddb-0.4.0/python/tempus_ddb/github_executor.py +327 -0
- tempus_ddb-0.4.0/python/tempus_ddb/mcp_server.py +562 -0
- tempus_ddb-0.4.0/python/tempus_ddb/web3_adapter.py +47 -0
- tempus_ddb-0.4.0/scripts/generate_sbom.py +130 -0
- tempus_ddb-0.4.0/src/b2a.rs +1916 -0
- tempus_ddb-0.4.0/src/executor.rs +649 -0
- tempus_ddb-0.4.0/src/lib.rs +1351 -0
- tempus_ddb-0.4.0/src/main.rs +416 -0
- tempus_ddb-0.4.0/src/phase3.rs +1044 -0
- tempus_ddb-0.4.0/tests/b2a_flow_tests.rs +614 -0
- tempus_ddb-0.4.0/tests/conftest.py +28 -0
- tempus_ddb-0.4.0/tests/integration_tests.rs +104 -0
- tempus_ddb-0.4.0/tests/test_adversarial.py +103 -0
- tempus_ddb-0.4.0/tests/test_cli.py +298 -0
- tempus_ddb-0.4.0/tests/test_examples.py +36 -0
- tempus_ddb-0.4.0/tests/test_executor_e2e.py +190 -0
- tempus_ddb-0.4.0/tests/test_github_executor.py +272 -0
- tempus_ddb-0.4.0/tests/test_mcp_server.py +155 -0
- tempus_ddb-0.4.0/tests/test_python_api.py +239 -0
- tempus_ddb-0.4.0/tests/test_sdk.py +33 -0
- tempus_ddb-0.4.0/uv.lock +1723 -0
|
@@ -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.
|