Skip to content

release 2026.6.0 to stable channel - #231

Merged
iamfj merged 122 commits into
mainfrom
next
Jul 4, 2026
Merged

release 2026.6.0 to stable channel#231
iamfj merged 122 commits into
mainfrom
next

Conversation

@linearis-bot

@linearis-bot linearis-bot Bot commented Jun 16, 2026

Copy link
Copy Markdown

Purpose

Promote tested prerelease changes from next into stable channel on main.

Target stable version

2026.6.0

Ships in stable (releasable changes)

  • #227 fix(discussions): forward parent entity id when replying to a thread by @jjuraszek
  • #232 feat(labels): add issue label CRUD commands by @doublerebel
  • #233 feat(projects): restore project workflow options by @ralfschimmel
  • #234 feat: restore document attachment compatibility by @ralfschimmel
  • #235 feat(issues): restore relation commands by @ralfschimmel
  • #238 fix(milestones): use $input convention for milestone mutations by @iamfj
  • #239 feat(output): add --compact and --fields flags for token-efficient output by @iamfj
  • #245 feat(cli): add passive update notifier and version command by @iamfj
  • #259 refactor(client): replace SDK rawRequest with native fetch transport by @iamfj
  • #263 perf(issues): batch-resolve assignee and IDs in create/update by @iamfj
  • #265 feat(skill): add agent skill and Claude Code plugin for the CLI by @iamfj
  • #267 feat(issues): add activity command with threaded discussion timeline by @iamfj
  • #268 feat(teams): add team create, update, and membership management by @iamfj

Also included (no version impact)

  • #216 chore(deps): update dev dependencies (non-major) by @renovate
  • #217 chore(deps): update dependency clean-publish to v7 by @renovate
  • #218 chore(deps): update graphqlcodegenerator monorepo (major) by @renovate
  • #222 chore(deps): update commitlint monorepo to v21 by @renovate
  • #236 chore(deps): update github actions (major) by @renovate
  • #237 test(milestone): guard against input-wrapped variable regression (milestones create/update: variables wrapped in { input } but mutations use flat variables (create hard-fails; update silently drops fields) #228) by @iamfj
  • #240 ci(conductor): add shared Conductor settings.toml by @iamfj
  • #241 refactor(codegen): map GraphQL custom scalars to concrete types by @iamfj
  • #242 chore: introduce knip dead-code detection by @iamfj
  • #243 ci: centralize workflow setup and pin actions to SHAs by @iamfj
  • #244 fix(ci): skip PR comment posting for fork pull requests by @iamfj
  • #246 refactor(client): infer request types from TypedDocumentNode by @iamfj
  • #247 refactor(services): co-locate projection types with their services by @iamfj
  • #248 refactor(common): centralize Priority and LabelMode domain values by @iamfj
  • #249 refactor(resolvers): replace loose Record types with narrow projections by @iamfj
  • #250 docs: add comments-to-discussions migration guide and restructure README by @iamfj
  • #251 refactor(output): enforce JSON-serializable output at compile time by @iamfj
  • #252 refactor(commands): centralize Commander action typing via commandAction by @iamfj
  • #253 ci: type-check test files in a dedicated tsc pass by @iamfj
  • #254 refactor(services): move filter/input construction into service layer by @iamfj
  • #255 refactor(services): extract shared mutation-payload assertion helpers by @iamfj
  • #256 docs(readme): refine agent prompt for Linear CLI usage by @iamfj
  • #257 refactor: enable stricter TypeScript compiler flags by @iamfj
  • #258 refactor(common): brand resolved IDs with a compile-time UUID type by @iamfj
  • #260 refactor(graphql): add lean filter-based lookup queries for resolvers by @iamfj
  • #261 refactor(resolvers): migrate ID resolvers to GraphQLClient and drop Linear SDK by @iamfj
  • #262 docs: reflect Linear SDK removal in docs and test mocks by @iamfj
  • #266 docs: add skills.sh badge to README by @iamfj
  • #269 ci: Fail release on failed npm publish and use OIDC trusted publishing by @iamfj
  • #270 chore(conductor): add repository agent prompts by @iamfj

