Continuation of the witness-suite exchange from crewAIInc/crewAI#5888 (comments 5390632120, 5554236905, 5557676336), moved here because the issue author asked for that sub-thread to be parked while a maintainer decides PR #6030 placement.
Suite: proofs/crewai-5888-pre-tool-call/test_witness_binding.py (tests 7 and 8, each with a RED implementation).
Test 7 — config-perturbation replay. @XuebinMa reports agent-guard main now writes the bound into the ledger before the wait (ApprovalRecord.expires_at, derived from the record's own created_at plus the configured timeout; older records parse as expires_at: None). That is the bite point test 7 needs. Requested: pin the record shape at a commit (a JSON fixture of one pending record with created_at, expires_at, timeout) and I will point test 7's replay at it and record the result here.
Test 8 — reproducible from the persisted set alone. Recorded as RED per the implementer's own statement: the verdict now carries AnomalyEvidence { witnesses, truncated, ... } (auditable by attached evidence), but the decision is still made against a destructively compacted in-memory history, so two evaluators holding identical durable witnesses can still disagree. The separate finding that AnomalyTriggered and AgentLocked went to the SIEM sink only (audit file read zero locks) is noted as the duller failure underneath: witnesses not delivered rather than projection not re-runnable. Both sinks now receive both records per the same report.
Boundary: source facts are the implementer's, not independently run here. Nothing in this issue is a claim about crewAI core.
Continuation of the witness-suite exchange from crewAIInc/crewAI#5888 (comments 5390632120, 5554236905, 5557676336), moved here because the issue author asked for that sub-thread to be parked while a maintainer decides PR #6030 placement.
Suite:
proofs/crewai-5888-pre-tool-call/test_witness_binding.py(tests 7 and 8, each with a RED implementation).Test 7 — config-perturbation replay. @XuebinMa reports agent-guard
mainnow writes the bound into the ledger before the wait (ApprovalRecord.expires_at, derived from the record's owncreated_atplus the configured timeout; older records parse asexpires_at: None). That is the bite point test 7 needs. Requested: pin the record shape at a commit (a JSON fixture of one pending record withcreated_at,expires_at, timeout) and I will point test 7's replay at it and record the result here.Test 8 — reproducible from the persisted set alone. Recorded as RED per the implementer's own statement: the verdict now carries
AnomalyEvidence { witnesses, truncated, ... }(auditable by attached evidence), but the decision is still made against a destructively compacted in-memory history, so two evaluators holding identical durable witnesses can still disagree. The separate finding thatAnomalyTriggeredandAgentLockedwent to the SIEM sink only (audit file read zero locks) is noted as the duller failure underneath: witnesses not delivered rather than projection not re-runnable. Both sinks now receive both records per the same report.Boundary: source facts are the implementer's, not independently run here. Nothing in this issue is a claim about crewAI core.