@rsaglobaltech/specgate 0.21.0 → 0.22.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/README.md +81 -96
  3. package/dist/packages/core/src/domain/BriefCards.js +320 -0
  4. package/dist/packages/core/src/domain/BriefCards.js.map +1 -0
  5. package/dist/packages/core/src/domain/DraftChecklist.js +5 -1
  6. package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
  7. package/dist/packages/core/src/domain/QuotedText.js +5 -0
  8. package/dist/packages/core/src/domain/QuotedText.js.map +1 -1
  9. package/dist/packages/core/src/domain/TicketText.js +337 -0
  10. package/dist/packages/core/src/domain/TicketText.js.map +1 -0
  11. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +7 -3
  12. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
  13. package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js +48 -0
  14. package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js.map +1 -0
  15. package/dist/packages/mcp-spec-driven/src/native-tools.js +1 -1
  16. package/dist/packages/mcp-spec-driven/src/native-tools.js.map +1 -1
  17. package/dist/scripts/agents/commands.js +8 -6
  18. package/dist/scripts/agents/commands.js.map +1 -1
  19. package/dist/scripts/agents/contract-file.js +44 -0
  20. package/dist/scripts/agents/contract-file.js.map +1 -1
  21. package/dist/scripts/alm/cli.js +16 -4
  22. package/dist/scripts/alm/cli.js.map +1 -1
  23. package/dist/scripts/alm/port.js +1 -1
  24. package/dist/scripts/alm/port.js.map +1 -1
  25. package/dist/scripts/alm/providers/http-client.js +46 -3
  26. package/dist/scripts/alm/providers/http-client.js.map +1 -1
  27. package/dist/scripts/alm/providers/jira.js +108 -32
  28. package/dist/scripts/alm/providers/jira.js.map +1 -1
  29. package/dist/scripts/cli/commands/alm/PrCommand.js +198 -0
  30. package/dist/scripts/cli/commands/alm/PrCommand.js.map +1 -0
  31. package/dist/scripts/cli/commands/change/ChangeCommand.js +32 -6
  32. package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
  33. package/dist/scripts/cli/commands/change/TicketCommand.js +657 -0
  34. package/dist/scripts/cli/commands/change/TicketCommand.js.map +1 -0
  35. package/dist/scripts/cli/commands/harness/RunCommand.js +4 -2
  36. package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
  37. package/dist/scripts/cli/commands/project/AdoptCommand.js +58 -0
  38. package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
  39. package/dist/scripts/cli/commands/project/UpdateCommand.js +4 -0
  40. package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
  41. package/dist/scripts/cli/commands/quality/CheckCommand.js +12 -0
  42. package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
  43. package/dist/scripts/cli/commands/spec/DraftCommand.js +240 -27
  44. package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
  45. package/dist/scripts/cli/commands/spec/ExploreCommand.js +13 -13
  46. package/dist/scripts/cli/commands/spec/ExploreCommand.js.map +1 -1
  47. package/dist/scripts/cli/commands/spec/StatusCommand.js +18 -6
  48. package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
  49. package/dist/scripts/docs/journey-storyboard.js +67 -44
  50. package/dist/scripts/docs/journey-storyboard.js.map +1 -1
  51. package/dist/scripts/docs/nav.js +156 -139
  52. package/dist/scripts/docs/nav.js.map +1 -1
  53. package/dist/scripts/docs/record-journey.js +139 -49
  54. package/dist/scripts/docs/record-journey.js.map +1 -1
  55. package/dist/scripts/docs/terminal-storyboard.js +15 -11
  56. package/dist/scripts/docs/terminal-storyboard.js.map +1 -1
  57. package/dist/scripts/draft/brief-check.js +34 -0
  58. package/dist/scripts/draft/brief-check.js.map +1 -0
  59. package/dist/scripts/draft/brief-setup.js +182 -17
  60. package/dist/scripts/draft/brief-setup.js.map +1 -1
  61. package/dist/scripts/draft/drafting-guide.js +43 -1
  62. package/dist/scripts/draft/drafting-guide.js.map +1 -1
  63. package/dist/scripts/draft/ticket-guide.js +129 -0
  64. package/dist/scripts/draft/ticket-guide.js.map +1 -0
  65. package/dist/scripts/lib/surface.js +2 -0
  66. package/dist/scripts/lib/surface.js.map +1 -1
  67. package/dist/scripts/lib/ticket-keys.js +140 -0
  68. package/dist/scripts/lib/ticket-keys.js.map +1 -0
  69. package/dist/scripts/propose.js +8 -2
  70. package/dist/scripts/propose.js.map +1 -1
  71. package/dist/scripts/vcs/github-pr.js +88 -0
  72. package/dist/scripts/vcs/github-pr.js.map +1 -0
  73. package/package.json +1 -1
  74. package/templates/base/AGENTS.md.tpl +6 -5
