@schnick371/devsteps-shared 0.8.4 → 1.0.0-next.2

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 (148) hide show
  1. package/README.md +8 -3
  2. package/dist/constants/index.d.ts +26 -0
  3. package/dist/constants/index.d.ts.map +1 -1
  4. package/dist/constants/index.js +26 -0
  5. package/dist/constants/index.js.map +1 -1
  6. package/dist/core/add.d.ts +8 -1
  7. package/dist/core/add.d.ts.map +1 -1
  8. package/dist/core/add.js +17 -10
  9. package/dist/core/add.js.map +1 -1
  10. package/dist/core/archive.d.ts +9 -2
  11. package/dist/core/archive.d.ts.map +1 -1
  12. package/dist/core/archive.js +40 -30
  13. package/dist/core/archive.js.map +1 -1
  14. package/dist/core/auto-migrate-detect.d.ts +61 -0
  15. package/dist/core/auto-migrate-detect.d.ts.map +1 -0
  16. package/dist/core/auto-migrate-detect.js +68 -0
  17. package/dist/core/auto-migrate-detect.js.map +1 -0
  18. package/dist/core/auto-migrate-impl.d.ts +32 -0
  19. package/dist/core/auto-migrate-impl.d.ts.map +1 -0
  20. package/dist/core/auto-migrate-impl.js +120 -0
  21. package/dist/core/auto-migrate-impl.js.map +1 -0
  22. package/dist/core/auto-migrate.d.ts +16 -131
  23. package/dist/core/auto-migrate.d.ts.map +1 -1
  24. package/dist/core/auto-migrate.js +25 -318
  25. package/dist/core/auto-migrate.js.map +1 -1
  26. package/dist/core/auto-migrate.test.js +11 -7
  27. package/dist/core/auto-migrate.test.js.map +1 -1
  28. package/dist/core/bulk-update.d.ts +13 -6
  29. package/dist/core/bulk-update.d.ts.map +1 -1
  30. package/dist/core/bulk-update.js +19 -12
  31. package/dist/core/bulk-update.js.map +1 -1
  32. package/dist/core/config.d.ts +7 -0
  33. package/dist/core/config.d.ts.map +1 -1
  34. package/dist/core/config.js +7 -0
  35. package/dist/core/config.js.map +1 -1
  36. package/dist/core/context.d.ts +13 -4
  37. package/dist/core/context.d.ts.map +1 -1
  38. package/dist/core/context.js +22 -13
  39. package/dist/core/context.js.map +1 -1
  40. package/dist/core/get.d.ts +8 -1
  41. package/dist/core/get.d.ts.map +1 -1
  42. package/dist/core/get.js +12 -5
  43. package/dist/core/get.js.map +1 -1
  44. package/dist/core/index-rebuild.d.ts +3 -0
  45. package/dist/core/index-rebuild.d.ts.map +1 -1
  46. package/dist/core/index-rebuild.js +11 -8
  47. package/dist/core/index-rebuild.js.map +1 -1
  48. package/dist/core/index-rebuild.test.js +6 -15
  49. package/dist/core/index-rebuild.test.js.map +1 -1
  50. package/dist/core/index-refs-core.d.ts +114 -0
  51. package/dist/core/index-refs-core.d.ts.map +1 -0
  52. package/dist/core/index-refs-core.js +306 -0
  53. package/dist/core/index-refs-core.js.map +1 -0
  54. package/dist/core/index-refs.d.ts +9 -124
  55. package/dist/core/index-refs.d.ts.map +1 -1
  56. package/dist/core/index-refs.js +19 -345
  57. package/dist/core/index-refs.js.map +1 -1
  58. package/dist/core/index-refs.test.js +3 -3
  59. package/dist/core/index-refs.test.js.map +1 -1
  60. package/dist/core/index.d.ts +19 -10
  61. package/dist/core/index.d.ts.map +1 -1
  62. package/dist/core/index.js +19 -10
  63. package/dist/core/index.js.map +1 -1
  64. package/dist/core/link.d.ts +33 -0
  65. package/dist/core/link.d.ts.map +1 -0
  66. package/dist/core/link.js +102 -0
  67. package/dist/core/link.js.map +1 -0
  68. package/dist/core/list.d.ts +9 -1
  69. package/dist/core/list.d.ts.map +1 -1
  70. package/dist/core/list.js +92 -15
  71. package/dist/core/list.js.map +1 -1
  72. package/dist/core/unlink.d.ts +26 -0
  73. package/dist/core/unlink.d.ts.map +1 -0
  74. package/dist/core/unlink.js +78 -0
  75. package/dist/core/unlink.js.map +1 -0
  76. package/dist/core/update.d.ts +8 -1
  77. package/dist/core/update.d.ts.map +1 -1
  78. package/dist/core/update.js +23 -15
  79. package/dist/core/update.js.map +1 -1
  80. package/dist/core/validation.d.ts +26 -1
  81. package/dist/core/validation.d.ts.map +1 -1
  82. package/dist/core/validation.js +65 -4
  83. package/dist/core/validation.js.map +1 -1
  84. package/dist/index.d.ts +11 -4
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +11 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/schemas/analysis.d.ts +206 -0
  89. package/dist/schemas/analysis.d.ts.map +1 -0
  90. package/dist/schemas/analysis.js +138 -0
  91. package/dist/schemas/analysis.js.map +1 -0
  92. package/dist/schemas/cbp-loops.d.ts +154 -0
  93. package/dist/schemas/cbp-loops.d.ts.map +1 -0
  94. package/dist/schemas/cbp-loops.js +160 -0
  95. package/dist/schemas/cbp-loops.js.map +1 -0
  96. package/dist/schemas/cbp-loops.test.d.ts +10 -0
  97. package/dist/schemas/cbp-loops.test.d.ts.map +1 -0
  98. package/dist/schemas/cbp-loops.test.js +268 -0
  99. package/dist/schemas/cbp-loops.test.js.map +1 -0
  100. package/dist/schemas/cbp-mandate.d.ts +107 -0
  101. package/dist/schemas/cbp-mandate.d.ts.map +1 -0
  102. package/dist/schemas/cbp-mandate.js +107 -0
  103. package/dist/schemas/cbp-mandate.js.map +1 -0
  104. package/dist/schemas/cbp-mandate.test.d.ts +10 -0
  105. package/dist/schemas/cbp-mandate.test.d.ts.map +1 -0
  106. package/dist/schemas/cbp-mandate.test.js +188 -0
  107. package/dist/schemas/cbp-mandate.test.js.map +1 -0
  108. package/dist/schemas/index-refs.schema.d.ts +4 -1
  109. package/dist/schemas/index-refs.schema.d.ts.map +1 -1
  110. package/dist/schemas/index-refs.schema.js +24 -3
  111. package/dist/schemas/index-refs.schema.js.map +1 -1
  112. package/dist/schemas/index.d.ts +17 -7
  113. package/dist/schemas/index.d.ts.map +1 -1
  114. package/dist/schemas/index.js +14 -1
  115. package/dist/schemas/index.js.map +1 -1
  116. package/dist/schemas/project.d.ts +7 -0
  117. package/dist/schemas/project.d.ts.map +1 -1
  118. package/dist/schemas/project.js +7 -0
  119. package/dist/schemas/project.js.map +1 -1
  120. package/dist/schemas/relationships.d.ts +3 -0
  121. package/dist/schemas/relationships.d.ts.map +1 -1
  122. package/dist/schemas/relationships.js +3 -0
  123. package/dist/schemas/relationships.js.map +1 -1
  124. package/dist/types/commands.d.ts +7 -0
  125. package/dist/types/commands.d.ts.map +1 -1
  126. package/dist/types/commands.js +7 -0
  127. package/dist/types/commands.js.map +1 -1
  128. package/dist/types/index-refs.types.d.ts +3 -0
  129. package/dist/types/index-refs.types.d.ts.map +1 -1
  130. package/dist/types/index-refs.types.js +3 -0
  131. package/dist/types/index-refs.types.js.map +1 -1
  132. package/dist/types/index.d.ts +9 -1
  133. package/dist/types/index.d.ts.map +1 -1
  134. package/dist/types/index.js +7 -0
  135. package/dist/types/index.js.map +1 -1
  136. package/dist/utils/cache.d.ts +7 -0
  137. package/dist/utils/cache.d.ts.map +1 -1
  138. package/dist/utils/cache.js +7 -0
  139. package/dist/utils/cache.js.map +1 -1
  140. package/dist/utils/index.d.ts +9 -1
  141. package/dist/utils/index.d.ts.map +1 -1
  142. package/dist/utils/index.js +26 -3
  143. package/dist/utils/index.js.map +1 -1
  144. package/dist/utils/init-helpers.d.ts +30 -0
  145. package/dist/utils/init-helpers.d.ts.map +1 -0
  146. package/dist/utils/init-helpers.js +134 -0
  147. package/dist/utils/init-helpers.js.map +1 -0
  148. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlink.js","sourceRoot":"","sources":["../../src/core/unlink.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Core update-item operation
