Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agent-guard/context-digest-policy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ checks:
sha256: "c63d5d58c5b17db80e09fef8b9c8f3c11a9c02c628c1c3ff8add9d924f7d0c34"
- id: workflow_policy
path: .agent-guard/workflow-policy.yaml
sha256: "7e0473e34a798977de6d0081141171f028e8b7f81bbaa3e5b8acc0a963bcdffe"
sha256: "8e2a2423f51a7695ec9f7fe2d19a4e0b6ec409a8a5f1b5c5c7797b56838975ae"
11 changes: 8 additions & 3 deletions .agent-guard/workflow-policy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,18 @@ workflow_checks:
--mcp-policy .agent-guard/mcp-policy.yaml
--digest-policy .agent-guard/context-digest-policy.yaml
--format json
--output .agent-guard/evidence/agent-guard-evidence-report.json
--output .agent-guard/evidence/agent-guard-report.json
- id: conformance_self
command: >-
python -m agent_guard.cli conformance check --root .
--evidence .agent-guard/evidence/agent-guard-evidence-report.json
--evidence .agent-guard/evidence/agent-guard-report.json
--profile recommended
- id: evidence_pack_manifest_self
command: >-
python -m agent_guard.cli evidence-pack manifest --root .
--report .agent-guard/evidence/agent-guard-evidence-report.json
--report .agent-guard/evidence/agent-guard-report.json
- id: evidence_bundle_consumer_self
command: >-
python -I -m agent_guard.consumer
--evidence-dir .agent-guard/evidence
.agent-guard/evidence/agent-guard-report.json
19 changes: 11 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -247,31 +247,34 @@ jobs:
--mcp-policy .agent-guard/mcp-policy.yaml \
--digest-policy .agent-guard/context-digest-policy.yaml \
--format json \
--output .agent-guard/evidence/agent-guard-evidence-report.json
--output .agent-guard/evidence/agent-guard-report.json
Comment thread
yui-stingray marked this conversation as resolved.
python -m agent_guard.cli render-report \
--root . \
--input .agent-guard/evidence/agent-guard-evidence-report.json \
--input .agent-guard/evidence/agent-guard-report.json \
--format markdown \
--output .agent-guard/evidence/agent-guard-evidence-report.md
--output .agent-guard/evidence/agent-guard-report.md
python -m agent_guard.cli render-report \
--root . \
--input .agent-guard/evidence/agent-guard-evidence-report.json \
--input .agent-guard/evidence/agent-guard-report.json \
--format sarif \
--output .agent-guard/evidence/agent-guard-results.sarif
python -m agent_guard.cli conformance check \
--root . \
--evidence .agent-guard/evidence/agent-guard-evidence-report.json \
--evidence .agent-guard/evidence/agent-guard-report.json \
--profile recommended \
--json
python -m agent_guard.cli evidence-pack manifest \
--root . \
--report .agent-guard/evidence/agent-guard-evidence-report.json \
--artifact .agent-guard/evidence/agent-guard-evidence-report.json \
--report .agent-guard/evidence/agent-guard-report.json \
--artifact .agent-guard/evidence/agent-guard-report.json \
--json
python -m agent_guard.cli render-report \
--root . \
--input .agent-guard/evidence/agent-guard-evidence-report.json \
--input .agent-guard/evidence/agent-guard-report.json \
--format github-annotations
python -I -m agent_guard.consumer \
--evidence-dir .agent-guard/evidence \
.agent-guard/evidence/agent-guard-report.json
- name: Upload self-dogfood evidence report
if: matrix.python-version == '3.12'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,21 @@ Why: keep static guard releases auditable while the package is still alpha.

## Unreleased

- Defined a bounded demand-validation window through 2026-09-20 and froze
feature releases pending an explicit maintainer decision after the 2026-09-21
review. Marketplace publication remains separately prohibited without
explicit authorization.
- Locked the release build toolchain, pinned copyable GitHub Action examples to
the immutable v0.3.4 release commit, and documented the post-release pin
refresh contract.
- Simplified reviewed bootstrap and monorepo onboarding, added explicit Python
interpreter checks, and tightened guidance for copying public-safe evidence.
- Hardened the documented PyPI provenance flow with isolated temporary
downloads, request timeouts, exact artifact checks, redirect-final HTTPS host
validation, exclusive file creation, and cleanup on success or failure.
- Aligned self-dogfood CI with the canonical public evidence filenames and
required fail-closed bundle validation before artifact upload.

## 0.3.4 - 2026-08-01

- Preserved top-level standalone compatibility for the public API, content, and
Expand Down
2 changes: 1 addition & 1 deletion docs/evidence-samples/agent-guard-report.json

Large diffs are not rendered by default.

