v0.6 Draft
Informative

Changelog

Every release, plus the reasoning behind substantive decisions and the proposals that were rejected.

All notable changes to The Open Co-Prompting Standard are recorded here.

Versioning follows VERSIONING.md. Substantive decisions, including rejected proposals, are recorded with reasoning so a later reader can find out why the Standard is the way it is.


v0.6 (Draft) — 2026-08-09

Written from two working sessions between the maintainers on 7 August: one on meeting practice, one walking the specification line by line. Every change below traces to something said in those recordings.

Added

  • Two-step acknowledgement. A Listener who is mid-thought says heard"Heard, one moment" — and then ready once they have actually stopped. "Heard" is a promise of an acknowledgement, never one, and the Caller still waits for "Ready" before describing.
  • Direct delegation (§6.6). A Caller MAY name one participant instead of opening the loop to the room: "Midhun — code. Is a damper required there?" No separate acknowledgement is needed; the named participant's claim serves as one. Demonstrated in a new example.
  • Sessions where not everyone is following the Standard (§6.7). Most rooms contain people who have never read this. A participant who is following it may restate an outsider's question into a call and confirm the restatement back in their own words. New L1 requirement 10.
  • The suffix rule (§7.2.1). Any call type may be spoken with question, study, or analysis appended. "Code", "code question", and "code study" are the same call.
  • Aliases on call types, for words a domain uses interchangeably — Drawings accepts plans and specifications.
  • spec/cheat-sheet.md — the whole loop and every phrase on one page, with a validator check binding it to the registry.
  • Four validator checks: alias collisions including against suffix forms, cheat-sheet cue coverage, and delegated calls claimed by the named participant.

Changed

  • claim is "On it", was "Mine". Normally spoken with the claimant's name: "Kenny, on it."
  • heard rises to SHOULD and carries both roles: receipt of the call at ACKNOWLEDGE, and the lead-in to the restatement at CLAIM.
  • hold narrows to its during-prompt use only — reserving a turn while somebody else is mid-prompt.
  • The cue registry is grouped by beat rather than by requirement level, so it reads in the order a learner meets it.
  • propose is "I propose …", was "Propose: …".
  • A refusal may cite cost. "That takes this from a seventy-dollar question to a two-thousand-dollar one — do you want it?"
  • Follow-up prompts are not separately governed. The opening prompt is spoken; the iteration after it is not narrated.
  • New §1.2: the Standard does not make meetings formal. It governs delegation to an agent, which is a small fraction of most meetings, and applies equally to an agenda-driven session and an open-ended one.

AEC profile — call types rewritten

WasNow
Clash, RoutingCoordination
PricePricing and Value engineering
BuildConstructability
ProductCut sheet (aliases: product, equipment)
Load, Code, RFIunchanged
Submittal, Drawings (aliases: plans, specifications)

