pi-gauntlet 5.2.0 → 5.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +3 -2
- package/package.json +1 -1
- package/skills/linear/SKILL.md +51 -21
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v5.2.2 - 2026-09-01
|
|
4
|
+
|
|
5
|
+
- `linear` skill: the once-per-session `linearis issues usage` sweep no longer requires authentication. `usage` prints local help and makes no API call, so gating it on `auth status` skipped the cheap staleness check exactly when the agent was already degraded; it now runs whenever the binary is present. Also drops a dead "or the MCP path is in use" skip clause - the sweep sits inside the present-binary branch, and MCP is the fallback only when the binary is missing. Prose only, no code or config surface. Follow-up to #22; spec `doc/specs/2026-09-01-gh-22-linear-cli-verification.md` amended to match.
|
|
6
|
+
|
|
7
|
+
## v5.2.1 - 2026-09-01
|
|
8
|
+
|
|
9
|
+
- `linear` skill: seven `linearis` invocations corrected against the installed CLI (2026.7.0) - the nonexistent `issues comment-edit` becomes `issues edit <comment>`, `reply` takes a root discussion thread ID, `edit-reply` takes `<reply>`, `files upload` takes `<file>` (two occurrences), `attachments create`'s issue positional is optional, and gotcha (e) now documents two distinct relation flag sets (`relations add` has no `--blocked-by`). Setup is **preferred, not required**: a missing or unauthenticated `linearis` degrades and reports instead of blocking the run (MCP stays the fallback for a missing binary only). Drift resistance added in place - a once-per-session `linearis issues usage` consult for the issue-domain rows, a visible verified-against stamp under the quick-reference table, and one narrow parser-shape row in the failure table. Fixes #22. Spec: `doc/specs/2026-09-01-gh-22-linear-cli-verification.md`.
|
|
10
|
+
|
|
3
11
|
## v5.2.0 - 2026-08-31
|
|
4
12
|
|
|
5
13
|
- **`plan_check` deterministic plan checker (new tool).** `phase-tracker` now registers `plan_check({ planPath })`, running 8 mechanical plan-vs-spec checks (table closure, quote integrity, anchor resolution, path existence, placeholder scan, wave file-disjointness, solo-line presence, header-only entrypoint) from a pi-free library at `extensions/lib/plan-check.ts`. Fail-closed: it never throws, and findings are returned for the main model to fix autonomously.
|
package/README.md
CHANGED
|
@@ -262,8 +262,9 @@ Use the `jira` CLI (authenticated via `jira login`), not `gh` or `linearis`.
|
|
|
262
262
|
- post comment (Reporter note only): `jira issue comment ABC-123 --body "<text>"`
|
|
263
263
|
```
|
|
264
264
|
|
|
265
|
-
**`linear` setup:**
|
|
266
|
-
MCP server as a fallback when `linearis` is
|
|
265
|
+
**`linear` setup:** preferred, not required - `linearis` installed and authenticated
|
|
266
|
+
(or a Linear MCP server as a fallback when `linearis` is missing). Without either, the
|
|
267
|
+
skill reports the gap and continues; it never blocks the run. Optional - the five
|
|
267
268
|
`## Issue tracker` override keys (`tracker`, `workspace urlKey`, `default team`,
|
|
268
269
|
`self`, `id cache`); the full schema is documented once, in
|
|
269
270
|
[skills/linear/SKILL.md](./skills/linear/SKILL.md) - not restated here. Off switch:
|
package/package.json
CHANGED
package/skills/linear/SKILL.md
CHANGED
|
@@ -21,8 +21,10 @@ this skill alters re-gates.
|
|
|
21
21
|
|
|
22
22
|
## 1. Setup
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
resolution order: `--api-token`, `LINEAR_API_TOKEN`, `~/.linearis/token`.
|
|
24
|
+
Preferred: `linearis` on PATH and authenticated (`linearis auth status`). Token
|
|
25
|
+
resolution order: `--api-token`, `LINEAR_API_TOKEN`, `~/.linearis/token`. This is a
|
|
26
|
+
preference, not a precondition - a missing or unauthenticated CLI degrades Linear
|
|
27
|
+
functionality and is reported, never blocks the run.
|
|
26
28
|
|
|
27
29
|
> **No `linearis` installed?** If `command -v linearis` fails, fall back to a
|
|
28
30
|
> **Linear MCP server** when the harness has one configured - its tools cover the
|
|
@@ -32,7 +34,21 @@ resolution order: `--api-token`, `LINEAR_API_TOKEN`, `~/.linearis/token`.
|
|
|
32
34
|
> examples below are then guidance for the equivalent MCP call, not literal
|
|
33
35
|
> shell. pi-gauntlet ships no MCP setup; MCP is opportunistic.
|
|
34
36
|
|
|
35
|
-
No `linearis` and no MCP: report inability, never fabricate.
|
|
37
|
+
No `linearis` and no MCP: report inability, never fabricate. MCP is the fallback for a
|
|
38
|
+
**missing binary only** (`command -v linearis` fails); an installed-but-unauthenticated
|
|
39
|
+
`linearis` re-auths rather than rerouting to MCP.
|
|
40
|
+
|
|
41
|
+
**Session sweep.** When `linearis` is present, run `linearis issues usage` once per
|
|
42
|
+
session, before the first issue operation, and treat its output as ground truth for the
|
|
43
|
+
**issue-domain rows** of the section 3 table (Read, Search, List, Create, Update,
|
|
44
|
+
Discuss, Reply, Edit). Non-issue domains such as labels, teams, users, cycles, projects,
|
|
45
|
+
attachments, files are outside this call's coverage and fall to the section 8 backstop,
|
|
46
|
+
same as any row the sweep didn't run or couldn't reach. Authentication is not required -
|
|
47
|
+
`usage` prints local help and makes no API call, so the sweep still runs on an
|
|
48
|
+
installed-but-unauthenticated CLI. If the call errors or returns nothing, note once that
|
|
49
|
+
the issue-domain rows are unverified this session and continue. The sweep lives inside
|
|
50
|
+
the present-binary branch only - strictly after the override check above - so
|
|
51
|
+
`tracker: github | none | <unknown>` still means zero probing.
|
|
36
52
|
|
|
37
53
|
Optional: each `## Issue tracker` override key below, with its degradation.
|
|
38
54
|
|
|
@@ -87,43 +103,50 @@ treated as absent.
|
|
|
87
103
|
| Create | `linearis issues create "<title>" --team <default team> [--parent-ticket <id>] --status <status>` | Title is positional (no `--title`); `--team` required; `--parent-ticket` for sub-issues; state an explicit `--status` rather than relying on the default. |
|
|
88
104
|
| Update | `linearis issues update <id> --status <status> --assignee <who> --labels <labels> --due-date <date> [relation flags]` | See gotcha (e) for relation flags. |
|
|
89
105
|
| Discuss | `linearis issues discuss <id> --body "<text>"` | Starts a new top-level comment thread. |
|
|
90
|
-
| Reply | `linearis issues reply <
|
|
91
|
-
| Edit | `linearis issues
|
|
106
|
+
| Reply | `linearis issues reply <thread> --body "<text>"` | `<thread>` is a root discussion thread ID, not an issue ID - see gotcha (b). |
|
|
107
|
+
| Edit | `linearis issues edit <comment> --body "<text>"` / `linearis issues edit-reply <reply> --body "<text>"` | Full rewrite, no history - see gotcha (a). |
|
|
92
108
|
| Labels, teams, users, cycles | `linearis labels list`, `linearis teams list`, `linearis users list`, `linearis cycles list` | Use to resolve names to IDs; see id-cache convention. |
|
|
93
|
-
| Attachments | `linearis attachments create <
|
|
94
|
-
| Upload | `linearis files upload <
|
|
109
|
+
| Attachments | `linearis attachments create [<issue>] --url <url>` | Positional is optional (`--issue <issue>` alias); link-only, no inline render - see gotcha (d). |
|
|
110
|
+
| Upload | `linearis files upload <file>` | Returns an `assetUrl` for inline embedding - see gotcha (d). |
|
|
95
111
|
|
|
96
112
|
Workspace values above (`<default team>`, `<who>`, etc.) are placeholders bound to
|
|
97
113
|
the override keys in section 2 - never a real urlKey, team prefix, or email.
|
|
98
114
|
|
|
115
|
+
Snapshot verified against `linearis 2026.7.0` (2026-09-01). The installed CLI's
|
|
116
|
+
`usage`/`--help` is ground truth; when they disagree, follow the CLI and tell the user
|
|
117
|
+
this table is stale.
|
|
118
|
+
|
|
99
119
|
## 4. Gotchas
|
|
100
120
|
|
|
101
121
|
a. **Comment edit is a rewrite, no visible history.** To amend rather than replace,
|
|
102
122
|
fetch the old body and pass `OLD + "\n\n" + ADDITION`; surface the overwrite diff
|
|
103
123
|
to the user before pushing.
|
|
104
124
|
|
|
105
|
-
b. **`reply` targets must be root
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
requested edit of the caller's own
|
|
111
|
-
in (a).
|
|
125
|
+
b. **`reply` targets must be root discussion threads.** `--help`: "`<thread>` must be a
|
|
126
|
+
root discussion thread ID." A non-root target fails with a misleading validation
|
|
127
|
+
error. To respond in-thread, resolve the thread's root via
|
|
128
|
+
`discussions`/`--with-comment-threads` and `reply` to that root, or start a new
|
|
129
|
+
`discuss` thread instead. `edit-reply` is NOT a reply fallback - it rewrites an
|
|
130
|
+
existing reply. Use it only for an explicitly requested edit of the caller's own
|
|
131
|
+
reply, behind the rewrite-confirmation rule in (a).
|
|
112
132
|
|
|
113
133
|
c. **`@ABC-123` never resolves via the CLI/API.** Use the full issue URL
|
|
114
134
|
`https://linear.app/<workspace urlKey>/issue/<id>`, which unfurls to a native
|
|
115
135
|
badge and records a relation. A literal `@ID` in a body stays literal text.
|
|
116
136
|
|
|
117
|
-
d. **Images go inline, links don't render.** `linearis files upload <
|
|
137
|
+
d. **Images go inline, links don't render.** `linearis files upload <file>` ->
|
|
118
138
|
`` in the body embeds the image. `attachments create` only
|
|
119
139
|
links a URL and renders no image. Asset URLs returned by a `read` are
|
|
120
140
|
short-lived signed JWTs - re-upload for a fresh one, never re-paste an old one.
|
|
121
141
|
|
|
122
|
-
e. **
|
|
123
|
-
`--duplicate-of
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
issue
|
|
142
|
+
e. **Two different relation flag sets.** On `create`/`update`: `--blocks`,
|
|
143
|
+
`--blocked-by`, `--relates-to`, `--duplicate-of`, `--similar-to`, plus
|
|
144
|
+
`--remove-relation` on `update`. These are single-value - repeating one in a single
|
|
145
|
+
call keeps only the last value (observed behavior, not stated by `--help`). On
|
|
146
|
+
`linearis issues relations add <issue>` the set is smaller and comma-separated:
|
|
147
|
+
`--blocks`, `--related`, `--duplicate`, `--similar` - there is **no** `--blocked-by`,
|
|
148
|
+
so express that direction by inverting the relation or using `update`. For multiple
|
|
149
|
+
relations in one call use `relations add`; otherwise issue separate `update` calls.
|
|
127
150
|
|
|
128
151
|
f. **`create`'s title is positional.** There is no `--title` flag.
|
|
129
152
|
|
|
@@ -173,9 +196,16 @@ Safety rules, in addition to the write gate above:
|
|
|
173
196
|
| Missing `--team` error on create | `--team` is required | Supply `--team <default team>`. |
|
|
174
197
|
| Search returns nothing unexpected | Search is case-sensitive | Retry with matching case. |
|
|
175
198
|
| Cannot edit a comment | Comment belongs to another user | Reply instead of editing. |
|
|
176
|
-
| Reply validation error | Target is not a root
|
|
199
|
+
| Reply validation error | Target is not a root discussion thread | See gotcha (b). |
|
|
177
200
|
| `@ID` shows as literal text | `@ABC-123` mentions don't resolve | Use the full issue URL (gotcha c). |
|
|
178
201
|
| Read is slow | Big ticket with many comments/attachments | Drop `--with-*` flags not needed. |
|
|
202
|
+
| Parser-shape failure on a documented invocation: unknown command/option, unexpected argument | Section 3's snapshot may have drifted from the installed CLI | Re-read that subcommand's `--help`; report the row stale **only if** help actually contradicts it, then follow help |
|
|
203
|
+
|
|
204
|
+
The last row's trigger is deliberately narrow. Data, auth, status-name, and root-thread
|
|
205
|
+
validation errors have their own rows above and are **not** drift - routing them to "the
|
|
206
|
+
skill is stale" would misdiagnose ordinary failures. This row is the reactive path for
|
|
207
|
+
when the section 1 session sweep didn't run, couldn't run, or doesn't cover the failing
|
|
208
|
+
subcommand (any row outside the `issues` domain).
|
|
179
209
|
|
|
180
210
|
## 9. Discovery pointers
|
|
181
211
|
|