@wrongstack/sdd 1.0.6 → 1.0.8

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 (2) hide show
  1. package/dist/index.js +26 -8
  2. package/package.json +5 -5
package/dist/index.js CHANGED
@@ -5141,23 +5141,41 @@ var SpecVersioning = class {
5141
5141
  updateTaskGraph(graph, oldSpec, newSpec) {
5142
5142
  const specDiff = this.diff(oldSpec, newSpec);
5143
5143
  const changes = [];
5144
- const reqToTask = /* @__PURE__ */ new Map();
5144
+ const reqToTasks = /* @__PURE__ */ new Map();
5145
5145
  for (const node of graph.nodes.values()) {
5146
5146
  if (node.specRequirementId) {
5147
- reqToTask.set(node.specRequirementId, node);
5147
+ const list = reqToTasks.get(node.specRequirementId);
5148
+ if (list) {
5149
+ list.push(node);
5150
+ } else {
5151
+ reqToTasks.set(node.specRequirementId, [node]);
5152
+ }
5148
5153
  }
5149
5154
  }
5155
+ const deletedTaskIds = /* @__PURE__ */ new Set();
5150
5156
  for (const req of specDiff.removed) {
5151
- const task = reqToTask.get(req.id);
5152
- if (task) {
5157
+ const tasks = reqToTasks.get(req.id) ?? [];
5158
+ for (const task of tasks) {
5153
5159
  graph.nodes.delete(task.id);
5154
- graph.edges = graph.edges.filter((e) => e.from !== task.id && e.to !== task.id);
5160
+ deletedTaskIds.add(task.id);
5155
5161
  changes.push(`Removed task: ${task.title}`);
5156
5162
  }
5157
5163
  }
5164
+ if (deletedTaskIds.size > 0) {
5165
+ graph.edges = graph.edges.filter(
5166
+ (e) => !deletedTaskIds.has(e.from) && !deletedTaskIds.has(e.to)
5167
+ );
5168
+ graph.rootNodes = graph.rootNodes.filter((id) => !deletedTaskIds.has(id));
5169
+ if (graph.requiredRequirementIds) {
5170
+ const removedIds = new Set(specDiff.removed.map((r) => r.id));
5171
+ graph.requiredRequirementIds = graph.requiredRequirementIds.filter(
5172
+ (id) => !removedIds.has(id)
5173
+ );
5174
+ }
5175
+ }
5158
5176
  for (const mod of specDiff.modified) {
5159
- const task = reqToTask.get(mod.requirement.id);
5160
- if (task) {
5177
+ const tasks = reqToTasks.get(mod.requirement.id) ?? [];
5178
+ for (const task of tasks) {
5161
5179
  task.title = mod.requirement.description;
5162
5180
  task.description = this.buildTaskDescription(mod.requirement);
5163
5181
  task.priority = mod.requirement.priority;
@@ -5838,7 +5856,7 @@ function makePreferSideConflictResolver(side, io = defaultFileIO) {
5838
5856
  };
5839
5857
  }
5840
5858
  function unfence(text) {
5841
- const m = text.match(/^[\s\S]*?```[^\n]*\n([\s\S]*?)\n```[\s\S]*$/);
5859
+ const m = text.match(/^[\s\S]*?```[^\n]*\n([\s\S]*)\n```[\s\S]*$/);
5842
5860
  return m?.[1] !== void 0 ? m[1] : text.trim();
5843
5861
  }
5844
5862
  function nonMarkerLineCount(text) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/sdd",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "license": "MIT",
5
5
  "description": "WrongStack Spec-Driven Development engine — standalone package extracted from @wrongstack/core. Task graph generation, tracking, execution, lifecycle management, and AI-driven spec building for SDD workflows.",
6
6
  "repository": {
@@ -27,10 +27,10 @@
27
27
  "!dist/**/*.map"
28
28
  ],
29
29
  "dependencies": {
30
- "@wrongstack/core": "1.0.6",
31
- "@wrongstack/kanban": "1.0.6",
32
- "@wrongstack/primitives": "1.0.6",
33
- "@wrongstack/requirement-intake": "1.0.6"
30
+ "@wrongstack/core": "1.0.8",
31
+ "@wrongstack/kanban": "1.0.8",
32
+ "@wrongstack/primitives": "1.0.8",
33
+ "@wrongstack/requirement-intake": "1.0.8"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^26.2.0",