Repository navigation
Description
Context
Epic #56 defines 1.0.0 as the point where the extension interfaces lose
@experimental and the integration contract stops moving under a minor. Its
breakdown names the first piece of work: an audit that asks, for every contract
entry and every extension interface, whether it is ready to stop moving. The
audit's output becomes the epic's sub-issues. This is that audit.
What binds today, on main @ d350daa8:
docs/integration-contract.md:3-14— additive changes ship in a minor;
breaking ones also ship in a minor before 1.0, with thebreakinglabel, a
maintainer ruling and a changeset, and need a major from 1.0. The reasoning is
docs/decisions/contract-versioning.md.docs/integration-contract.md:573-576—EmbeddingProvider,
CompletionProvider,AgentRunner,SkillEmitterand the ui-sdk interfaces
are@experimentaluntil 1.0, with breaks announced as minor-version events.docs/extending/README.md:60-65(Stability) and:69-106(the seams): four
in@schlessera/brain, four in@schlessera/brain-ui-sdk(AgentBackend,
SpeechProvider,ToolRenderer,AsrClient), andSiteAdapterin
@schlessera/brain-scrape(packages/scrape/src/adapter/types.ts:66)..changeset/config.jsonputs all fourteen packages in onefixedgroup,
described inCONTRIBUTING.md:121-122as a deliberate pre-1.0 tradeoff.
A 2026-09-22 comment on #56 found that the documented interface set is wider
than the @experimental annotations: AsrClient (packages/ui-sdk/src/client/asr.ts:15)
and SiteAdapter carry no individual tag. An audit that only greps for
@experimental misses them. git grep -l '@experimental' -- 'packages/*/src'
currently lists eight files.
Scope
- Inventory every surface 1.0 would freeze: each row of
docs/integration-contract.md, each interface named in
docs/extending/README.md, and each exported symbol tagged@experimental.
Reconcile the three lists and name every surface that appears in one and not
the others. - For each surface, record: whether it has changed in a breaking way since
0.33.0 (cite theCONTRACT:commit or changeset), whether a contract test
exists that a third-party implementation could run, and a verdict: ready,
needs work (what), or should leave the contract before 1.0. - Say whether the
fixedlockstep group is defended or reconsidered, with the
argument, as the epic asks.
Out of scope
- Changing any interface, contract row, annotation or versioning policy. The
audit produces a list; the list becomes Epic: 1.0.0 — the stability bar #56's sub-issues. - Scheduling 1.0.
- New seams (ROADMAP binding decision 2).
Acceptance criteria
- A table posted on Epic: 1.0.0 — the stability bar #56 with one row per surface: where it is defined
(file:line), where it is documented, its breaking-change history since
0.33.0, whether a runnable contract test exists, and a verdict. - Every mismatch between the three inventories is named.
- A stated position on the lockstep group, with its reasoning.
- Every "needs work" verdict is filed as a sub-issue of Epic: 1.0.0 — the stability bar #56, with template
sections filled, or named in the table as not yet filed with the reason.
Verification
Another reader can re-derive the inventory from the three sources named in
Scope and reach the same row set.
Contract impact
- Neither box applies; the audit changes nothing.
Activity
schlessera commentedon Sep 25, 2026
The audit is posted on #56: #56 (comment)
It has 58 rows: 35 contract rows, 6 shapes the named consumer parses but the contract omits, and 17 extension-interface rows. It also lists nine mismatches between the three inventories and states a position on the lockstep group: defend it through 1.0, provided the contract document, not every export, triggers the major (#343 Q1). Every "needs work" and "decision" verdict was filed and attached to #56 as #340-#347. Row 17 is tracked by #155, which sits under #39.
The acceptance criteria asked for a table and filed issues, so no pull request goes with this spike. It changes nothing in the tree.
schlessera commentedon Sep 25, 2026
Closed 2026-09-25: the spike's deliverable is the audit posted on #56 (#56 (comment)). Its findings are filed as #340-#347 and attached to #56. No code shipped, so no PR closes this.