Skip to content

SDK follow-ups: CI reliability and boundaries (spec #946) - #949

Merged
Daanish2003 merged 25 commits into
mainfrom
feature/sdk-follow-ups
Oct 27, 2026
Merged

Daanish2003 merged 25 commits into
mainfrom
feature/sdk-follow-ups

Conversation

@Daanish2003

Copy link
Copy Markdown
Owner

Summary

Spec #946: the SDK follow-ups, in two groups.

CI reliability

Boundaries

Closes #946

How it was tested

Decisions I made

Risk

  • No migration and no schema change.
  • --drop drops enums and sequences the feature declares, in addition to the ones its columns use. This removes more than before, but only things the feature owns, and the guards above still apply.
  • The core no longer computes Skill and Knowledge changes. A Host without skills() or knowledge() stores none, as it should.

Out of scope, noted by #919: core modules that still import feature internals are computer-tools (isSkillFile), demonstration-draft (skill files), review (memory) and bot/knowledge-files.ts (knowledgeDirectory, walk scripts).

🤖 Generated with Claude Code

Daanish2003 and others added 25 commits October 27, 2026 21:56
…runner (#922)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A feature's new `turnChanges` hook reads the ended Turn's transcript and
returns its changes; the core stores what the enabled features return in
the existing `skill_changes` and `knowledge_changes` columns. The skills
and knowledge features now own `skillChangesOf` and `knowledgeChangesOf`,
so a Host without them runs no scan and stores no changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#922)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hand-off to-do test (#929)

The Memory pass shares the Bot's fake adapter. Under CI timing the second
Turn's pass called the Model before the test read `calls.at(-1)`, so the
test saw the pass's input ("# The Turn ... # Your memory lines") instead
of the Turn's prompt. Pick the last call that offers `send_to_user`.

The same `at(-1)` read sat in two other tests with Memory and a Computer
on (bot-memory snapshot, webhook cut-and-save); they now pick the Turn's
call too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…removes them (#932)

A feature's schema gains `enums` and `sequences` beside `tables`.
dropFeatureTables and `botsdk migrate --drop` drop the declared ones
that no remaining column or default uses, never a core enum, instead of
finding them through the dropped tables' columns, so an enum no column
uses no longer survives the drop and breaks re-enabling the feature.
Memory and MCP create no enums or sequences, so they declare none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… table owns (#932)

Review fixes: a declared enum or sequence that an enabled feature also
declares stays, and so does a sequence another table owns. The schema's
`sequences` takes the same structural shape as `enums`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Memory's pass reads the Models and the thread hint through two new core services, `models` and `threads`; `coreContextOf` and its symbol are gone, and the feature APIs take a FeatureContext.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…es resolve (#923)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…pass (#945)

The test polled for `drafting`, which the drafting pass ends about 65 ms
later, so a slow poll under load read `failed`. Capturing all 200 steps
one by one also took about 4 s alone, past the 10 s poll under load.
Seed all but the last few steps, and wait for the Demonstration to stop
recording instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…actor/923-jobs-reach-needs

# Conflicts:
#	packages/botsdk/knowledge/src/server/plugin.ts
#	packages/botsdk/skills/src/server/plugin.ts
…use (#946)

R1: drop the union of what the feature declares and what its tables'
columns and defaults use, with the same guards.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… not failed (#946)

R2: script the drafting pass's Model call so the pass ends cleanly and
assert saved; seed after the steps already stored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…i-join (#946)

R3: activeJobs, checkpointCounts and newestCheckpoints come off the
public RunnerApi; Routines and the Helper card call the runner store's
functions through runner/internal, and listRoutines, listHelpers and
changeData take db again.
R4: the reconcile reads the Routines without an active fire job in one
anti-join (idsWithoutActiveJob in the runner's store).
R7: fireKeyPrefix builds the routine:<id>: prefix everywhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ad (#946)

R4: fails on the two-read version (Routines, then fire jobs).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… built up front (#946)

R5: turnChanges is synchronous and no longer awaited under the
Conversation lock; a type test rejects an async one.
R6: writtenFiles(transcript) in @botsdk/bot/feature is the one scan of
successful write/edit/run_tool results; Skills and Knowledge use it.
R9: create-chat builds the threads service and passes it to contextOf;
feature.ts no longer imports the conversation barrel.
R10: the Models' init runs before the features are enabled, so a
feature's models is a plain property, not a getter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
R8: the tools-list rule (offers send_to_user) replaces the copies in
hand-off, change-notes, names-first-tools, the webhook test, the memory
test, and the same-pattern copies in the Skills and Knowledge tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The webhook Trigger id uses fireKeyPrefix (R7); bot-prompt-start and
bot-computer use the shared isTurnCall (R8); a turnChanges that still
returns a Promise is logged and stores nothing (R5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Daanish2003
Daanish2003 merged commit a756908 into main Oct 27, 2026
4 of 6 checks passed
@Daanish2003
Daanish2003 deleted the feature/sdk-follow-ups branch October 27, 2026 19:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Spec: SDK follow-ups (CI reliability and boundaries)

1 participant