Maintenance commits without associated PR

  • chore(release): 2026.6.0-next.13 [skip ci] (fb32f50)
  • chore(release): 2026.6.0-next.12 [skip ci] (aa2e472)
  • chore(release): 2026.6.0-next.12 [skip ci] (29bb9bd)
  • chore(release): 2026.6.0-next.11 [skip ci] (4d863bf)
  • chore(release): 2026.6.0-next.10 [skip ci] (58b8745)
  • chore(release): 2026.6.0-next.9 [skip ci] (2e8fdc6)
  • chore(release): 2026.6.0-next.8 [skip ci] (df2219a)
  • chore(release): 2026.6.0-next.7 [skip ci] (ccc03c8)
  • chore(release): 2026.6.0-next.6 [skip ci] (ae86863)
  • chore(release): 2026.6.0-next.5 [skip ci] (89245c9)
  • chore(release): 2026.6.0-next.4 [skip ci] (5ea8768)
  • chore(release): 2026.6.0-next.3 [skip ci] (5220447)
  • chore(release): 2026.6.0-next.2 [skip ci] (731d52d)
  • chore(release): 2026.6.0-next.1 [skip ci] (62ba4e6)

Compare

main...next

Install release candidate

Note

Please test prerelease changes in this PR and share feedback directly on this PR so we can address issues before stable release. Mention your installed version (linearis --version) and repro steps. Use @next for rolling prerelease train, or exact version below for this staged candidate.

npm install -g linearis@next
npm install -g linearis@2026.6.0-next.13

Notes

  • This PR is auto-maintained when a prerelease is published from next.
  • Merge this PR to promote current prerelease train to stable.
  • Releasable classification mirrors semantic-release policy (feat/fix/perf/revert plus breaking changes, excluding ci/release/workflow scopes).

jjuraszek and others added 3 commits June 16, 2026 13:19
replyToDiscussion built the CommentCreateInput with only parentId + body,
omitting the entity id (issueId/projectId/initiativeId) that Linear requires
even on a threaded reply, so every reply failed with:

  Argument Validation Error - Exactly one of ... issueId must be defined.

The thread context fetched by assertRootDiscussionThread already carries all
three ids; forward the right one via the existing getDiscussionThreadEntity
helper. No extra network call.

Closes #226
fix(discussions): forward parent entity id when replying to a thread
## [2026.6.0-next.1](v2026.5.0...v2026.6.0-next.1) (2026-06-16)

### Bug Fixes

