chore: version packages - #308
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
10 times, most recently
from
September 11, 2026 00:40
052788e to
280292e
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 11, 2026 01:05
280292e to
0a855df
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@taskless/cli@0.11.2
Compare with v0.11.1
Patch Changes
b8b6f32: Fixed reference stubs (
.claude/,.agents/, etc.) freezing a stale,unpinned
npx @taskless/cliinvocation into their own frontmatterdescriptionforever, even on a nightly install whose canonical.taskless/skills/taskless/SKILL.mdcorrectly names the pinned@taskless/cli-nightly@<version>package. A stub'sdescriptionis copiedverbatim from source and, unlike canonical content, is never rewritten for
the current build target — so any CLI invocation baked into it would go
stale on the very first release that changed. The invocation is removed from
the skill and command
descriptionfields entirely: the canonical filealready carries the correct, per-build invocation, and a stub always defers
to it, so there is no longer a second copy that can drift.
2d088fa:
info --jsonnow includesinstall.onboarded, matching the field theonboardrecipe already instructs agents to read from that command. Beforethis, the field was written to
.taskless/taskless.jsonand enforced byonboard's own gate, but omitted from theinfo --jsonpayload, so an agentfollowing the recipe read
undefinedand re-ran a full discovery pass on aproject that had already onboarded. A manifest that omits the field now
reports
onboarded: false, matching the strict-equality gateonboarditself applies, rather than
nullor leaving the key out.548f268:
init --jsonnow writes only the parseable envelope to stdout. Previously,the non-interactive install path (also reached from
init --no-interactive --json) unconditionally logged human-readable prose — the "no toolsdetected" fallback notice and the per-target skill/command summary — to
stdout ahead of the JSON envelope, so
taskless init --json | jq .failedwith a JSON parse error. That prose now goes to stderr, where it stays
visible to a person watching the terminal without corrupting a machine
consumer's view of stdout, matching how
verify/testand the migrationnotice already behave under
--json.b68b095:
taskless initis now the batch install in every context, and--no-interactiveis dropped: a barenpx @taskless/cliin a terminal is the wizard,initis the install and upgrade path for agents, scripts, and CI, andagent initis the recipe. A script that still passes the flag getsinitunchanged.initends with an upgrade trailer naming the directories that hold changed files and, after a CLI version move, pointing attaskless update; the--jsonenvelope gainscliVersion, a per-targettargetssummary, and achangedflag. A canonical.taskless/file whose bytes already match the bundle is no longer rewritten or reported as written. Theagentsubcommand serves every recipe under a fetch-time directive (fetch again next task; a session that installed or upgraded Taskless holds a stale skill), which the@taskless/cli/promptsexport does not carry and whichheader: falsestrips with the version. Theagent initrecipe is rewritten for the agent that runs it, and the skill andtsklcommand say a recipe is fetched again for each task. The skill and command sources name the CLI through the%(TASKLESS_CLI)splaceholder, rendered at install, so a nightly or dev build no longer depends on finding the literalnpx @taskless/cliin prose.54cd0c0:
checkno longer loses every finding in a run because one file's frontmatter could not be parsed. A Vale front-matter error used to abort the
entire Vale invocation before any result was written, so
resultscame back[]for the whole run regardless of how many other files had findings — and[]was indistinguishable from a genuinely clean pass.runValenow retries around a file Vale's own error attributes to one of therun's targets, excluding it and reporting it as a per-file finding
(
ruleId: "vale-parse-error",severity: "error") instead of failing thewhole run. Every other file's findings are reported normally. A failure Vale
does not attribute to a single target file — a malformed rule, a timeout, a
crash — is unaffected and still fails the run exactly as before.
3cfbe5b:
rule create --jsonandrule improve --jsonnow emit the standard{ ok: false, code, message }envelope on stdout when a file-set rule arrives witha stray
testsfield, instead of throwing a bare, unreportedCLIError.Previously the guard threw from inside the command's own
trywithout goingthrough the command's
fail()helper, so under--jsonnothing was writtento stdout at all — prose landed on stderr and the process exited 1,
indistinguishable from a crash, and the
RULE_GENERATION_FAILEDcode thecreate-remote-rulerecipe documents as a branch target was never actuallyreachable for this guard. Both call sites now route through
fail(), and theduplicated guard itself was consolidated into one shared check so the two
copies cannot drift again silently.
Not addressed here: rules written to disk earlier in the same delivery loop
(before the guard fires) are still not named in the failure envelope. The
published envelope shape (
CLIErrorEnvelope) has no field for a partial filelist, and adding one is a schema change out of scope for this fix.
b6668ea: Corrected the published
@taskless/cli/schemasdocstrings forverifyOutputSchemaandvaleVerifyOutputSchema, which named a command form—
taskless rule verify <id> --json— that was removed when rule addressingmoved from id to path. No runtime behavior changes; the schemas themselves
are unchanged. A consumer reading these docstrings (e.g. via editor
tooltips or generated docs) would previously be pointed at a command that
does not exist.
878a53d:
checkno longer risks losing every Vale finding in a run to one oversizedfile. Vale's cost is quadratic in a single file's size (measured against the
pinned binary: 128KB is ~0.8s for one rule, 384KB is already ~7s), and
VALE_TIMEOUT_MSbounds the whole run, not one file — a large enoughdocument could consume most or all of that budget on its own, and a timeout
discards every other file's findings along with it (the same failure One unparseable file zeroes findings for the whole check run #300
fixed, on a path One unparseable file zeroes findings for the whole check run #300 did not cover).
runValenow excludes a target file over 128KB (VALE_MAX_FILE_BYTESinsrc/rules/vale/run.ts) before invoking Vale at all, the same preemptivetreatment already given to a format Vale cannot parse — but only when some
Vale rule's own
.vale.inisection could actually reach that file.assembleValeConfignow returns the section patterns it wrote alongside theconfig path, and the size scan globs by those patterns (
findOversizedFilesin
src/rules/vale/formats.ts) instead of walking every file in the project.A first version of this fix scanned the whole tree unconditionally and named
pnpm-lock.yamlandpackages/cli/CHANGELOG.mdas "not checked" on this veryrepository, even though no rule's matcher touches either file — Vale was
never going to open them, so that was a false positive, not a caught coverage
hole. Excluded files are named in a
noticesentry rather than a finding:unlike an unparseable file (where Vale itself proves the file was a real
target by erroring on it), this exclusion is a preemptive guess from a
filesystem walk, and a soft advisory fits an unconfirmed guess better than a
hard error.
A consumer may now see a
checkthat previously counted a large file'sprose findings instead report a
noticesentry naming that file as skipped— but only for a file some rule's own scope actually reaches. 128KB is
comfortably past hand-written prose (roughly 20,000 words); this should only
affect generated output, pasted data, or exported notes checked directly
against a matching rule.
665802d: Telemetry now records six adoption dimensions on every event:
workspaceIdandrepositoryId(both hashed),envOS,ci,ciProvider, andlanguageStack.cli_check_completedalso reportsruleCount, so a scan that loaded no rulesis distinguishable from one that loaded rules and found nothing.
Nothing to react to. No command changes behaviour, no output changes shape, and
every dimension falls back to a sentinel rather than failing — telemetry is not
a precondition for any command.
TASKLESS_TELEMETRY_DISABLED=1andDO_NOT_TRACK=1continue to short-circuit before any of it is resolved, so theopt-out remains an opt-out of the work rather than only of the send.
patchrather thanminorbecause the package is pre-1.0, where added surfacedoes not earn a
minor, and because none of this is API a consumer can call.4626c20: Fixed
check --jsonreporting araw-scope Vale finding'srange.start.lineone line earlier than the flagged text (check --json reports Vale findings 1 line early, or 2 lines early for raw-scope rules #297). A
rawpattern isconventionally anchored with a leading
\nso it can require "start of line"against the unparsed document; that
\nis part of Vale's reported match, andVale attributes
Lineto the newline ending the previous line rather than tothe line the flagged text is actually on. The mapper now counts a match's
leading newlines and adds them back before converting to the 0-indexed
CheckResult.rangeevery source uses.default-scope findings were not affected: Vale already reports the correct1-based line for them, and
range.start.lineis 0-indexed by design (everysource in
CheckResult.rangeis —format.tsadds 1 back when it displays,and check --json reports Vale findings 1 line early, or 2 lines early for raw-scope rules #297's "off by one" for default-scope rules was this documented
convention compared against a 1-based file line, not a bug).
Build Info
npx @taskless/cli-nightly@0.11.2-20260911010750xea9cef8Built from: ea9cef8
Built at: 2026-09-11 01:07:50