6
+ * Patches item metadata fields and synchronizes the distributed index.
7
+ */
1
8
  import type { EisenhowerQuadrant, ItemMetadata, ItemStatus } from '../schemas/index.js';
2
9
  export interface UpdateItemArgs {
3
10
  id: string;
@@ -18,5 +25,5 @@ export interface UpdateItemResult {
18
25
  /**
19
26
  * Core business logic for updating an item
20
27
  */
21
- export declare function updateItem(devstepsir: string, args: UpdateItemArgs): Promise<UpdateItemResult>;
28
+ export declare function updateItem(devstepsDir: string, args: UpdateItemArgs): Promise<UpdateItemResult>;
22
29
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACX,MAAM,qBAAqB,CAAC;AAM7B,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA2G3B"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKxF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAiH3B"}
@@ -1,14 +1,21 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Core update-item operation
6
+ * Patches item metadata fields and synchronizes the distributed index.
7
+ */
1
8
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
9
  import { join } from 'node:path';
3
- import { STATUS, RELATIONSHIP_TYPE } from '../constants/index.js';
4
- import { TYPE_TO_DIRECTORY, getCurrentTimestamp, parseItemId } from '../utils/index.js';
5
- import { updateItemInIndex } from './index-refs.js';
10
+ import { RELATIONSHIP_TYPE, STATUS } from '../constants/index.js';
11
+ import { getCurrentTimestamp, parseItemId, TYPE_TO_DIRECTORY } from '../utils/index.js';
6
12
  import { getItem } from './get.js';
13
+ import { updateItemInIndex } from './index-refs.js';
7
14
  /**
8
15
  * Core business logic for updating an item
9
16
  */
10
- export async function updateItem(devstepsir, args) {
11
- if (!existsSync(devstepsir)) {
17
+ export async function updateItem(devstepsDir, args) {
18
+ if (!existsSync(devstepsDir)) {
12
19
  throw new Error('Project not initialized. Run devsteps-init first.');
13
20
  }
14
21
  const parsed = parseItemId(args.id);
@@ -16,27 +23,30 @@ export async function updateItem(devstepsir, args) {
16
23
  throw new Error(`Invalid item ID: ${args.id}`);
17
24
  }
18
25
  const typeFolder = TYPE_TO_DIRECTORY[parsed.type];
19
- const metadataPath = join(devstepsir, typeFolder, `${args.id}.json`);
20
- const descriptionPath = join(devstepsir, typeFolder, `${args.id}.md`);
26
+ const metadataPath = join(devstepsDir, typeFolder, `${args.id}.json`);
27
+ const descriptionPath = join(devstepsDir, typeFolder, `${args.id}.md`);
21
28
  if (!existsSync(metadataPath)) {
22
29
  throw new Error(`Item not found: ${args.id}`);
23
30
  }
24
31
  // Read and update metadata
25
- const { metadata } = await getItem(devstepsir, args.id);
32
+ const { metadata } = await getItem(devstepsDir, args.id);
26
33
  const oldStatus = metadata.status;
27
34
  // Validate status transitions (parent-child rules)
28
35
  if (args.status === STATUS.DONE) {
29
36
  // Helper function to validate children are complete
30
37
  const validateChildren = async (relationshipType) => {
31
- const children = metadata.linked_items[relationshipType];
38
+ // Guard: old-format items may lack linked_items or specific relation keys
39
+ const children = metadata.linked_items?.[relationshipType] ?? [];
32
40
  if (children.length > 0) {
33
41
  const openChildren = [];
34
42
  for (const childId of children) {
35
43
  const childParsed = parseItemId(childId);
36
44
  if (childParsed) {
37
45
  try {
38
- const { metadata: childMeta } = await getItem(devstepsir, childId);
39
- if (childMeta.status !== STATUS.DONE && childMeta.status !== STATUS.CANCELLED && childMeta.status !== STATUS.OBSOLETE) {
46
+ const { metadata: childMeta } = await getItem(devstepsDir, childId);
47
+ if (childMeta.status !== STATUS.DONE &&
48
+ childMeta.status !== STATUS.CANCELLED &&
49
+ childMeta.status !== STATUS.OBSOLETE) {
40
50
  openChildren.push(childId);
41
51
  }
42
52
  }
@@ -86,15 +96,13 @@ export async function updateItem(devstepsir, args) {
86
96
  }
87
97
  else if (args.append_description) {
88
98
  // Append to existing (or create new if doesn't exist)
89
- const existing = existsSync(descriptionPath)
90
- ? readFileSync(descriptionPath, 'utf-8')
91
- : '';
99
+ const existing = existsSync(descriptionPath) ? readFileSync(descriptionPath, 'utf-8') : '';
92
100
  writeFileSync(descriptionPath, existing + args.append_description);
93
101
  }
94
102
  // Update index (auto-migration ensures refs-style always available)
95
103
  // Only update if status or eisenhower changed (triggers re-indexing)
96
104
  if (args.status || args.eisenhower) {
97
- updateItemInIndex(devstepsir, args.id, oldStatus, args.status, undefined, // oldEisenhower - we don't track changes
105
+ updateItemInIndex(devstepsDir, args.id, oldStatus, args.status, undefined, // oldEisenhower - we don't track changes
98
106
  args.eisenhower);
99
107
  }
100
108
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,12 @@
1
- import type { ItemType, Methodology } from '../schemas/index.js';
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Relationship validation
6
+ * Enforces hierarchy rules and flexible relationship constraints
7
+ * based on the active project methodology.
8
+ */
9
+ import type { ItemType, LinkedItems, Methodology } from '../schemas/index.js';
2
10
  /**
3
11
  * Validation result with detailed error messaging
4
12
  */
@@ -25,4 +33,21 @@ export interface WorkItem {
25
33
  * @returns ValidationResult with valid flag and optional error/suggestion
26
34
  */
27
35
  export declare function validateRelationship(source: WorkItem, target: WorkItem, relationType: string, methodology: Methodology): ValidationResult;
36
+ /**
37
+ * Validate that no conflicting relation types exist between the same source and target.
38
+ *
39
+ * Blocks:
40
+ * - hierarchy + any other type to same target
41
+ * - multiple hierarchy types to same target
42
+ *
43
+ * Allows:
44
+ * - bidirectional symmetric flexible relations (e.g. relates-to)
45
+ * - multiple flexible types to same target (e.g. depends-on + relates-to)
46
+ *
47
+ * @param targetId - The target item ID being linked
48
+ * @param newRelationType - The new relation type being added
49
+ * @param existingLinks - Current linked_items of the source item
50
+ * @returns ValidationResult indicating conflict or success
51
+ */
52
+ export declare function validateRelationConflict(targetId: string, newRelationType: string, existingLinks: LinkedItems): ValidationResult;
28
53
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIjE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,GACvB,gBAAgB,CAwDlB"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG9E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,GACvB,gBAAgB,CA2DlB;AAmLD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,WAAW,GACzB,gBAAgB,CAoClB"}
@@ -1,5 +1,13 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Relationship validation
6
+ * Enforces hierarchy rules and flexible relationship constraints
7
+ * based on the active project methodology.
8
+ */
9
+ import { ITEM_TYPE, METHODOLOGY, RELATIONSHIP_TYPE } from '../constants/index.js';
1
10
  import { isFlexibleRelation, isHierarchyRelation } from '../schemas/relationships.js';
2
- import { ITEM_TYPE, RELATIONSHIP_TYPE, METHODOLOGY } from '../constants/index.js';
3
11
  /**
4
12
  * Validate relationship between two items based on methodology
5
13
  * Only validates "implements" relationships - all other relations are flexible
@@ -29,7 +37,8 @@ export function validateRelationship(source, target, relationType, methodology)
29
37
  // Bug blocks: validate as hierarchy below
30
38
  }
31
39
  // Only validate "implements" direction (implemented-by, blocked-by are automatic reverse)
32
- if (relationType === RELATIONSHIP_TYPE.IMPLEMENTED_BY || relationType === RELATIONSHIP_TYPE.BLOCKED_BY) {
40
+ if (relationType === RELATIONSHIP_TYPE.IMPLEMENTED_BY ||
41
+ relationType === RELATIONSHIP_TYPE.BLOCKED_BY) {
33
42
  return { valid: true }; // Reverse relationships auto-created, no validation needed
34
43
  }
35
44
  // Validate based on methodology
@@ -68,7 +77,9 @@ function validateScrumHierarchy(source, target) {
68
77
  const { type: targetType } = target;
69
78
  // Task → Story, Spike, or Bug
70
79
  if (sourceType === ITEM_TYPE.TASK) {
71
- if (targetType === ITEM_TYPE.STORY || targetType === ITEM_TYPE.SPIKE || targetType === ITEM_TYPE.BUG) {
80
+ if (targetType === ITEM_TYPE.STORY ||
81
+ targetType === ITEM_TYPE.SPIKE ||
82
+ targetType === ITEM_TYPE.BUG) {
72
83
  return { valid: true };
73
84
  }
74
85
  return {
@@ -145,7 +156,9 @@ function validateWaterfallHierarchy(source, target) {
145
156
  const { type: targetType } = target;
146
157
  // Task → Feature, Spike, or Bug
147
158
  if (sourceType === ITEM_TYPE.TASK) {
148
- if (targetType === ITEM_TYPE.FEATURE || targetType === ITEM_TYPE.SPIKE || targetType === ITEM_TYPE.BUG) {
159
+ if (targetType === ITEM_TYPE.FEATURE ||
160
+ targetType === ITEM_TYPE.SPIKE ||
161
+ targetType === ITEM_TYPE.BUG) {
149
162
  return { valid: true };
150
163
  }
151
164
  return {
@@ -212,4 +225,52 @@ function validateWaterfallHierarchy(source, target) {
212
225
  suggestion: 'Check Waterfall hierarchy: Requirement → Feature|Spike → Task',
213
226
  };
214
227
  }
228
+ /**
229
+ * Validate that no conflicting relation types exist between the same source and target.
230
+ *
231
+ * Blocks:
232
+ * - hierarchy + any other type to same target
233
+ * - multiple hierarchy types to same target
234
+ *
235
+ * Allows:
236
+ * - bidirectional symmetric flexible relations (e.g. relates-to)
237
+ * - multiple flexible types to same target (e.g. depends-on + relates-to)
238
+ *
239
+ * @param targetId - The target item ID being linked
240
+ * @param newRelationType - The new relation type being added
241
+ * @param existingLinks - Current linked_items of the source item
242
+ * @returns ValidationResult indicating conflict or success
243
+ */
244
+ export function validateRelationConflict(targetId, newRelationType, existingLinks) {
245
+ const newIsHierarchy = isHierarchyRelation(newRelationType);
246
+ for (const [existingType, targetIds] of Object.entries(existingLinks)) {
247
+ // Skip same type — duplicate check is handled separately
248
+ if (existingType === newRelationType)
249
+ continue;
250
+ // Skip if target not in this relation list
251
+ if (!Array.isArray(targetIds) || !targetIds.includes(targetId))
252
+ continue;
253
+ const existingIsHierarchy = isHierarchyRelation(existingType);
254
+ // Block: both hierarchy types to same target
255
+ if (newIsHierarchy && existingIsHierarchy) {
256
+ return {
257
+ valid: false,
258
+ error: `Cannot add "${newRelationType}" to ${targetId} — already has hierarchy relation "${existingType}" to same target`,
259
+ suggestion: `Remove the existing "${existingType}" link first, or use a different target`,
260
+ };
261
+ }
262
+ // Block: hierarchy mixed with any flexible type to same target
263
+ if (newIsHierarchy || existingIsHierarchy) {
264
+ const hierarchyType = newIsHierarchy ? newRelationType : existingType;
265
+ const flexibleType = newIsHierarchy ? existingType : newRelationType;
266
+ return {
267
+ valid: false,
268
+ error: `Cannot mix hierarchy relation "${hierarchyType}" with flexible relation "${flexibleType}" to same target ${targetId}`,
269
+ suggestion: `Use only "${hierarchyType}" (hierarchy takes precedence) and remove "${flexibleType}", or use a different target`,
270
+ };
271
+ }
272
+ // Multiple flexible types to same target: allowed
273
+ }
274
+ return { valid: true };
275
+ }
215
276
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAmBlF;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAgB,EAChB,MAAgB,EAChB,YAAoB,EACpB,WAAwB;IAExB,wCAAwC;IACxC,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAEC,wCAAwC;IAC1C,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,YAAY,EAAE,EAAE,CAAC;IAC/E,CAAC;IAED,wEAAwE;IACxE,4DAA4D;IAC5D,6EAA6E;IAC7E,IAAI,YAAY,KAAK,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC9C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,6BAA6B;QACvD,CAAC;QACD,0CAA0C;IAC5C,CAAC;IAED,0FAA0F;IAC1F,IAAI,YAAY,KAAK,iBAAiB,CAAC,cAAc,IAAI,YAAY,KAAK,iBAAiB,CAAC,UAAU,EAAE,CAAC;QACvG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,2DAA2D;IACrF,CAAC;IAED,gCAAgC;IAChC,IAAI,WAAW,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;QACvC,wBAAwB;QACxB,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,sBAAsB;QACtB,MAAM,eAAe,GAAG,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnE,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,oDAAoD;QACpD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,wBAAwB,WAAW,EAAE;KAC7C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,MAAgB,EAAE,MAAgB;IAChE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAEpC,8BAA8B;IAC9B,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,IAAI,UAAU,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;YACrG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,4DAA4D;YACnE,UAAU,EAAE,UAAU,MAAM,CAAC,EAAE,iEAAiE;SACjG,CAAC;IACJ,CAAC;IAED,eAAe;IACf,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,2CAA2C;YAClD,UAAU,EAAE,UAAU,MAAM,CAAC,EAAE,6DAA6D;SAC7F,CAAC;IACJ,CAAC;IAED,eAAe;IACf,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,0CAA0C;YACjD,UAAU,EAAE,UAAU,MAAM,CAAC,EAAE,6DAA6D;SAC7F,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,IAAI,UAAU,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,gDAAgD;YACvD,UAAU,EAAE,oHAAoH;SACjI,CAAC;IACJ,CAAC;IAID,kCAAkC;IAClC,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;YACpE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oDAAoD;YAC3D,UAAU,EAAE,yDAAyD;SACtE,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,4DAA4D;YACnE,UAAU,EAAE,oDAAoD;SACjE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,+BAA+B,UAAU,MAAM,UAAU,EAAE;QAClE,UAAU,EAAE,kDAAkD;KAC/D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,MAAgB,EAAE,MAAgB;IACpE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAEpC,gCAAgC;IAChC,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,UAAU,KAAK,SAAS,CAAC,OAAO,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,IAAI,UAAU,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;YACvG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,iEAAiE;YACxE,UAAU,EAAE,UAAU,MAAM,CAAC,EAAE,qEAAqE;SACrG,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,UAAU,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,uDAAuD;YAC9D,UAAU,EAAE,UAAU,MAAM,CAAC,EAAE,kFAAkF;SAClH,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,UAAU,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,qDAAqD;YAC5D,UAAU,EAAE,UAAU,MAAM,CAAC,EAAE,gFAAgF;SAChH,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,UAAU,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,UAAU,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,qEAAqE;YAC5E,UAAU,EAAE,iJAAiJ;SAC9J,CAAC;IACJ,CAAC;IAID,2CAA2C;IAC3C,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,UAAU,KAAK,SAAS,CAAC,WAAW,IAAI,UAAU,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;YAC7E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,gEAAgE;YACvE,UAAU,EAAE,kEAAkE;SAC/E,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,IAAI,UAAU,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;QACzC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,mEAAmE;YAC1E,UAAU,EAAE,2DAA2D;SACxE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,mCAAmC,UAAU,MAAM,UAAU,EAAE;QACtE,UAAU,EAAE,+DAA+D;KAC5E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,14 @@
1
- export * from './types/index.js';
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Shared package public API
6
+ * Single entry point re-exporting all public types, schemas, and core functions.
7
+ */
8
+ export * from './constants/index.js';
9
+ export { HIERARCHY_TYPE, ITEM_TYPE, METHODOLOGY, RELATIONSHIP_TYPE, STATUS, } from './constants/index.js';
10
+ export * from './core/index.js';
2
11
  export * from './schemas/index.js';
12
+ export * from './types/index.js';
3
13
  export * from './utils/index.js';
4
- export * from './core/index.js';
5
- export * from './constants/index.js';
6
- export { ITEM_TYPE, STATUS, RELATIONSHIP_TYPE, METHODOLOGY, HIERARCHY_TYPE, } from './constants/index.js';
7
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACN,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,WAAW,EACX,cAAc,GACd,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,cAAc,EACd,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,MAAM,GACP,MAAM,sBAAsB,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,14 @@
1
- export * from './types/index.js';
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Shared package public API
6
+ * Single entry point re-exporting all public types, schemas, and core functions.
7
+ */
8
+ export * from './constants/index.js';
9
+ export { HIERARCHY_TYPE, ITEM_TYPE, METHODOLOGY, RELATIONSHIP_TYPE, STATUS, } from './constants/index.js';
10
+ export * from './core/index.js';
2
11
  export * from './schemas/index.js';
12
+ export * from './types/index.js';
3
13
  export * from './utils/index.js';
4
- export * from './core/index.js';
5
- export * from './constants/index.js';
6
- export { ITEM_TYPE, STATUS, RELATIONSHIP_TYPE, METHODOLOGY, HIERARCHY_TYPE, } from './constants/index.js';
7
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACN,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,WAAW,EACX,cAAc,GACd,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,cAAc,EACd,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,MAAM,GACP,MAAM,sBAAsB,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Context Budget Protocol (CBP) — Analysis Schemas
6
+ * Zod schemas for T3 archaeology and analysis envelope files.
7
+ *
8
+ * @see EPIC-027 CBP Tier-3 Analysis Tools
9
+ */
10
+ import { z } from 'zod';
11
+ /**
12
+ * Context Budget Protocol (CBP) — Analysis Schemas
13
+ *
14
+ * Defines structured JSON envelopes for AI agent-to-agent handoffs.
15
+ * Aspect agents write AnalysisBriefing to disk (.devsteps/analysis/[ID]/)
16
+ * and return CompressedVerdict envelopes (~150 tokens) in-memory to the coordinator.
17
+ *
18
+ * @see EPIC-027 Context Budget Protocol Infrastructure
19
+ */
20
+ export declare const AnalysisAspect: z.ZodEnum<{
21
+ impact: "impact";
22
+ constraints: "constraints";
23
+ quality: "quality";
24
+ staleness: "staleness";
25
+ integration: "integration";
26
+ internal: "internal";
27
+ web: "web";
28
+ meta: "meta";
29
+ }>;
30
+ export type AnalysisAspect = z.infer<typeof AnalysisAspect>;
31
+ export declare const AspectVerdict: z.ZodEnum<{
32
+ PROCEED: "PROCEED";
33
+ "PROCEED-WITH-CAUTION": "PROCEED-WITH-CAUTION";
34
+ STOP: "STOP";
35
+ CURRENT: "CURRENT";
36
+ "STALE-PARTIAL": "STALE-PARTIAL";
37
+ "STALE-OBSOLETE": "STALE-OBSOLETE";
38
+ "STALE-CONFLICT": "STALE-CONFLICT";
39
+ }>;
40
+ export type AspectVerdict = z.infer<typeof AspectVerdict>;
41
+ /**
42
+ * Compressed envelope returned IN-MEMORY by aspect agents to the coordinator.
43
+ * Max ~150 tokens — coordinator reads only this, never the full report.
44
+ */
45
+ export declare const CompressedVerdictSchema: z.ZodObject<{
46
+ aspect: z.ZodEnum<{
47
+ impact: "impact";
48
+ constraints: "constraints";
49
+ quality: "quality";
50
+ staleness: "staleness";
51
+ integration: "integration";
52
+ internal: "internal";
53
+ web: "web";
54
+ meta: "meta";
55
+ }>;
56
+ verdict: z.ZodEnum<{
57
+ PROCEED: "PROCEED";
58
+ "PROCEED-WITH-CAUTION": "PROCEED-WITH-CAUTION";
59
+ STOP: "STOP";
60
+ CURRENT: "CURRENT";
61
+ "STALE-PARTIAL": "STALE-PARTIAL";
62
+ "STALE-OBSOLETE": "STALE-OBSOLETE";
63
+ "STALE-CONFLICT": "STALE-CONFLICT";
64
+ }>;
65
+ confidence: z.ZodNumber;
66
+ top3_findings: z.ZodArray<z.ZodString>;
67
+ report_path: z.ZodString;
68
+ timestamp: z.ZodString;
69
+ winner: z.ZodOptional<z.ZodString>;
70
+ rule_applied: z.ZodOptional<z.ZodString>;
71
+ implementation_briefing: z.ZodOptional<z.ZodString>;
72
+ internet_advantage_claim: z.ZodOptional<z.ZodString>;
73
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
74
+ }, z.core.$strip>;
75
+ export type CompressedVerdict = z.infer<typeof CompressedVerdictSchema>;
76
+ /**
77
+ * Full analysis report written to disk by aspect agents.
78
+ * Path: `.devsteps/analysis/[TASK-ID]/[aspect]-report.json`
79
+ * Contains the CompressedVerdict envelope + full markdown analysis text.
80
+ * Impl-subagent reads this for implementation context.
81
+ */
82
+ export declare const AnalysisBriefingSchema: z.ZodObject<{
83
+ task_id: z.ZodString;
84
+ aspect: z.ZodEnum<{
85
+ impact: "impact";
86
+ constraints: "constraints";
87
+ quality: "quality";
88
+ staleness: "staleness";
89
+ integration: "integration";
90
+ internal: "internal";
91
+ web: "web";
92
+ meta: "meta";
93
+ }>;
94
+ analyst: z.ZodString;
95
+ created: z.ZodString;
96
+ envelope: z.ZodObject<{
97
+ aspect: z.ZodEnum<{
98
+ impact: "impact";
99
+ constraints: "constraints";
100
+ quality: "quality";
101
+ staleness: "staleness";
102
+ integration: "integration";
103
+ internal: "internal";
104
+ web: "web";
105
+ meta: "meta";
106
+ }>;
107
+ verdict: z.ZodEnum<{
108
+ PROCEED: "PROCEED";
109
+ "PROCEED-WITH-CAUTION": "PROCEED-WITH-CAUTION";
110
+ STOP: "STOP";
111
+ CURRENT: "CURRENT";
112
+ "STALE-PARTIAL": "STALE-PARTIAL";
113
+ "STALE-OBSOLETE": "STALE-OBSOLETE";
114
+ "STALE-CONFLICT": "STALE-CONFLICT";
115
+ }>;
116
+ confidence: z.ZodNumber;
117
+ top3_findings: z.ZodArray<z.ZodString>;
118
+ report_path: z.ZodString;
119
+ timestamp: z.ZodString;
120
+ winner: z.ZodOptional<z.ZodString>;
121
+ rule_applied: z.ZodOptional<z.ZodString>;
122
+ implementation_briefing: z.ZodOptional<z.ZodString>;
123
+ internet_advantage_claim: z.ZodOptional<z.ZodString>;
124
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
125
+ }, z.core.$strip>;
126
+ full_analysis: z.ZodString;
127
+ affected_files: z.ZodDefault<z.ZodArray<z.ZodString>>;
128
+ recommendations: z.ZodDefault<z.ZodArray<z.ZodString>>;
129
+ schema_version: z.ZodDefault<z.ZodLiteral<"1.0">>;
130
+ }, z.core.$strip>;
131
+ export type AnalysisBriefing = z.infer<typeof AnalysisBriefingSchema>;
132
+ /**
133
+ * Meta-verdict written by the coordinator judge in Competitive Mode.
134
+ * Path: `.devsteps/analysis/[TASK-ID]/meta.json`
135
+ */
136
+ export declare const SprintVerdictSchema: z.ZodObject<{
137
+ task_id: z.ZodString;
138
+ mode: z.ZodLiteral<"competitive">;
139
+ winner: z.ZodEnum<{
140
+ "devsteps-analyst-internal-subagent": "devsteps-analyst-internal-subagent";
141
+ "devsteps-analyst-web-subagent": "devsteps-analyst-web-subagent";
142
+ }>;
143
+ rule_applied: z.ZodEnum<{
144
+ "RULE 1": "RULE 1";
145
+ "RULE 2": "RULE 2";
146
+ "RULE 3": "RULE 3";
147
+ "RULE 4": "RULE 4";
148
+ "RULE 5": "RULE 5";
149
+ }>;
150
+ implementation_briefing: z.ZodString;
151
+ flags: z.ZodDefault<z.ZodArray<z.ZodString>>;
152
+ created: z.ZodString;
153
+ schema_version: z.ZodDefault<z.ZodLiteral<"1.0">>;
154
+ }, z.core.$strip>;
155
+ export type SprintVerdict = z.infer<typeof SprintVerdictSchema>;
156
+ /**
157
+ * Produced by devsteps-planner at sprint start from global archaeology + backlog.
158
+ * Path: `.devsteps/analysis/sprint-[DATE]/enriched-sprint-brief.json`
159
+ */
160
+ export declare const SprintItemRisk: z.ZodEnum<{
161
+ QUICK: "QUICK";
162
+ STANDARD: "STANDARD";
163
+ FULL: "FULL";
164
+ COMPETITIVE: "COMPETITIVE";
165
+ }>;
166
+ export type SprintItemRisk = z.infer<typeof SprintItemRisk>;
167
+ export declare const EnrichedSprintItemSchema: z.ZodObject<{
168
+ item_id: z.ZodString;
169
+ title: z.ZodString;
170
+ risk: z.ZodEnum<{
171
+ QUICK: "QUICK";
172
+ STANDARD: "STANDARD";
173
+ FULL: "FULL";
174
+ COMPETITIVE: "COMPETITIVE";
175
+ }>;
176
+ estimated_minutes: z.ZodOptional<z.ZodNumber>;
177
+ affected_files: z.ZodDefault<z.ZodArray<z.ZodString>>;
178
+ depends_on: z.ZodDefault<z.ZodArray<z.ZodString>>;
179
+ shared_file_conflicts: z.ZodDefault<z.ZodArray<z.ZodString>>;
180
+ notes: z.ZodOptional<z.ZodString>;
181
+ }, z.core.$strip>;
182
+ export type EnrichedSprintItem = z.infer<typeof EnrichedSprintItemSchema>;
183
+ export declare const EnrichedSprintBriefSchema: z.ZodObject<{
184
+ sprint_date: z.ZodString;
185
+ global_context_path: z.ZodString;
186
+ ordered_items: z.ZodArray<z.ZodObject<{
187
+ item_id: z.ZodString;
188
+ title: z.ZodString;
189
+ risk: z.ZodEnum<{
190
+ QUICK: "QUICK";
191
+ STANDARD: "STANDARD";
192
+ FULL: "FULL";
193
+ COMPETITIVE: "COMPETITIVE";
194
+ }>;
195
+ estimated_minutes: z.ZodOptional<z.ZodNumber>;
196
+ affected_files: z.ZodDefault<z.ZodArray<z.ZodString>>;
197
+ depends_on: z.ZodDefault<z.ZodArray<z.ZodString>>;
198
+ shared_file_conflicts: z.ZodDefault<z.ZodArray<z.ZodString>>;
199
+ notes: z.ZodOptional<z.ZodString>;
200
+ }, z.core.$strip>>;
201
+ invalidation_cache: z.ZodDefault<z.ZodArray<z.ZodString>>;
202
+ created: z.ZodString;
203
+ schema_version: z.ZodDefault<z.ZodLiteral<"1.0">>;
204
+ }, z.core.$strip>;
205
+ export type EnrichedSprintBrief = z.infer<typeof EnrichedSprintBriefSchema>;
206
+ //# sourceMappingURL=analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/schemas/analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AAIH,eAAO,MAAM,cAAc;;;;;;;;;EASzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAI5D,eAAO,MAAM,aAAa;;;;;;;;EASxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAI1D;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAIxE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAItE;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;iBAS9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;EAAuD,CAAC;AACnF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBASnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;iBAOpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}