@specship/specship-win32-arm64 0.21.2 → 0.22.0
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/lib/dist/bin/specship.js +302 -4
- package/lib/dist/bin/specship.js.map +1 -1
- package/lib/dist/commands/specship/jira.md +74 -0
- package/lib/dist/commands/specship/spec.md +61 -1
- package/lib/dist/extraction/index.d.ts +6 -0
- package/lib/dist/extraction/index.d.ts.map +1 -1
- package/lib/dist/extraction/index.js.map +1 -1
- package/lib/dist/extraction/specs/markdown-spec-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/specs/markdown-spec-extractor.js +8 -1
- package/lib/dist/extraction/specs/markdown-spec-extractor.js.map +1 -1
- package/lib/dist/index.d.ts +7 -0
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +45 -18
- package/lib/dist/index.js.map +1 -1
- package/lib/dist/jira/auto-publish.d.ts +67 -0
- package/lib/dist/jira/auto-publish.d.ts.map +1 -0
- package/lib/dist/jira/auto-publish.js +232 -0
- package/lib/dist/jira/auto-publish.js.map +1 -0
- package/lib/dist/jira/board-first.d.ts +64 -0
- package/lib/dist/jira/board-first.d.ts.map +1 -0
- package/lib/dist/jira/board-first.js +91 -0
- package/lib/dist/jira/board-first.js.map +1 -0
- package/lib/dist/jira/client.d.ts +80 -1
- package/lib/dist/jira/client.d.ts.map +1 -1
- package/lib/dist/jira/client.js +213 -1
- package/lib/dist/jira/client.js.map +1 -1
- package/lib/dist/jira/config.d.ts +1 -1
- package/lib/dist/jira/config.d.ts.map +1 -1
- package/lib/dist/jira/config.js +14 -3
- package/lib/dist/jira/config.js.map +1 -1
- package/lib/dist/jira/coverage.d.ts +105 -0
- package/lib/dist/jira/coverage.d.ts.map +1 -0
- package/lib/dist/jira/coverage.js +160 -0
- package/lib/dist/jira/coverage.js.map +1 -0
- package/lib/dist/jira/index.d.ts +1 -0
- package/lib/dist/jira/index.d.ts.map +1 -1
- package/lib/dist/jira/index.js +1 -0
- package/lib/dist/jira/index.js.map +1 -1
- package/lib/dist/jira/milestone-comment.d.ts +95 -0
- package/lib/dist/jira/milestone-comment.d.ts.map +1 -0
- package/lib/dist/jira/milestone-comment.js +271 -0
- package/lib/dist/jira/milestone-comment.js.map +1 -0
- package/lib/dist/jira/publish.d.ts +69 -2
- package/lib/dist/jira/publish.d.ts.map +1 -1
- package/lib/dist/jira/publish.js +0 -0
- package/lib/dist/jira/publish.js.map +1 -1
- package/lib/dist/jira/published-specs.d.ts +23 -0
- package/lib/dist/jira/published-specs.d.ts.map +1 -0
- package/lib/dist/jira/published-specs.js +106 -0
- package/lib/dist/jira/published-specs.js.map +1 -0
- package/lib/dist/jira/reconcile.d.ts +81 -0
- package/lib/dist/jira/reconcile.d.ts.map +1 -0
- package/lib/dist/jira/reconcile.js +111 -0
- package/lib/dist/jira/reconcile.js.map +1 -0
- package/lib/dist/jira/regression-pack.d.ts +547 -0
- package/lib/dist/jira/regression-pack.d.ts.map +1 -0
- package/lib/dist/jira/regression-pack.js +986 -0
- package/lib/dist/jira/regression-pack.js.map +1 -0
- package/lib/dist/jira/repo-config.d.ts +59 -0
- package/lib/dist/jira/repo-config.d.ts.map +1 -0
- package/lib/dist/jira/repo-config.js +222 -0
- package/lib/dist/jira/repo-config.js.map +1 -0
- package/lib/dist/jira/spec-amend.d.ts +46 -0
- package/lib/dist/jira/spec-amend.d.ts.map +1 -0
- package/lib/dist/jira/spec-amend.js +232 -0
- package/lib/dist/jira/spec-amend.js.map +1 -0
- package/lib/dist/jira/spec-writer.d.ts +22 -0
- package/lib/dist/jira/spec-writer.d.ts.map +1 -1
- package/lib/dist/jira/spec-writer.js +113 -0
- package/lib/dist/jira/spec-writer.js.map +1 -1
- package/lib/dist/jira/types.d.ts +62 -0
- package/lib/dist/jira/types.d.ts.map +1 -1
- package/lib/dist/jira/types.js +15 -1
- package/lib/dist/jira/types.js.map +1 -1
- package/lib/dist/mcp/jira-tools.d.ts +102 -0
- package/lib/dist/mcp/jira-tools.d.ts.map +1 -1
- package/lib/dist/mcp/jira-tools.js +807 -50
- package/lib/dist/mcp/jira-tools.js.map +1 -1
- package/lib/dist/mcp/server-instructions.d.ts +1 -1
- package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
- package/lib/dist/mcp/server-instructions.js +4 -0
- package/lib/dist/mcp/server-instructions.js.map +1 -1
- package/lib/dist/mcp/spec-tools.d.ts.map +1 -1
- package/lib/dist/mcp/spec-tools.js +7 -1
- package/lib/dist/mcp/spec-tools.js.map +1 -1
- package/lib/dist/mcp/tools.d.ts +3 -0
- package/lib/dist/mcp/tools.d.ts.map +1 -1
- package/lib/dist/mcp/tools.js +50 -0
- package/lib/dist/mcp/tools.js.map +1 -1
- package/lib/dist/resolution/spec-link-resolver.d.ts +2 -0
- package/lib/dist/resolution/spec-link-resolver.d.ts.map +1 -1
- package/lib/dist/resolution/spec-link-resolver.js +11 -3
- package/lib/dist/resolution/spec-link-resolver.js.map +1 -1
- package/lib/node_modules/.package-lock.json +1 -1
- package/lib/package.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression-pack.js","sourceRoot":"","sources":["../../src/jira/regression-pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repo-committed JIRA project binding (REQ-JIRATEAM-001).
|
|
3
|
+
*
|
|
4
|
+
* The binding lives under `jira` inside `specship.config.json` — the same
|
|
5
|
+
* file `src/enforce/enforce.ts` uses for gate configuration (single repo
|
|
6
|
+
* config, `ENFORCE_CONFIG_FILE`). Credentials NEVER live here: a
|
|
7
|
+
* credential-shaped field triggers a hard error naming the file and field,
|
|
8
|
+
* pointing the user at `~/.specship/jira.json`.
|
|
9
|
+
*
|
|
10
|
+
* Precedence (per spec): repo binding wins for project identity even over
|
|
11
|
+
* env, but credentials always come from the user-level config/env. See
|
|
12
|
+
* `resolveJiraCredentials`.
|
|
13
|
+
*/
|
|
14
|
+
import { JiraConfigError, JiraRepoBinding } from './types';
|
|
15
|
+
/**
|
|
16
|
+
* Walk up from `cwd` to find a `specship.config.json`. Falls back to the
|
|
17
|
+
* git root (nearest `.git` directory) so bindings work in fresh clones
|
|
18
|
+
* before the file is authored. Returns null if neither is found.
|
|
19
|
+
*/
|
|
20
|
+
export declare function findRepoRoot(cwd: string): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Reject a repo config whose `jira` block contains a credential-shaped
|
|
23
|
+
* field. The error names the file path and the offending field — the user
|
|
24
|
+
* should see WHY it was rejected and WHERE to put the value instead.
|
|
25
|
+
*/
|
|
26
|
+
export declare function assertNoCredentialsInRepoConfig(raw: unknown, configPath: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Load the repo-committed JIRA binding from `specship.config.json` at (or
|
|
29
|
+
* above) `cwd`. Returns `{ binding: null, path: null }` when no file is
|
|
30
|
+
* present or the file has no `jira` block — a repo without a binding falls
|
|
31
|
+
* through to the solo-lane user-level behavior (REQ-JIRATEAM-001.A3).
|
|
32
|
+
*/
|
|
33
|
+
export declare function loadRepoJiraBinding(cwd: string): {
|
|
34
|
+
binding: JiraRepoBinding | null;
|
|
35
|
+
path: string | null;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Merge a partial `jira` binding patch into the committed
|
|
39
|
+
* `specship.config.json` (REQ-JIRATEAM-006 — used when the intake gate
|
|
40
|
+
* accepts a new default `epicKey`). Preserves every other top-level key
|
|
41
|
+
* (`enforce` and any unknown blocks) — same merge discipline as
|
|
42
|
+
* `enableGateChecks` in `src/enforce/enforce.ts`. Creates the file if
|
|
43
|
+
* absent. Never writes credential-adjacent fields.
|
|
44
|
+
*/
|
|
45
|
+
export declare function updateRepoJiraBinding(projectRoot: string, patch: Partial<JiraRepoBinding>): {
|
|
46
|
+
path: string;
|
|
47
|
+
binding: JiraRepoBinding;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Wrap an auth/access failure that occurred against a repo-bound project
|
|
51
|
+
* (REQ-JIRATEAM-001.A4) so the message names the project, host, and the
|
|
52
|
+
* file that bound them — never a silent fallback to another project.
|
|
53
|
+
*/
|
|
54
|
+
export declare function wrapRepoBindingProjectError(err: Error, info: {
|
|
55
|
+
projectKey: string;
|
|
56
|
+
host: string;
|
|
57
|
+
bindingPath: string;
|
|
58
|
+
}): JiraConfigError;
|
|
59
|
+
//# sourceMappingURL=repo-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-config.d.ts","sourceRoot":"","sources":["../../src/jira/repo-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAkB3D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvD;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,MAAM,GACjB,IAAI,CAcN;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GACV;IAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA6C1D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,CAyC5C;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,KAAK,EACV,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC9D,eAAe,CAMjB"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Repo-committed JIRA project binding (REQ-JIRATEAM-001).
|
|
4
|
+
*
|
|
5
|
+
* The binding lives under `jira` inside `specship.config.json` — the same
|
|
6
|
+
* file `src/enforce/enforce.ts` uses for gate configuration (single repo
|
|
7
|
+
* config, `ENFORCE_CONFIG_FILE`). Credentials NEVER live here: a
|
|
8
|
+
* credential-shaped field triggers a hard error naming the file and field,
|
|
9
|
+
* pointing the user at `~/.specship/jira.json`.
|
|
10
|
+
*
|
|
11
|
+
* Precedence (per spec): repo binding wins for project identity even over
|
|
12
|
+
* env, but credentials always come from the user-level config/env. See
|
|
13
|
+
* `resolveJiraCredentials`.
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.findRepoRoot = findRepoRoot;
|
|
50
|
+
exports.assertNoCredentialsInRepoConfig = assertNoCredentialsInRepoConfig;
|
|
51
|
+
exports.loadRepoJiraBinding = loadRepoJiraBinding;
|
|
52
|
+
exports.updateRepoJiraBinding = updateRepoJiraBinding;
|
|
53
|
+
exports.wrapRepoBindingProjectError = wrapRepoBindingProjectError;
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
const enforce_1 = require("../enforce/enforce");
|
|
57
|
+
const types_1 = require("./types");
|
|
58
|
+
/**
|
|
59
|
+
* Field names that must never appear under `jira` in the repo config —
|
|
60
|
+
* these are credential-adjacent (secrets or host URLs that pair with
|
|
61
|
+
* secrets) and belong in the user-level config only.
|
|
62
|
+
*/
|
|
63
|
+
const FORBIDDEN_FIELDS = [
|
|
64
|
+
'email',
|
|
65
|
+
'apiToken',
|
|
66
|
+
'token',
|
|
67
|
+
'password',
|
|
68
|
+
'username',
|
|
69
|
+
'host',
|
|
70
|
+
'baseUrl',
|
|
71
|
+
'pat',
|
|
72
|
+
];
|
|
73
|
+
/**
|
|
74
|
+
* Walk up from `cwd` to find a `specship.config.json`. Falls back to the
|
|
75
|
+
* git root (nearest `.git` directory) so bindings work in fresh clones
|
|
76
|
+
* before the file is authored. Returns null if neither is found.
|
|
77
|
+
*/
|
|
78
|
+
function findRepoRoot(cwd) {
|
|
79
|
+
let dir = path.resolve(cwd);
|
|
80
|
+
let gitRoot = null;
|
|
81
|
+
while (true) {
|
|
82
|
+
if (fs.existsSync(path.join(dir, enforce_1.ENFORCE_CONFIG_FILE)))
|
|
83
|
+
return dir;
|
|
84
|
+
if (gitRoot === null && fs.existsSync(path.join(dir, '.git')))
|
|
85
|
+
gitRoot = dir;
|
|
86
|
+
const parent = path.dirname(dir);
|
|
87
|
+
if (parent === dir)
|
|
88
|
+
return gitRoot;
|
|
89
|
+
dir = parent;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Reject a repo config whose `jira` block contains a credential-shaped
|
|
94
|
+
* field. The error names the file path and the offending field — the user
|
|
95
|
+
* should see WHY it was rejected and WHERE to put the value instead.
|
|
96
|
+
*/
|
|
97
|
+
function assertNoCredentialsInRepoConfig(raw, configPath) {
|
|
98
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
99
|
+
return;
|
|
100
|
+
const jira = raw.jira;
|
|
101
|
+
if (!jira || typeof jira !== 'object' || Array.isArray(jira))
|
|
102
|
+
return;
|
|
103
|
+
const jiraObj = jira;
|
|
104
|
+
for (const field of FORBIDDEN_FIELDS) {
|
|
105
|
+
if (field in jiraObj) {
|
|
106
|
+
throw new types_1.JiraConfigError(`Repo config ${configPath} has "jira.${field}" — credentials must ` +
|
|
107
|
+
`live in ~/.specship/jira.json (or SPECSHIP_JIRA_* env), never in the ` +
|
|
108
|
+
`repo. Remove "jira.${field}" and run "specship jira configure".`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Load the repo-committed JIRA binding from `specship.config.json` at (or
|
|
114
|
+
* above) `cwd`. Returns `{ binding: null, path: null }` when no file is
|
|
115
|
+
* present or the file has no `jira` block — a repo without a binding falls
|
|
116
|
+
* through to the solo-lane user-level behavior (REQ-JIRATEAM-001.A3).
|
|
117
|
+
*/
|
|
118
|
+
function loadRepoJiraBinding(cwd) {
|
|
119
|
+
const root = findRepoRoot(cwd);
|
|
120
|
+
if (!root)
|
|
121
|
+
return { binding: null, path: null };
|
|
122
|
+
const configPath = path.join(root, enforce_1.ENFORCE_CONFIG_FILE);
|
|
123
|
+
let raw;
|
|
124
|
+
try {
|
|
125
|
+
raw = fs.readFileSync(configPath, 'utf-8');
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return { binding: null, path: null };
|
|
129
|
+
}
|
|
130
|
+
let parsed;
|
|
131
|
+
try {
|
|
132
|
+
parsed = JSON.parse(raw);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
throw new types_1.JiraConfigError(`Repo config ${configPath} is not valid JSON.`);
|
|
136
|
+
}
|
|
137
|
+
assertNoCredentialsInRepoConfig(parsed, configPath);
|
|
138
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
139
|
+
return { binding: null, path: configPath };
|
|
140
|
+
}
|
|
141
|
+
const jira = parsed.jira;
|
|
142
|
+
if (!jira || typeof jira !== 'object' || Array.isArray(jira)) {
|
|
143
|
+
return { binding: null, path: configPath };
|
|
144
|
+
}
|
|
145
|
+
const j = jira;
|
|
146
|
+
const projectKey = typeof j.projectKey === 'string' ? j.projectKey.trim() : '';
|
|
147
|
+
if (!projectKey) {
|
|
148
|
+
throw new types_1.JiraConfigError(`Repo config ${configPath} has a "jira" block but no "projectKey".`);
|
|
149
|
+
}
|
|
150
|
+
const binding = { projectKey };
|
|
151
|
+
if (typeof j.storyIssueType === 'string')
|
|
152
|
+
binding.storyIssueType = j.storyIssueType;
|
|
153
|
+
if (typeof j.subtaskIssueType === 'string')
|
|
154
|
+
binding.subtaskIssueType = j.subtaskIssueType;
|
|
155
|
+
if (typeof j.board === 'string' || typeof j.board === 'number')
|
|
156
|
+
binding.board = j.board;
|
|
157
|
+
if (typeof j.sprint === 'string' || typeof j.sprint === 'number')
|
|
158
|
+
binding.sprint = j.sprint;
|
|
159
|
+
if (typeof j.epicKey === 'string' && j.epicKey.trim())
|
|
160
|
+
binding.epicKey = j.epicKey.trim();
|
|
161
|
+
return { binding, path: configPath };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Merge a partial `jira` binding patch into the committed
|
|
165
|
+
* `specship.config.json` (REQ-JIRATEAM-006 — used when the intake gate
|
|
166
|
+
* accepts a new default `epicKey`). Preserves every other top-level key
|
|
167
|
+
* (`enforce` and any unknown blocks) — same merge discipline as
|
|
168
|
+
* `enableGateChecks` in `src/enforce/enforce.ts`. Creates the file if
|
|
169
|
+
* absent. Never writes credential-adjacent fields.
|
|
170
|
+
*/
|
|
171
|
+
function updateRepoJiraBinding(projectRoot, patch) {
|
|
172
|
+
const file = path.join(projectRoot, enforce_1.ENFORCE_CONFIG_FILE);
|
|
173
|
+
let cfg = {};
|
|
174
|
+
try {
|
|
175
|
+
const raw = fs.readFileSync(file, 'utf-8');
|
|
176
|
+
const parsed = JSON.parse(raw);
|
|
177
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
178
|
+
cfg = parsed;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// missing / unparseable → start fresh, preserving nothing
|
|
183
|
+
}
|
|
184
|
+
assertNoCredentialsInRepoConfig(cfg, file);
|
|
185
|
+
const existing = cfg.jira && typeof cfg.jira === 'object' && !Array.isArray(cfg.jira)
|
|
186
|
+
? cfg.jira
|
|
187
|
+
: {};
|
|
188
|
+
const merged = { ...existing };
|
|
189
|
+
for (const [k, v] of Object.entries(patch)) {
|
|
190
|
+
if (v === undefined)
|
|
191
|
+
continue;
|
|
192
|
+
merged[k] = v;
|
|
193
|
+
}
|
|
194
|
+
if (typeof merged.projectKey !== 'string' || !merged.projectKey.trim()) {
|
|
195
|
+
throw new types_1.JiraConfigError(`Cannot update ${file}: a "jira.projectKey" is required.`);
|
|
196
|
+
}
|
|
197
|
+
cfg.jira = merged;
|
|
198
|
+
fs.writeFileSync(file, JSON.stringify(cfg, null, 2) + '\n', 'utf-8');
|
|
199
|
+
const binding = { projectKey: String(merged.projectKey).trim() };
|
|
200
|
+
if (typeof merged.storyIssueType === 'string')
|
|
201
|
+
binding.storyIssueType = merged.storyIssueType;
|
|
202
|
+
if (typeof merged.subtaskIssueType === 'string')
|
|
203
|
+
binding.subtaskIssueType = merged.subtaskIssueType;
|
|
204
|
+
if (typeof merged.board === 'string' || typeof merged.board === 'number')
|
|
205
|
+
binding.board = merged.board;
|
|
206
|
+
if (typeof merged.sprint === 'string' || typeof merged.sprint === 'number')
|
|
207
|
+
binding.sprint = merged.sprint;
|
|
208
|
+
if (typeof merged.epicKey === 'string' && merged.epicKey.trim())
|
|
209
|
+
binding.epicKey = merged.epicKey.trim();
|
|
210
|
+
return { path: file, binding };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Wrap an auth/access failure that occurred against a repo-bound project
|
|
214
|
+
* (REQ-JIRATEAM-001.A4) so the message names the project, host, and the
|
|
215
|
+
* file that bound them — never a silent fallback to another project.
|
|
216
|
+
*/
|
|
217
|
+
function wrapRepoBindingProjectError(err, info) {
|
|
218
|
+
return new types_1.JiraConfigError(`Cannot access JIRA project "${info.projectKey}" on ${info.host} ` +
|
|
219
|
+
`(bound via ${info.bindingPath}). Check your credentials or the binding. ` +
|
|
220
|
+
`Cause: ${err.message}`);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=repo-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-config.js","sourceRoot":"","sources":["../../src/jira/repo-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec-file write-side for JIRA reconciliation (REQ-JIRATEAM-005.A4).
|
|
3
|
+
*
|
|
4
|
+
* Two operations, both pure text transforms with a thin fs wrapper:
|
|
5
|
+
* - `applyContentAmendment` rewrites the requirement's title/prose body from
|
|
6
|
+
* an edited-in-JIRA summary/description while preserving the leading
|
|
7
|
+
* frontmatter, the `implementations:` / `verifies:` blocks, and the
|
|
8
|
+
* `## Acceptance` section (never clobbered).
|
|
9
|
+
* - `appendAcceptanceCriterion` inserts a new id-marked bullet under the
|
|
10
|
+
* `## Acceptance` container of the target requirement.
|
|
11
|
+
*
|
|
12
|
+
* The transforms return the amended source bytes; callers persist the file and
|
|
13
|
+
* re-publish so the frontmatter fingerprint refreshes.
|
|
14
|
+
*/
|
|
15
|
+
export interface AmendResult {
|
|
16
|
+
changed: boolean;
|
|
17
|
+
source: string;
|
|
18
|
+
reason?: 'req-id-not-found' | 'already-present';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Rewrite the requirement's H2 title and its prose paragraph(s) from the
|
|
22
|
+
* edited-in-JIRA summary/description. Preserves the `## Acceptance` container
|
|
23
|
+
* (if present), the `implementations:` and `verifies:` blocks, and every
|
|
24
|
+
* child section. The prose window runs from the line after the heading up to
|
|
25
|
+
* the first of: `## Acceptance`, `implementations:`, `verifies:`, a nested
|
|
26
|
+
* id-marker, or a deeper heading — those all stay intact.
|
|
27
|
+
*/
|
|
28
|
+
export declare function applyContentAmendment(source: string, reqId: string, newTitle: string, newDescription: string): AmendResult;
|
|
29
|
+
/**
|
|
30
|
+
* Insert `- <!-- id: <criterionId> -->\n- <text>` under the requirement's
|
|
31
|
+
* `## Acceptance` container. Creates the container when absent (appended to
|
|
32
|
+
* the end of the requirement body). Idempotent: if a bullet with the same id
|
|
33
|
+
* already exists, returns unchanged.
|
|
34
|
+
*/
|
|
35
|
+
export declare function appendAcceptanceCriterion(source: string, reqId: string, criterionId: string, criterionText: string): AmendResult;
|
|
36
|
+
/**
|
|
37
|
+
* Fs wrapper: read the spec file, apply `mutator`, and write it back when the
|
|
38
|
+
* result changed. Refuses paths that escape `projectRoot`. Never throws — a
|
|
39
|
+
* malformed spec or a write error is returned as `{ ok: false }`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function amendSpecFile(projectRoot: string, specSourcePath: string, mutator: (source: string) => AmendResult): {
|
|
42
|
+
ok: boolean;
|
|
43
|
+
changed: boolean;
|
|
44
|
+
detail: string;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=spec-amend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-amend.d.ts","sourceRoot":"","sources":["../../src/jira/spec-amend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;CACjD;AA2CD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,WAAW,CAwCb;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,WAAW,CAwDb;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,WAAW,GACvC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAuBnD"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Spec-file write-side for JIRA reconciliation (REQ-JIRATEAM-005.A4).
|
|
4
|
+
*
|
|
5
|
+
* Two operations, both pure text transforms with a thin fs wrapper:
|
|
6
|
+
* - `applyContentAmendment` rewrites the requirement's title/prose body from
|
|
7
|
+
* an edited-in-JIRA summary/description while preserving the leading
|
|
8
|
+
* frontmatter, the `implementations:` / `verifies:` blocks, and the
|
|
9
|
+
* `## Acceptance` section (never clobbered).
|
|
10
|
+
* - `appendAcceptanceCriterion` inserts a new id-marked bullet under the
|
|
11
|
+
* `## Acceptance` container of the target requirement.
|
|
12
|
+
*
|
|
13
|
+
* The transforms return the amended source bytes; callers persist the file and
|
|
14
|
+
* re-publish so the frontmatter fingerprint refreshes.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
+
var ownKeys = function(o) {
|
|
34
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
+
var ar = [];
|
|
36
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
39
|
+
return ownKeys(o);
|
|
40
|
+
};
|
|
41
|
+
return function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
})();
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.applyContentAmendment = applyContentAmendment;
|
|
51
|
+
exports.appendAcceptanceCriterion = appendAcceptanceCriterion;
|
|
52
|
+
exports.amendSpecFile = amendSpecFile;
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const ID_MARKER = /^\s*<!--\s*id\s*:\s*([^\s]+)\s*-->\s*$/;
|
|
56
|
+
const HEADING = /^(#{1,6})\s+(.+?)\s*$/;
|
|
57
|
+
const ACCEPTANCE_CONTAINER = /^##\s+acceptance\s*$/i;
|
|
58
|
+
const IMPL_BLOCK_HEADER = /^implementations:\s*$/;
|
|
59
|
+
const VERIFIES_BLOCK_HEADER = /^verifies:\s*$/;
|
|
60
|
+
/**
|
|
61
|
+
* Find the `<!-- id: reqId -->`-marked heading and return the [start, end)
|
|
62
|
+
* line range of its heading + body (up to but not including the next heading
|
|
63
|
+
* of the same or shallower level, or the next `<!-- id: -->` marker at any
|
|
64
|
+
* level). Returns `null` when the marker doesn't resolve to a heading.
|
|
65
|
+
*/
|
|
66
|
+
function findRequirementRange(lines, reqId) {
|
|
67
|
+
let markerIdx = -1;
|
|
68
|
+
for (let i = 0; i < lines.length; i++) {
|
|
69
|
+
const m = (lines[i] ?? '').match(ID_MARKER);
|
|
70
|
+
if (m && m[1] === reqId) {
|
|
71
|
+
markerIdx = i;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (markerIdx === -1)
|
|
76
|
+
return null;
|
|
77
|
+
const headingIdx = markerIdx + 1;
|
|
78
|
+
const headingMatch = (lines[headingIdx] ?? '').match(HEADING);
|
|
79
|
+
if (!headingMatch || !headingMatch[1])
|
|
80
|
+
return null;
|
|
81
|
+
const level = headingMatch[1].length;
|
|
82
|
+
let bodyEnd = lines.length;
|
|
83
|
+
for (let i = headingIdx + 1; i < lines.length; i++) {
|
|
84
|
+
const line = lines[i] ?? '';
|
|
85
|
+
const h = line.match(HEADING);
|
|
86
|
+
if (h && h[1] && h[1].length <= level) {
|
|
87
|
+
bodyEnd = i;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
if (ID_MARKER.test(line)) {
|
|
91
|
+
bodyEnd = i;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return { markerIdx, headingIdx, level, bodyEnd };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Rewrite the requirement's H2 title and its prose paragraph(s) from the
|
|
99
|
+
* edited-in-JIRA summary/description. Preserves the `## Acceptance` container
|
|
100
|
+
* (if present), the `implementations:` and `verifies:` blocks, and every
|
|
101
|
+
* child section. The prose window runs from the line after the heading up to
|
|
102
|
+
* the first of: `## Acceptance`, `implementations:`, `verifies:`, a nested
|
|
103
|
+
* id-marker, or a deeper heading — those all stay intact.
|
|
104
|
+
*/
|
|
105
|
+
function applyContentAmendment(source, reqId, newTitle, newDescription) {
|
|
106
|
+
const lines = source.split('\n');
|
|
107
|
+
const range = findRequirementRange(lines, reqId);
|
|
108
|
+
if (!range)
|
|
109
|
+
return { changed: false, source, reason: 'req-id-not-found' };
|
|
110
|
+
const headingLine = lines[range.headingIdx] ?? '';
|
|
111
|
+
const headingHash = '#'.repeat(range.level);
|
|
112
|
+
const oldTitle = headingLine.replace(/^#+\s+/, '').trim();
|
|
113
|
+
// Prose window: from headingIdx+1 up to (but not including) the first
|
|
114
|
+
// structural landmark we must preserve.
|
|
115
|
+
let proseEnd = range.bodyEnd;
|
|
116
|
+
for (let i = range.headingIdx + 1; i < range.bodyEnd; i++) {
|
|
117
|
+
const line = lines[i] ?? '';
|
|
118
|
+
if (ACCEPTANCE_CONTAINER.test(line) ||
|
|
119
|
+
IMPL_BLOCK_HEADER.test(line) ||
|
|
120
|
+
VERIFIES_BLOCK_HEADER.test(line) ||
|
|
121
|
+
HEADING.test(line) ||
|
|
122
|
+
ID_MARKER.test(line)) {
|
|
123
|
+
proseEnd = i;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const cleanedDescription = newDescription.replace(/\r\n/g, '\n').trimEnd();
|
|
128
|
+
const cleanedTitle = newTitle.replace(/\r?\n/g, ' ').trim() || oldTitle;
|
|
129
|
+
const newHeading = `${headingHash} ${cleanedTitle}`;
|
|
130
|
+
const nextIsBlank = (lines[proseEnd] ?? '').trim() === '';
|
|
131
|
+
const proseLines = cleanedDescription.length > 0
|
|
132
|
+
? ['', ...cleanedDescription.split('\n'), ...(nextIsBlank ? [] : [''])]
|
|
133
|
+
: [''];
|
|
134
|
+
const newHead = [newHeading, ...proseLines];
|
|
135
|
+
const before = lines.slice(0, range.headingIdx);
|
|
136
|
+
const after = lines.slice(proseEnd);
|
|
137
|
+
const next = [...before, ...newHead, ...after].join('\n');
|
|
138
|
+
if (next === source)
|
|
139
|
+
return { changed: false, source, reason: 'already-present' };
|
|
140
|
+
return { changed: true, source: next };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Insert `- <!-- id: <criterionId> -->\n- <text>` under the requirement's
|
|
144
|
+
* `## Acceptance` container. Creates the container when absent (appended to
|
|
145
|
+
* the end of the requirement body). Idempotent: if a bullet with the same id
|
|
146
|
+
* already exists, returns unchanged.
|
|
147
|
+
*/
|
|
148
|
+
function appendAcceptanceCriterion(source, reqId, criterionId, criterionText) {
|
|
149
|
+
const lines = source.split('\n');
|
|
150
|
+
const range = findRequirementRange(lines, reqId);
|
|
151
|
+
if (!range)
|
|
152
|
+
return { changed: false, source, reason: 'req-id-not-found' };
|
|
153
|
+
// Idempotence: the id already appears anywhere in the file.
|
|
154
|
+
for (const line of lines) {
|
|
155
|
+
const m = line.match(ID_MARKER);
|
|
156
|
+
if (m && m[1] === criterionId) {
|
|
157
|
+
return { changed: false, source, reason: 'already-present' };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Locate the acceptance container (if any) inside the requirement body.
|
|
161
|
+
let acceptanceIdx = -1;
|
|
162
|
+
for (let i = range.headingIdx + 1; i < range.bodyEnd; i++) {
|
|
163
|
+
if (ACCEPTANCE_CONTAINER.test(lines[i] ?? '')) {
|
|
164
|
+
acceptanceIdx = i;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const marker = `<!-- id: ${criterionId} -->`;
|
|
169
|
+
const bullet = `- ${criterionText.replace(/\s+/g, ' ').trim()}`;
|
|
170
|
+
if (acceptanceIdx === -1) {
|
|
171
|
+
// Create a fresh acceptance section at the end of the body, trimming any
|
|
172
|
+
// trailing blank lines so the new block sits flush.
|
|
173
|
+
let insertAt = range.bodyEnd;
|
|
174
|
+
while (insertAt > range.headingIdx + 1 && (lines[insertAt - 1] ?? '').trim() === '') {
|
|
175
|
+
insertAt--;
|
|
176
|
+
}
|
|
177
|
+
const block = ['', '## Acceptance', marker, bullet];
|
|
178
|
+
if (insertAt < lines.length && (lines[insertAt] ?? '').trim() !== '')
|
|
179
|
+
block.push('');
|
|
180
|
+
lines.splice(insertAt, 0, ...block);
|
|
181
|
+
return { changed: true, source: lines.join('\n') };
|
|
182
|
+
}
|
|
183
|
+
// Append at the end of the acceptance container. The container ends at the
|
|
184
|
+
// first heading of the same-or-shallower level, or the requirement's
|
|
185
|
+
// bodyEnd.
|
|
186
|
+
let acceptEnd = range.bodyEnd;
|
|
187
|
+
for (let i = acceptanceIdx + 1; i < range.bodyEnd; i++) {
|
|
188
|
+
const h = (lines[i] ?? '').match(HEADING);
|
|
189
|
+
if (h && h[1] && h[1].length <= 2) {
|
|
190
|
+
acceptEnd = i;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
let insertAt = acceptEnd;
|
|
195
|
+
while (insertAt > acceptanceIdx + 1 && (lines[insertAt - 1] ?? '').trim() === '') {
|
|
196
|
+
insertAt--;
|
|
197
|
+
}
|
|
198
|
+
const block = [marker, bullet];
|
|
199
|
+
lines.splice(insertAt, 0, ...block);
|
|
200
|
+
return { changed: true, source: lines.join('\n') };
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Fs wrapper: read the spec file, apply `mutator`, and write it back when the
|
|
204
|
+
* result changed. Refuses paths that escape `projectRoot`. Never throws — a
|
|
205
|
+
* malformed spec or a write error is returned as `{ ok: false }`.
|
|
206
|
+
*/
|
|
207
|
+
function amendSpecFile(projectRoot, specSourcePath, mutator) {
|
|
208
|
+
try {
|
|
209
|
+
const abs = path.isAbsolute(specSourcePath)
|
|
210
|
+
? specSourcePath
|
|
211
|
+
: path.join(projectRoot, specSourcePath);
|
|
212
|
+
const rel = path.relative(projectRoot, abs);
|
|
213
|
+
if (rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
214
|
+
return { ok: false, changed: false, detail: `spec source resolves outside project root: ${specSourcePath}` };
|
|
215
|
+
}
|
|
216
|
+
const source = fs.readFileSync(abs, 'utf-8');
|
|
217
|
+
const res = mutator(source);
|
|
218
|
+
if (!res.changed) {
|
|
219
|
+
return {
|
|
220
|
+
ok: res.reason !== 'req-id-not-found',
|
|
221
|
+
changed: false,
|
|
222
|
+
detail: res.reason ?? 'no change',
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
fs.writeFileSync(abs, res.source, 'utf-8');
|
|
226
|
+
return { ok: true, changed: true, detail: `amended ${specSourcePath}` };
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
return { ok: false, changed: false, detail: err instanceof Error ? err.message : String(err) };
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=spec-amend.js.map
|