{"version":"2.1.223","anchor":"new-unclassified-message-origin-kind-for-injected-turns","canonical_anchor":"new-unclassified-message-origin-kind-for-injected-turns","heading":"New \"unclassified\" message-origin kind for injected turns","tier":"internal","area":"Elsewhere","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.223\/e\/new-unclassified-message-origin-kind-for-injected-turns","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.223","markdown":"### New \"unclassified\" message-origin kind for injected turns\n\nInjected turns with no traceable source are now explicitly tagged and framed as non-user content.\n\n**What**\n\nInjected turns whose ingress classification finds no provenance now carry an explicit origin kind instead of an undefined one, and their content is framed to the model as coming from a non-user source.\n\n**Details**\n\n- The SDK origin union gains `w.literal(\"unclassified\")`, documented as \"Injected turn whose ingress classification found no provenance. Framed by the harness as a non-user source in both drains; never presumed human, never host-replayed.\"\n- Synthetic turns whose inbound classification produced nothing are tagged `{ kind: \"unclassified\" }` rather than left undefined.\n- Such content is prefixed with the existing non-user banner text before it reaches the model.\n- The banner literal was hoisted into a shared constant and is only prepended if not already present.\n\n**Evidence**\n\n`Injected turn whose ingress classification found no provenance.`\n\n- Area: Elsewhere\n- Tier: Under the hood\n- Useful: 2\/5\n- Signal: 0\/5"}