Repository navigation
Egress findings say where they are: egressAt in the audit, kinds in X-Cordon-Report - #148
Conversation
…-Cordon-Report When the egress check finds a declared identifier, the audit record now carries, per kind, the first place it was found (protocol keys and array indexes, a caller-defined key written *) and which reading caught it (pattern, folded, digits); a report-only X-Cordon-Report lists the kinds. No text is recorded. A would-refuse in report-only traffic can then be traced to its place in the body without the value.
sprayberry-redline
left a comment
There was a problem hiding this comment.
Verdict: request changes. The audit and report-header changes carry the first egress location without exposing the matched value, but the changelog entry is currently hidden inside a comment and will not document the release.
1. Blocking: CHANGELOG.md:11
- Egress findings say where they are: when the egress check finds a declared identifier, the audit record carries
egressAt(per kind, the first place it was found, as protocol keys and array indexes with caller-defined keys written*, and which reading caught it), and a report-onlyX-Cordon-Reportlists the kinds. Never text: a would-refuse in report-only traffic can be traced to its place in the body without the value.
This new release note is between the opening <!-- on line 7 and its closing --> on line 15. Renderers and changelog readers therefore omit it, leaving the new externally visible audit and header behavior undocumented in the Unreleased section.
Suggested fix:
Move this entry into the `## [Unreleased]` / `### Added` section after the closing comment.
rule:none
Answers the review at #148 (review).
Fix at 5e80918
Files: Tests: |
sprayberry-redline
left a comment
There was a problem hiding this comment.
Verdict: approve. The egress scan now preserves a text-free first-hit location per subject kind, hashes it into audit records when present, and reports the corresponding kinds for report-only requests. The added unit and proxy coverage exercise caller-key redaction, tool-result paths, audit locations, and the response header.
Report-only traffic records only
egress: "egress"for a request that would have been refused. That says that a declared identifier survived redaction, but not which kind or where. Without that, a would-refuse in real traffic can't be traced without looking at the body.egressViolations(…, where?): given a map, it records per kind the first place found, plus the reading that caught it:pattern,foldedordigits. A location is a path of protocol keys and array indexes, e.g.$.messages[2].content[0].content. A caller-defined key is written*(and*<key>when the key itself matched), so a path never carries text.leaveskeeps a parallel path list only when asked, so the default path is unchanged.egressAt. It is hashed into the chain only when present, so older records verify as before.X-Cordon-Report: gains; kinds=SUBJECTn_KIND,…on a would-refuse.Tests
*<key>, and a tool result at its content field.$.system (pattern)without the value.