Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
745ca56
fix(discussions): forward parent entity id when replying to a thread
jjuraszek Jun 10, 2026
81d211b
Merge pull request #227 from jjuraszek/fix/reply-missing-entity-id
iamfj Jun 16, 2026
62ba4e6
chore(release): 2026.6.0-next.1 [skip ci]
semantic-release-bot Jun 16, 2026
1a0c8c9
test(milestone): guard against input-wrapped variable regression
iamfj Jul 2, 2026
7b3a4cb
Merge pull request #237 from linearis-oss/issue-228
iamfj Jul 2, 2026
e0f880c
feat(issues): restore relation commands
ralfschimmel Jun 22, 2026
1985391
Merge pull request #235 from ralfschimmel/codex/port-issue-relation-c…
iamfj Jul 2, 2026
731d52d
chore(release): 2026.6.0-next.2 [skip ci]
semantic-release-bot Jul 2, 2026
309aaab
fix(milestones): use $input convention for milestone mutations
iamfj Jul 2, 2026
e371b29
test(milestones): align variable-shape guard with $input convention
iamfj Jul 2, 2026
2e0790e
Merge pull request #238 from linearis-oss/issue-223
iamfj Jul 2, 2026
5220447
chore(release): 2026.6.0-next.3 [skip ci]
semantic-release-bot Jul 2, 2026
682bde9
feat(output): add --compact and --fields flags for token-efficient ou…
iamfj Jul 2, 2026
a624313
fix(output): harden pickFields against prototype-chain keys
iamfj Jul 2, 2026
1ec0dcc
Merge pull request #239 from linearis-oss/issue-220
iamfj Jul 2, 2026
5ea8768
chore(release): 2026.6.0-next.4 [skip ci]
semantic-release-bot Jul 2, 2026
f096add
feat: restore document attachment compatibility
ralfschimmel Jun 22, 2026
eb4fdba
refactor(documents): remove orphaned listDocumentsBySlugIds helper
iamfj Jul 2, 2026
5fd53e7
Merge pull request #234 from ralfschimmel/codex/port-docs-attachments…
iamfj Jul 2, 2026
89245c9
chore(release): 2026.6.0-next.5 [skip ci]
semantic-release-bot Jul 2, 2026
e42a52b
ci(conductor): add shared Conductor settings.toml
iamfj Jul 2, 2026
06e2b23
Merge pull request #240 from linearis-oss/conductor-settings-toml
iamfj Jul 2, 2026
43a9e1b
chore: introduce knip dead-code detection
iamfj Jul 2, 2026
f617a20
Merge pull request #242 from linearis-oss/introduce-knip-dead-code
iamfj Jul 2, 2026
182cfcb
refactor(codegen): map GraphQL custom scalars to concrete types
iamfj Jul 2, 2026
dbcc28a
Merge pull request #241 from linearis-oss/issue-199
iamfj Jul 2, 2026
655d6f8
ci: centralize workflow setup and pin actions to commit SHAs
iamfj Jul 2, 2026
ce32f32
Merge pull request #243 from linearis-oss/ci-audit-refactor
iamfj Jul 2, 2026
390dd38
fix(ci): skip PR comment posting for fork pull requests
iamfj Jul 2, 2026
6344da8
ci(knip): post PR comment via workflow_run for fork PRs
iamfj Jul 2, 2026
f24fe80
Merge pull request #244 from linearis-oss/conductor/iamfj-fix-fork-pr…
iamfj Jul 2, 2026
1f35779
feat(projects): restore project workflow options
ralfschimmel Jun 22, 2026
918eb0b
Merge pull request #233 from ralfschimmel/codex/port-project-behavior
iamfj Jul 2, 2026
ae86863
chore(release): 2026.6.0-next.6 [skip ci]
semantic-release-bot Jul 2, 2026
1a5479f
chore(deps): update github actions
renovate[bot] Jul 2, 2026
dbf5589
Merge pull request #236 from linearis-oss/renovate/major-github-actions
iamfj Jul 2, 2026
c4a9b5b
chore(deps): update dependency clean-publish to v7
renovate[bot] Jul 2, 2026
dd77b31
Merge pull request #217 from linearis-oss/renovate/clean-publish-7.x
iamfj Jul 2, 2026
f98c898
chore(deps): update commitlint monorepo to v21
renovate[bot] Jul 2, 2026
dac3107
Merge pull request #222 from linearis-oss/renovate/major-commitlint-m…
iamfj Jul 2, 2026
9aa58ac
chore(deps): update dev dependencies (non-major)
renovate[bot] Jul 2, 2026
ad8c376
Merge pull request #216 from linearis-oss/renovate/dev-dependencies-(…
iamfj Jul 2, 2026
e48bd39
chore(deps): update graphqlcodegenerator monorepo
renovate[bot] Jul 2, 2026
3c7369a
refactor(issues): use string literals for IssueRelationType
iamfj Jul 2, 2026
632cd25
refactor(issues): use string literal for PaginationOrderBy
iamfj Jul 2, 2026
dcf9629
refactor(initiatives): use string literals for GraphQL enums
iamfj Jul 2, 2026
334d481
refactor(commands): simplify enum mapping helpers
iamfj Jul 2, 2026
81dddc9
Merge pull request #218 from linearis-oss/renovate/major-graphqlcodeg…
iamfj Jul 2, 2026
6ca3952
feat(cli): add passive update notifier and version command
iamfj Jul 2, 2026
02e2a3d
Merge pull request #245 from linearis-oss/conductor/iamfj-cli-update-…
iamfj Jul 2, 2026
ccc03c8
chore(release): 2026.6.0-next.7 [skip ci]
semantic-release-bot Jul 2, 2026
5a7a4cd
refactor(client): infer request result and variables from TypedDocume…
iamfj Jul 2, 2026
f61df7b
chore(deps): move @graphql-typed-document-node/core to devDependencies
iamfj Jul 2, 2026
73c8c9f
refactor(client): tighten request() typing and guard dataless responses
iamfj Jul 2, 2026
8d2680f
Merge pull request #246 from linearis-oss/issue-194
iamfj Jul 2, 2026
be01e06
refactor(services): co-locate projection types with their services
iamfj Jul 2, 2026
43f7732
Merge pull request #247 from linearis-oss/issue-201
iamfj Jul 2, 2026
be79f04
refactor(common): centralize Priority and LabelMode domain values
iamfj Jul 2, 2026
4dc9328
Merge pull request #248 from linearis-oss/issue-205
iamfj Jul 2, 2026
5c61c2b
refactor(resolvers): replace loose Record types with narrow projections
iamfj Jul 2, 2026
9024248
Merge pull request #249 from linearis-oss/issue-204
iamfj Jul 2, 2026
b7e29fe
docs: add comments-to-discussions migration guide and restructure README
iamfj Jul 2, 2026
7b583cd
Merge pull request #250 from linearis-oss/conductor/iamfj-migration-g…
iamfj Jul 2, 2026
5fca207
feat(labels): add issue label CRUD commands
doublerebel Jun 17, 2026
c6cfa62
feat(labels): support label removal modes
doublerebel Jun 21, 2026
13098a7
refactor(labels): route label-mode through centralized parseLabelMode
iamfj Jul 2, 2026
5590498
refactor(labels): infer GraphQL result typing for label operations
iamfj Jul 2, 2026
9a28108
fix(labels): allow clearing label description with empty string
iamfj Jul 2, 2026
220628c
Merge pull request #232 from doublerebel/feature/dbl-191-add-label-cr…
iamfj Jul 2, 2026
df2219a
chore(release): 2026.6.0-next.8 [skip ci]
semantic-release-bot Jul 2, 2026
1470fed
refactor(output): enforce JSON-serializable output at compile time
iamfj Jul 3, 2026
59c9e10
Merge pull request #251 from linearis-oss/issue-202
iamfj Jul 3, 2026
d94b8af
refactor(commands): centralize Commander action typing via commandAction
iamfj Jul 3, 2026
de44013
Merge pull request #252 from linearis-oss/issue-200
iamfj Jul 3, 2026
9a283ea
ci: type-check test files in a dedicated tsc pass
iamfj Jul 3, 2026
4752391
Merge pull request #253 from linearis-oss/issue-198
iamfj Jul 3, 2026
b7d53a5
refactor(services): move filter/input construction into service layer
iamfj Jul 3, 2026
b169e30
Merge pull request #254 from linearis-oss/issue-195
iamfj Jul 3, 2026
3230cb8
refactor(services): extract shared mutation-payload assertion helpers
iamfj Jul 3, 2026
01af35e
Merge pull request #255 from linearis-oss/issue-203
iamfj Jul 3, 2026
bc3e1d7
docs(readme): refine agent prompt for Linear CLI usage
iamfj Jul 3, 2026
cb86222
docs(readme): clarify file download vs attachment references in agent…
iamfj Jul 3, 2026
b714f71
Merge pull request #256 from linearis-oss/conductor/iamfj-review-read…
iamfj Jul 3, 2026
7ff625b
refactor: enable stricter TypeScript compiler flags
iamfj Jul 3, 2026
8fb59c2
refactor(common): harden firstOrThrow and drop dead type guards
iamfj Jul 3, 2026
991ddf1
Merge pull request #257 from linearis-oss/issue-197
iamfj Jul 3, 2026
5921828
refactor(common): brand resolved IDs with a compile-time UUID type
iamfj Jul 3, 2026
ffc8064
Merge pull request #258 from linearis-oss/issue-196
iamfj Jul 3, 2026
7d5c1b3
refactor(client): replace SDK rawRequest with native fetch transport
iamfj Jul 3, 2026
6fc8e64
fix(retry): retry native fetch transport failures
iamfj Jul 3, 2026
785093f
test(client): access Authorization header via index signature
iamfj Jul 3, 2026
5878b2a
Merge pull request #259 from linearis-oss/issue-207
iamfj Jul 3, 2026
2e8fdc6
chore(release): 2026.6.0-next.9 [skip ci]
semantic-release-bot Jul 3, 2026
7ce1253
refactor(graphql): add lean filter-based lookup queries for resolvers
iamfj Jul 3, 2026
6702694
Merge pull request #260 from linearis-oss/issue-208
iamfj Jul 3, 2026
c2185bc
refactor(resolvers): migrate ID resolvers to GraphQLClient and drop L…
iamfj Jul 3, 2026
9e63f6b
Merge pull request #261 from linearis-oss/issue-209
iamfj Jul 3, 2026
baa7e92
docs: reflect Linear SDK removal in docs and test mocks
iamfj Jul 3, 2026
6bb2eb5
Merge pull request #262 from linearis-oss/issue-210
iamfj Jul 3, 2026
819c045
perf(issues): batch-resolve assignee and IDs in create/update
iamfj Jul 3, 2026
c0cbc95
fix(resolvers): restore global cycle fallback in search without team
iamfj Jul 3, 2026
29d18b5
Merge pull request #263 from linearis-oss/issue-126
iamfj Jul 3, 2026
58b8745
chore(release): 2026.6.0-next.10 [skip ci]
semantic-release-bot Jul 3, 2026
1233ad9
feat(skill): add agent skill and Claude Code plugin for the CLI
iamfj Jul 3, 2026
66db248
fix(skill): comma-separate allowed-tools in SKILL.md frontmatter
iamfj Jul 3, 2026
cef66d4
Merge pull request #265 from linearis-oss/conductor/iamfj-linearis-ai…
iamfj Jul 3, 2026
4d863bf
chore(release): 2026.6.0-next.11 [skip ci]
semantic-release-bot Jul 3, 2026
44d579e
docs: add skills.sh badge to README
iamfj Jul 3, 2026
b84627e
Merge pull request #266 from linearis-oss/conductor/iamfj-add-skills-…
iamfj Jul 3, 2026
046b817
ci: fail release on failed npm publish and use OIDC trusted publishing
iamfj Jul 4, 2026
687ceaf
ci(release): clear stale .clean-pkg before local release publish
iamfj Jul 4, 2026
2ee8945
ci(release): trim verbose comments in release config
iamfj Jul 4, 2026
eed31cf
Merge pull request #269 from linearis-oss/conductor/iamfj-npm-prerele…
iamfj Jul 4, 2026
5b0b082
chore(conductor): add repository agent prompts
iamfj Jul 4, 2026
17d45fa
Merge pull request #270 from linearis-oss/conductor/iamfj-conductor-p…
iamfj Jul 4, 2026
38a3ea3
feat(issues): add activity command with threaded discussion timeline
iamfj Jul 4, 2026
8f6bcef
Merge pull request #267 from linearis-oss/issue-144
iamfj Jul 4, 2026
29bb9bd
chore(release): 2026.6.0-next.12 [skip ci]
semantic-release-bot Jul 4, 2026
aa2e472
chore(release): 2026.6.0-next.12 [skip ci]
semantic-release-bot Jul 4, 2026
c89208b
feat(teams): add team create, update, and membership management
iamfj Jul 4, 2026
cb3be46
Merge pull request #268 from linearis-oss/issue-142
iamfj Jul 4, 2026
fb32f50
chore(release): 2026.6.0-next.13 [skip ci]
semantic-release-bot Jul 4, 2026
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
22 changes: 22 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "linearis",
"owner": {
"name": "linearis-oss",
"url": "https://github.com/linearis-oss/linearis"
},
"metadata": {
"description": "Marketplace for the linearis Claude Code plugin.",
"version": "1.0.0"
},
"plugins": [
{
"name": "linearis",
"source": "./",
"description": "Agent skill teaching agents to use the linearis Linear.app CLI.",
"version": "1.0.0",
"author": { "name": "linearis-oss" },
"homepage": "https://github.com/linearis-oss/linearis",
"license": "MIT"
}
]
}
11 changes: 11 additions & 0 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"name": "linearis",
"description": "Agent skill for the linearis Linear.app CLI: preflight, discover-then-act usage protocol, JSON output, ID resolution, discussions, files.",
"version": "1.0.0",
"author": {
"name": "linearis-oss",
"url": "https://github.com/linearis-oss/linearis"
},
"homepage": "https://github.com/linearis-oss/linearis",
"license": "MIT"
}
137 changes: 137 additions & 0 deletions .conductor/settings.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
#:schema https://conductor.build/schemas/settings.repo.schema.json
"$schema" = "https://conductor.build/schemas/settings.repo.schema.json"

