Skip to content

Add han.linear plugin: work-items-to-linear skill#61

Open
nafeger wants to merge 1 commit into
testdouble:mainfrom
nafeger:han.linear-skill
Open

Add han.linear plugin: work-items-to-linear skill#61
nafeger wants to merge 1 commit into
testdouble:mainfrom
nafeger:han.linear-skill

Conversation

@nafeger

@nafeger nafeger commented Jun 8, 2026

Copy link
Copy Markdown

What

Adds a new opt-in han.linear plugin carrying one skill, work-items-to-linear — the Linear peer of work-items-to-jira. It publishes one Linear issue per slice from a /plan-work-items work-items.md into a single target team.

Why

The suite already publishes work items to Jira (han.atlassian/work-items-to-jira) and GitHub (han.github/work-items-to-issues). This adds the same capability for Linear users, following the established one-integration-target-per-plugin pattern.

What's included

New han.linear/ plugin:

  • .claude-plugin/plugin.json (opt-in, depends on han.core, version 1.0.0)
  • skills/work-items-to-linear/SKILL.md
  • three references/ docs (slice issue template, work-items file format, reference-artifact inventory)

Operator docs and registration:

  • docs/skills/work-items-to-linear.md (long-form doc)
  • entries in marketplace.json, README.md, docs/skills/README.md, docs/choosing-a-han-plugin.md, CLAUDE.md

Behavior (Linear-native divergences from the Jira peer)

  • Pure-MCP via the Linear MCP server (mcp.linear.app); hard preflight, no fallback; single target team.
  • Reads the team's real workflow states, labels, Projects, and members, and resolves every option against them before any write. No assumed defaults, and Linear has no issue types, so categorization is via the team's real labels.
  • Grouping via a Linear Project and/or a sub-issue parent.
  • Within-file Depends on lines become native "blocked by" relations (append-only, dedup-safe). No description-rewrite fallback, because native relations are reliable.
  • Idempotent resume via heading annotation ## <SYM-N> (<LINEAR-ID>) — <title>.

Conventions honored

  • Opt-in: not added to the han meta-plugin's dependencies; depends on han.core; requires the Linear MCP server.
  • Coverage rule: long-form doc plus every index updated in the same change.
  • Writing voice: the operator doc is strict no-em-dash; the SKILL.md follows the Jira-peer style.
  • Versioning: the new plugin starts at 1.0.0 and the marketplace version mirrors plugin.json. The CHANGELOG entry and the parent han bump are intentionally left for /han-release.

Validation

Dogfooded live against a Linear workspace: fresh run plus native blocked-by link, --state placement, interrupted-resume (no duplicate created), and relation dedup all verified. Test issues were created and then canceled (the Linear MCP exposes no delete).

🤖 Generated with Claude Code

New opt-in han.linear plugin (depends on han.core, requires the Linear MCP
server, not bundled by the meta-plugin) carrying work-items-to-linear:
publishes one Linear issue per slice from a /plan-work-items work-items
file into a single target team, resolving the team's real states, labels,
Projects, and members before writing and linking within-file dependencies
as native "blocked by" relations.

- han.linear/.claude-plugin/plugin.json (1.0.0)
- SKILL.md + references (linear-issue-template, work-items-file-format,
  reference-artifact-inventory)
- docs/skills/work-items-to-linear.md long-form operator doc
- marketplace.json, README, skills index, choosing-a-han-plugin, CLAUDE.md
  registration

CHANGELOG and the parent han version bump are deferred to /han-release.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@mxriverlynn mxriverlynn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nafeger this is great! thank you for the contribution. i ran a quick review on this, and found a couple of minor items that should be taken care of before i merge this in.

Review Summary

Task ID Severity Location Summary
WARN-001 Warning han.linear/skills/work-items-to-linear/SKILL.md:66 Dangling (See plan: D5.) authoring scaffolding shipped in a runtime-loaded file
SUGG-001 Suggestion han.linear/skills/work-items-to-linear/SKILL.md:16 get_team declared in allowed-tools but never called

🟠 Warnings

WARN-001 — Dangling (See plan: D5.) shipped in the skill · han.linear/skills/work-items-to-linear/SKILL.md:66

"If the team defines no labels, say so and proceed without categorization. (See plan: D5.)"

No "D5" plan ships with the skill. Unlike the generic See plan: D-N breadcrumb the skill is told to write into slices (see line 89 and the references), this is a concrete back-reference to the feature's own planning doc. Because SKILL.md is loaded and acted on at runtime, it leaves the model citing a plan that isn't there. Delete the parenthetical, or replace it with the labels-default rule it abbreviated.

🟡 Suggestions

SUGG-001 — Unused tool grant · han.linear/skills/work-items-to-linear/SKILL.md:16

mcp__plugin_linear_linear__get_team is declared in allowed-tools but no step in the process body calls it (team config is read via list_teams, list_issue_statuses, list_issue_labels, and list_users). The authoring guidance is explicit about not granting tools the skill doesn't use. Remove it, or wire up the call if a per-team read genuinely needs it.

Review Recommendation

Request changes. WARN-001 is a quick scaffolding cleanup and SUGG-001 is minor polish — neither is structural. Once WARN-001 is addressed this is good to merge.

@nafeger

nafeger commented Jun 9, 2026

Copy link
Copy Markdown
Author

happy to help, might take a couple days before I can get back to this.

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.

2 participants