Nothing open on GitHub. Fix merged in #19715 on 4 May 2026. Check it covers your case.
The short answer
0open issues
0open PRs
4items grouped
- Known?
- Yes. 4 related items grouped here, 1 issue already closed.
- Fix event
- A fix was merged to main in PR #19715. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
resolved, deciding PR #19715. That is separate from the fix event. - Still open
- Nothing open on GitHub.
A bug was identified where ENV/JSON regex patterns in secret redaction caused false positives on source code files. These members address adding a code_file parameter and restricting redaction logic to avoid corrupting code output.
Open issues0
Open PRs0
Fixes on record
-
#19715 fix(redact): add code_file param to skip false-positive ENV/JSON patterns
files:
agent/redact.py,tools/file_tools.pyShow the diff
-
agent/redact.py@@ -305,13 +305,18 @@ def _redact_form_body(text: str) -> str: return _redact_query_string(text.strip()) -def redact_sensitive_text(text: str, *, force: bool = False) -> str: +def redact_sensitive_text(text: str, *, force: bool = False, code_file: bool = False) -> str: """Apply all redaction patterns to a block of text. Safe to call on any string -- non-matching text passes through unchanged. Disabled by default — enable via security.redact_secrets: true in config.yaml. Set force=True for safety boundaries that must never return raw secrets regardless of the user's global logging redaction preference. + + Set code_file=True to skip the ENV-assignment and JSON-field regex + patterns when the text is known to be source code (e.g. MAX_TOKENS=*** + constants, "apiKey": "test" fixtures). Prefix patterns, auth headers, + private keys, DB connstrings, JWTs, and URL secrets are still redacted. """ if text is None: return None @@ -325,17 +330,18 @@ def redact_sensitive_text(text: str, *, force: bool = False) -> str: # Known prefixes (sk-, ghp_, etc.) text = _PREFIX_RE.sub(lambda m: _mask_token(m.group(1)), text) - # ENV assignments: OPENAI_API_KEY=[redacted:secret-assignment] - def _redact_env(m): - name, quote, value = m.group(1), m.group(2), m.group(3) - return f"{name}={quote}{_mask_token(value)}{quote}" - text = _ENV_ASSIGN_RE.sub(_redact_env, text) - - # JSON fields: "apiKey": "value" - def _redact_json(m): - key, value = m.group(1), m.group(2) - return f'{key}: "{_mask_token(value)}"' - text = _JSON_FIELD_RE.sub(_redact_json, text) + # ENV assignments: OPENAI_API_KEY=*** (skip for code files — false positives) + if not code_file: + def _redact_env(m): + name, quote, value = m.group(1), m.group(2), m.group(3) + return f"{name}={quote}{_mask_token(value)}{quote}" + text = _ENV_ASSIGN_RE.sub(_redact_env, text) + + # JSON fields: "apiKey": "***" (skip for code files — false positives) + def _redact_json(m): + key, value = m.group(1), m.group(2) + return f'{key}: "{_mask_token(value)}"' + text = _JSON_FIELD_RE.sub(_redact_json, text) # Authorization headers text = _AUTH_HEADER_RE.sub( -
tools/file_tools.py@@ -570,7 +570,7 @@ def read_file_tool(path: str, offset: int = 1, limit: int = 500, task_id: str = # ── Redact secrets (after guard check to skip oversized content) ── if result.content: - result.content = redact_sensitive_text(result.content) + result.content = redact_sensitive_text(result.content, code_file=True) result_dict["content"] = result.content # Large-file hint: if the file is big and the caller didn't ask @@ -993,7 +993,7 @@ def search_tool(pattern: str, target: str = "content", path: str = ".", if hasattr(result, 'matches'): for m in result.matches: if hasattr(m, 'content') and m.content: - m.content = redact_sensitive_text(m.content) + m.content = redact_sensitive_text(m.content, code_file=True) result_dict = result.to_dict() if count >= 3:
-
2 PRs closed without merging
From the close comments: closed without comment 1 · merged via another change 1
Closed issues · 1
- Closed#15934bug(redact): ENV/JSON regex patterns cause false positives on source code files
How this cluster was grouped
-
Link evidence (
structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference. -
Pairwise link density
0.50: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the LabAt a glance
- Merged PRs
- #19715
- Closed issues
- 1
- Attempts
- 2 PRs closed without merging
- Fix link checked
- 4 May 2026