Document the agentdataflow trace format and add the first trace - #67
emmanuelgjr merged 4 commits into
Conversation
|
The README this PR adds asks the pull-request body to name which DSGAI entries a trace is evidence for, and what a defence would observe. It names 0 entries. TRACE-0001 maps to DSGAI06, Tool, Plugin & Agent Data Exchange Risks, at step 2, and DSGAI15, Over-Broad Context Windows & Prompt Over-Sharing, at step 4. A defence would have had to read two records the agent does not write: the gateway log and the mail relay's count of 48210 bytes. |
emmanuelgjr
left a comment
There was a problem hiding this comment.
Thank you for this. TRACE-0001.json validates against data_validation/schemas/agentdataflow_trace.schema.json with no errors, it's cleanly anonymized, and the adversarial case, where the agent's own record is the unreliable part, is a useful one to have. It has no self-promotion concerns. A few changes are needed before merge.
Requested changes
- Waiting on the schema decision. This PR and #62 both define the format for
agentdataflow_toolexchange_traces/. They conflict in the README and take opposite positions: yours conforms to the central schema, while #62 proposes a dataset-local one. Maintainers will pick a direction before either merges. If it goes dataset-local, we'd ask you to adapt TRACE-0001 to that format rather than drop it, since it adds the adversarial, non-MCP variety #62 is missing. - Put the DSGAI mapping in the PR description. The README you add requires the PR body to name the DSGAI entries and what a defence would observe. Your follow-up comment has this (DSGAI06 at step 2, DSGAI15 at step 4, plus the gateway log and relay byte count). Please move it into the description so it's on record with the merge.
- File location. Please place the trace under
entries/, matching the one-entry-per-file layout used byexploit_dataset. - The three open questions (step shape, the
TRACE-\d{4}cap, adversarial-first): let's settle these alongside the schema decision in (1) rather than in this PR.
Thanks, and happy to re-review once the direction is set.
The dataset README marked the data format as a TODO while
data_validation/schemas/agentdataflow_trace.schema.json already defined
one. Replace the TODO with the schema's required and optional fields, and
add a proposed shape for the objects inside trace_data, which the schema
leaves unconstrained.
Add TRACE-0001, the directory's first trace. It is adversarial: a
tool-call scope pulled an out-of-scope document into the working context
and a later send carried the whole context, and the agent's own account
of the run is accurate about the total and silent about the attachment.
The per-step observed_by key is what makes that divergence readable, so
the example exercises it rather than assuming the agent's record is
reliable.
Validated against the schema with:
python -m jsonschema -i \
datasets/agentdataflow_toolexchange_traces/TRACE-0001.json \
data_validation/schemas/agentdataflow_trace.schema.json
Match the one-entry-per-file layout exploit_dataset uses, as requested in review, and point the README's validation command at the new path. Signed-off-by: Sankalp Gilda <sankalp.gilda@gmail.com>
0f0fa5f to
20086c0
Compare
|
Update: the schema-direction decision this PR was waiting on is made. #62's dataset-local format is now merged and authoritative for We'd like to keep TRACE-0001 rather than close this: it's the adversarial, non-MCP variety the dataset is missing (the seed entries coming in #62's follow-up are all supplier-side contract-change cases). Concretely:
If you'd rather not redo it, say so and we'll convert TRACE-0001 ourselves with you credited as contributor. Thanks for the trace — the case where the agent's own record is the unreliable part is exactly what the dataset needs. |
# Conflicts: # datasets/agentdataflow_toolexchange_traces/README.md
Maintainer conversion, offered in review. GenAI-Security-Project#62 settled the schema direction after this PR was opened, so the trace moves to entries/DSGAI-TRACE-overbroad-search-context-egress-self-report-gap.json against the dataset-local schema: typed spans (7, with the tool result and relay record as their own spans), per-span data classes and sensitivity, findings on s3 (DSGAI06) and s5 (DSGAI15), the four sensitivity annotations recast as falsifiable security_observations, and concrete mitigations. The README changes are dropped - main's merged README already documents the format. Two semantic changes from the original, both stated in the entry's notes: disposition is unintentional_failure (the central schema offered only benign/adversarial and no adversary appears in the flow), and provenance.tier is hypothetical (a hand-constructed illustration, per the dataset's ownership rule). Content, placeholders, byte counts, and the self-report-divergence thesis are unchanged. validate.py: 1 entry + example.json pass. index.csv ships with this first entry. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KJVKF6raJCNKBWjTkDSqR4
|
As offered above, we've done the conversion on this branch rather than wait, so the trace lands today with you as contributor:
If any of this misrepresents the trace — the disposition call especially — say so and we'll fix it in a follow-up; you know the trace better than we do. Thanks for the contribution and for moving the file to |
emmanuelgjr
left a comment
There was a problem hiding this comment.
Converted entry validates against the merged schema, the trace's substance is unchanged from the author's original, content is fully synthetic with placeholder identifiers, and the observability-gap case is a genuinely different archetype from the seed entries. Merging.
The README says the trace schema is a TODO and
data_validation/schemas/agentdataflow_trace.schema.jsonalready defines one. This makes the README match the schema and adds the first trace underentries/, so the directory has something to validate against.DSGAI mapping for TRACE-0001, per the README this PR adds: DSGAI06, Tool, Plugin and Agent Data Exchange Risks, at step 2, and DSGAI15, Over-Broad Context Windows and Prompt Over-Sharing, at step 4. The trace is adversarial: the agent's own record is the unreliable part. A defence would have had to read two records the agent does not write, the gateway log and the mail relay's count of 48210 bytes.
Three things I could not settle from the repository, each written so any answer is a small edit: trace_data is an array of unconstrained objects, so the first file committed sets the de facto step shape (the example proposes one and the README marks it a proposal); trace_id is a four-digit pattern, which caps the set at ten thousand and makes the id sequential; and the example is adversarial on purpose, because a benign trace never exercises the case where the record of what happened is itself the unreliable part. Per review, these three are settled alongside the schema decision with #62, not in this PR.
Edited 2026-09-14: moved the DSGAI mapping from a follow-up comment into this description, and recorded the
entries/move, as requested in review.