This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryTemplate text may now appear anywhere in a skill definition without being misparsed as a target.
Full changelog
Authors' instinct is compute first, output last — every language they
know puts return/print at the end. Perry's qwen authorability test
caught the gap: when finally prompted to add an output template, the
model placed it at the bottom (after default:). Pre-v0.19.8 this
parsed as a malformed target with a misdirecting error:
# Skill: fetch-page
# Vars: URL=""
get:
shell(command="curl -s ${URL}") -> FetchedPage
default: get
OUTPUTS: ${FetchedPage} ← misparsed as `target OUTPUTS with deps`
→ Tier-1 [missing-dependency] Target 'OUTPUTS' depends on '${FetchedPage}'…
The fix — Pin 4 applied uniformly
Pin 4 was already the disambiguation rule for the top region. v0.19.8
extends it to all positions:
A column-0
<name>:line is a TARGET only if it is followed by an
indented op-block. Otherwise it's template text — regardless of
position (top, bottom, or both).
Subsumes the original top-only rule. Position is now free. Bottom-placed
templates parse cleanly: OUTPUTS: ${FetchedPage} (no op-block follows)
reads as template prose.
Multi-region templates — explicit error
If template content appears BOTH before any target AND after all
targets, raise a parse error per Perry's recommendation:
"Skill has body-text-as-output template content in two places
(before targets AND after targets). Pick one location: put the
template either above all targets OR below them, not both.
Concatenating across regions silently would hide the structural
ambiguity."
Loud over silent-concat. Forces the author to pick one location.
What changed
-
src/parser.ts— removed theinTemplateRegionpermanent-exit
state. Template capture now runs on every line and applies Pin 4
uniformly. AddedrecordTemplatehelper + multi-region tracking.
Blank lines inside target body (Bug 15 whitespace) NOT captured
as template — only blanks outside any target body. The v0.19.7
orphan-indented-op guard still fires for indented lines past any
target (preserves the silent-drop fix). -
tests/v0.19.4-output-template.test.ts— 8 regression tests:
bottom template parsing + compile + execute, Perry's qwen
OUTPUTS:case rendering clean, multi-region parse error,
top-only / bottom-only individually, Bug 15 target-body blanks
not contaminating template, full bundled-corpus regression.
1883 total tests (+8 net new).
Migration
No migration required. Top templates continue to work unchanged.
Authors may now write the template at the bottom of a skill as
their language instincts suggest.
Note: bdf760f4 (tier-3 advisory) deferred
Perry's companion finding — a tier-3 "no explicit output" advisory
that fires when a skill binds vars but writes no template / emit —
was deferred per her own sequencing note: "the template-anywhere
change reduces this one's urgency — once authors can put the
template where instinct says (the bottom), the 'forgot it entirely'
rate should drop. So I'd sequence this after the position fix
and re-measure." Watching the next dogfood rung before deciding.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Skillscript
All releases →Related context
Related tools
Earlier breaking changes
- v0.35.0 Editing `# Deadline:` on an approved skill drops it to Draft (signature invalidates).
Beta — feedback welcome: [email protected]