10 changes: 9 additions & 1 deletion tests/test_contract_stability.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,15 @@ def test_changelog_records_latest_release_entry() -> None:
"## 0.3.1 - 2026-07-17",
"## 0.3.0 - 2026-07-17",
]
assert normalized_unreleased == ""
assert normalized_unreleased == " ".join(
[
"- Defined a bounded demand-validation window through 2026-09-20 and froze feature releases pending an explicit maintainer decision after the 2026-09-21 review. Marketplace publication remains separately prohibited without explicit authorization.",
"- Locked the release build toolchain, pinned copyable GitHub Action examples to the immutable v0.3.4 release commit, and documented the post-release pin refresh contract.",
"- Simplified reviewed bootstrap and monorepo onboarding, added explicit Python interpreter checks, and tightened guidance for copying public-safe evidence.",
"- Hardened the documented PyPI provenance flow with isolated temporary downloads, request timeouts, exact artifact checks, redirect-final HTTPS host validation, exclusive file creation, and cleanup on success or failure.",
"- Aligned self-dogfood CI with the canonical public evidence filenames and required fail-closed bundle validation before artifact upload.",
]
)
assert "Bound API, content, and path policy inputs and scan work" in normalized_latest
assert "bounded packaged public-bundle consumer mode" in normalized_latest
assert "fresh runner-temporary staging" in normalized_latest
Expand Down
2 changes: 1 addition & 1 deletion tests/test_self_dogfood_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,5 +89,5 @@ def test_self_dogfood_guard_policies_are_present_and_clean() -> None:
root=REPO_ROOT,
policy=load_workflow_policy(SELF_WORKFLOW_POLICY),
)
assert workflow_checked == 24
assert workflow_checked == 25
assert workflow_findings == []
32 changes: 27 additions & 5 deletions tests/test_workflow_release_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -586,27 +586,49 @@ def test_ci_self_dogfood_renders_from_single_json_report() -> None:
if "python -m agent_guard.cli report " in line
]
assert report_lines == [
"python -m agent_guard.cli report --root . --context-policy .agent-guard/context-policy.yaml --evidence-preset recommended --api-policy examples/architecture_policy.yaml --mcp-policy .agent-guard/mcp-policy.yaml --digest-policy .agent-guard/context-digest-policy.yaml --format json --output .agent-guard/evidence/agent-guard-evidence-report.json"
"python -m agent_guard.cli report --root . --context-policy .agent-guard/context-policy.yaml --evidence-preset recommended --api-policy examples/architecture_policy.yaml --mcp-policy .agent-guard/mcp-policy.yaml --digest-policy .agent-guard/context-digest-policy.yaml --format json --output .agent-guard/evidence/agent-guard-report.json"
]
assert (
"python -m agent_guard.cli render-report --root . --input .agent-guard/evidence/agent-guard-evidence-report.json "
"--format markdown --output .agent-guard/evidence/agent-guard-evidence-report.md"
"python -m agent_guard.cli conformance check --root . "
"--evidence .agent-guard/evidence/agent-guard-report.json "
"--profile recommended --json"
in normalized_self_dogfood
)
assert (
"python -m agent_guard.cli evidence-pack manifest --root . "
"--report .agent-guard/evidence/agent-guard-report.json "
"--artifact .agent-guard/evidence/agent-guard-report.json --json"
in normalized_self_dogfood
)
assert (
"python -m agent_guard.cli render-report --root . --input .agent-guard/evidence/agent-guard-report.json "
"--format markdown --output .agent-guard/evidence/agent-guard-report.md"
in normalized_self_dogfood
)
assert (
"python -m agent_guard.cli mcp check --root . --policy .agent-guard/mcp-policy.yaml --json"
in normalized_self_dogfood
)
assert (
"python -m agent_guard.cli render-report --root . --input .agent-guard/evidence/agent-guard-evidence-report.json "
"python -m agent_guard.cli render-report --root . --input .agent-guard/evidence/agent-guard-report.json "
"--format sarif --output .agent-guard/evidence/agent-guard-results.sarif"
in normalized_self_dogfood
)
assert (
"python -m agent_guard.cli render-report --root . --input .agent-guard/evidence/agent-guard-evidence-report.json "
"python -m agent_guard.cli render-report --root . --input .agent-guard/evidence/agent-guard-report.json "
"--format github-annotations"
in normalized_self_dogfood
)
consumer_command = (
"python -I -m agent_guard.consumer --evidence-dir .agent-guard/evidence "
".agent-guard/evidence/agent-guard-report.json"
)
assert consumer_command in normalized_self_dogfood
assert ".agent-guard/evidence/agent-guard-evidence-report.json" not in normalized_self_dogfood
assert ".agent-guard/evidence/agent-guard-evidence-report.md" not in normalized_self_dogfood
assert normalized_self_dogfood.index(consumer_command) < normalized_self_dogfood.index(
"uses: actions/upload-artifact@"
)
Comment thread
coderabbitai[bot] marked this conversation as resolved.


def test_ci_action_smoke_replays_fail_closed_consumer_contract() -> None:
Expand Down