[scripts]
# `npm install` also runs the `prepare` hook: GraphQL codegen (src/gql/) + lefthook install.
setup = "npm install"
# Stateless JSON-output CLI — no shared port/db/stack — so workspaces can run side by side.
run_mode = "concurrent"
# Remove per-workspace build output on archive; leaves source untouched.
archive = "npm run clean"

[scripts.run.test]
command = "npm test"
default = true
icon = "test-tube"

[scripts.run.build]
command = "npm run build"
icon = "package"

[scripts.run.check]
command = "npm run check:ci"
icon = "wrench"

[prompts]
# Appended to EVERY agent session. Keep lean — AGENTS.md (loaded as CLAUDE.md) is the
# single source of truth for architecture, the P0 invariants, and the verification
# checklist; do not restate them here.
general = """
You are a senior engineer on Linearis, a JSON-only CLI for Linear.app (TypeScript strict, \
ESM). Always respond in English, even when addressed in another language.

AGENTS.md (loaded as CLAUDE.md) is authoritative for the 5-layer architecture, the P0 \
invariants, and the verification checklist — follow it; do not re-derive or restate its rules.

Be a careful git operator. Before starting substantial work, bring the branch up to date \
with its base branch (the branch it will merge into) — fetch, then rebase onto it rather \
than merging it in — so your changes apply cleanly and the history stays linear.

Treat the commit history as durable context for future contributors, held to the same \
standard as the code. Make each commit well-scoped and single-purpose, and give it an \
extended body explaining not just what changed but why: the problem, the approach, and any \
trade-offs or alternatives considered. Any TODO you leave must reference an issue.

Verify with the AGENTS.md checklist, scoped to what you touched, and report exactly what you \
ran — never claim a check passed without running it. Skip the build/test checklist for \
docs-, comment-, or config-only changes; run the full checklist before opening a PR.

Never touch CHANGELOG.md — it is owned by the release workflow.
"""