* **discussions:** forward parent entity id when replying to a thread ([745ca56](745ca56)), closes [#226](#226)
@linearis-bot
linearis-bot Bot requested a review from iamfj as a code owner June 16, 2026 11:25
iamfj added 2 commits July 2, 2026 12:11
Add regression tests asserting createMilestone and updateMilestone pass
only flat variables declared by their GraphQL documents.

Refs #228
test(milestone): guard against input-wrapped variable regression (#228)
@iamfj
iamfj temporarily deployed to npm-publish July 2, 2026 10:14 — with GitHub Actions Inactive
@iamfj
iamfj temporarily deployed to npm-publish July 2, 2026 10:32 — with GitHub Actions Inactive
semantic-release-bot and others added 4 commits July 2, 2026 10:32
## [2026.6.0-next.2](v2026.6.0-next.1...v2026.6.0-next.2) (2026-07-02)

### Features

* **issues:** restore relation commands ([e0f880c](e0f880c))
Align CreateProjectMilestone and UpdateProjectMilestone with the
$input argument shape used by every other mutation in the codebase,
fixing the runtime GraphQL variable error on milestone create and
the incorrect variables sent on update.

Closes #223
The #228 guard test asserted milestone mutations pass flat variables, but
#223 aligned CreateProjectMilestone/UpdateProjectMilestone with the $input
convention used by every other mutation. Update the guard to expect the
`{ input }` / `{ id, input }` shape so both fixes agree.

Refs #223, #228
fix(milestones): use $input convention for milestone mutations
@iamfj
iamfj temporarily deployed to npm-publish July 2, 2026 10:35 — with GitHub Actions Inactive
semantic-release-bot and others added 4 commits July 2, 2026 10:35
## [2026.6.0-next.3](v2026.6.0-next.2...v2026.6.0-next.3) (2026-07-02)

### Bug Fixes

* **milestones:** use $input convention for milestone mutations ([309aaab](309aaab)), closes [#223](#223)
…tput

Add two global output-shaping flags for stdout success payloads:

- --compact emits single-line JSON (no indentation).
- --fields <list> keeps only comma-separated dot-paths, preserving
  nested object shape and traversing arrays mid-path
  (e.g. labels.nodes.name).

Options are set once per process via a Commander preAction hook that
reads root opts through the existing getRootOpts() helper, so none of
the ~120 outputSuccess() call sites change. Error envelopes stay
pretty-printed. Adds pickFields/parseFieldsList helpers with tests.

Closes #220
Match only own properties via Object.hasOwn and write results with
Object.defineProperty so a user-supplied --fields __proto__ cannot
invoke the prototype setter (previously mutated the result object's
prototype and dropped the field). Inherited members like toString and
constructor are no longer picked. Derive OutputOptions from
CommandOptions via Pick so the two cannot drift.

Refs #220
feat(output): add --compact and --fields flags for token-efficient output
@iamfj
iamfj temporarily deployed to npm-publish July 2, 2026 10:42 — with GitHub Actions Inactive
semantic-release-bot and others added 4 commits July 2, 2026 10:43
## [2026.6.0-next.4](v2026.6.0-next.3...v2026.6.0-next.4) (2026-07-02)

### Features

* **output:** add --compact and --fields flags for token-efficient output ([682bde9](682bde9)), closes [#220](#220)

### Bug Fixes

* **output:** harden pickFields against prototype-chain keys ([a624313](a624313)), closes [#220](#220)
The document list --issue path now filters via the native document→issue
relation (with a legacy slugId OR branch), leaving listDocumentsBySlugIds
without any production caller. Drop the dead service function and its tests.

Refs #234
…-compat

feat: restore document attachment compatibility
@iamfj
iamfj temporarily deployed to npm-publish July 2, 2026 11:07 — with GitHub Actions Inactive
semantic-release-bot and others added 3 commits July 2, 2026 11:07
## [2026.6.0-next.5](v2026.6.0-next.4...v2026.6.0-next.5) (2026-07-02)

### Features

* restore document attachment compatibility ([f096add](f096add))
Configure setup, run, and archive scripts for Conductor workspaces:
npm install setup (runs codegen + lefthook via prepare), concurrent
run_mode, npm run clean archive, and test/build/check run scripts.
ci(conductor): add shared Conductor settings.toml
iamfj added 2 commits July 3, 2026 16:56
The batch search query scopes cycles to a team, so resolving a cycle by
name without a --team returned an empty node set and threw "Cycle not
found". Fall back to resolveCycleId (global lookup) when the batch
response has no cycles, mirroring the existing status fallback, and add
a regression test.

Refs #126
perf(issues): batch-resolve assignee and IDs in create/update
@iamfj
iamfj temporarily deployed to npm-publish July 3, 2026 14:59 — with GitHub Actions Inactive
semantic-release-bot and others added 4 commits July 3, 2026 15:00
## [2026.6.0-next.10](v2026.6.0-next.9...v2026.6.0-next.10) (2026-07-03)

### Bug Fixes

* **resolvers:** restore global cycle fallback in search without team ([c0cbc95](c0cbc95)), closes [#126](#126)

### Performance Improvements

* **issues:** batch-resolve assignee and IDs in create/update ([819c045](819c045)), closes [#126](#126)
Ships an agentskills.io-standard SKILL.md teaching agents the
preflight and discover-then-act protocol, plus Claude Code plugin
and marketplace manifests. Documents install paths in the README.
The allowed-tools field is parsed as a comma-separated list; the
space-separated value was read as a single unmatched pattern, so the
Bash pre-approvals never took effect.
…-skill

feat(skill): add agent skill and Claude Code plugin for the CLI
@iamfj
iamfj temporarily deployed to npm-publish July 3, 2026 20:09 — with GitHub Actions Inactive
semantic-release-bot and others added 3 commits July 3, 2026 20:10
## [2026.6.0-next.11](v2026.6.0-next.10...v2026.6.0-next.11) (2026-07-03)

### Features

* **skill:** add agent skill and Claude Code plugin for the CLI ([1233ad9](1233ad9))

### Bug Fixes

* **skill:** comma-separate allowed-tools in SKILL.md frontmatter ([66db248](66db248))
…badge

docs: add skills.sh badge to README
@iamfj
iamfj temporarily deployed to npm-publish July 3, 2026 20:17 — with GitHub Actions Inactive
iamfj added 4 commits July 4, 2026 09:51
Split clean-publish and npm publish into explicit stages so a failed
publish propagates a non-zero exit and fails the release. Add a
registry read-back guard to catch silent publish failures. Switch npm
auth to OIDC trusted publishing (drop NPM_TOKEN) and ensure npm >=
11.5.1 in CI.
clean-publish throws on a pre-existing temp dir and, with --without-publish,
never removes it. The trailing cleanup is &&-chained, so a failed local
'npm run release' left .clean-pkg behind and broke the next run. Clear it up
front. CI is unaffected (fresh checkout).
Keep only the non-obvious rationale (registry-url shadowing OIDC, npm floor,
OIDC auth, two-stage publish, read-back guard); drop the restated detail.
…ase-missing

ci: Fail release on failed npm publish and use OIDC trusted publishing
@iamfj
iamfj temporarily deployed to npm-publish July 4, 2026 08:18 — with GitHub Actions Inactive
iamfj added 2 commits July 4, 2026 16:49
Add a [prompts] block to .conductor/settings.toml so every Conductor
agent on this repo works like a senior engineer: surgical changes,
English output, disciplined git usage, and a commit history held to the
same bar as the code.

- general: lean, always-on persona + discipline; defers to AGENTS.md
  for architecture/invariants/checklist and conditions verification on
  change type (no full build/knip on docs- or config-only edits). Also
  makes agents base-branch-aware (rebase before substantial work) and
  treats commits as durable context (well-scoped, extended what/why
  bodies).
- create_pr/code_review/fix_errors/resolve_merge_conflicts/rename_branch:
  additive-safe action prompts encoding the repo's commitlint rules,
  release-owned CHANGELOG guard, P0 invariants, and branch naming.
  create_pr adds a history-hygiene step (rebase, then reshape into
  well-isolated scoped commits) with a guardrail against rewriting
  shared/merged history; review and fix-errors flag/clean messy history.

Prompt wording synthesized from three expert audits (prompt
engineering, Claude Code behavior, Conductor mechanism).
…rompt-engineering

chore(conductor): add repository agent prompts
@iamfj
iamfj temporarily deployed to npm-publish July 4, 2026 16:13 — with GitHub Actions Inactive
iamfj added 2 commits July 4, 2026 18:30
Add `issues activity <issue>`, which merges an issue's comment threads
(root comments plus their nested replies) with its history events into a
single chronological timeline, paginated with an opaque id cursor.

Why: users and agents inspecting an issue previously had to correlate the
separate `discussions` output with Linear's field-change history by hand.
Linear exposes no unified activity connection, so the service materializes
both connections, normalizes each history event into a compact list of
meaningful changes (state, assignee, priority, project, cycle, title,
estimate, labels, archived), resolves label IDs to names, and sorts the
combined set ascending by creation time.

Design notes and trade-offs:
- History and comment connections are independent, so both are exhausted
  concurrently before assembly; label names depend on the history nodes
  and are resolved afterwards. Empty-change history events are dropped so
  they do not consume pagination slots.
- As a stateless CLI there is no cross-invocation cache, so each `--after`
  page re-materializes the full timeline before slicing — the same
  materialize-then-slice model already used for discussion reply
  pagination. Cheap for typical issues; only pathological histories pay.
- `--comments-only` skips history (and the dependent label lookup);
  `--with-reactions` returns normalized reactions on roots and replies.

To feed the activity service, `discussion-service` is refactored to expose
reusable reply helpers (`buildThreadRepliesIndex` / `collectThreadReplies`,
with `filterThreadReplies` now layered on top) and issue-scoped
reply-candidate fetchers, and `GetLabels` gains an `includeArchived`
argument (default false) so historic label changes still resolve to names.
The fetch-until-empty loop shared by every full-connection fetcher is
extracted into a `collectConnection` helper in `common/types` so each
fetcher only declares its query, per-page guard, and cursor extraction.

Closes #144
feat(issues): add activity command with threaded discussion timeline
semantic-release-bot and others added 4 commits July 4, 2026 16:36
## [2026.6.0-next.12](v2026.6.0-next.11...v2026.6.0-next.12) (2026-07-04)

### Features

* **issues:** add activity command with threaded discussion timeline ([38a3ea3](38a3ea3)), closes [#144](#144)
## [2026.6.0-next.12](v2026.6.0-next.11...v2026.6.0-next.12) (2026-07-04)

### Features

* **issues:** add activity command with threaded discussion timeline ([38a3ea3](38a3ea3)), closes [#144](#144)
Add `teams create`, `teams update`, `teams members`, `teams add-member`,
and `teams remove-member` subcommands with resolver-backed team/user ID
resolution and paginated membership fetching. Estimation, cycle, and
triage settings are exposed as explicit true|false flags.

Boolean flags accept only true|false (not 1/0/yes/no) so scripts can set
or unset settings unambiguously, and numeric flags reject blank input,
which Number() would otherwise coerce to 0.

Closes #142
feat(teams): add team create, update, and membership management
@iamfj
iamfj temporarily deployed to npm-publish July 4, 2026 17:06 — with GitHub Actions Inactive
## [2026.6.0-next.13](v2026.6.0-next.12...v2026.6.0-next.13) (2026-07-04)

### Features

* **teams:** add team create, update, and membership management ([c89208b](c89208b)), closes [#142](#142)
@iamfj
iamfj merged commit 7779933 into main Jul 4, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants