Add han.linear plugin: work-items-to-linear skill#61
Conversation
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
left a comment
There was a problem hiding this comment.
@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.
|
happy to help, might take a couple days before I can get back to this. |
What
Adds a new opt-in
han.linearplugin carrying one skill,work-items-to-linear— the Linear peer ofwork-items-to-jira. It publishes one Linear issue per slice from a/plan-work-itemswork-items.mdinto 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 onhan.core, version1.0.0)skills/work-items-to-linear/SKILL.mdreferences/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)marketplace.json,README.md,docs/skills/README.md,docs/choosing-a-han-plugin.md,CLAUDE.mdBehavior (Linear-native divergences from the Jira peer)
mcp.linear.app); hard preflight, no fallback; single target team.Depends onlines become native "blocked by" relations (append-only, dedup-safe). No description-rewrite fallback, because native relations are reliable.## <SYM-N> (<LINEAR-ID>) — <title>.Conventions honored
hanmeta-plugin's dependencies; depends onhan.core; requires the Linear MCP server.1.0.0and the marketplace version mirrorsplugin.json. The CHANGELOG entry and the parenthanbump are intentionally left for/han-release.Validation
Dogfooded live against a Linear workspace: fresh run plus native blocked-by link,
--stateplacement, 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