This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

The armed gitleaks path detects and verifies at different scopes, so a benign recurrence of one fragment refuses every capture for good. toFindings locates the WHOLE reported value in the transcript and emits one finding per line that value crosses, but history.unsealedAugmented verifies each FRAGMENT by presence anywhere in the redacted text: a transcript that also quotes a standalone PEM end-of-key marker line, outside any key, keeps that line unsealed (detection never emitted a finding for it) while verification finds it, so Capture returns RedactionResidualError on every drain, the session is never stored, and its unredacted .raw copy stays staged indefinitely. Evidence: internal/adapter/gitleaks/gitleaks.go toFindings (the whole-needle strings.Index loop and its per-fragment split) and internal/core/history/history.go unsealedAugmented (the strings.Contains-anywhere check). The fix must give detection and verification one scope, so that any byte sequence verification looks for is a sequence detection located and sealed, while keeping the fail-closed contract TestAugmentUnlocatableReportFailsClosed pins.

issueresolvedmajoriss-2609020231145566

The armed gitleaks path detects and verifies at different scopes, so a benign recurrence of one fragment refuses every capture for good. toFindings locates the WHOLE reported value in the transcript and emits one finding per line that value crosses, but history.unsealedAugmented verifies each FRAGMENT by presence anywhere in the redacted text: a transcript that also quotes a standalone PEM end-of-key marker line, outside any key, keeps that line unsealed (detection never emitted a finding for it) while verification finds it, so Capture returns RedactionResidualError on every drain, the session is never stored, and its unredacted .raw copy stays staged indefinitely. Evidence: internal/adapter/gitleaks/gitleaks.go toFindings (the whole-needle strings.Index loop and its per-fragment split) and internal/core/history/history.go unsealedAugmented (the strings.Contains-anywhere check). The fix must give detection and verification one scope, so that any byte sequence verification looks for is a sequence detection located and sealed, while keeping the fail-closed contract TestAugmentUnlocatableReportFailsClosed pins.

Grounds

  • pursued: widening detection to the line scope rather than narrowing verification to the spans detection produced, because the narrow shape would store a repeated line of a real key verbatim while still reporting the capture clean, and because a span-position compare drifts under the identity placeholders Redact rewrites after the seal — which is why unsealedAugmented checks bytes and not positions. Shown wrong if over-redacting a boilerplate marker line ever costs more than it protects.

Frontmatter

idiss-2609020231145566
typeissue
lifecycleresolved
severitymajor