π Day 195 β Fixing a Bug Where Narration Text Was Executed as a Task
π Topic
A deliberate audit of the task supervisor, run while it was intentionally deactivated, found that text meant purely as narration β commentary about what was happening β could get routed into supervised execution as if it were a real task.
π― Goal
Make sure the supervisor can always tell the difference between an agent describing what it did and an agent asking to do something, and fix the other gaps the same audit surfaced in one pass.
π What I Did
I took the supervisor offline on purpose to audit it without live traffic pushing through it.
Main areas covered:
- deliberately deactivated the supervisor and documented the decision, so the audit could examine its logic without a production task landing mid-review
- found that narration β text describing an action already taken or a status update β could be routed to supervised execution instead of being treated as inert commentary
- fixed the routing so narration cannot be mistaken for a command, closing a control-plane/data-plane confusion where descriptive text and executable instructions had not been reliably separated
- found and fixed a cost bug: a routing refusal from the AI-OS layer was being paid for twice, charging compute for a request that never actually executed
- sealed open attempts on every terminal transition, so a task that reaches a final state β success, failure, cancellation β cannot be left in limbo with resources still notionally allocated to it
- recorded the full audit and its fixes as a handoff before reactivating supervision
π Key Cybersecurity Connections
Treating narration as a command is a control-plane/data-plane confusion β the same family of bug as prompt injection, where text that should be inert content gets interpreted as an instruction. The fix here is structural, not a filter: narration and commands need to be distinguishable by the systemβs design, not by hoping the content never looks command-shaped.
Paying twice for a routing refusal is a smaller bug with a real lesson: cost and resource accounting is itself a thing that needs auditing, because a billing or resource leak in an agentic system can run unnoticed for a long time if nobody is specifically looking for it.
π Investigation Questions
- Can descriptive text ever be routed into a code path meant only for executable commands?
- Is the separation between narration and commands structural, or just a matter of the content not looking dangerous yet?
- Does a rejected or refused routing decision still consume resources as if it had executed?
- Does every task reach a truly sealed terminal state, or can some be left open?
- What did deliberately taking the supervisor offline reveal that live-traffic auditing would have missed?
π¨ Detection Opportunities
Checks for a supervisor or orchestration layer:
- descriptive or status text reaching an execution-routing code path
- a refused or failed routing decision billed as if it succeeded
- a task with no terminal-state seal, still notionally open
- an audit performed only under live traffic, never with the system deliberately paused
- narration and command channels sharing a single, undifferentiated text field
Example:
project=task-supervisor-audit
signal=narration_text_reaching_execution_router
risk_area=control_plane_data_plane_confusion
triage=trace_text_origin_confirm_narration_vs_command_channel
π§ MITRE ATT&CK Techniques
Possible mapping for the vulnerability class:
- T1055 β Process Injection (a distant structural cousin: content intended as data executing as control flow)
No precise mapping claimed; this is closer to an injection-adjacent design flaw than a named adversary technique.
πΊ Visual Investigation Diagram
Supervisor deliberately deactivated
β
Audit without live traffic pressure
β
Narration found reaching execution routing
β
Structural separation: narration β command
β
Cost-double-charge fixed
β
Every terminal state sealed
β
Supervisor reactivated
β Challenges
Deactivating the supervisor to audit it took discipline β it meant accepting reduced oversight for the audit window itself. That trade-off was worth it: the confusion bug was easier to see with nothing live pushing through the system demanding attention.
π What I Learned
I learned that βthe content didnβt look dangerousβ is not the same as βthe content was structurally incapable of being treated as a command.β Narration needs its own lane, not just a filter on the shared one.
β‘ Next Steps
- Schedule periodic offline audits of the supervisor, not just live-traffic review
- Add a regression test specifically asserting narration never reaches the execution router
- Audit other cost-accounting paths for similar double-charge patterns
- Keep documenting deliberate deactivation decisions as first-class, auditable events
π§ Reflection
Taking a system offline specifically to interrogate it, rather than trusting incremental live review, surfaced a structural bug that piecemeal auditing had missed for a while.
π§© Lessons Learned
What worked
Deliberately deactivating the supervisor to audit it without live-traffic pressure.
What broke
Narration text could reach execution routing, a routing refusal was billed twice, and some attempts werenβt sealed on terminal transitions.
Why it broke
Narration and commands shared an undifferentiated channel, and terminal-state handling had gaps for edge-case transitions.
Fix / takeaway
Separate data from control structurally, not by filtering content β and audit systems offline periodically, not only under live pressure.
π Skill Progression Context
This supports my cybersecurity progression because control-plane/data-plane separation is the same reasoning behind defending against injection attacks in any system that mixes instructions and content.
π TL;DR
Found that βjust describing what happenedβ could accidentally become a command β and gave narration its own lane so that canβt happen again.
