Skip to content

skillscript-runtime v0.15.4

Choose a tag to compare

@github-actions github-actions released this 01 Jun 19:08

Two findings + a docs cleanup bundled. None are runtime correctness bugs;
both fixes surfaced when the warm adopter (Phase 2 graduate) updated from
v0.15.0 → v0.15.3 to begin Phase 3 (custom DataStore against AMP).

skill-store-roundtrip.skill.md is now idempotent

The SkillStoreMcpConnector bridge has carried an overwrite-required guard
since v0.15.0 — $ skill_write against an existing skill name throws
"skill '<name>' already exists. Pass overwrite=true to replace." unless
the op opts in. The bundled skill-store-roundtrip demo never carried
the kwarg, so it worked on first run against an empty store and failed
on every subsequent run. Phase 1 cold agent ran it once; Phase 3 warm
agent rerunning it after upgrade hit the failure mode.

Fix: the demo's $ skill_write now carries overwrite=true. The body
re-stamped (v1:f0f5da75); scaffold/skills copy synced. Three sequential
runs against the bundled FilesystemSkillStore return the same transcript
every time.

This was a "probe-twice" gap on my side at v0.15.0 ship — the demo passed
my one-run probe and the cold-agent one-run probe; neither caught the
non-idempotency. Banked the discipline as feedback memory alongside the
fix.

SQLite ExperimentalWarning suppression moves to load-site

v0.15.1 filtered the warning at src/cli.ts — the CLI entry. Programmatic
adopters running their own bootstrap (every Phase 2+ adopter) never hit
that filter, so the warning re-surfaced on every tsx amp-bootstrap.ts.
Phase 3 warm agent re-confirmed it during their update probe.

Fix: new src/sqlite-warning-suppress.ts shared helper — idempotent (first
call installs, subsequent calls no-op) and narrow (only the specific
node:sqlite ExperimentalWarning is intercepted; all other warnings pass
through to the default handler unchanged). Called from both
src/connectors/data-store.ts:loadDatabaseSync() and
src/connectors/sqlite-skill-store.ts:loadDatabaseSync() at the actual
requireNode("node:sqlite") site, so the suppression fires regardless
of whether the consumer is the CLI or a programmatic bootstrap.

The v0.15.1 CLI-only suppression block is removed — load-site coverage
is strictly broader.

For consumers who want the warning visible (e.g., debugging which node
version's sqlite is loading), restoreSqliteWarning() is exported from
the same module — but no default path needs it.

Adopter-playbook timeless rewrite + Phase 3 prep

While in the patch, bundled a docs sweep flagged during Phase 3 prep:
the playbook had retrospective version-history pollution
("was advisory in v0.14.0; v0.14.1 makes it enforceable", "Pre-v0.14.1...",
"(v0.14.1)" parenthetical markers). Adopter docs describe present state;
CHANGELOG owns history. Two existing bullets rewritten to be timeless,
two new bullets added for DataStore-substrate context (in-skill write
asymmetry between skill_write and data_write trust models; mutation gate
fires upstream of the bridge), and two cross-references added to the
§"Wire your substrates" section for adopters discovering security knobs
(allowed_tools allowlist + enable_unsafe_shell discipline).

Banked the playbook-is-timeless discipline as a feedback memory so the
pollution pattern doesn't reappear next time someone edits adopter docs.

Files changed

  • examples/skillscripts/skill-store-roundtrip.skill.mdoverwrite=true + re-stamped.
  • scaffold/skills/skill-store-roundtrip.skill.md — synced with examples/ version.
  • src/sqlite-warning-suppress.ts (NEW) — shared idempotent helper.
  • src/connectors/data-store.ts — calls suppressor before requireNode("node:sqlite").
  • src/connectors/sqlite-skill-store.ts — same.
  • src/cli.ts — removed the v0.15.1 CLI-only suppression block (now redundant).
  • docs/adopter-playbook.md — version-pollution rewrites + 2 additions + 2 cross-references.
  • package.json — version 0.15.3 → 0.15.4.
  • tests/dogfood-t7.test.ts — version assertion.
  • CHANGELOG.md — this entry.

Cold-adopter dogfood arc state

  • Phase 1 findings (4): all closed in v0.15.1 + v0.15.2.
  • Phase 2 findings (4): all closed in v0.15.3.
  • Phase 3 update findings (2): closed in v0.15.4.

Phase 3 (custom DataStore against AMP) starts cleanly against v0.15.4.