Skip to content

feat: content provenance tagging — trust-level metadata (Closes #1799) - #1833

Merged
Lexus2016 merged 1 commit into
mainfrom
evolution/issue-1799-provenance
Aug 8, 2026
Merged

feat: content provenance tagging — trust-level metadata (Closes #1799)#1833
Lexus2016 merged 1 commit into
mainfrom
evolution/issue-1799-provenance

Conversation

@Lexus2016

Copy link
Copy Markdown
Owner

Summary

Slice 2 of Task Shield (#1659). Implements content provenance tagging: every piece of external content entering the conversation context carries a trust-level metadata tag.

Trust Levels (highest → lowest)

Level Description Wrapped?
user User's own messages No
tool-invoked Results from explicitly invoked tools (terminal, read_file, etc.) No
external Search results, web pages, email bodies, MCP responses Yes — <untrusted-content>

Components

  • ProvenanceTag — immutable metadata dataclass (trust_level, source, url, fetched_at)
  • resolve_trust_level() — maps source strings to trust levels
  • tag_content() / TaggedContent.render() — tag and render content
  • wrap_external() — one-shot convenience for external content
  • TaggingRegistry — turn-level accumulator for auditing content entry points

Tests

20 tests covering: trust level resolution (user/tool/external/empty), tag rendering (external wraps, user/tool don't, URL inclusion), wrap_external, ProvenanceTag (rank ordering, frozen), TaggingRegistry (add, external_sources, has_external, min_trust_level, clear).

Line count

325 lines total (178 module + 147 tests) — exceeds 200-line self-merge cap. Needs human review.

Integration

Standalone module. Full integration with Task Shield pre-execution validator (#1798) happens when Slice 1 merges. Content entry points (web_search, web_extract, mcp_tool) can import and use tag_content() / wrap_external() immediately.

Closes #1799

Co-Authored-By: Hermes Evolution evolution@hermes.ai

…ontent

#1799 — Slice 2 of Task Shield (parent #1659).

Implements content provenance tagging: every piece of external content
entering the conversation context carries a trust-level metadata tag.

Three trust levels (highest to lowest):
- USER: user's own messages
- TOOL_INVOKED: results from tools the user explicitly invoked
- EXTERNAL: search results, web pages, email bodies, MCP responses

External content is wrapped in <untrusted-content> delimiters when
rendered so the LLM and downstream safety filters can distinguish trust
boundaries.

Components:
- ProvenanceTag: immutable metadata (trust_level, source, url, fetched_at)
- resolve_trust_level(): maps source strings to trust levels
- tag_content() / TaggedContent.render(): tag and render content
- wrap_external(): one-shot convenience for external content
- TaggingRegistry: turn-level accumulator for auditing content entry points

Standalone module — integration with the Task Shield pre-execution
validator (#1798) happens when Slice 1 merges.

Closes #1799

Co-Authored-By: Hermes Evolution <evolution@hermes.ai>
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

૮ >ﻌ< ა ci review

ran on 225039f

all good!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[SLICE 2] Task Shield: content provenance tagging — trust-level metadata on external content (parent #1659)

1 participant