Decisions recorded

  • "Mine" was right in theory and failed in practice. It was chosen because it asserts exclusivity in a way "on it" does not — two people can both be on something. That reasoning still holds. It lost anyway, because both maintainers disliked saying it in two separate sessions, and a required phrase people avoid is worse than no phrase. Exclusivity moved to where it belonged: invariant 1 and the contention rule, neither of which depends on word choice.

  • "Heard" returns, narrowly, and the v0.5 correction stands. Version 0.3 made it the acknowledgement outright and v0.5 reversed that, correctly — as the sole acknowledgement it claimed receipt of a message not yet sent. What neither version anticipated was a Listener wanting to confirm the call while declining readiness. Those are different acts and both are true statements: you did hear the call, and you are not ready. Without it, a Listener needing ten seconds must either claim a readiness they lack or stay silent and be read as inattentive — and that silence is the failure the beat exists to prevent.

  • Direct delegation is in the Standard rather than left to habit. Without it, a room practising the loop has two options for a question aimed at one person: stop everybody for something that concerns one of them, or step outside the protocol and lose the record. The first is why people call protocols bureaucratic; the second is why records have holes.

  • The outsider case inverts the usual burden deliberately. Everywhere else the Standard asks the person raising a task to follow it. In §6.7 the person answering carries it, because the outsider owes nothing. A room that cannot do this can only practise the Standard in private — useless in exactly the meetings where accountability matters.

  • The suffix rule is transcribed, not designed. "Coordination question", "constructability question", "code question", "pricing question", "code study", "load study", "load analysis" all appear in the recordings. Accepting the padding keeps written call types short without every profile enumerating the same three variants, and it gives a Level 3 recogniser a longer, less ambiguous form to match — a bare "code" occurs constantly in engineering speech without opening anything.

  • A Decision call type was proposed and rejected. It would have covered "how did we get here" and "why did we specify this" — questions both maintainers agreed come up constantly. It was dropped because nobody could name a word people would actually say for it; "decision" is not it. This leaves that question uncovered by any call type, which is a known gap rather than an oversight. If practice shows it is needed, a later revision adds it under a word taken from a recording.

  • Also considered and not adopted: political temperature, engineering-recommended versus code-required, and exposure or risk. Each was raised, none survived the test of being something a person would actually call out.

  • Deriving call types from the transcript corpus — running an agent over existing meeting recordings to categorise the questions people actually ask, rather than recalling them — was proposed and is the intended method for the next profile revision. It is a separate piece of work and is not in this release.


v0.5 (Draft) — 2026-08-06

Restores the vocabulary the founding session actually used, corrects two published provenance claims that were false, and adds two things that existed in the original one-page protocol and never reached the specification.

Corrected — read this first

Two claims published in earlier versions were not true. Both are corrected here, and both were found by checking the recordings rather than by review.

  • The AEC dialect was fabricated. profiles/aec.json declared acknowledge: "Listening" with the note "Standard in coordination rooms. Recorded from real owner-architect-contractor sessions, not chosen for style." The word does not appear anywhere in that meeting. The second entry, already_owned: "Already running", is not attested either. Both are deleted, and the profile now declares no dialect at all.
  • Both worked examples overstated what was spoken. Each source_note ended "the wording of each cue is as spoken." The Standard did not exist during either meeting, so no cue was uttered in either room. The scenarios are genuine and the AEC one is faithful in detail — the recording contains the twelve-by-twelve smoker with its own flue, the shaft needing upsizing, the answer turning on whether the smoker sits right of the duct, and the cut sheet still owed. The examples stay; they are now described as real situation, reconstructed dialogue.

examples/WRITING-AN-EXAMPLE.md gains that as a third provenance category, source_note becomes required, and the validator rejects a transcript without one.

Changed — vocabulary restored

CueWasNowBasis
acknowledge"Heard""Ready", locked[112:00], [115:36], [131:21]
prompting"Prompting""Prompting now"[133:28], [133:48], [140:59]
propose"Propose: …""I propose …"naturalness; placement per [141:14]
heard"Heard …" at CLAIM[127:33]
augment_response"In" / "Not in"removedunusable; superseded by proxy prompting

Timestamps refer to the session in which the loop was worked out live. Two quotations are worth preserving:

[115:38] Carter: do I wait for both of you to stay ready I think I should

That is invariant 2 being invented out loud, before it was written down.

[127:33] Carter: part of part of y'all's read back could be like heard gonna fix the bug where I click this

That is where "Heard" belongs — on the read-back, at CLAIM, after the description exists.

Added

  • STATUS — the first state that concerns the session rather than a single task. Any participant may call for status at any time; every Owner holding an open task must answer. New invariant 6. A new example, software-status-call, demonstrates it.
  • Proxy prompting. A contributor says "Adder", the Owner says "Go ahead", and the contributor speaks the addition into the Owner's agent directly. Ownership does not move.
  • The room-pause rule. While an Owner is speaking a prompt, participants hold new calls until finished.
  • Verification replies — "Working" and "Still broken" — so a profile's check step has words.
  • Locked cues. A per-cue locked flag in spec/loop.json; a profile MUST NOT substitute one. acknowledge is the only one.
  • Four validator checks: locked-cue substitution, missing source_note, a session state absent from the prose, and a state declared as both a loop state and a session state.

