strata-agent-memory 0.2.5__tar.gz → 0.2.7__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.
- {strata_agent_memory-0.2.5/strata_agent_memory.egg-info → strata_agent_memory-0.2.7}/PKG-INFO +3 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/README.md +2 -1
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/__init__.py +1 -1
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/audit.py +42 -3
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/cli.py +344 -41
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/contracts.py +180 -13
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/evidence.py +543 -54
- strata_agent_memory-0.2.7/agent_memory/lane.py +1150 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/ledger.py +20 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/mcp_server.py +15 -4
- strata_agent_memory-0.2.7/agent_memory/measure.py +692 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/pathmap.py +36 -5
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/recheck.py +136 -19
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/records.py +96 -3
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/relay/client.py +116 -1
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/relay/core.py +14 -3
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/reliability.py +92 -15
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/remote.py +41 -3
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/serve.py +336 -6
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/supersession.py +9 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/trust.py +16 -6
- strata_agent_memory-0.2.7/deploy/lib/served-ledger.sh +58 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/README.md +6 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/seed-board.sh +3 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/seed-topics.sh +3 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/upgrade-driver.sh +11 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/README.md +8 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/skills/approvals/SKILL.md +2 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/skills/approve/SKILL.md +2 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/skills/inbox/SKILL.md +2 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/skills/reject/SKILL.md +2 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/pyproject.toml +5 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7/strata_agent_memory.egg-info}/PKG-INFO +3 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/strata_agent_memory.egg-info/SOURCES.txt +24 -0
- strata_agent_memory-0.2.7/tests/test_assessment_67b26eae.py +277 -0
- strata_agent_memory-0.2.7/tests/test_audit_lane_numbers_ea89ba26.py +289 -0
- strata_agent_memory-0.2.7/tests/test_audit_measurement_13190a20.py +441 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_backlog_check.py +3 -2
- strata_agent_memory-0.2.7/tests/test_contract_amend_649e0b45.py +354 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_deploy_mac.py +3 -1
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_evidence.py +4 -3
- strata_agent_memory-0.2.7/tests/test_install_lane_cb430a30.py +335 -0
- strata_agent_memory-0.2.7/tests/test_lane_63b7cf8b.py +762 -0
- strata_agent_memory-0.2.7/tests/test_lane_derived_roots_817ab446.py +263 -0
- strata_agent_memory-0.2.7/tests/test_lane_nightly_84b22b63.py +203 -0
- strata_agent_memory-0.2.7/tests/test_lane_priority_779d51ba.py +328 -0
- strata_agent_memory-0.2.7/tests/test_lane_stop_63b7cf8b.py +159 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_ledger.py +7 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_live_wake_c217c336.py +58 -2
- strata_agent_memory-0.2.7/tests/test_local_lanes_sibling_1411a2b2.py +275 -0
- strata_agent_memory-0.2.7/tests/test_outcome_commit_binding_b1de564d.py +527 -0
- strata_agent_memory-0.2.7/tests/test_outcome_needs_evidence_b1de564d.py +130 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_packaging.py +3 -1
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_plugins.py +4 -4
- strata_agent_memory-0.2.7/tests/test_recheck_away_207af145.py +276 -0
- strata_agent_memory-0.2.7/tests/test_recheck_remote_8185d2d3.py +317 -0
- strata_agent_memory-0.2.7/tests/test_recheck_sandbox_543e48a7.py +627 -0
- strata_agent_memory-0.2.7/tests/test_recheck_sandbox_nits_543e48a7.py +73 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_relay_client.py +7 -2
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_relay_core.py +3 -3
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_relay_release_526f5261.py +2 -1
- strata_agent_memory-0.2.7/tests/test_relay_release_gate_b3b3e487.py +383 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_remote.py +4 -2
- strata_agent_memory-0.2.7/tests/test_rollback_78710ebf.py +510 -0
- strata_agent_memory-0.2.7/tests/test_served_ledger_6e8e49f3.py +261 -0
- strata_agent_memory-0.2.7/tests/test_sit_var_bindings_e802ca84.py +288 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/LICENSE +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/__main__.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/approvals.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/compact.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/compiler.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/export.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/hooks.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/identity.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/instances.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/kit.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/memorizer.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/relay/__init__.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/relay/adapters.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/relay/cli.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/render.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/roster.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/signing.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/stats.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/agent_memory/wake.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/agent-keys.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/agent-session.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/backup-tokens.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/install-hooks-mac.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/install-relay-driver.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/install-replica-driver.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/install-runner-driver.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/instances.example.json +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/onboard-agent.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/relay-agent.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/mac/seed-mail-context.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/.claude-plugin/marketplace.json +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/bin/agent-memory-approvals +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/bin/agent-memory-wake +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/hooks/hooks.json +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/monitors/monitors.json +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/claude-code/rules/approvals.md +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/codex/skills/agent-memory-answer/SKILL.md +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/codex/skills/agent-memory-answer/agents/openai.yaml +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/codex/skills/agent-memory-approvals/SKILL.md +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/codex/skills/agent-memory-approvals/agents/openai.yaml +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/codex/skills/agent-memory-approvals/rules/approvals.md +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/plugins/codex/skills/agent-memory-approvals/scripts/agent-memory-approvals +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/relay/README.md +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/relay/agent-memory-relay@.service +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/relay/install-relay-mac.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/relay/install-relay.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/relay/macos/com.strata.agent-memory.relay.plist.template +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/deploy/relay/relay-launch.sh +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/setup.cfg +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/strata_agent_memory.egg-info/dependency_links.txt +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/strata_agent_memory.egg-info/entry_points.txt +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/strata_agent_memory.egg-info/requires.txt +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/strata_agent_memory.egg-info/top_level.txt +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_audit.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_changelog_fragments.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_changelog_guard_shallow_57a2f78e.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_ci_docs_only_353ce010.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_cli.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_compact.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_compiler.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_compiler_render.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_config.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_contracts.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_deploy_relay.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_deploy_replica.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_deploy_tokens.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_find_root_b4b5019b.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_hooks.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_identity.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_issue_bridge.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_ledger_index.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_memorizer.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_pathmap.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_phase2.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_receipt_reports_274e6199.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_recheck.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_records.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_redaction.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_relay_adapters.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_relay_codex.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_relay_instance_2a2e3887.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_reliability.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_remote_signing.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_review2_fixes.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_review3_fixes.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_review_fixes.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_scale.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_serve.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_signing.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_sit_fleet_1b24b0b1.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_sit_fleet_ci_0d9b76a2.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_stats.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_supersedes_61416280.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_trust.py +0 -0
- {strata_agent_memory-0.2.5 → strata_agent_memory-0.2.7}/tests/test_uv_lock_env_274e6199.py +0 -0
{strata_agent_memory-0.2.5/strata_agent_memory.egg-info → strata_agent_memory-0.2.7}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: strata-agent-memory
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.7
|
|
4
4
|
Summary: Portable, auditable, cross-vendor memory for LLM agents: evidence-bound claims, trust tiers, and compiled context views.
|
|
5
5
|
Author: Strata Intelligence
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -75,7 +75,7 @@ pip install strata-agent-memory # the CLI is `agent-memory`; or, from a chec
|
|
|
75
75
|
cd your-project && agent-memory init
|
|
76
76
|
|
|
77
77
|
agent-memory run -- pytest -q # -> {"id": "ev_…", "kind": "test", "passed": 42, ...}
|
|
78
|
-
agent-memory claim outcome "auth tests pass" -e ev_…
|
|
78
|
+
agent-memory claim outcome "auth tests pass" -e ev_… # inside a git checkout it binds HEAD too
|
|
79
79
|
agent-memory claim outcome "deployed" # -> rejected: outcome claims require at least one receipt
|
|
80
80
|
|
|
81
81
|
agent-memory claim fact "sessions renew via renewSession()" --source src/auth.py
|
|
@@ -91,6 +91,7 @@ agent-memory claim fact "w3lib.get_meta_refresh takes baseurl" --source w3lib/ht
|
|
|
91
91
|
agent-memory compile --role worker --task "extend auth" # a fork-mode brief; reports what memory holds nothing on
|
|
92
92
|
agent-memory compile --role verifier --contract ctr_… --round 2 --lens security # isolated review brief with a lens
|
|
93
93
|
agent-memory audit # tiers, static-only outcomes, taint chains, verifier lineage matrix
|
|
94
|
+
agent-memory audit --since 2026-09-21 --until 2026-09-28 # and the measurement section for that week (default: the last seven days)
|
|
94
95
|
agent-memory reliability # how often claims like these were refuted, with n and an interval; fitted staleness
|
|
95
96
|
AGENT_MEMORY_HARNESS=ollama agent-memory recheck --map /Users/craig/src=/home/chris/src # the nightly lane, from another machine
|
|
96
97
|
agent-memory serve # HTTP API, SSE and remote MCP on loopback; add --tokens FILE
|
|
@@ -51,7 +51,7 @@ pip install strata-agent-memory # the CLI is `agent-memory`; or, from a chec
|
|
|
51
51
|
cd your-project && agent-memory init
|
|
52
52
|
|
|
53
53
|
agent-memory run -- pytest -q # -> {"id": "ev_…", "kind": "test", "passed": 42, ...}
|
|
54
|
-
agent-memory claim outcome "auth tests pass" -e ev_…
|
|
54
|
+
agent-memory claim outcome "auth tests pass" -e ev_… # inside a git checkout it binds HEAD too
|
|
55
55
|
agent-memory claim outcome "deployed" # -> rejected: outcome claims require at least one receipt
|
|
56
56
|
|
|
57
57
|
agent-memory claim fact "sessions renew via renewSession()" --source src/auth.py
|
|
@@ -67,6 +67,7 @@ agent-memory claim fact "w3lib.get_meta_refresh takes baseurl" --source w3lib/ht
|
|
|
67
67
|
agent-memory compile --role worker --task "extend auth" # a fork-mode brief; reports what memory holds nothing on
|
|
68
68
|
agent-memory compile --role verifier --contract ctr_… --round 2 --lens security # isolated review brief with a lens
|
|
69
69
|
agent-memory audit # tiers, static-only outcomes, taint chains, verifier lineage matrix
|
|
70
|
+
agent-memory audit --since 2026-09-21 --until 2026-09-28 # and the measurement section for that week (default: the last seven days)
|
|
70
71
|
agent-memory reliability # how often claims like these were refuted, with n and an interval; fitted staleness
|
|
71
72
|
AGENT_MEMORY_HARNESS=ollama agent-memory recheck --map /Users/craig/src=/home/chris/src # the nightly lane, from another machine
|
|
72
73
|
agent-memory serve # HTTP API, SSE and remote MCP on loopback; add --tokens FILE
|
|
@@ -27,13 +27,14 @@ from collections import Counter, defaultdict
|
|
|
27
27
|
from typing import Dict, List, Optional
|
|
28
28
|
|
|
29
29
|
from . import evidence as ev
|
|
30
|
+
from . import measure as measure_mod
|
|
30
31
|
from . import reliability as rel
|
|
31
32
|
from . import supersession as supersession_mod
|
|
32
33
|
from . import roster as roster_mod
|
|
33
34
|
from . import signing
|
|
34
35
|
from .contracts import status_of
|
|
35
36
|
from .ledger import UNTRUSTED_POLICY
|
|
36
|
-
from .records import is_redacted, receipt_visible_to
|
|
37
|
+
from .records import is_assessment, is_redacted, receipt_visible_to
|
|
37
38
|
from .trust import TIERS, assess, lineage_differs, summarize
|
|
38
39
|
|
|
39
40
|
# Anything a compiled view would have to render on its own line. The renderer collapses
|
|
@@ -190,12 +191,15 @@ def _roster_sections(ledger, rep: Dict, by_id: Dict[str, dict], reader_user: Opt
|
|
|
190
191
|
|
|
191
192
|
|
|
192
193
|
def report(ledger, recheck: bool = False, cwd: Optional[str] = None, timeout: Optional[float] = 300,
|
|
193
|
-
path_map=None, reader_user: Optional[str] = None
|
|
194
|
+
path_map=None, reader_user: Optional[str] = None, since: Optional[str] = None,
|
|
195
|
+
until: Optional[str] = None) -> dict:
|
|
194
196
|
"""The audit, for one reader. ``reader_user`` is who is asking: a user-scoped claim is
|
|
195
197
|
one person's private memory and is listed for its owner and for nobody else, the same
|
|
196
198
|
rule ``receipt_visible_to`` applies everywhere a record is shown (verification review
|
|
197
199
|
F1: the audit listed every user's private statements to any token). A local audit
|
|
198
|
-
with no reader named sees everything, as the local ledger's owner does.
|
|
200
|
+
with no reader named sees everything, as the local ledger's owner does. ``since`` and
|
|
201
|
+
``until`` are the measurement section's window (measure.window; ValueError when it is
|
|
202
|
+
empty or a bound does not parse)."""
|
|
199
203
|
assessment = assess(ledger)
|
|
200
204
|
claims = ledger.claims()
|
|
201
205
|
if reader_user is not None:
|
|
@@ -214,10 +218,14 @@ def report(ledger, recheck: bool = False, cwd: Optional[str] = None, timeout: Op
|
|
|
214
218
|
"unrechecked_outcomes": [],
|
|
215
219
|
"failing_receipt_outcomes": [],
|
|
216
220
|
"static_only_outcomes": [],
|
|
221
|
+
"dirty_bound_outcomes": [],
|
|
217
222
|
"assurance_overridden": [],
|
|
218
223
|
"same_vendor_only": [],
|
|
219
224
|
"self_verified_by_author": [],
|
|
220
225
|
"same_session_different_harness": [],
|
|
226
|
+
# D6 (ctr_67b26eae6bff4b63): another identity's reading of a claim, asked for; listed
|
|
227
|
+
# here and nowhere a verdict is counted
|
|
228
|
+
"assessments": [],
|
|
221
229
|
"formatted_statements": [],
|
|
222
230
|
"redactions": {"count": 0, "ids": []},
|
|
223
231
|
# absent and empty mean different things (an absent key is the starter default
|
|
@@ -298,6 +306,12 @@ def report(ledger, recheck: bool = False, cwd: Optional[str] = None, timeout: Op
|
|
|
298
306
|
if backed in ("static", "attested"):
|
|
299
307
|
# a clean static gate is not evidence that the thing runs
|
|
300
308
|
rep["static_only_outcomes"].append({**entry, "assurance": backed})
|
|
309
|
+
# the writer's own word that its receipts ran on a tree no sha reproduces: no
|
|
310
|
+
# lane checks those out, so a practice of it is a PM's question per author (S3)
|
|
311
|
+
heads = [item.get("sha") for item in b.get("evidence") or []
|
|
312
|
+
if isinstance(item, dict) and item.get("kind") == "commit" and item.get("dirty")]
|
|
313
|
+
if heads:
|
|
314
|
+
rep["dirty_bound_outcomes"].append({**entry, "user": a.get("user"), "head": heads[0]})
|
|
301
315
|
# a measure, not a tier: every claim whose only verifiers are agents of its own
|
|
302
316
|
# vendor, whether the ledger's policy lets that reach `verified` or not
|
|
303
317
|
if info["verified_by"] and not info.get("cross_vendor") and not info.get("self_verified_by_author") \
|
|
@@ -351,6 +365,17 @@ def report(ledger, recheck: bool = False, cwd: Optional[str] = None, timeout: Op
|
|
|
351
365
|
claim = by_id.get(v["body"].get("claim"))
|
|
352
366
|
if claim is None:
|
|
353
367
|
continue
|
|
368
|
+
if is_assessment(v): # a reading, not a verdict: its own column, never the matrix
|
|
369
|
+
rep["assessments"].append({
|
|
370
|
+
"id": v["id"], "claim": claim["id"], "verdict": v["body"]["verdict"],
|
|
371
|
+
"by": v["author"].get("harness"), "vendor": v["author"].get("vendor"),
|
|
372
|
+
"user": v["author"].get("user"), "ts": v["ts"],
|
|
373
|
+
"lineage": ("another lineage" if lineage_differs(claim["author"], v["author"])
|
|
374
|
+
else "same lineage: never counted"),
|
|
375
|
+
"note": str(v["body"].get("note") or "")[:160], "cited": list(v["body"].get("cited") or []),
|
|
376
|
+
"statement": claim["body"]["statement"][:120],
|
|
377
|
+
})
|
|
378
|
+
continue
|
|
354
379
|
verdict = v["body"]["verdict"]
|
|
355
380
|
key = f"{claim['author'].get('vendor')}->{v['author'].get('vendor')}"
|
|
356
381
|
cell = rep["lineage_matrix"].setdefault(key, {"verified": 0, "refuted": 0, "inconclusive": 0})
|
|
@@ -463,6 +488,11 @@ def report(ledger, recheck: bool = False, cwd: Optional[str] = None, timeout: Op
|
|
|
463
488
|
rep["recheck"].append(entry)
|
|
464
489
|
# what the reliability measurements leave out, and why (the PE's ruling, item 4)
|
|
465
490
|
rep["not_measured"] = {"superseded": len(rep["superseded"]), "artefact": len(rep["withdrawn"])}
|
|
491
|
+
# the vision's numbers for a window, recomputable by anyone with the shards
|
|
492
|
+
# (ctr_13190a200fbbd682; docs/BENCHMARK-PLAN.md section 3)
|
|
493
|
+
rep["measurement"] = measure_mod.measurement(
|
|
494
|
+
ledger, since, until, sees=lambda rec: _reader_sees(ledger, rec, by_id, reader_user),
|
|
495
|
+
assessment=assessment)
|
|
466
496
|
return rep
|
|
467
497
|
|
|
468
498
|
|
|
@@ -516,6 +546,9 @@ def format_report(rep: dict) -> str:
|
|
|
516
546
|
lambda r: f"{r['id']} [{r['by']}] {r['statement']} -- receipts: {', '.join(r['receipts'])}")
|
|
517
547
|
section("Outcome claims backed only by static evidence (static-pass/dynamic-fail risk)",
|
|
518
548
|
rep["static_only_outcomes"], lambda r: f"{r['id']} [{r['by']}, {r['assurance']}] {r['statement']}")
|
|
549
|
+
section("Outcome claims bound to a dirty tree (their commit is not what ran; no lane re-runs them at it)",
|
|
550
|
+
rep.get("dirty_bound_outcomes", []),
|
|
551
|
+
lambda r: f"{r['id']} [{r['by']}, {r['user']}] at {str(r['head'])[:12]} {r['statement']}")
|
|
519
552
|
section("Receipts whose assurance was declared above the computed default", rep["assurance_overridden"],
|
|
520
553
|
lambda r: f"{r['id']} [{r['by']}] declared {r['declared']}, computed {r['computed']}: {r['what']}"
|
|
521
554
|
+ (f" (cited by {', '.join(r['claims'])})" if r["claims"] else " (cited by no claim)"))
|
|
@@ -527,6 +560,9 @@ def format_report(rep: dict) -> str:
|
|
|
527
560
|
rep.get("same_session_different_harness", []),
|
|
528
561
|
lambda r: f"{r['id']} [{r['by']} -> {r['verified_by']}, {r['user']} session {r['session']}] "
|
|
529
562
|
f"{r['statement']}")
|
|
563
|
+
section("Assessments (a reading on request, never a check: they move no tier)", rep.get("assessments", []),
|
|
564
|
+
lambda r: f"{r['id']} on {r['claim']} [{r['verdict']} by {r['by']}, {r['vendor']}, {r['user']}; "
|
|
565
|
+
f"{r['lineage']}] {r['note']}" + (f" (cites {', '.join(r['cited'])})" if r["cited"] else ""))
|
|
530
566
|
section("Statements shaped like a document (injection risk)", rep.get("formatted_statements", []),
|
|
531
567
|
lambda r: f"{r['id']} [{r['by']}] {r['field']} starts a line with: {r['line']}")
|
|
532
568
|
section("Refuted", rep["refuted"], lambda r: f"{r['id']} {r['statement']} -- {'; '.join(r['reasons'])} (dependents: {r['dependents']})")
|
|
@@ -617,6 +653,9 @@ def format_report(rep: dict) -> str:
|
|
|
617
653
|
"same_lineage_agreement": rep["same_lineage_agreement"],
|
|
618
654
|
"staleness": rep["staleness"],
|
|
619
655
|
"judgment_calibration": rep["judgment_calibration"]}).rstrip("\n"))
|
|
656
|
+
if rep.get("measurement"): # a replica older than this section sends none
|
|
657
|
+
lines.extend(measure_mod.format_noise(rep["measurement"]))
|
|
658
|
+
lines.extend(measure_mod.format_measurement(rep["measurement"]))
|
|
620
659
|
if rep["recheck"]:
|
|
621
660
|
section("Evidence re-check", rep["recheck"],
|
|
622
661
|
lambda r: f"{r['claim']} {r['evidence']}: {r['outcome']} -- {r['detail']}"
|