---
name: no-version-floor-before-it-ships
description: "BINDING (doyle 2026-07-21): never name a min_spt_core_version for an unshipped fix — a floor is only real after publish + field-verify; give the sequence, not a date."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: f3c723d5-8c77-4460-8ab1-7b9abd05cd17
  modified: 2026-07-21T08:41:12.279Z
---

**A consumer asking "what version will the fix land in?" gets a MECHANISM, not a number.** Never name a `min_spt_core_version` for a fix that has not been built, gated, released, and field-verified.

**Why:** the number does not stay in the conversation — it gets written into the consumer's manifest as `min_spt_core_version`, where it becomes a claim *their* users depend on. A floor pointing at a version whose behavior has not shipped is a record disagreeing with reality: precisely the contract-lie class spt-core milestones exist to kill. Naming one to relieve scheduling pressure authors that lie into someone else's file. Related: [[consumer-verifies-core-decides]] — a consumer files evidence and verifies published docs; they do not set core scheduling, and pressure to commit is not authority to.

**How to apply:** answer with the deterministic sequence — slot into a wave → todlando builds → doyle gates → deployah cuts the release → hertz field-verifies the named regression → **doyle sends the exact published version unprompted, same day. That number is the floor.** Until that message exists, there is no floor, and repeat asks (including via a third party relaying for the consumer) do not produce one earlier. Say "unscheduled" plainly rather than inventing a slot you will miss.

Tell the consumer what to do meanwhile, so "not yet" is actionable: do NOT set a speculative floor, do NOT pin acceptance tests to an unreleased version, do NOT hand-edit `info.json` to fix the appearance ([[ground-dont-assume-on-incidents]] — a hand-edited record has already burned us as fake evidence), and do NOT hold their own release. An endpoint reading honestly-wrong costs only appearance.

**Origin:** emphasys hit the `api listen` controllability downgrade on 0.39.0 and asked three times (twice directly, once relayed through hertz) for a target version to gate `omp-spt` against, while the fix was still `required_stages = []` and unslotted. See [[spt-core-findings-backlog]] REQ-LISTEN-PRESERVES-HOSTING-TOPOLOGY. Also refused in the same exchange: their request for a detach-callback / release-control primitive — that hands a core truth obligation to adapters ([[adapter-glue-model-boundary]]).

**⭐ THE FLOOR RULE SURVIVED; THE SCHEDULING REFUSAL DID NOT — and the difference is the point.** emphasys escalated with *"User explicitly requested RCA then build/publish fix — implement core P1 now."* hertz independently logged the discrepancy: in THEIR conversation the operator had said only `/diagnose and report to doyle`, no build/publish GO, and hertz explicitly refused to reinterpret a peer's assertion as operator authorization. **doyle did not act on the relay and did not refuse it either — asked the OPERATOR directly, with four options laid out (own wave / queue behind the P0 / refuse as overreach / fold into the resize wave). Operator chose FOLD.** So the outcome matched what emphasys wanted, on real authority, and the earlier "travels alone" refusal was reversed by the operator with the tradeoff visible.

**Two lessons, kept separate because they resolved oppositely:**
1. **A relayed "the user asked" is NOT operator authority, even when it turns out to be true.** The correct move is neither compliance nor refusal — it is a direct, cheap verification with the operator. Asking cost one question and converted a contested claim into a real ruling. Told emphasys plainly: route it to me, do not assert it.
2. **When the operator overrules a gate judgement, tighten the gate instead of relitigating.** doyle had refused the fold twice that day (a two-seam wave is where a red in one leg gets blamed on the other). Response to being overruled: bind todlando to SEPARATE COMMITS per seam and SEPARATE INT LEGS WITH NO SHARED RIG, so a lifecycle flake cannot red the render oracle. See [[dispatch-on-overlap-not-on-merge]] — independent seams stay independent even inside one wave.
