{
  "recommendation": {
    "version": "0.29.0",
    "manifest_change": "Set adapter/omp-spt.toml [adapter].min_spt_core_version to \"0.29.0\" for the retained manifest as written.",
    "reason": "The retained manifest uses relative [session].commune_dir = \".spt\" (adapter/omp-spt.toml:604-606). The published echo-commune contract says per-endpoint resolution of a relative commune_dir was hardened in spt-core v0.29.0: it resolves against the endpoint's recorded cwd, never the daemon cwd, and skips with a warning when no endpoint cwd exists. The v0.29.0 release notes identify the pre-v0.29 failure mode as context saves silently using the wrong place or repeatedly failing when the save directory resolved from the daemon working directory. This runtime behavior is required for the retained relative path, and the JSON schema cannot express or prove it.",
    "primary_urls": [
      "https://sabermage.github.io/spt-releases/harness-contract/echo-commune.md",
      "https://github.com/SaberMage/spt-releases/releases/tag/v0.29.0"
    ]
  },
  "conditional_lower_floor": {
    "version": "0.25.0",
    "condition": "Only if the clean cutover deliberately replaces the relative commune_dir with a genuinely absolute path, so it does not rely on v0.29.0's endpoint-cwd resolution.",
    "reason": "The next-highest retained contract is the v0.25.0 Psyche contract. The current psyche commands use {psyche_context_file} (adapter/omp-spt.toml:632-663), and the public v0.25.0 release explicitly says adapter manifests can now use {parent_session_id}, {subnet}, and {psyche_context_file}; it also changes LiveAgent Psyche execution to one bounded per-event turn with an independent custody session.",
    "url": "https://github.com/SaberMage/spt-releases/releases/tag/v0.25.0"
  },
  "schema_vs_version_provenance": [
    "The vendored/current schema proves the accepted manifest shape, not all runtime semantics. adapter/manifest.schema.json:291-329 defines command as an opaque string and keys as arbitrary strings, so an old schema can accept a literal {psyche_context_file} without proving that the corresponding core fills it.",
    "adapter/manifest.schema.json:205-210 defines commune_dir only as string|null; it cannot describe whether a relative path resolves against daemon cwd or endpoint cwd. The v0.29.0 public contract/release prose is therefore the decisive version evidence.",
    "adapter/manifest.schema.json:141-146 makes hostable_types an array of arbitrary strings; schema acceptance alone does not prove ReadyAgent/LiveAgent lifecycle semantics.",
    "I compared all 58 publicly attached manifest.schema.json release assets from v0.1.0 through v0.31.0. The current omp-spt TOML is structurally schema-valid even against v0.19.0, demonstrating why schema validation alone would produce a dishonest floor for opaque placeholders and path-resolution behavior."
  ],
  "retained_seam_evidence": [
    {
      "seam": "[session.self] and native [session.resume]",
      "repository_anchors": [
        "adapter/omp-spt.toml:705-734",
        "adapter/manifest.schema.json:217-237",
        "adapter/manifest.schema.json:291-333"
      ],
      "public_contract": "The manifest reference's '[session.<role>] — outbound templates' section says self is fresh bringup and resume is the native-resume sibling selected only when a prior session is carried; it explicitly labels resume 'since v0.13.0'. The v0.13.0 release notes say session resume now actually resumes and that manifests can declare [session.resume].",
      "version_provenance": "session.self is present in the earliest published v0.1.0 schema; session.resume first appears in a published release schema at v0.13.0. The current self command also uses {adapter_dir}, explicitly added by the public v0.16.0 release.",
      "urls": [
        "https://sabermage.github.io/spt-releases/harness-contract/manifest.md#sessionrole--outbound-templates",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.13.0",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.16.0"
      ]
    },
    {
      "seam": "ReadyAgent / LiveAgent and Psyche roles",
      "repository_anchors": [
        "adapter/omp-spt.toml:448-449",
        "adapter/omp-spt.toml:632-663",
        "adapter/manifest.schema.json:141-146",
        "adapter/manifest.schema.json:238-256"
      ],
      "public_contract": "The current manifest docs define the resolved-profile distinction: no psyche_init means ReadyAgent; presence of psyche_init promotes to LiveAgent; psyche_init is only a gate, and psyche_resume is the sole bounded per-event driven role. The v0.9.0 release notes explicitly describe harness-hosted agents going 'live (or ready)' via automatic adapter resolution. The v0.25.0 release supplies the retained per-event Psyche behavior and {psyche_context_file} key.",
      "version_provenance": "Role table shape and arbitrary hostable_types strings are present in the earliest v0.1.0 schema, but that is only shape availability. v0.9.0 is explicit public runtime prose for ready/live resolution; v0.25.0 is the hard operational Psyche/key floor.",
      "urls": [
        "https://sabermage.github.io/spt-releases/harness-contract/manifest.md#sessionrole--outbound-templates",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.9.0",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.25.0"
      ]
    },
    {
      "seam": "echo_commune and commune drop directory",
      "repository_anchors": [
        "adapter/omp-spt.toml:604-606",
        "adapter/omp-spt.toml:759-762",
        "adapter/manifest.schema.json:205-210",
        "adapter/manifest.schema.json:258-266"
      ],
      "public_contract": "The published echo-commune I/O contract says core owns spawn, file drop, ingest, and delete. Its 'directory resolves per-endpoint (hardened in v0.29.0)' section permits relative paths but requires endpoint-recorded-cwd resolution and documents the old daemon-cwd outage.",
      "version_provenance": "echo_commune and commune_dir are present in the earliest v0.1.0 release schema; that does not provenance path resolution. v0.29.0 is the explicit runtime provenance for safe relative resolution and therefore drives the recommendation.",
      "urls": [
        "https://sabermage.github.io/spt-releases/harness-contract/echo-commune.md",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.29.0"
      ]
    },
    {
      "seam": "[history] strategy=fetcher",
      "repository_anchors": [
        "adapter/omp-spt.toml:779-781",
        "adapter/manifest.schema.json:368-418"
      ],
      "public_contract": "The manifest reference defines fetcher as an adapter binary that emits normalized history, used by echo-commune.",
      "version_provenance": "HistoryStrategy.fetcher and the fetcher field are present in the earliest published v0.1.0 schema. No separate historical 'since' statement was found; this is schema availability, not independent runtime-introduction provenance.",
      "url": "https://sabermage.github.io/spt-releases/harness-contract/manifest.md#history--transcript-access"
    },
    {
      "seam": "[digest] strategy=fetcher",
      "repository_anchors": [
        "adapter/omp-spt.toml:875-878",
        "adapter/manifest.schema.json:420-483"
      ],
      "public_contract": "The manifest reference defines fetcher as adapter-owned locate+read+emit with no source and no pre-read.",
      "version_provenance": "The digest section first appears in the v0.6.0 release schema/release notes. DigestStrategy.fetcher first appears in the public v0.19.0 schema asset; v0.18.x lacks that enum value. The v0.19.0 release notes also describe relocated-profile extractors locating and reading the transcript themselves.",
      "urls": [
        "https://sabermage.github.io/spt-releases/harness-contract/manifest.md#digest--session-digest-extractor",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.6.0",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.19.0",
        "https://github.com/SaberMage/spt-releases/releases/download/v0.19.0/manifest.schema.json"
      ]
    },
    {
      "seam": "[update] avenue=gh_release",
      "repository_anchors": [
        "adapter/omp-spt.toml:478-480",
        "adapter/manifest.schema.json:565-667"
      ],
      "public_contract": "The manifest reference says gh_release is available since v0.8.0 and requires repo; the public v0.8.0 release notes announce GitHub-release adapter updates.",
      "version_provenance": "gh_release first appears in the published v0.8.0 schema asset and release notes.",
      "urls": [
        "https://sabermage.github.io/spt-releases/harness-contract/manifest.md#gh_release--ship-updates-from-your-github-releases-since-v080",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.8.0"
      ]
    },
    {
      "seam": "identity, env, and bind-time adapter fields",
      "repository_anchors": [
        "adapter/omp-spt.toml:589-593",
        "adapter/omp-spt.toml:799-801",
        "adapter/omp-spt.toml:891-893",
        "adapter/manifest.schema.json:335-367",
        "adapter/manifest.schema.json:532-563",
        "adapter/manifest.schema.json:155-160"
      ],
      "public_contract": "Schema defines identity.session_id_source post_spawn|uuid_inject plus parent_ancestor_name; env direction inject|read plus value/channel. Current docs mark host_binaries bind-time resolution since v0.9.0.",
      "version_provenance": "Identity and env forms are present in the earliest v0.1.0 release schema. host_binaries first appears at v0.9.0, whose release notes explicitly say ready/live harness sessions resolve the adapter automatically. The v0.19.0 release notes provide runtime evidence that captured transcript-location environment reaches an on-demand extractor.",
      "urls": [
        "https://sabermage.github.io/spt-releases/harness-contract/manifest.md#envvar--env-var-table",
        "https://sabermage.github.io/spt-releases/harness-contract/manifest.md#identity--session-identity",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.9.0",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.19.0"
      ]
    },
    {
      "seam": "[strings] and [[hints]], if retained",
      "repository_anchors": [
        "adapter/omp-spt.toml:912-1004",
        "adapter/manifest.schema.json:106-117",
        "adapter/manifest.schema.json:932-955"
      ],
      "public_contract": "The manifest reference defines strings as data read by dot path and hints as ordered once-per-session matches. It explicitly marks strings file-pointer rules since v0.7.0.",
      "version_provenance": "strings and hints first appear in the public v0.5.0 schema asset, and the v0.5.0 release notes announce adapter config values and keyword hints. File-pointer behavior is publicly marked since v0.7.0. Removing them would not change the recommended 0.29.0 floor.",
      "urls": [
        "https://sabermage.github.io/spt-releases/harness-contract/manifest.md#strings--adapter-string-values--profiles",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.5.0",
        "https://github.com/SaberMage/spt-releases/releases/tag/v0.7.0"
      ]
    }
  ],
  "first_published_schema_availability": {
    "v0.1.0": [
      "min_spt_core_version",
      "hostable_types",
      "session.self",
      "session.psyche_init",
      "session.psyche_resume",
      "session.echo_commune",
      "history.fetcher",
      "env inject/read",
      "identity post_spawn/uuid_inject"
    ],
    "v0.5.0": [
      "strings",
      "hints"
    ],
    "v0.6.0": [
      "digest extractor seam"
    ],
    "v0.8.0": [
      "update gh_release"
    ],
    "v0.9.0": [
      "adapter.host_binaries"
    ],
    "v0.13.0": [
      "session.resume"
    ],
    "v0.19.0": [
      "digest strategy=fetcher"
    ]
  },
  "important_scope_note": "This floor covers the requested manifest seams only. It does not claim version provenance for the extension's imperative spt api bind/listen/state/reply verbs; those need their own public CLI/docs audit if they are included in a final whole-adapter floor. No spt-core source or sibling repository was inspected, and no private-source inspection is needed for this conclusion."
}