# Commit history is a first-class deliverable. Conventional Commits are enforced by
# commitlint in CI over the whole PR range, so malformed messages fail the build.
create_pr = """
In addition to Conductor's standard Create PR behavior, hold the commit history and PR to \
these repo rules.

Commits — Conventional Commits, enforced by commitlint over the full PR range:
- Format `type(scope): subject`; lower-case scope; imperative subject, >= 10 chars.
- Allowed types only: build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test.
- Choose the type by real impact: feat/fix/perf/revert trigger a release, the rest do not — \
do not inflate a chore into a feat.
- One logical change per commit; a blank line before any body/footer. Reference issues in the \
body (Closes #n, Refs #n, Part of #n) when applicable.
- Give every non-trivial commit an extended body written as context for future contributors: \
what changed and, more importantly, why — the problem, the approach, and any trade-offs or \
alternatives considered. Structure it (short prose or bullets); do not just restate the subject.
- Do NOT add AI co-author or Co-authored-by trailers.
- Never include CHANGELOG.md in the branch history — it is release-workflow-owned.

History hygiene — before opening the PR, rework the branch into a clean, linear history:
- Rebase onto the latest base branch (resolve conflicts; do not merge the base in).
- Reshape the commits into well-isolated, correctly-scoped Conventional Commits: split commits \
that mix concerns, squash fixup/wip noise, and reorder so each commit stands on its own, \
builds, and passes its own checks.
- Ensure each resulting commit carries the extended what/why body above.
- Only rewrite history that is yours and unmerged — never rewrite commits already on the base \
branch or that teammates build on.

PR:
- The title must itself be a valid Conventional Commit subject.
- Body: what changed and why, the risk/impact, and which AGENTS.md checks you ran to verify. \
Keep it tight and skimmable.
- Remove design artifacts (e.g. plan files under docs/plans/) before opening the PR.
"""

# Correctness first, then the repo's own invariants; reference AGENTS.md rather than
# transcribing the full (drift-prone) invariant list.
code_review = """
In addition to Conductor's standard review, report only real, verifiable issues, most severe \
first. Do not pad with style nitpicks the linter already covers.

Prioritise:
- Correctness and reliability: edge cases, error handling, resource/lifecycle bugs, races, \
wrong assumptions.
- Every P0 invariant in AGENTS.md — especially strict layer separation, ID resolution only in \
resolvers, no `any`, and explicit return types on exports.
- Test coverage: happy path + primary error case per changed function; tests mock exactly one \
layer down.
- Maintainability and readability: naming, duplication, unnecessary complexity.
- Commit history: a clean, linear series of well-scoped Conventional Commits with informative \
what/why bodies — flag mixed-concern, wip, or fixup commits that should be split, squashed, \
or rebased before merge.
For each finding give file:line, why it is wrong, and a concrete fix. If the change is sound, \
say so plainly rather than inventing problems.
"""

# Root cause, minimal fix, verification scaled to the size of the change.
fix_errors = """
Diagnose the root cause before changing anything — do not patch symptoms or silence the type \
checker with casts. Make the smallest correct fix, matching surrounding style. When the bug is \
testable, add or adjust a test that fails before the fix and passes after. Verify with the \
AGENTS.md checklist scoped to the fix: always run the type check and tests; add the full build \
and knip when the fix touches generated code, exports, or dependencies. Report exactly what you \
ran and its result. If chasing the fix left the branch history messy (wip/fixup commits, mixed \
concerns), fold it back into clean, well-scoped Conventional Commits with what/why bodies before \
finishing.
"""