Changed — conformance

Speaking the prompt moves from Level 2 into Level 1. The split is now: L1 is how you speak, L2 is what you keep. Invariant 4 loses its "At Level 2 and above" qualifier.

Decisions recorded

  • An analogy is a source of ideas, not a source of authority. v0.3 made "Heard" the acknowledgement by reasoning from professional kitchens, and the reasoning was inverted. A kitchen's "Heard" answers a called order, which carries content; this Standard's CALL is deliberately contentless, with the description withheld until everyone has acknowledged. There is nothing to have heard. The v0.3 note argued that "'Ready' states availability; 'Heard' states comprehension, and comprehension is what invariant 2 is protecting" — but comprehension is impossible before the description exists. The borrowing survived two releases because nobody checked it against the loop it described. spec/background.md §4 now records the error rather than quietly dropping it.

  • The dialect mechanism currently has no users, and that is worth saying. Locking acknowledge cost nothing, because the only substitutions ever published for it were the fabricated ones. The mechanism stays — the founding profiles were written from different rooms and a genuine local word is plausible — but the first profile to declare a dialect should expect to be asked where it was recorded.

  • Speaking the prompt is the interface, not a ritual. It moved to L1 because a room dictating to its agents produces an audible prompt as a side effect of how the work is done. Requiring it only at L2 implied it was an advanced discipline layered on top, which inverts the reason it exists. From the session: "you literally just do a voice prompt … I think it is useful for the other software developers to hear the prompt."

  • Proxy prompting deletes a rule rather than rewording it. The removed cue existed only because the prompt was uttered once and then silently revised, leaving the room to be told whether an addition landed. Handing the contributor the floor closes that gap by construction: everyone hears it go in. A spoken obligation survives for the two cases proxy prompting does not cover — a silently typed edit, and a refusal.

  • STATUS is not an end-of-session ritual. It is callable by anyone, at any time. Invariant 8 requires every claimed task to reach a terminal state, but nothing else in the loop said when the room finds out whether that happened, so a task abandoned at RUN was discovered after the session or not at all.

  • The wording of STATUS comes from a participant's recollection, not the transcript. The recording captures Carter agreeing — "yeah I like it alright status" — and one worked instance of an Owner reporting, but the proposal he is agreeing with falls in a 23-second gap, and one participant's audio is missing from most of that meeting. Recording this rather than implying the transcript settles it is the same standard of honesty the provenance corrections above are enforcing, applied to our own reasoning.


v0.4 (Draft) — 2026-08-06

Makes worked examples a first-class artifact anyone can contribute, and the lowest-effort way into this project.

Added

  • schema/transcript.schema.json — a session written as dialogue. Turns may be tagged with the cue they perform, or with the call type that opened the loop, and the validator holds the transcript to those claims.
  • examples/transcripts/ — three published examples, replacing the single worked example that used to live inside each profile.
  • Examples of sessions going wrong. A transcript may declare conformance: non_conforming and list what broke, which invariant, at which turn, and what it cost. aec-unacknowledged-call is the first: four invariants break in under a minute, none of them noticeably, and a wrong answer reaches a tenant.
  • examples/index.json — the catalog a documentation site fetches, since a site rendering a pinned tag cannot list a remote directory.
  • examples/WRITING-AN-EXAMPLE.md, and an Examples section in CONTRIBUTING.md placed above Profiles.
  • Ten validator checks covering transcripts: index agreement in both directions, cue and call-type and profile and invariant and disposition reference checks, loop completion for conforming examples, and — the important one — stale-wording detection: a turn tagged with a MUST-level cue must actually say the phrase that profile uses, resolved through its dialect.

Changed

  • examples/ split into transcripts/ and streams/. The word was doing two jobs. Event streams moved to examples/streams/, and the invalid fixtures to examples/streams/invalid/.
  • worked_example removed from schema/profile.schema.json and from both profile data files. The profile documents now point at the transcripts instead of restating them.

Decisions recorded

  • An example is written once. Before this release the AEC dialogue existed twice — as structured turns in profiles/aec.json, rendered on the site's front page, and as hand-typed prose in profiles/aec.md, rendered on the profile page. Nothing checked that the two agreed, and the v0.3 vocabulary pass required editing both by hand. Either could have been left quoting a phrase the Standard had dropped, and no test would have noticed.

  • The wording check is the point of the whole feature. Examples are the most-read and least-maintained part of any specification: they are written once, at the moment of greatest enthusiasm, and then quietly rot as the spec moves. Binding every tagged cue to the live registry means a rename cannot ship until every example that quotes it is updated. v0.3 renaming "Ready" to "Heard" would now fail the build until the transcripts caught up.

  • Examples may show sessions that fail, and this is half their value. A clean transcript shows what the Standard looks like; a broken one shows what it is for. The Standard's requirements are only persuasive next to the cost of skipping them, and that cost is invisible in a transcript where nothing goes wrong.

  • A declared violation exempts a turn from the wording check, and only a declared one. This makes honesty the cheapest path: a broken session passes validation only by naming what broke. Relabelling a failed session as conforming immediately trips the wording check on the very turn it was concealing — which is how the check was proven rather than assumed.

  • Opening the loop is tagged with a call type, not a cue. Every other move has a shared word; the opening word is domain-specific by design ("Clash", "Bug", "Question"). Trying to tag it as a cue was the first thing the validator rejected when these transcripts were written, which is the check working before the feature had even shipped.

  • An example does not require a profile. A contributor may publish a transcript using only core vocabulary and the universal Question call type. This is deliberate: writing a profile is a claim about an entire industry, while reporting one meeting is not, and demanding the former as the price of the latter would filter out exactly the practitioners the Standard needs. Both published profiles were written from transcripts, not the other way round.


v0.3 (Draft) — 2026-08-06

Rewrites every cue phrase people would not actually say, and removes a role the Standard had no standing to invent.

Under the post-1.0 rules in VERSIONING.md this would be a MAJOR change: a role and a state are removed. Version 0.x explicitly permits breaking changes in any release, and there are no external adopters yet.

Changed — vocabulary

Every phrase was judged against one test: is this already in somebody's mouth?

CueWasNow
acknowledge"Ready""Heard"
augment_response"Got it" / "Didn't include that""In" / "Not in — …"
accepted"Accepted""Good"
rejected"Rejected""No good"
supersededdropped"Superseded by …""Dropped — covered by …"
handoff_offer"Yours — I'll feed it""Yours"

claim ("Mine") and preliminary ("Preliminary") are unchanged. "Mine" asserts exclusivity in a way "On it" does not; "Preliminary" is the one formal survivor, kept because it is doing legal work and no shorter word carries it. Thirteen cues were already plain enough to leave alone.

Removed

  • The Adjudicator role. Four roles now, not five: Caller, Listener, Owner, Contributor. The participant who owns a task closes it themselves.
  • The profile adjudication block, including default_adjudicator and owner_may_adjudicate.

Changed — the loop

  • State adjudicate renamed to close, aligning the state with the beat that already contained it.
  • Terminal state Superseded renamed to Dropped; the event field superseded_by becomes covered_by.
  • Invariant 6 becomes Closure before reliance: agent output MUST NOT be treated as an outcome until the Owner closes the task with a disposition, and where the active profile requires approval before reliance, that approval MUST be recorded first.
  • New OPTIONAL profile approval block (required, approver, notes). AEC declares one naming the professional in responsible charge. Software declares none.
  • spec/background.md gains a kitchen brigade section (§4), with the same no-endorsement discipline as the aviation and clinical handoff sections. Later sections renumbered.

Added

  • A validator cross-check binding terminal states to the event record. Every terminal state in spec/loop.json must appear in the session-event schema's disposition enum, and the schema must allow nothing the loop does not define. A terminal state lives in three files; renaming it in two of them now fails the build.
  • The validator's Core-state collision list is now read from spec/loop.json rather than restated in the script, so renaming a state cannot silently open a collision.

Decisions recorded

  • The Standard does not decide who may accept professional work. Every regulated profession has already settled that — engineer of record, attorney of record, engagement partner, attending physician — and a protocol restating it would either duplicate that law or contradict it. Profiles carry the requirement in their own domain's language. Silence in the core is deference, not permission.

  • The Adjudicator was not in the evidence. In the software transcript one developer owns the task and declares it accepted; in the AEC transcript the MEP engineer owns the smoker study and parks it. One owner closing their own task, both times. The role was generalized from a single AEC cue and then imposed on every domain. It was also redundant: the AEC profile already declared a sign_off state doing exactly this job.

  • Approval is a gate on reliance, not a transfer of ownership. The Owner still closes the task and still states the disposition. This keeps single ownership (invariant 1) intact in regulated and unregulated domains alike.

  • What did not change, and this is the point. Every result is still labelled Preliminary until closed, and every task still reaches an explicit spoken disposition. Those are the protections that stop an unreviewed agent result reaching a client — not the existence of a second job title.

  • A required phrase nobody says is worse than no phrase. It teaches the room that the document was written by someone who has never been in it. Any cue in the registry that people decline to say is a defect in the registry, not in the people. The kitchen brigade is the evidence: no kitchen adopted "Heard" from a specification, and compliance is near universal, because it is one syllable and it works.

  • "Preliminary" was reviewed for replacement and kept. "Not checked yet" is plainer but longer, and this is the cue that stops an unreviewed number reaching a client. Profiles may substitute via dialect where their people say something shorter.


v0.2 (Draft) — 2026-08-06

Moves the shared spoken vocabulary out of individual profiles and into the core, where it belongs.

Added

  • Core Section 7, Vocabulary — a normative cue registry of 21 spoken phrases, each bound to a state or an invariant and carrying that behavior's requirement level. Profiles inherit all of them.
  • Universal call typesQuestion is now defined in core (Section 7.2) and inherited by every profile.
  • Dialects (Section 7.3) — a profile MAY substitute the phrase for a cue where its domain genuinely says something else, declared in cueDialect. The meaning and requirement level are unchanged.
  • cues and callTypes in spec/loop.json, with schema/loop.schema.json extended to match.
  • cueDialect in schema/profile.schema.json.
  • Four validator cross-checks — every cue appears in the Section 7.1 table and the counts agree; no profile redeclares a universal call type; every dialect entry names a real cue; no dialect entry restates the core phrase unchanged.

Changed

  • Core sections 7 through 12 renumbered to 8 through 13 to make room for Vocabulary. All internal and external cross-references updated.
  • profiles/software.json no longer declares Question — it is inherited.
  • profiles/aec.json declares a two-entry dialect: "Listening" for acknowledge, "Already running" for already_owned.
  • Both profile documents replace their "Additional vocabulary" tables with a pointer to core plus, where applicable, a dialect table.

Decisions recorded

  • Shared meaning, local wording. Profiles may substitute a cue's phrase but never its meaning or requirement level. The alternative — one mandated word per cue — was rejected because the two founding profiles were written from transcripts in which real practitioners say different words for the same act ("Ready" in software rooms, "Listening" in coordination meetings). A standard that requires people to stop saying what they already say gets ignored rather than adopted.

  • A dialect that restates the core phrase is an error, not a no-op. Caught by the validator. A profile listing substitutions identical to the defaults is padding that makes the real substitutions harder to find.

  • Question is the only universal call type in this release. It is the only term with evidence in both founding profiles. Promoting speculative universals — a generic "Compliance" or "Risk" — before a third profile exists would be exactly the desk-invented vocabulary the authoring guide warns against. The registry is built to grow as profiles converge.

  • Why this was a defect, not a refinement. Core invariant 5 requires the Owner to state aloud whether each augmentation was incorporated, and invariant 8.1 (now 9.1) requires labelling unadjudicated results preliminary — but the words for both existed only in the AEC profile. A software team reading their own profile was instructed to perform behaviors the Standard never gave them words for. The two profiles' vocabulary tables shared exactly one entry between them after a single day.


