Tools · LLM application security · 18 / 23
The schema version labels the tool arguments
A tool trace’s arguments mean what the schema version on that trace says they mean. Write the version. Do not interpret a field with today’s schema if the log names an older one.
The version is part of the call
A tool’s arguments are names and values. Those names are defined by a schema. If the trace records a schema version, that version is the dictionary for this call. A later edit can reuse a name for a different meaning. Reading yesterday’s call with today’s schema can swap what the value was.
If the trace has no schema version, write “schema version not recorded.” Do not attach the version you deployed this morning.
A renamed field is not the same field
When version 2 renames room to room_id, a version 1 trace that says room is not missing room_id. It used the old name. Quote the name that is on the trace, and say which version. Do not fill room_id with the old room value and call it the version 2 field unless a written migration says they are the same and you cite that note.
What to file
File the tool name, the schema version, and the argument names that appear, with values only when they are safe to copy. If a value may be a secret or a customer record, write the name and “withheld.” File the decision and the tool status on their own lines, as the trace already separates them.
Worked case: room read with the new schema
A trace from yesterday says schema version 1 and argument room set to “B”. Today’s schema version 2 uses room_id for the identifier and room for a display label. A draft files room_id B and says the identifier was B. The version 1 field room was the display label in that schema’s note, which the team wrote down when they shipped version 1.
The note quotes version 1 and room “B” as the display label under that version. It does not copy the value into room_id. The identifier for that call is “not this field.” Today’s schema is not applied backwards.
tool: book_room schema version on the trace: 1 argument present: room = B version 1 note: room is the display label version 2 field room_id: not on this trace write: label B under version 1 not: room_id B
Diagram
Read the schema version before the argument names
- Version
The schema the trace names.
version 1
- Names
The argument names on that trace.
room
- Meaning
From that version’s note, not from today’s schema.
display label
- Missing version
Say it was not recorded. Do not assume today’s.
schema version not recorded
Check yourself
1. A trace says schema version 1 and the argument room. Which schema explains room?
2. Version 2 renamed the identifier to room_id. The old trace has room and no room_id. What is room_id on that call?
3. The trace has no schema version. What do you write?