@wrongstack/sdd 0.319.0 → 0.320.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/dist/index.js +75 -18
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -4511,9 +4511,7 @@ async function gatherProjectContext(projectRoot) {
|
|
|
4511
4511
|
const entries = await fsp6.readdir(packagesDir, { withFileTypes: true });
|
|
4512
4512
|
const pkgs = entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
4513
4513
|
if (pkgs.length > 0) {
|
|
4514
|
-
parts.push(
|
|
4515
|
-
`Packages: ${pkgs.slice(0, 25).join(", ")}${pkgs.length > 25 ? "..." : ""}`
|
|
4516
|
-
);
|
|
4514
|
+
parts.push(`Packages: ${pkgs.slice(0, 25).join(", ")}${pkgs.length > 25 ? "..." : ""}`);
|
|
4517
4515
|
}
|
|
4518
4516
|
} catch {
|
|
4519
4517
|
}
|
|
@@ -4562,8 +4560,20 @@ var SPEC_TEMPLATES = [
|
|
|
4562
4560
|
{ type: "acceptance", title: "Acceptance Criteria", level: 2 }
|
|
4563
4561
|
],
|
|
4564
4562
|
defaultRequirements: [
|
|
4565
|
-
{
|
|
4566
|
-
|
|
4563
|
+
{
|
|
4564
|
+
type: "functional",
|
|
4565
|
+
priority: "high",
|
|
4566
|
+
acceptanceCriteria: [],
|
|
4567
|
+
blockedBy: [],
|
|
4568
|
+
implements: []
|
|
4569
|
+
},
|
|
4570
|
+
{
|
|
4571
|
+
type: "non-functional",
|
|
4572
|
+
priority: "medium",
|
|
4573
|
+
acceptanceCriteria: [],
|
|
4574
|
+
blockedBy: [],
|
|
4575
|
+
implements: []
|
|
4576
|
+
}
|
|
4567
4577
|
]
|
|
4568
4578
|
},
|
|
4569
4579
|
{
|
|
@@ -4576,7 +4586,13 @@ var SPEC_TEMPLATES = [
|
|
|
4576
4586
|
{ type: "acceptance", title: "Fix Verification", level: 2 }
|
|
4577
4587
|
],
|
|
4578
4588
|
defaultRequirements: [
|
|
4579
|
-
{
|
|
4589
|
+
{
|
|
4590
|
+
type: "functional",
|
|
4591
|
+
priority: "critical",
|
|
4592
|
+
acceptanceCriteria: [],
|
|
4593
|
+
blockedBy: [],
|
|
4594
|
+
implements: []
|
|
4595
|
+
}
|
|
4580
4596
|
]
|
|
4581
4597
|
},
|
|
4582
4598
|
{
|
|
@@ -4590,7 +4606,13 @@ var SPEC_TEMPLATES = [
|
|
|
4590
4606
|
{ type: "acceptance", title: "Verification", level: 2 }
|
|
4591
4607
|
],
|
|
4592
4608
|
defaultRequirements: [
|
|
4593
|
-
{
|
|
4609
|
+
{
|
|
4610
|
+
type: "non-functional",
|
|
4611
|
+
priority: "high",
|
|
4612
|
+
acceptanceCriteria: [],
|
|
4613
|
+
blockedBy: [],
|
|
4614
|
+
implements: []
|
|
4615
|
+
}
|
|
4594
4616
|
]
|
|
4595
4617
|
},
|
|
4596
4618
|
{
|
|
@@ -4605,7 +4627,13 @@ var SPEC_TEMPLATES = [
|
|
|
4605
4627
|
{ type: "acceptance", title: "Rollout Plan", level: 2 }
|
|
4606
4628
|
],
|
|
4607
4629
|
defaultRequirements: [
|
|
4608
|
-
{
|
|
4630
|
+
{
|
|
4631
|
+
type: "functional",
|
|
4632
|
+
priority: "high",
|
|
4633
|
+
acceptanceCriteria: [],
|
|
4634
|
+
blockedBy: [],
|
|
4635
|
+
implements: []
|
|
4636
|
+
},
|
|
4609
4637
|
{ type: "security", priority: "high", acceptanceCriteria: [], blockedBy: [], implements: [] }
|
|
4610
4638
|
]
|
|
4611
4639
|
},
|
|
@@ -4622,9 +4650,27 @@ var SPEC_TEMPLATES = [
|
|
|
4622
4650
|
{ type: "acceptance", title: "Testing Strategy", level: 2 }
|
|
4623
4651
|
],
|
|
4624
4652
|
defaultRequirements: [
|
|
4625
|
-
{
|
|
4626
|
-
|
|
4627
|
-
|
|
4653
|
+
{
|
|
4654
|
+
type: "functional",
|
|
4655
|
+
priority: "high",
|
|
4656
|
+
acceptanceCriteria: [],
|
|
4657
|
+
blockedBy: [],
|
|
4658
|
+
implements: []
|
|
4659
|
+
},
|
|
4660
|
+
{
|
|
4661
|
+
type: "security",
|
|
4662
|
+
priority: "critical",
|
|
4663
|
+
acceptanceCriteria: [],
|
|
4664
|
+
blockedBy: [],
|
|
4665
|
+
implements: []
|
|
4666
|
+
},
|
|
4667
|
+
{
|
|
4668
|
+
type: "performance",
|
|
4669
|
+
priority: "medium",
|
|
4670
|
+
acceptanceCriteria: [],
|
|
4671
|
+
blockedBy: [],
|
|
4672
|
+
implements: []
|
|
4673
|
+
}
|
|
4628
4674
|
]
|
|
4629
4675
|
},
|
|
4630
4676
|
{
|
|
@@ -4639,7 +4685,13 @@ var SPEC_TEMPLATES = [
|
|
|
4639
4685
|
],
|
|
4640
4686
|
defaultRequirements: [
|
|
4641
4687
|
{ type: "ux", priority: "high", acceptanceCriteria: [], blockedBy: [], implements: [] },
|
|
4642
|
-
{
|
|
4688
|
+
{
|
|
4689
|
+
type: "functional",
|
|
4690
|
+
priority: "high",
|
|
4691
|
+
acceptanceCriteria: [],
|
|
4692
|
+
blockedBy: [],
|
|
4693
|
+
implements: []
|
|
4694
|
+
}
|
|
4643
4695
|
]
|
|
4644
4696
|
}
|
|
4645
4697
|
];
|
|
@@ -4995,7 +5047,10 @@ var SpecVersioning = class {
|
|
|
4995
5047
|
recordVersion(spec, changeDescription) {
|
|
4996
5048
|
const version = {
|
|
4997
5049
|
version: spec.version,
|
|
4998
|
-
|
|
5050
|
+
// Deep snapshot: a shallow spread leaves `requirements`/`sections`
|
|
5051
|
+
// aliased to the caller's object, so later edits to that object would
|
|
5052
|
+
// retroactively rewrite recorded history.
|
|
5053
|
+
spec: structuredClone(spec),
|
|
4999
5054
|
timestamp: Date.now(),
|
|
5000
5055
|
changeDescription
|
|
5001
5056
|
};
|
|
@@ -5661,9 +5716,7 @@ async function decomposeNonAtomicTasks(opts) {
|
|
|
5661
5716
|
for (const node of nodes) {
|
|
5662
5717
|
if (node.parentId) childCounts.set(node.parentId, (childCounts.get(node.parentId) ?? 0) + 1);
|
|
5663
5718
|
}
|
|
5664
|
-
const candidates = nodes.filter(
|
|
5665
|
-
(node) => node.status === "pending" && !childCounts.get(node.id)
|
|
5666
|
-
);
|
|
5719
|
+
const candidates = nodes.filter((node) => node.status === "pending" && !childCounts.get(node.id));
|
|
5667
5720
|
let spent = 0;
|
|
5668
5721
|
for (const node of candidates) {
|
|
5669
5722
|
if (spent >= maxDecompositions) break;
|
|
@@ -5833,13 +5886,17 @@ function synthesizeVibeSpec(rawPrompt, projectContext = "") {
|
|
|
5833
5886
|
"Follow project conventions and strict type safety"
|
|
5834
5887
|
];
|
|
5835
5888
|
if (/admin|role|auth|yetki/i.test(cleanPrompt)) {
|
|
5836
|
-
sensibleDefaults.push(
|
|
5889
|
+
sensibleDefaults.push(
|
|
5890
|
+
"Enforce role-based permission checks before executing privileged actions"
|
|
5891
|
+
);
|
|
5837
5892
|
}
|
|
5838
5893
|
if (/sil|delete|remove|uçur/i.test(cleanPrompt)) {
|
|
5839
5894
|
sensibleDefaults.push("Confirm deletion intent and handle non-existent resource gracefully");
|
|
5840
5895
|
}
|
|
5841
5896
|
if (/sepet|cart|ekle|add|art/i.test(cleanPrompt)) {
|
|
5842
|
-
sensibleDefaults.push(
|
|
5897
|
+
sensibleDefaults.push(
|
|
5898
|
+
"Ensure idempotency and optimistic UI updates for cart/counter operations"
|
|
5899
|
+
);
|
|
5843
5900
|
}
|
|
5844
5901
|
const acceptanceCriteria = lines.map(
|
|
5845
5902
|
(line, idx) => `Given user interaction, should correctly handle step ${idx + 1}: ${line}`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/sdd",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.320.1",
|
|
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": "0.
|
|
31
|
-
"@wrongstack/kanban": "0.
|
|
32
|
-
"@wrongstack/primitives": "0.
|
|
33
|
-
"@wrongstack/requirement-intake": "0.
|
|
30
|
+
"@wrongstack/core": "0.320.1",
|
|
31
|
+
"@wrongstack/kanban": "0.320.1",
|
|
32
|
+
"@wrongstack/primitives": "0.320.1",
|
|
33
|
+
"@wrongstack/requirement-intake": "0.320.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "^26.2.0",
|