@softspark/jira-mcp 1.7.0 → 1.8.1

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 CHANGED
@@ -7,7 +7,46 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
- ## v1.7.0 -- Apache-2.0 (2026-07-27)
10
+ ## v1.8.1 -- Duplicate Detection (2026-08-03)
11
+
12
+ ### Fixed
13
+
14
+ - **Duplicate detection never matched anything.** `findExistingTask` searched with
15
+ `summary = "..."`, but `summary` is a text field and JQL only supports `~` on it.
16
+ Jira answers `=` with an empty result set instead of an error, so every lookup
17
+ reported "not found": `update_existing` never updated, and re-running a bulk config
18
+ created a second copy of every task. The lookup now uses a quoted `~` phrase and
19
+ compares the returned summary exactly, since `~` is a fuzzy match. Found by running
20
+ a config twice against a live instance and getting a duplicate issue.
21
+
22
+ ## v1.8.0 -- Status Paths (2026-08-03)
23
+
24
+ ### Added
25
+
26
+ - **`status` accepts an ordered path** in bulk task configs -- `"status": ["On hold", "Open"]`
27
+ walks the transitions one at a time. Jira only exposes the transitions available from an
28
+ issue's *current* status, so a target that is not directly reachable from the initial
29
+ status could not be set at all before. A plain string still means a single transition.
30
+ - **`warnings` in `create_monthly_tasks` output** -- per-task problems that did not stop the
31
+ issue from being written now surface in the tool response instead of being dropped by the
32
+ counters-only summary.
33
+
34
+ ### Fixed
35
+
36
+ - **A rejected status transition is no longer silent.** `setStatus` swallowed every failure,
37
+ including the ordinary case of the requested status simply not being reachable: the issue
38
+ was created, the status was ignored, and the run reported `failed: 0`. Eleven monthly admin
39
+ tasks sat in the wrong status for months because of this. The transition is now reported as
40
+ a `warning` on the task result, naming the status that failed and listing the ones that were
41
+ reachable at that point. The issue itself is still created -- the transition stays non-fatal.
42
+
43
+ ### Changed
44
+
45
+ - **`TaskResult` gains a `warning` field** (`string | null`). `formatBulkResult` prints it
46
+ indented under the task line. Consumers destructuring `TaskResult` are unaffected; anyone
47
+ constructing one now has to supply the field.
48
+
49
+
11
50
 
12
51
  ### Changed -- licence: MIT to Apache-2.0
13
52
 
package/README.md CHANGED
@@ -4,17 +4,17 @@
4
4
 
5
5
  [![CI](https://github.com/softspark/jira-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/softspark/jira-mcp/actions/workflows/ci.yml)
6
6
  [![npm](https://img.shields.io/npm/v/@softspark/jira-mcp)](https://www.npmjs.com/package/@softspark/jira-mcp)
7
- [![version](https://img.shields.io/badge/version-1.7.0-blue)](CHANGELOG.md)
7
+ [![version](https://img.shields.io/badge/version-1.8.1-blue)](CHANGELOG.md)
8
8
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
9
9
 
10
10
  ---
11
11
 
12
- ## What's New in v1.7.0
12
+ ## What's New in v1.8.1
13
13
 
14
- - **Licence: MIT to Apache-2.0.** Still permissive -- fork it, modify it, ship it commercially. What changes is what a redistributor owes back: the contents of [NOTICE](NOTICE) must travel with any redistribution (§4d), modified files must say they were modified (§4b), plus an express patent grant and a trademark reservation. Releases up to v1.6.0 stay available under MIT; nothing already granted is revoked.
15
- - **Attribution reaches the published bundles.** npm ships `dist/`, not `src/`, and the build minifies away every comment -- so the SPDX headers added to 165 source files never reach a consumer. A build banner carries the licence into `dist/index.js` and `dist/cli.js` instead, and a test asserts both entries keep it.
16
- - **Licensing gate in `npm test`** -- `tests/licensing.test.ts`, 8 assertions covering headers, `LICENSE`, `NOTICE`, npm `files`, and the build banner. Release SOP gains Phase 4.7 running the same gate before tagging.
17
- - **Release SOP hardened** -- tag placement is now asserted before the push, and `git push --tags` is replaced with a single-tag push by full ref. A `--tags` push is how a sibling project silently skipped a publish.
14
+ - **Duplicate detection actually works now.** The lookup used `summary = "..."`, and Jira answers `=` on a text field with an empty result set rather than an error -- so it always reported "not found". `update_existing` never updated anything, and re-running a bulk config duplicated every task. Now a quoted `~` phrase with an exact comparison on the result.
15
+ - **`status` takes a path, not just a name.** `"status": ["On hold", "Open"]` walks the transitions in order. Jira only ever exposes the transitions out of an issue's *current* status, so a target that is not directly reachable from the initial status was previously impossible to set -- which is exactly how workflows that gate `Open` behind a `Reopen` transition behave.
16
+ - **Failed transitions stop being silent.** The old code caught every transition error and moved on: issue created, status ignored, run reports `failed: 0`. It now returns a `warning` naming the status that failed and listing what was reachable instead, surfaced per task and aggregated into `create_monthly_tasks` output.
17
+ - **`TaskResult.warning`** -- new `string | null` field for problems that occur after the issue is already written. `formatBulkResult` prints it under the task line.
18
18
 
19
19
  See [CHANGELOG.md](CHANGELOG.md) for full details.
20
20