Taskless v0.11.2: Parse Errors, Update, and Feedback

Jakob Heuser, CTO

0.11.2 is a patch release, thirteen changesets. Three of them you will notice: check no longer loses every finding to one bad file, init tells you when update has work for you, and a new feedback subcommand lets you tell us whether a session went well.

One unparseable file no longer hides every finding

0.11.1 fixed four bugs where an absent value read as a clean pass.

0.11.2 closes one more version of that gap. A Vale rule reads a file's frontmatter before it can lint the body. If that frontmatter didn't parse, the whole Vale invocation used to abort before writing any result, so check reported [] for the entire run, which is the same output as a clean pass.

When Vale fails on one file's frontmatter, check reruns Vale without that file and reports the file as a vale-parse-error finding. Every other file keeps its findings. A malformed rule or a timeout still fails the whole run.

The Vale build we shipped through 0.11.1 was quadratic in a single file's size (80KB in 0.3s, 640KB in 14s, 1MB in 48s on that binary), and VALE_TIMEOUT_MS bounds the whole run rather than one file, so one large document could use up the whole timeout, and every other file's findings were lost with it. check now excludes a file over 128KB before Vale runs, and names it in a notices entry rather than a finding. Vale 3.21.0 ships in this release and fixes that slowdown upstream, so the 128KB guard is temporary. We'll remove it in the next patch.

init now points you at update

Running the CLI migrates your .taskless/ layout and refreshes installed skills on its own. That covers the directory. It does not cover the rules: a rewriter that now needs a fix, or a rule whose matching changed under a new engine version, is untouched by a migration. An agent that watched a migration succeed had no way to know the upgrade wasn't finished.

taskless update covers the rules. It walks a ledger, one section per release, from wherever your project last reconciled up to the version you're on, and names what changed for the rules you already have. The ledger shipped before 0.11.2. What's new is that init ends with an upgrade trailer that tells you to run update after a CLI version change, so you don't have to remember it exists. 0.11.2 also adds the first ledger entry since 0.11.0, the Vale 3.21.0 changes below, with what to do about each.

Tell us whether it worked

We can see how often check runs. We can't see whether anyone likes what it finds. 0.11.2 adds a feedback subcommand, reached through a survey invite at the end of four recipes: onboard, create-sg-rule, create-vale-rule, and create-remote-rule, which is where an agent-driven session most often goes wrong.

The invite shows once telemetry is on, the run isn't CI, and enough time has passed since the last ask. feedback send relays what you told the agent through PostHog: whether the task got done, what worked, what didn't. feedback dismiss records that you passed. Showing the invite holds the next one off for ten days; answering or dismissing holds it for twenty. DO_NOT_TRACK=1, TASKLESS_TELEMETRY_DISABLED=1, and CI=true turn it off entirely, like every other telemetry path in the CLI.

Versions

ast-grep goes to 0.45.3. An inline ast-grep-ignore comment now only suppresses a finding when the directive is the first text in the comment. Mentioning it in prose above a flagged line used to be enough. Rules that relied on that will start reporting after the upgrade.

Vale goes to 3.21.0. The changes that touch existing rules:

  • scope: doc(<selector>) picks part of a document by CSS selector.
  • A metric honors its own scope rather than always measuring the whole document.
  • .ipynb files read cell by cell.
  • A duplicated matcher in a rule's .vale.ini keeps its last assignment. It used to keep the first.
  • An unknown action name fails when the rule loads. It used to fail the first time it fired.

taskless agent update carries the full list with what to do about each.

Also in this release

  • info --json includes install.onboarded, so an agent following the onboard recipe reads the field it's told to read instead of undefined.
  • init --json writes only the parseable envelope to stdout, with human-readable notices moved to stderr, so taskless init --json | jq . works.
  • rule create --json and rule improve --json report a stray tests field through the standard error envelope instead of failing silently on stdout.
  • A reference stub under .claude/ or .agents/ no longer hardcodes the CLI invocation in its description. The invocation lives in the canonical skill file and the stub points at it.
  • .taskless/.gitignore ignores .tmp-*, so a scratch request file an agent forgot to clean up stays a stray file instead of landing in a commit.
  • A check --json Vale finding's line number is no longer off by one for a raw-scope rule anchored on a leading newline.
  • Telemetry records six adoption dimensions per event now, and reports rule count, so we can tell a clean scan from a project with no rules.

Getting it

npx @taskless/cli

If you're already on 0.11, run taskless update. It tells you what this release changes for the rules you already have.