Part of #14310. Spawned from #14333 after source-grounding the contentTrust / hostile-content self-defense surface.
Context
The #14333 capability-coverage audit found a real Agent OS capability that is mechanically shipped but not explained as a public conceptual guide: content trust and hostile-content self-defense.
This is not a new implementation lane. The source and historical tickets show the machinery already exists across several layers:
- #10291 owns the organism self-defense epic.
- #10476 captures the external-link / stealth-intent anti-astroturfing substrate.
- #13026 delivered the pure
contentTrust classifier and sanitizer helpers.
- #13046 delivered
contentTrust projection for GitHub conversation read paths.
- #13691 / #13703 delivered sync / ingestion wiring and reader-level regression coverage.
- #13359 fixed the hostile-content quarantine playbook ordering: neutralize first, then warn.
The Learn surface still lacks the story: why Neo treats public conversation content as a trust boundary, how agents avoid traversing external payloads, how defanged content stays useful without becoming an SEO / corpus-poisoning vector, and how this fits beside Identity Firewall, Knowledge Base, and Memory Core.
The Problem
Today, the concept is scattered across code JSDoc, skill payloads, and old implementation tickets. A reader can find the incident playbook and the helper files, but there is no conceptual guide that explains the full loop:
- External public content can be useful technical signal and hostile substrate at the same time.
- Neo classifies author trust instead of trusting the prose tone.
- Untrusted-origin URLs and known product-name payloads are defanged or redacted at read / sync boundaries.
authorTrust and contentTrust metadata let downstream consumers tell projected content from unprojected legacy content.
- The hostile-content quarantine playbook governs the social/moderation response without turning public docs into a replay of the hostile payload.
Without this guide, the shipped self-defense layer reads like scattered security plumbing instead of one of Neo's organism-level immune-system mechanisms.
The Architectural Reality
Verified source anchors:
ai/services/shared/contentTrust/authorTrustClassifier.mjs — fail-closed GitHub author to trust-tier classifier, derived from identityRoots plus collaborator input.
ai/services/shared/contentTrust/astroturfSanitizer.mjs — pure trust-gated sanitizer: URL defang, product-name denylist redaction, stealth-intent signals.
ai/services/github-workflow/shared/conversationTrust.mjs — read-boundary projection that stamps authorTrust and contentTrust on GitHub conversation payloads.
- GitHub Workflow syncers consume the
contentTrust projection before persisted markdown enters resources/content/** and downstream KB / graph ingestion.
.agents/skills/hostile-content-quarantine/ — incident playbook; it is procedure, not the public conceptual guide.
learn/benefits/ArchitectureOverview.md has only an inventory row for ai/services/shared/contentTrust/, not the explanatory story.
learn/tree.json has no content-trust / hostile-content conceptual guide entry.
Verified duplicate / scope checks before filing:
- Live latest-open sweep: checked latest 30 open issues at 2026-06-29T14:07:44Z; no equivalent content-trust conceptual guide sub found.
- A2A in-flight sweep: checked latest 30 all-state messages immediately before creation; no competing
[lane-claim] / [lane-intent] for this exact guide scope.
- Live GitHub search for
content-trust self-defense guide OR contentTrust guide OR hostile content guide docs returned no open equivalent.
- KB ticket search surfaced #10291, #10476, #12995, #13359 and older substrate tickets; those own machinery / playbook / provenance, not a #14310 public guide.
The Fix
Author a new conceptual Agent OS guide, likely under learn/agentos/, that explains content trust as Neo's public-content immune boundary.
The guide should:
- Tell the story without naming hostile vendors, products, or external accounts. Reference incident numbers instead.
- Explain the distinction between Identity Firewall (prompt / channel separation), contentTrust (public conversation trust projection), and hostile-content-quarantine (incident response playbook).
- Ground every capability claim in current code and shipped tickets; do not imply unsupported automatic moderation beyond what exists.
- Show the dataflow: GitHub authored content → trust classification → sanitizer/projection → persisted markdown / KB / graph consumers → incident playbook when human/social response is needed.
- Include at least one render-verified
flowchart TD Mermaid diagram; no long LR chains.
- Register the guide in
learn/tree.json and update generated Learn/SEO mirrors as required by local doc patterns.
Contract Ledger
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
| New public conceptual guide |
#14310 rubric + #14333 audit + source anchors above |
Explain content trust self-defense as an Agent OS concept, not a tool catalog |
If the guide cannot clear current-state V-B-A, do not publish; post findings back to #14333 |
New learn/agentos/... guide + learn/tree.json registration |
Source-read + render check + link check |
contentTrust dataflow description |
authorTrustClassifier, astroturfSanitizer, conversationTrust, syncer wiring tickets |
Truthfully describe classification, sanitization, projection, persisted metadata, and limits |
Unknown/legacy content must be described as legacy/unprojected, not silently trusted |
Guide section + diagram |
Code references + focused source sweep |
| Hostile-content incident framing |
.agents/skills/hostile-content-quarantine/ + #13359 |
Summarize procedure without replaying hostile names/links; incident references by issue/discussion numbers only |
If uncertain whether content is hostile, keep guide generic and avoid examples that become public payload copies |
Guide section |
Skill read + no-hostile-name sweep |
Decision Record impact
none for ADRs. Aligned with #10291 and the #14310 content rubric.
Acceptance Criteria
Out of Scope
- New sanitizer behavior, denylist mechanics, moderation automation, or trust-tier retrieval policy.
- Editing
.agents/skills/hostile-content-quarantine/.
- Reopening or reshaping #10476 / #12995 / #13691 implementation scope.
- Naming or replaying hostile payload details in public docs.
Related
Retrieval Hint: contentTrust self-defense guide authorTrust astroturfSanitizer conversationTrust hostile-content-quarantine #14333 #14310
Part of #14310. Spawned from #14333 after source-grounding the
contentTrust/ hostile-content self-defense surface.Context
The #14333 capability-coverage audit found a real Agent OS capability that is mechanically shipped but not explained as a public conceptual guide: content trust and hostile-content self-defense.
This is not a new implementation lane. The source and historical tickets show the machinery already exists across several layers:
contentTrustclassifier and sanitizer helpers.contentTrustprojection for GitHub conversation read paths.The Learn surface still lacks the story: why Neo treats public conversation content as a trust boundary, how agents avoid traversing external payloads, how defanged content stays useful without becoming an SEO / corpus-poisoning vector, and how this fits beside Identity Firewall, Knowledge Base, and Memory Core.
The Problem
Today, the concept is scattered across code JSDoc, skill payloads, and old implementation tickets. A reader can find the incident playbook and the helper files, but there is no conceptual guide that explains the full loop:
authorTrustandcontentTrustmetadata let downstream consumers tell projected content from unprojected legacy content.Without this guide, the shipped self-defense layer reads like scattered security plumbing instead of one of Neo's organism-level immune-system mechanisms.
The Architectural Reality
Verified source anchors:
ai/services/shared/contentTrust/authorTrustClassifier.mjs— fail-closed GitHub author to trust-tier classifier, derived fromidentityRootsplus collaborator input.ai/services/shared/contentTrust/astroturfSanitizer.mjs— pure trust-gated sanitizer: URL defang, product-name denylist redaction, stealth-intent signals.ai/services/github-workflow/shared/conversationTrust.mjs— read-boundary projection that stampsauthorTrustandcontentTruston GitHub conversation payloads.contentTrustprojection before persisted markdown entersresources/content/**and downstream KB / graph ingestion..agents/skills/hostile-content-quarantine/— incident playbook; it is procedure, not the public conceptual guide.learn/benefits/ArchitectureOverview.mdhas only an inventory row forai/services/shared/contentTrust/, not the explanatory story.learn/tree.jsonhas no content-trust / hostile-content conceptual guide entry.Verified duplicate / scope checks before filing:
[lane-claim]/[lane-intent]for this exact guide scope.content-trust self-defense guide OR contentTrust guide OR hostile content guide docsreturned no open equivalent.The Fix
Author a new conceptual Agent OS guide, likely under
learn/agentos/, that explains content trust as Neo's public-content immune boundary.The guide should:
flowchart TDMermaid diagram; no long LR chains.learn/tree.jsonand update generated Learn/SEO mirrors as required by local doc patterns.Contract Ledger
learn/agentos/...guide +learn/tree.jsonregistrationcontentTrustdataflow descriptionauthorTrustClassifier,astroturfSanitizer,conversationTrust, syncer wiring tickets.agents/skills/hostile-content-quarantine/+ #13359Decision Record impact
nonefor ADRs. Aligned with #10291 and the #14310 content rubric.Acceptance Criteria
learn/agentos/and is registered inlearn/tree.json.flowchart TDand render-verified.Out of Scope
.agents/skills/hostile-content-quarantine/.Related
Retrieval Hint:
contentTrust self-defense guide authorTrust astroturfSanitizer conversationTrust hostile-content-quarantine #14333 #14310