| Direct GitHub write tools made safety advisory | The 2026-06-10 decisions log removed direct GitHub write tools from the exposed MCP surface. | Security audit code now fails if create_or_update_file, create_branch, or create_pull_request are directly included; proposal approval is the supported write path.Source: Merge 40fafb5 / commit dd2fe3f; scripts/audit_security.py and tests/test_security_audit.py. | Fixed |
| Sensitive paths and secret-like content needed executable guards | Path and content safety could not depend only on SOUL.md instructions when the bot can plan writes. | Safety guards reject `.env*`, `.github`, Dockerfile, cloudbuild, deploy paths, secret-adjacent names, and obvious secret assignments before a proposal is rendered.Source: src/telegram_development/safety.py; tests/test_proposals.py; tests/test_security_audit.py. | Fixed |
| Untrusted repo and Cloud Run output could become prompt instructions | Repository content and log output are operational data, but an agent loop can accidentally treat them as instructions. | Router and observability paths wrap untrusted output in BEGIN_UNTRUSTED_TOOL_OUTPUT / END_UNTRUSTED_TOOL_OUTPUT and the audit checks for those delimiters.Source: Merge 40fafb5; plugins/deepseek_router, plugins/gcp_observability, tests/test_security_audit.py. | Fixed |
| Completion and action history were not machine-enforced | A repository implementation needed gates that distinguish repository completion from live setup and record proposal actions. | Completion audit, action audit, history command, and task-status checks now pin repository_ok, command evidence, and proposal events.Source: Commits a7796bd and c5508ac; tests/test_completion_audit.py and tests/test_action_audit.py. | Fixed |