@@ -0,0 +1,337 @@
1
+ "use strict";
2
+ /**
3
+ * A Jira ticket, read as source text. (ADR-0039)
4
+ *
5
+ * An analyst writes a story the way the KAN board shows it:
6
+ *
7
+ * As an administrator, I want … so that …
8
+ * Source: Spec §2.1
9
+ * Acceptance Criteria
10
+ * 1. Given …, when …, then …
11
+ * Open questions
12
+ * - Is … ? Assumption: …
13
+ *
14
+ * The headings are paragraphs in bold more often than headings, and come in
15
+ * the team's language, so a section starts at any line that *is* one of the
16
+ * known names — a heading, a bold paragraph, a line with a colon. The rest of
17
+ * the ticket is kept as written: `ticket.md` is the text a draft is checked
18
+ * against, and a reader that rewrites it would be checking against itself.
19
+ *
20
+ * Pure: the issue JSON in, the parts out. Reading Jira is the provider's job.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.documentText = documentText;
24
+ exports.readTicket = readTicket;
25
+ exports.checkTicket = checkTicket;
26
+ exports.ticketReady = ticketReady;
27
+ const Diagnostic_1 = require("./Diagnostic");
28
+ const BriefCards_1 = require("./BriefCards");
29
+ const QuotedText_1 = require("./QuotedText");
30
+ const CRITERIA_HEADINGS = [
31
+ "acceptance criteria",
32
+ "acceptance criterion",
33
+ "akzeptanzkriterien",
34
+ "akzeptanzkriterium",
35
+ "criterios de aceptación",
36
+ "criterios de aceptacion",
37
+ ];
38
+ const QUESTION_HEADINGS = ["open questions", "offene fragen", "preguntas abiertas"];
39
+ const SOURCE_LINE = /^\s*(?:\*\*)?(?:source|quelle|fuente)\s*:\s*(?:\*\*)?\s*(.+)$/i;
40
+ const ASSUMPTION = /\s*(?:assumption|annahme|supuesto)\s*:\s*/i;
41
+ const ITEM = /^\s*(?:[-*•]|\d+[.)])\s+(.*)$/;
42
+ /** A criterion's first word: on its own line, it starts a criterion even without a marker. */
43
+ const OPENS_CRITERION = /^\s*(?:\*\*)?(?:given|gegeben sei|angenommen|dado|dada|scenario|szenario|escenario)\b/i;
44
+ /** `**Acceptance Criteria:**`, `## Akzeptanzkriterien`, `Open questions` → the bare name. */
45
+ function headingName(line) {
46
+ return line
47
+ .trim()
48
+ .replace(/^#{1,6}\s+/, "")
49
+ .replace(/^\*\*(.*)\*\*$/, "$1")
50
+ .replace(/:\s*$/, "")
51
+ .replace(/^\*\*(.*)\*\*$/, "$1")
52
+ .trim()
53
+ .toLowerCase();
54
+ }
55
+ function sectionOf(line) {
56
+ const name = headingName(line);
57
+ if (CRITERIA_HEADINGS.includes(name))
58
+ return "criteria";
59
+ if (QUESTION_HEADINGS.includes(name))
60
+ return "questions";
61
+ // Another heading ends the section it interrupts.
62
+ if (/^#{1,6}\s+\S/.test(line.trim()))
63
+ return "other";
64
+ return null;
65
+ }
66
+ function inline(node) {
67
+ if (node.type === "text")
68
+ return node.text ?? "";
69
+ if (node.type === "hardBreak")
70
+ return "\n";
71
+ // Inline nodes that carry their text in attrs: "@Ana", a smart link, an emoji.
72
+ if (node.type === "mention")
73
+ return node.attrs?.text ?? "";
74
+ if (node.type === "emoji")
75
+ return node.attrs?.text ?? node.attrs?.shortName ?? "";
76
+ if (node.type === "inlineCard")
77
+ return node.attrs?.url ?? "";
78
+ if (node.type === "date") {
79
+ const ms = Number(node.attrs?.timestamp);
80
+ return Number.isFinite(ms) ? new Date(ms).toISOString().slice(0, 10) : "";
81
+ }
82
+ return (node.content ?? []).map(inline).join("");
83
+ }
84
+ function blocks(nodes, indent = "") {
85
+ const out = [];
86
+ for (const node of nodes ?? []) {
87
+ switch (node.type) {
88
+ case "paragraph":
89
+ out.push(...inline(node)
90
+ .split("\n")
91
+ .map((l) => indent + l));
92
+ break;
93
+ case "heading":
94
+ out.push(`${"#".repeat(node.attrs?.level ?? 2)} ${inline(node)}`);
95
+ break;
96
+ case "bulletList":
97
+ case "orderedList":
98
+ (node.content ?? []).forEach((item, i) => {
99
+ const marker = node.type === "orderedList" ? `${i + 1}. ` : "- ";
100
+ const [first, ...rest] = blocks(item.content, indent + " ");
101
+ out.push(indent + marker + (first ?? "").trimStart(), ...rest);
102
+ });
103
+ break;
104
+ case "codeBlock":
105
+ out.push("```", inline(node), "```");
106
+ break;
107
+ case "rule":
108
+ out.push("---");
109
+ break;
110
+ case "table":
111
+ for (const row of node.content ?? []) {
112
+ out.push("| " +
113
+ (row.content ?? []).map((cell) => blocks(cell.content).join(" ")).join(" | ") +
114
+ " |");
115
+ }
116
+ break;
117
+ default:
118
+ if (node.content)
119
+ out.push(...blocks(node.content, indent));
120
+ else if (node.text)
121
+ out.push(indent + node.text);
122
+ }
123
+ if (!indent)
124
+ out.push("");
125
+ }
126
+ return out;
127
+ }
128
+ /** An ADF document, or a plain string, as markdown. */
129
+ function documentText(value) {
130
+ if (typeof value === "string")
131
+ return value.replace(/\r\n/g, "\n").trim();
132
+ if (!value || typeof value !== "object")
133
+ return "";
134
+ return blocks(value.content)
135
+ .join("\n")
136
+ .replace(/\n{3,}/g, "\n\n")
137
+ .trim();
138
+ }
139
+ // ── The parts ─────────────────────────────────────────────────────────────────
140
+ /**
141
+ * A section's lines as items. A list marker starts an item; so does a line of
142
+ * text after a blank line, at the start, or opening with "Given" (or its
143
+ * German and Spanish words). A line right below an item
144
+ * continues it (a wrapped line, a nested list). No text is dropped: a
145
+ * criterion written as a paragraph between list items is still a criterion.
146
+ */
147
+ function items(lines) {
148
+ const out = [];
149
+ let current = null;
150
+ const flush = () => {
151
+ if (current !== null && current.trim())
152
+ out.push(current.trim());
153
+ current = null;
154
+ };
155
+ for (const line of lines) {
156
+ const m = ITEM.exec(line);
157
+ if (m && !/^\s{3,}/.test(line)) {
158
+ flush();
159
+ current = m[1].trim();
160
+ }
161
+ else if (!line.trim()) {
162
+ flush();
163
+ }
164
+ else if (current === null) {
165
+ current = line.trim();
166
+ }
167
+ else if (OPENS_CRITERION.test(line)) {
168
+ flush();
169
+ current = line.trim();
170
+ }
171
+ else {
172
+ current += " " + (m ? m[1] : line).trim();
173
+ }
174
+ }
175
+ flush();
176
+ return out;
177
+ }
178
+ function question(text) {
179
+ const parts = text.split(ASSUMPTION);
180
+ if (parts.length < 2)
181
+ return { text, assumption: null };
182
+ return { text: parts[0].trim(), assumption: parts.slice(1).join(" ").trim() || null };
183
+ }
184
+ /** Read one issue — Jira's JSON for it — into its parts. */
185
+ function readTicket(issue, opts = {}) {
186
+ const json = (issue ?? {});
187
+ const fields = json.fields ?? {};
188
+ const key = String(json.key ?? "");
189
+ const description = documentText(fields.description);
190
+ const sections = {
191
+ intent: [],
192
+ criteria: [],
193
+ questions: [],
194
+ other: [],
195
+ };
196
+ let source = null;
197
+ let current = "intent";
198
+ for (const line of description.split("\n")) {
199
+ const next = sectionOf(line);
200
+ if (next) {
201
+ current = next;
202
+ continue;
203
+ }
204
+ const src = current === "intent" ? SOURCE_LINE.exec(line) : null;
205
+ if (src && source === null) {
206
+ source = src[1].trim();
207
+ continue;
208
+ }
209
+ sections[current].push(line);
210
+ }
211
+ const field = opts.acceptanceField ? documentText(fields[opts.acceptanceField]) : "";
212
+ const criteria = field ? items(field.split("\n")) : items(sections.criteria);
213
+ return {
214
+ key,
215
+ summary: String(fields.summary ?? ""),
216
+ type: String(fields.issuetype?.name ?? ""),
217
+ parent: fields.parent?.key ? String(fields.parent.key) : null,
218
+ labels: Array.isArray(fields.labels) ? fields.labels.map(String) : [],
219
+ url: opts.baseUrl && key ? `${opts.baseUrl.replace(/\/$/, "")}/browse/${key}` : null,
220
+ intent: sections.intent
221
+ .join("\n")
222
+ .replace(/\n{3,}/g, "\n\n")
223
+ .trim(),
224
+ source,
225
+ criteria,
226
+ questions: items(sections.questions).map(question),
227
+ description,
228
+ };
229
+ }
230
+ // ── The Definition of Ready: T1 to T9 ────────────────────────────────────────
231
+ const MAX_CRITERIA = 8;
232
+ /** A criterion that tells the developer which tests to write, not what the system does. */
233
+ const TEST_INSTRUCTION = /\b(?:unit|integration|e2e|end-to-end|regression|automated)[- ]?tests?\b|\btests?\s+(?:run|cover|pass)|\bpruebas\s+(?:unitarias|de integraci[oó]n)|\b(?:unit|integrations?)-?tests?\b|\btestf[aä]lle\b/i;
234
+ /**
235
+ * A quantity promised without a number. Narrower than the draft's D-rule: a
236
+ * ticket says "when the dashboard loads" and "the action is not available"
237
+ * about behaviour, and any digit in a criterion is taken as its measure.
238
+ */
239
+ const QUANTITY = /\b(?:fast|faster|quick(?:ly)?|slow|speed|latency|response time|performan(?:t|ce)|throughput|concurren(?:t|cy)|scalab(?:le|ility)|uptime|real[- ]time|instant(?:ly)?|r[aá]pid[oa]?|veloz|escalable|schnell|performant|echtzeit)\b/i;
240
+ const unmeasured = (text) => QUANTITY.test(text.replace(/\b\p{L}+-\p{L}+/gu, "")) && !/\d/.test(text);
241
+ /** What a deliverable's criteria speak of: work handed over, not behaviour. */
242
+ const DELIVERABLE = /\b(?:delivered|documented|reviewed|approve[sd]?|signed off|figma|figjam|miro|wirefram\w*|mockups?|prototypes?|design system|style ?guide|geliefert|dokumentiert|abgenommen|entregad[oa]s?|documentad[oa]s?|revisad[oa]s?|aprobad[oa]s?)\b/i;
243
+ const isEpic = (type) => /^epic$|^épica$/i.test(type.trim());
244
+ const isSubtask = (type) => /^sub-?task$|^unteraufgabe$|^subtarea$/i.test(type.trim());
245
+ /**
246
+ * Rules T1 to T9 over a ticket. Errors keep a change from opening: a draft
247
+ * from this ticket would be wrong. Warnings are for the analyst and the
248
+ * reviewer. Every fix is written for whoever edits the ticket in Jira.
249
+ */
250
+ function checkTicket(t) {
251
+ const out = [];
252
+ const target = t.key || "ticket";
253
+ if (isEpic(t.type)) {
254
+ return [
255
+ (0, Diagnostic_1.error)("ticket_epic", `${target} is an epic: it maps to a capability and is not drafted itself.`, {
256
+ target,
257
+ fix: `Map it in alm.config.yaml (epics: { ${target}: <capability> }) and draft its stories one by one.`,
258
+ }),
259
+ ];
260
+ }
261
+ if (isSubtask(t.type) && !t.parent) {
262
+ out.push((0, Diagnostic_1.error)("T8_orphan_subtask", `${target} is a sub-task with no parent story.`, {
263
+ target,
264
+ fix: "Attach it to its story in Jira; a sub-task is drafted as part of its story's change.",
265
+ }));
266
+ }
267
+ if (t.criteria.length === 0) {
268
+ out.push((0, Diagnostic_1.error)("T1_no_criteria", `${target} has no acceptance criteria.`, {
269
+ target,
270
+ fix: 'In the description, add a line "Acceptance Criteria" and under it one item per ' +
271
+ 'criterion: "Given …, when …, then …".',
272
+ }));
273
+ }
274
+ t.criteria.forEach((criterion, i) => {
275
+ const n = i + 1;
276
+ const where = { target: `${target} criterion ${n}` };
277
+ const bare = (0, QuotedText_1.withoutQuoted)(criterion);
278
+ // "quick-action buttons" names a thing; "easy-to-use" is still vague.
279
+ const vague = [...bare.matchAll(new RegExp(BriefCards_1.VAGUE.source, "giu"))]
280
+ .filter((m) => {
281
+ const after = bare.slice(m.index + m[0].length);
282
+ return !/^-\p{L}/u.test(after) || /^-to-/i.test(after);
283
+ })
284
+ .map((m) => `"${m[1]}"`);
285
+ if (vague.length) {
286
+ out.push((0, Diagnostic_1.error)("T2_vague", `Criterion ${n} says ${[...new Set(vague)].join(" and ")}, which no test can check.`, {
287
+ ...where,
288
+ fix: 'Say what it means in values: "within 2 seconds", "in at most 3 clicks".',
289
+ }));
290
+ }
291
+ if (unmeasured(bare)) {
292
+ out.push((0, Diagnostic_1.warning)("T3_unmeasured", `Criterion ${n} promises a quantity and states no number.`, {
293
+ ...where,
294
+ fix: 'Give the number and its unit: "responds within 2 seconds for 1,000 entries a day".',
295
+ }));
296
+ }
297
+ const tech = BriefCards_1.TECHNICAL.exec(bare);
298
+ if (tech) {
299
+ out.push((0, Diagnostic_1.warning)("T4_technical", `Criterion ${n} names ${tech[1]}: how, not what.`, {
300
+ ...where,
301
+ fix: "Say what the user or the business sees; the technology is the team's decision.",
302
+ }));
303
+ }
304
+ if (TEST_INSTRUCTION.test(bare)) {
305
+ out.push((0, Diagnostic_1.warning)("T6_test_instruction", `Criterion ${n} prescribes tests instead of behaviour.`, {
306
+ ...where,
307
+ fix: 'Write each case it lists as a criterion of its own ("Given a stay of 1 hour 1 minute, then …"); the tests follow from those.',
308
+ }));
309
+ }
310
+ });
311
+ if (t.criteria.length > MAX_CRITERIA) {
312
+ out.push((0, Diagnostic_1.warning)("T5_too_big", `${target} has ${t.criteria.length} criteria.`, {
313
+ target,
314
+ fix: `Split the story: at most ${MAX_CRITERIA} criteria each, so one change stays reviewable.`,
315
+ }));
316
+ }
317
+ if (t.criteria.length > 0 && t.criteria.every((c) => DELIVERABLE.test(c))) {
318
+ out.push((0, Diagnostic_1.warning)("T7_not_behaviour", `${target}'s criteria speak of deliverables, not of what the system does.`, {
319
+ target,
320
+ fix: "A deliverable is tracked on the board, not specified: leave it out of the spec, or add criteria for what the system does.",
321
+ }));
322
+ }
323
+ for (const q of t.questions) {
324
+ if (!q.assumption) {
325
+ out.push((0, Diagnostic_1.info)("T9_open_question", `"${q.text}" has no stated assumption.`, {
326
+ target,
327
+ fix: 'Add "Assumption: …" after the question, so the draft can proceed and the reviewer sees what was assumed.',
328
+ }));
329
+ }
330
+ }
331
+ return out;
332
+ }
333
+ /** Ready when no T-rule is an error. */
334
+ function ticketReady(findings) {
335
+ return !findings.some((d) => d.severity === "error");
336
+ }
337
+ //# sourceMappingURL=TicketText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketText.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/TicketText.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,7 @@ exports.taskProgress = taskProgress;
67
67
  exports.changeStatusLabel = changeStatusLabel;
68
68
  const fs = __importStar(require("node:fs"));
69
69
  const path = __importStar(require("node:path"));
70
+ const IdsAcrossBranches_1 = require("./IdsAcrossBranches");
70
71
  const YamlLite_1 = require("../domain/YamlLite");
71
72
  exports.SPECS_DIR = path.join("docs", "specs");
72
73
  exports.CAPABILITIES_DIR = path.join(exports.SPECS_DIR, "capabilities");
@@ -102,11 +103,12 @@ function listChangeIds(projectDir) {
102
103
  const p = paths(projectDir);
103
104
  if (!fs.existsSync(p.changes))
104
105
  return [];
105
- return fs
106
+ return (fs
106
107
  .readdirSync(p.changes, { withFileTypes: true })
107
- .filter((e) => e.isDirectory() && e.name !== "archive")
108
+ // `.<id>.opening` is a change being written, not a change (ADR-0039).
109
+ .filter((e) => e.isDirectory() && e.name !== "archive" && !e.name.startsWith("."))
108
110
  .map((e) => e.name)
109
- .sort();
111
+ .sort());
110
112
  }
111
113
  function listArchivedIds(projectDir) {
112
114
  const p = paths(projectDir);
@@ -236,6 +238,8 @@ function highestReservedReq(projectDir) {
236
238
  scan(fs.readFileSync(cfgFile, "utf8"));
237
239
  walkSpecs(path.join(dir, "specs"));
238
240
  }
241
+ // And every other branch's changes: a sibling ticket's branch has its own (REQ-152).
242
+ max = Math.max(max, (0, IdsAcrossBranches_1.highestOnOtherBranches)(projectDir, "REQ"));
239
243
  return max;
240
244
  }
241
245
  function formatReqId(n) {
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeWorkspace.js","sourceRoot":"","sources":["../../../../../packages/core/src/infrastructure/ChangeWorkspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChangeWorkspace.js","sourceRoot":"","sources":["../../../../../packages/core/src/infrastructure/ChangeWorkspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * The highest id a change uses on any branch (REQ-152).
4
+ *
5
+ * Ids are allocated as max + 1, and a checkout only sees its own branch: two
6
+ * tickets opened on two branches both minted REQ-002 (KAN-13 and KAN-14).
7
+ * `git grep` reads the changes of every local and remote-tracking branch
8
+ * without checking any of them out. Outside a repository, there is nothing
9
+ * to read and the answer is 0.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.highestOnOtherBranches = highestOnOtherBranches;
13
+ const node_child_process_1 = require("node:child_process");
14
+ const CHANGES = "docs/specs/changes";
15
+ /** Refs per `git grep` call: a long branch list stays under the argument limit. */
16
+ const BATCH = 200;
17
+ function highestOnOtherBranches(projectDir, prefix) {
18
+ const refs = (0, node_child_process_1.spawnSync)("git", ["-C", projectDir, "for-each-ref", "--format=%(refname)", "refs/heads", "refs/remotes"], { encoding: "utf8" });
19
+ if (refs.status !== 0)
20
+ return 0;
21
+ const names = refs.stdout
22
+ .split("\n")
23
+ .map((r) => r.trim())
24
+ .filter((r) => r && !r.endsWith("/HEAD"));
25
+ let max = 0;
26
+ for (let i = 0; i < names.length; i += BATCH) {
27
+ const found = (0, node_child_process_1.spawnSync)("git", [
28
+ "-C",
29
+ projectDir,
30
+ "grep",
31
+ "-h",
32
+ "-o",
33
+ "-E",
34
+ `${prefix}-[0-9]+`,
35
+ ...names.slice(i, i + BATCH),
36
+ "--",
37
+ CHANGES,
38
+ ], { encoding: "utf8", maxBuffer: 64 * 1024 * 1024 });
39
+ // 1 is "no match", which is an answer, not a failure.
40
+ if (found.status !== 0)
41
+ continue;
42
+ for (const m of found.stdout.matchAll(new RegExp(`${prefix}-(\\d+)`, "g"))) {
43
+ max = Math.max(max, Number(m[1]));
44
+ }
45
+ }
46
+ return max;
47
+ }
48
+ //# sourceMappingURL=IdsAcrossBranches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdsAcrossBranches.js","sourceRoot":"","sources":["../../../../../packages/core/src/infrastructure/IdsAcrossBranches.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAQH,wDAoCC;AA1CD,2DAA+C;AAE/C,MAAM,OAAO,GAAG,oBAAoB,CAAC;AACrC,mFAAmF;AACnF,MAAM,KAAK,GAAG,GAAG,CAAC;AAElB,SAAgB,sBAAsB,CAAC,UAAkB,EAAE,MAAqB;IAC9E,MAAM,IAAI,GAAG,IAAA,8BAAS,EACpB,KAAK,EACL,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,cAAc,CAAC,EACvF,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;SACtB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAA,8BAAS,EACrB,KAAK,EACL;YACE,IAAI;YACJ,UAAU;YACV,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,GAAG,MAAM,SAAS;YAClB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;YAC5B,IAAI;YACJ,OAAO;SACR,EACD,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAClD,CAAC;QACF,sDAAsD;QACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -95,7 +95,7 @@ function assertContractEditable(toolName, projectDir) {
95
95
  return;
96
96
  throw new Error(toolName +
97
97
  " writes files the specification contract protects, and no change is open." +
98
- " Open one first: specgate change new <id>." +
98
+ " Open one first: specgate propose <id>." +
99
99
  ' To allow it permanently, set "mcpAllowContractEdits": true in .specgate/config.json.');
100
100
  }
101
101
  class ProjectHelper {
@@ -1 +1 @@
1
- {"version":3,"file":"native-tools.js","sourceRoot":"","sources":["../../../../packages/mcp-spec-driven/src/native-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native-tools.js","sourceRoot":"","sources":["../../../../packages/mcp-spec-driven/src/native-tools.ts"],"names":[],"mappings":"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"}
@@ -32,13 +32,15 @@ exports.STEPS = [
32
32
  summary: "Turn the plan or brief into requirements, one module at a time.",
33
33
  when: "The project starts from a plan or brief (`docs/brief.md`), or the user names a module of it to specify.",
34
34
  argumentHint: "<module>",
35
- run: ["specgate draft", "specgate draft <module>"],
35
+ run: ["specgate propose --from-brief", "specgate propose --from-brief <module>"],
36
36
  guidance: [
37
- "No `docs/brief.md`: show the person what `specgate draft` prints about a brief, and stop — the brief is theirs to write (`specgate draft --new-brief` gives them one to fill in).",
38
- "If `specgate draft` says the brief has no front matter, or that it needs fixes: follow `docs/specs/BRIEF-SETUP.md`. Write or fix only the front matter at the top of `docs/brief.md` — never a word below it — run `specgate draft` again, then **stop** and show the front matter to the person to review. Draft no module in the same turn.",
39
- "Without a module, `specgate draft` lists the brief's modules and names the next one. Draft that one.",
40
- "`specgate draft <module>` opens the draft and writes `DRAFTING.md` inside it. Follow it exactly: it has the reserved ids, the actors and surfaces, and every format the checklist reads.",
41
- "Write only inside `docs/specs/changes/draft-<module>/`. Then run `specgate draft <module>` again and fix every finding until it says **Ready to review**.",
37
+ "No `docs/brief.md`: show the person what `specgate propose --from-brief` prints about a brief, and stop — the brief is theirs to write (`specgate propose --from-brief --new-brief` gives them one to fill in).",
38
+ "If `specgate propose --from-brief` says the brief has no front matter, or that it needs fixes: follow `docs/specs/BRIEF-SETUP.md`. Write or fix only the front matter at the top of `docs/brief.md` — never a word below it — run `specgate propose --from-brief` again, then **stop** and show the front matter to the person to review. Draft no module in the same turn.",
39
+ "If the front matter is complete and the brief has no `## Module:` sections: follow `docs/specs/BRIEF-CARDS.md`. Add one section per module — Rules, Examples, Questions — from the brief's own text, keep every line already there, then **stop** and show the sections to the person.",
40
+ "Before a module is drafted, `specgate propose --from-brief --check` must report no error: it checks the brief's fields, a section per module, and rules with examples. Its warnings are for the person to judge.",
41
+ "Without a module, `specgate propose --from-brief` lists the brief's modules and names the next one. Draft that one.",
42
+ "`specgate propose --from-brief <module>` opens the draft and writes `DRAFTING.md` inside it. Follow it exactly: it has the module's section of the brief, the values to use, the reserved ids, the actors and surfaces, and every format the checklist reads.",
43
+ "Write only inside `docs/specs/changes/draft-<module>/`. Then run `specgate propose --from-brief <module>` again and fix every finding until it says **Ready to review**.",
42
44
  "A `D6_unlisted_value` is a value the brief never gave: use the brief's value, list it in `assumptions.md`, or make it a question. Never invent a business rule — what only the client can decide goes in `questions.md`.",
43
45
  "Do not archive. End with the open questions for the person: they review the draft and answer what they can. Then each requirement is built test first and delivered with `specgate apply REQ-NNN`; a person runs `specgate archive draft-<module>` once all of them are applied.",
44
46
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../scripts/agents/commands.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAcU,QAAA,KAAK,GAAgB;IAChC;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,oDAAoD;QAC7D,IAAI,EAAE,2CAA2C;QACjD,GAAG,EAAE,CAAC,wBAAwB,CAAC;QAC/B,QAAQ,EAAE;YACR,8EAA8E;YAC9E,uFAAuF;YACvF,wEAAwE;SACzE;KACF;IACD;QACE,wEAAwE;QACxE,0EAA0E;QAC1E,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,iEAAiE;QAC1E,IAAI,EAAE,yGAAyG;QAC/G,YAAY,EAAE,UAAU;QACxB,GAAG,EAAE,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;QAClD,QAAQ,EAAE;YACR,mLAAmL;YACnL,+UAA+U;YAC/U,sGAAsG;YACtG,0LAA0L;YAC1L,2JAA2J;YAC3J,0NAA0N;YAC1N,kRAAkR;SACnR;KACF;IACD;QACE,yEAAyE;QACzE,gEAAgE;QAChE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,0EAA0E;QACnF,IAAI,EAAE,2FAA2F;QACjG,GAAG,EAAE;YACH,8BAA8B;YAC9B,8CAA8C;YAC9C,2CAA2C;SAC5C;QACD,QAAQ,EAAE;YACR,4JAA4J;YAC5J,+KAA+K;YAC/K,mIAAmI;YACnI,gFAAgF;SACjF;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,iFAAiF;QAC1F,IAAI,EAAE,8FAA8F;QACpG,GAAG,EAAE,CAAC,iDAAiD,CAAC;QACxD,QAAQ,EAAE;YACR,gHAAgH;YAChH,qJAAqJ;YACrJ,0CAA0C;SAC3C;KACF;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,wEAAwE;QACjF,IAAI,EAAE,oGAAoG;QAC1G,GAAG,EAAE;YACH,wBAAwB;YACxB,2CAA2C;YAC3C,iCAAiC;SAClC;QACD,QAAQ,EAAE;YACR,oDAAoD;YACpD,6JAA6J;YAC7J,4FAA4F;YAC5F,sEAAsE;YACtE,mIAAmI;SACpI;KACF;IACD;QACE,sEAAsE;QACtE,sEAAsE;QACtE,8DAA8D;QAC9D,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,+DAA+D;QACxE,IAAI,EAAE,yDAAyD;QAC/D,GAAG,EAAE,CAAC,uBAAuB,CAAC;QAC9B,QAAQ,EAAE;YACR,kEAAkE;YAClE,kFAAkF;YAClF,yFAAyF;SAC1F;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,4EAA4E;QACrF,IAAI,EAAE,uGAAuG;QAC7G,GAAG,EAAE;YACH,6CAA6C;YAC7C,wCAAwC;YACxC,qCAAqC;SACtC;QACD,QAAQ,EAAE;YACR,+GAA+G;YAC/G,wHAAwH;YACxH,oEAAoE;YACpE,+FAA+F;SAChG;KACF;IACD;QACE,yEAAyE;QACzE,kDAAkD;QAClD,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,0EAA0E;QACnF,IAAI,EAAE,mFAAmF;QACzF,GAAG,EAAE,CAAC,iCAAiC,CAAC;QACxC,QAAQ,EAAE;YACR,wGAAwG;YACxG,6FAA6F;SAC9F;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,gEAAgE;QACzE,IAAI,EAAE,2CAA2C;QACjD,GAAG,EAAE,CAAC,eAAe,EAAE,uBAAuB,CAAC;QAC/C,QAAQ,EAAE;YACR,yGAAyG;YACzG,kHAAkH;SACnH;KACF;CACF,CAAC;AAEF,0EAA0E;AAC7D,QAAA,aAAa,GAAG;IAC3B,mHAAmH;IACnH,kKAAkK;IAClK,2GAA2G;IAC3G,iFAAiF;IACjF,2HAA2H;CAC5H,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../scripts/agents/commands.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,7 @@ exports.writtenByOlderSpecgate = writtenByOlderSpecgate;
50
50
  exports.buildContract = buildContract;
51
51
  exports.ensureContract = ensureContract;
52
52
  exports.migrateAiRules = migrateAiRules;
53
+ exports.refreshContract = refreshContract;
53
54
  const fs = __importStar(require("node:fs"));
54
55
  const path = __importStar(require("node:path"));
55
56
  const project_root_1 = require("../lib/project-root");
@@ -162,4 +163,47 @@ function migrateAiRules(projectDir, opts = {}) {
162
163
  }
163
164
  return { moved: true, agents };
164
165
  }
166
+ /**
167
+ * The block, rewritten from the installed template (REQ-155). Its facts —
168
+ * the header's architecture and domain, the stack, API and testing line — and
169
+ * its "Project rules" section are the project's, so they are kept; the rest is
170
+ * Specgate's and follows the version installed. Without this, a project
171
+ * adopted without agent files never got a new contract: `update` had nothing
172
+ * to merge. Null when there is no block.
173
+ */
174
+ function refreshContract(projectDir, opts = {}) {
175
+ const file = path.join(projectDir, "AGENTS.md");
176
+ if (!fs.existsSync(file))
177
+ return null;
178
+ const existing = fs.readFileSync(file, "utf8");
179
+ const start = existing.indexOf(exports.BEGIN.slice(0, 22));
180
+ const end = existing.indexOf(exports.END);
181
+ if (start === -1 || end === -1 || end < start)
182
+ return null;
183
+ const inner = existing.slice(existing.indexOf("\n", start) + 1, end);
184
+ const header = /^(\w+) project · architecture: ([^·\n]+?) · domain: ([^\n]+)$/m.exec(inner);
185
+ const name = /^# AGENTS\.md\s*[—–-]\s*(.+)$/m.exec(inner)?.[1]?.trim();
186
+ const rules = /^## Project rules\n([\s\S]*)$/m.exec(inner)?.[1]?.trim() ?? "";
187
+ const root = (0, project_root_1.findCliRoot)(__dirname);
188
+ const tpl = fs.readFileSync(path.join(root, "templates", "base", "AGENTS.md.tpl"), "utf8");
189
+ const vars = {
190
+ PROJECT_NAME: name || path.basename(path.resolve(projectDir)),
191
+ PROJECT_TYPE: header?.[1] ?? "existing",
192
+ ARCHITECTURE: header?.[2]?.trim() ?? "minimal",
193
+ DOMAIN: header?.[3]?.trim() ?? "see spec.md",
194
+ STACK: rulesField(inner, "Stack") || "see below",
195
+ API_STYLE: rulesField(inner, "API") || "as built",
196
+ TESTING: rulesField(inner, "Testing") || "see below",
197
+ STACK_RULES: rules,
198
+ ARCHITECTURE_MODELING_RULES: "",
199
+ ARCHITECTURE_CHECKS: "",
200
+ };
201
+ const contract = tpl.replace(/\{\{([A-Z_]+)\}\}/g, (all, k) => (k in vars ? vars[k] : all)).trimEnd() + "\n";
202
+ const merged = mergeContract(existing, contract);
203
+ if (merged === existing)
204
+ return "unchanged";
205
+ if (!opts.dryRun)
206
+ fs.writeFileSync(file, merged, "utf8");
207
+ return "updated";
208
+ }
165
209
  //# sourceMappingURL=contract-file.js.map