Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .changeset/check-paths-outside-project.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/feedback-channels.md

This file was deleted.

29 changes: 0 additions & 29 deletions .changeset/rename-rule-checks.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/sg-empty-scope-notice.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/sg-rule-quirks.md

This file was deleted.

2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "taskless",
"description": "Taskless skills for code quality rules, authentication, and project management",
"version": "0.12.0",
"version": "0.13.0",
"author": {
"name": "Taskless"
},
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "@taskless/skills",
"version": "0.12.0",
"version": "0.13.0",
"license": "MIT",
"repository": "taskless/cli.git",
"scripts": {
Expand Down
37 changes: 37 additions & 0 deletions packages/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,42 @@
# @taskless/cli

## 0.13.0

[Compare with v0.12.0](https://github.com/taskless/cli/compare/v0.12.0...v0.13.0)

### Minor Changes

- 6c661e9: **Breaking: the two rule-checking commands are renamed for the question each one answers.**

| 0.13 | before 0.13 | question |
| ---------- | ----------- | ---------------------------------------------------------------------- |
| `validate` | `verify` | Is the rule well formed? Decided from its files alone. |
| `verify` | `test` | Does the rule check what you want? Runs `validate`, then the fixtures. |

What to change:
- **A call to `taskless test`** fails as an unknown command. Call `taskless verify`. The output is the same.
- **A call to `taskless verify`** still runs, but it now runs the rule's fixtures as well, so it is stricter and slower. For the old quick check, call `taskless validate`. The JSON envelope is unchanged.
- **A pre-commit hook installed from the `hooks` recipe** runs `taskless test` and fails after the upgrade until it says `taskless verify`.
- **The `verify-rule` agent topic** is now `validate-rule`.
- **The `./schemas` export `verifyTestOutputSchema`** is renamed `ruleCheckOutputSchema`, with no alias. The schema itself is unchanged.
- **`@taskless/cli/reference.json`** moves to `version` 3. Its shape is unchanged, but `enforcedBy` now reads `"validate"` or `"verify"`, so each value names a different command than it did in version 2. The corpus's own `version` is the signal a consumer should refuse on, not the package version.

`validate` also catches more on an ast-grep rule:
- It has ast-grep load the rule on its own, so a `kind` the grammar does not have (a keyword such as `readonly`, a Markdown inline construct such as `link`) is rejected under that rule's name, in ast-grep's own words. Before, it passed and then broke every `sg` rule's report in `check`.
- A top-level `strictness:` is rejected under the new constraint `sg-no-top-level-strictness`. ast-grep ignores the key there, so the pattern stayed narrowed while the rule read as fixed.
- It reports three silent authoring traps from `create-sg-rule` as notices, which never fail a rule: `$$$` beside a comma, `follows`/`precedes` without `stopBy: end`, and a callee `regex` that misses awaited generic calls in TypeScript and Tsx.

`verify` runs an ast-grep rule's fixtures against a config holding only that rule, so another rule ast-grep refuses no longer fails it under the wrong name.

Installed skills pin their CLI version, so a project keeps the old names until it upgrades, and the upgrade rewrites the skill with the new ones.

### Patch Changes

- 7140552: `check` no longer reports a clean result for paths it never scanned. A path outside the project, existing or not, is refused with `INVALID_INPUT` and exit 1. A path that does not exist is still skipped with exit 0, so raw `git diff --name-only` output can still be piped in, but the skipped paths are now named in a notice (`notices` under `--json`).
- eaa4061: An agent can now send the Taskless team general feedback (`taskless agent feedback`) or a bug report (`taskless agent bug-report`) on the user's behalf, without a GitHub account. Both show the user the exact payload and send only on their explicit yes, and both appear in the `taskless agent` index. A bug report's version information is filled in by the CLI from local state. The invited rule-authoring survey's recipe is renamed to `taskless agent rule-feedback`; its questions, invite, and cadence are unchanged. `feedback send` payloads now carry a required `kind` (`rule`, `general`, or `bug`). With telemetry disabled, nothing is sent and the CLI points to https://github.com/taskless/cli/issues instead.
- a36bab1: `taskless verify` (formerly `taskless test`) now says when an ast-grep rule's `files:`/`ignores:` globs match no file in the project. A fixture snippet has no path, so the globs never apply to it, and a rule scoped to `lib/**` in a project that keeps its code in `src/` used to pass `taskless test` while `check` never ran it. The rule still passes; the result carries a notice naming the globs, on the human output and in `notices` under `--json`. Rules scoped by `language:` alone are not checked, since a project with no code in that language is honestly clean.
- 7f66001: `taskless agent create-sg-rule` now collects its ast-grep authoring traps into one **Quirks** section, and the recipe moves to topic v7. Each entry gives the symptom (a config error that aborts the scan, or a rule that silently matches nothing), a minimal repro, and the workaround, and the table says which ones `validate` reports. Two new entries: a keyword such as `readonly` is not a valid `kind` (read kinds from `--debug-query=ast`, not the CST dump), and in TypeScript and Tsx `await f<T>(...)` parses as a call of the await expression, so a rule keyed on the callee silently skips every awaited generic call. Both workarounds cover the common shapes (`private readonly x`, optional and decorated parameters, method callees) and pass `verify`.

## 0.12.0

[Compare with v0.11.2](https://github.com/taskless/cli/compare/v0.11.2...v0.12.0)
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@taskless/cli",
"version": "0.12.0",
"version": "0.13.0",
"license": "MIT",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion skills/taskless/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ description: |
`agent route`; it does NOT suppress the skill.
metadata:
author: taskless
version: 0.12.0
version: 0.13.0
commandName: tskl
compatibility: Designed for Agents implementing the Agent Skills specification.
---
Expand Down