# Never silently drop a side; regenerate generated code from resolved sources, in that order.
resolve_merge_conflicts = """
Resolve conflicts by understanding the intent of both sides, not by picking one blindly. \
Preserve every behavioural change from both branches; if two changes are genuinely \
incompatible, stop and surface it rather than dropping one. For conflicts in generated files \
(src/gql/), resolve the .graphql sources first, then run `npm run generate` to regenerate \
rather than hand-merging. Never resurrect CHANGELOG.md edits. After resolving, run \
`npx tsc --noEmit` and `npm test` to confirm the merged tree is coherent.
"""

# Conventional-Commit-aligned, descriptive, kebab-case; issue number first when one exists.
rename_branch = """
Name the branch after the change: `type/short-kebab-summary`, where type is a Conventional \
Commit type (feat, fix, chore, docs, refactor, ...). Lower-case, hyphen-separated, concise but \
descriptive. When an issue exists, put its number first: `type/NNN-short-summary` \
(e.g. fix/142-null-token, feat/issue-search-filters). Conductor may add its own branch prefix; \
keep the descriptive part in this form regardless.
"""
47 changes: 47 additions & 0 deletions .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Setup Node and install
description: >-
Sets up Node (version from .nvmrc), restores the npm cache, runs `npm ci`, and
optionally builds the project. Centralizes the checkout-adjacent boilerplate
shared by every CI job. The caller must run actions/checkout first so this
local action and .nvmrc are present on disk.

inputs:
build:
description: Whether to run `npm run build` after install (runs codegen + tsc + usage).
required: false
default: "true"
node-version:
description: >-
Explicit Node version to use, overriding .nvmrc. Leave empty to use the
project default from .nvmrc. Set by matrix jobs that test multiple versions.
required: false
default: ""
registry-url:
description: Optional npm registry URL to configure for publishing (leave empty for CI-only jobs).
required: false
default: ""

runs:
using: composite
steps:
# node-version (when set by a matrix job) takes precedence over
# node-version-file; an empty node-version falls back to .nvmrc.
- name: Setup Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ inputs.node-version }}
node-version-file: .nvmrc
cache: npm
registry-url: ${{ inputs.registry-url }}

# `npm ci` runs `prepare`, which is CI-guarded (scripts/prepare.mjs) so it
# does NOT hit the live Linear GraphQL schema here. Jobs needing generated
# types must run the build step below (or `npm pack`).
- name: Install dependencies
shell: bash
run: npm ci

- name: Build project
if: ${{ inputs.build == 'true' }}
shell: bash
run: npm run build
17 changes: 4 additions & 13 deletions .github/workflows/ci-post-merge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,15 @@ concurrency:

jobs:
sentinel:
name: Post-merge sentinel (node v22)
name: Post-merge sentinel
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup node v22
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm

- name: Install deps
run: npm ci

- name: Build project
run: npm run build
- name: Setup and build
uses: ./.github/actions/setup

- name: Verify packed binaries
run: npm run verify:packed-binaries
Loading
Loading