v0.1 (Draft) — 2026-08-06

First public draft.

Added

  • Core specification (spec/core.md) — five roles, ten states grouped under the four-beat Call / Claim / Co-prompt / Close loop, eight accountability invariants, four terminal states.
  • Conformance (spec/conformance.md) — three levels: L1 Spoken, L2 Recorded, L3 Instrumented, with per-level requirements and machine-verifiable consistency rules for L3.
  • Glossary (spec/glossary.md).
  • Background (spec/background.md) — prior practice and research, with explicit wording discipline about what is and is not being claimed.
  • Machine-readable loop (spec/loop.json) — the roles, beats, states, invariants, terminal states, and conformance levels as data, so verifiers and documentation sites do not have to parse prose. spec/core.md remains authoritative, and the repository validator asserts the two agree on the state list, the counts, and the terminal states.
  • Schemasschema/session-event.schema.json for the L3 event record, schema/profile.schema.json for the profile format, schema/loop.schema.json for the loop.
  • Worked examples as data — each profile carries its dialogue as structured turns in worked_example, alongside the prose rendering in its markdown.
  • Profiles — Software Development and Architecture, Engineering and Construction, both written from transcripts of real sessions. Template and authoring guide for new profiles.
  • Example — an L3 event stream for the AEC worked example.

Decisions recorded

  • The loop is published as data as well as prose. Two files stating the same thing will drift, so spec/loop.json is not merely a convenience copy: the validator cross-checks it against spec/core.md and fails if the state list, the beat and state counts, the role names, the terminal states, or the conformance level names disagree. Anything rendering the Standard — including its own documentation site — consumes the data rather than restating it.

  • The loop requires a restatement on claim. Acknowledgement alone does not distinguish heard from understood. The restatement is the only point where a mishearing surfaces before an agent runs, and it is cheap relative to discovering the error afterwards.

  • Speaking the prompt aloud is required at L2, not L1. L1 must be adoptable by a room with no recording and no shared screen, immediately, with nothing bought or installed. Requiring the spoken prompt at L1 would have made the entry level harder to reach than it needs to be. It remains RECOMMENDED at L1.

  • Declining an augmentation must be audible. An earlier draft required only that incorporated augmentations be acknowledged. That permitted the failure mode where a contributor believes their constraint was included and it silently was not. Both outcomes are now required to be stated.

  • The Owner may not adjudicate their own output in either published profile. This is a profile-level decision rather than a Core invariant, because there are legitimate domains — solo practice, low-stakes internal work — where self-adjudication is appropriate. Core requires only that the Adjudicator be qualified; profiles decide whether that can be the same person.

  • Terminal states include Parked and Superseded, not only Accepted and Rejected. Sessions in practice produce a large number of tasks blocked on something outside the room. Forcing those into Rejected loses the distinction between "we decided against it" and "we could not proceed," which is exactly the distinction the next meeting needs.

  • A silently discarded result is a conformance failure. An undisclosed discard is indistinguishable from work never attempted, and the question returns at the next session with no record of what was already tried.

  • Conformance applies to sessions, not organizations. Only a session can be assessed. Organizational claims would be unfalsifiable and would invite exactly the certification theatre this Standard has no mechanism to police.

  • No certification body, no conformance mark. Claims are self-asserted. Establishing a certification scheme for a draft standard with no adopters outside its authors would misrepresent its maturity.

Rejected

  • Naming the Standard after the Call / Claim / Close mnemonic. The three-word form abbreviates to a string strongly associated with the former Soviet Union, which would have required permanent correction, and it omitted the co-prompting step — the part with the least prior art. Recorded here because the mnemonic remains a good teaching device and this will be proposed again.

  • Naming the loop's third beat "Share" or "Speak" rather than "Co-prompt." Both were more immediately obvious, and both lost the specific meaning that the room contributes to the prompt rather than merely hearing it.