@schnick371/devsteps-shared 1.1.0-next.3 → 1.1.0-next.4

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/README.md CHANGED
@@ -68,6 +68,35 @@ const items = await listItems('/path/to/.devsteps');
68
68
  - `updateItemSchema` - Validation for updates
69
69
  - `linkItemSchema` - Validation for relationships
70
70
 
71
+ ### CBP Schemas (Context Budget Protocol)
72
+
73
+ The `MandateResult` schema is split into two variants to support both backward-compatible reads and strict writes:
74
+
75
+ | Schema | Purpose | Strictness |
76
+ |--------|---------|------------|
77
+ | `ReadMandateResultSchema` | Reading historical and current `.result.json` files | Lenient — tolerates `item_ids:[]`, short analyst names |
78
+ | `WriteMandateResultSchema` | Validating new writes via `write_mandate_result` tool | Strict — requires `item_ids` ≥ 1, `analyst` matching `devsteps-R{N}-{name}` |
79
+ | `MandateResultSchema` | Backward-compat alias → `ReadMandateResultSchema` | Lenient (same as read) |
80
+
81
+ **Write-path constraints (`WriteMandateResultSchema`):**
82
+ - `item_ids`: must contain at least 1 item ID
83
+ - `analyst`: must match regex `/^devsteps-R\d+-/` (e.g., `devsteps-R2-aspect-impact`)
84
+
85
+ **Example:**
86
+ ```typescript
87
+ import {
88
+ ReadMandateResultSchema,
89
+ WriteMandateResultSchema,
90
+ type MandateResult,
91
+ } from '@schnick371/devsteps-shared';
92
+
93
+ // For reading files from disk:
94
+ const parsed = ReadMandateResultSchema.safeParse(rawJson);
95
+
96
+ // For validating new writes:
97
+ const validated = WriteMandateResultSchema.safeParse(newResult);
98
+ ```
99
+
71
100
  ## Documentation
72
101
 
73
102
  - [DevSteps Documentation](https://devsteps.dev)
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * CI Validation Suite: .github/agents/ frontmatter integrity
6
+ *
7
+ * Validates that all devsteps-*.agent.md files satisfy the Spider Web Dispatch
8
+ * protocol requirements:
9
+ * - Required YAML frontmatter fields present (description, model, tools)
10
+ * - user-invokable / user-invocable field present on every file
11
+ * - R0 coordinator files are user-invokable: true; all others are false
12
+ * - No file exceeds 150 lines (Copilot-Files-Standards-Specification limit)
13
+ *
14
+ * @see .github/instructions/Copilot-Files-Standards-Specification.instructions.md
15
+ * @see TASK-350
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=agents.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.test.d.ts","sourceRoot":"","sources":["../src/agents.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * CI Validation Suite: .github/agents/ frontmatter integrity
6
+ *
7
+ * Validates that all devsteps-*.agent.md files satisfy the Spider Web Dispatch
8
+ * protocol requirements:
9
+ * - Required YAML frontmatter fields present (description, model, tools)
10
+ * - user-invokable / user-invocable field present on every file
11
+ * - R0 coordinator files are user-invokable: true; all others are false
12
+ * - No file exceeds 150 lines (Copilot-Files-Standards-Specification limit)
13
+ *
14
+ * @see .github/instructions/Copilot-Files-Standards-Specification.instructions.md
15
+ * @see TASK-350
16
+ */
17
+ import { describe, expect, it } from 'vitest';
18
+ import { readdirSync, readFileSync } from 'node:fs';
19
+ import { dirname, join, resolve } from 'node:path';
20
+ import { fileURLToPath } from 'node:url';
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ const workspaceRoot = resolve(__dirname, '../../..');
23
+ const agentsDir = join(workspaceRoot, '.github', 'agents');
24
+ /**
25
+ * Agents that are user-invokable (true).
26
+ * Includes R0 coordinators and special entry-point agents.
27
+ */
28
+ const USER_INVOKABLE_AGENTS = new Set([
29
+ 'devsteps-R0-coord.agent.md',
30
+ 'devsteps-R0-coord-sprint.agent.md',
31
+ 'devsteps-R0-coord-ishikawa.agent.md',
32
+ 'devsteps-R0-coord-solo.agent.md',
33
+ 'devsteps-backlog-curator.agent.md',
34
+ ]);
35
+ /**
36
+ * Parse YAML frontmatter from a markdown file.
37
+ * Only extracts scalar string values — sufficient for agent file validation.
38
+ */
39
+ function parseFrontmatter(content) {
40
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
41
+ if (!match)
42
+ return {};
43
+ const yaml = match[1];
44
+ const result = {};
45
+ // Extract simple key: value pairs (handles quoted and unquoted values)
46
+ const scalarRe = /^([\w-]+):\s*(.+)$/gm;
47
+ let m;
48
+ while ((m = scalarRe.exec(yaml)) !== null) {
49
+ const key = m[1];
50
+ const value = m[2].replace(/^["']|["']$/g, '').trim();
51
+ result[key] = value;
52
+ }
53
+ return result;
54
+ }
55
+ function getAgentFiles() {
56
+ return readdirSync(agentsDir)
57
+ .filter((f) => f.startsWith('devsteps-') && f.endsWith('.agent.md'))
58
+ .sort();
59
+ }
60
+ describe('agent file frontmatter', () => {
61
+ const files = getAgentFiles();
62
+ it('finds at least 30 agent files', () => {
63
+ expect(files.length).toBeGreaterThanOrEqual(30);
64
+ });
65
+ for (const filename of files) {
66
+ const filePath = join(agentsDir, filename);
67
+ const content = readFileSync(filePath, 'utf-8');
68
+ const lines = content.split('\n');
69
+ const fm = parseFrontmatter(content);
70
+ const isCoord = USER_INVOKABLE_AGENTS.has(filename);
71
+ describe(filename, () => {
72
+ it('has description field', () => {
73
+ expect(fm.description, 'description required').toBeTruthy();
74
+ });
75
+ it('has model field', () => {
76
+ expect(fm.model, 'model required').toBeTruthy();
77
+ });
78
+ it('has tools field', () => {
79
+ expect(fm.tools, 'tools required').toBeTruthy();
80
+ });
81
+ it('has user-invokable or user-invocable field', () => {
82
+ const hasField = 'user-invokable' in fm || 'user-invocable' in fm;
83
+ expect(hasField, 'user-invokable/user-invocable required').toBe(true);
84
+ });
85
+ it(`user-invokable/invocable = ${isCoord ? 'true' : 'false'} for ${isCoord ? 'coordinator' : 'leaf'} agent`, () => {
86
+ const value = fm['user-invokable'] ?? fm['user-invocable'];
87
+ const expectedBool = isCoord;
88
+ expect(value === 'true', `expected ${expectedBool} for ${filename}`).toBe(expectedBool);
89
+ });
90
+ it('does not exceed 150 lines', () => {
91
+ expect(lines.length, `${filename} exceeds 150 lines (${lines.length})`).toBeLessThanOrEqual(150);
92
+ });
93
+ });
94
+ }
95
+ });
96
+ //# sourceMappingURL=agents.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.test.js","sourceRoot":"","sources":["../src/agents.test.ts"],"names":[],"mappings":"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"}
@@ -95,8 +95,8 @@ export declare const CBP_LOOP: {
95
95
  readonly MAX_CONFLICT_RESOLUTION_ROUNDS: 2;
96
96
  /** Max Tier-2 parallel T3 dispatches per turn */
97
97
  readonly MAX_PARALLEL_T3_DISPATCHES: 10;
98
- /** Max tokens for MandateResult findings field (~800 tokens) */
99
- readonly MAX_MANDATE_FINDINGS_CHARS: 6000;
98
+ /** Max tokens for MandateResult findings field (~1600 tokens) */
99
+ readonly MAX_MANDATE_FINDINGS_CHARS: 12000;
100
100
  };
101
101
  export type RelationshipTypeValue = (typeof RELATIONSHIP_TYPE)[keyof typeof RELATIONSHIP_TYPE];
102
102
  export type MethodologyValue = (typeof METHODOLOGY)[keyof typeof METHODOLOGY];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;CASZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAYpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC;AAE/D;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ;IACnB,wEAAwE;;IAExE,wDAAwD;;IAExD,0DAA0D;;IAE1D,kEAAkE;;IAElE,iDAAiD;;IAEjD,gEAAgE;;CAExD,CAAC;AACX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAC/F,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAC9E,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;CASZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAYpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC;AAE/D;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ;IACnB,wEAAwE;;IAExE,wDAAwD;;IAExD,0DAA0D;;IAE1D,kEAAkE;;IAElE,iDAAiD;;IAEjD,iEAAiE;;CAEzD,CAAC;AACX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAC/F,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAC9E,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
@@ -90,7 +90,7 @@ export const CBP_LOOP = {
90
90
  MAX_CONFLICT_RESOLUTION_ROUNDS: 2,
91
91
  /** Max Tier-2 parallel T3 dispatches per turn */
92
92
  MAX_PARALLEL_T3_DISPATCHES: 10,
93
- /** Max tokens for MandateResult findings field (~800 tokens) */
94
- MAX_MANDATE_FINDINGS_CHARS: 6000,
93
+ /** Max tokens for MandateResult findings field (~1600 tokens) */
94
+ MAX_MANDATE_FINDINGS_CHARS: 12000,
95
95
  };
96
96
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;CACtB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;CACR,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;CACJ,CAAC;AAQX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,wEAAwE;IACxE,yBAAyB,EAAE,CAAC;IAC5B,wDAAwD;IACxD,kBAAkB,EAAE,CAAC;IACrB,0DAA0D;IAC1D,wBAAwB,EAAE,CAAC;IAC3B,kEAAkE;IAClE,8BAA8B,EAAE,CAAC;IACjC,iDAAiD;IACjD,0BAA0B,EAAE,EAAE;IAC9B,gEAAgE;IAChE,0BAA0B,EAAE,IAAI;CACxB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;CACtB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;CACR,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;CACJ,CAAC;AAQX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,wEAAwE;IACxE,yBAAyB,EAAE,CAAC;IAC5B,wDAAwD;IACxD,kBAAkB,EAAE,CAAC;IACrB,0DAA0D;IAC1D,wBAAwB,EAAE,CAAC;IAC3B,kEAAkE;IAClE,8BAA8B,EAAE,CAAC;IACjC,iDAAiD;IACjD,0BAA0B,EAAE,EAAE;IAC9B,iEAAiE;IACjE,0BAA0B,EAAE,KAAK;CACzB,CAAC"}
@@ -21,6 +21,7 @@ import { z } from 'zod';
21
21
  * @see STORY-108 MandateResult CBP Extension
22
22
  */
23
23
  export declare const MandateType: z.ZodEnum<{
24
+ quality: "quality";
24
25
  risk: "risk";
25
26
  archaeology: "archaeology";
26
27
  "archaeology-delta": "archaeology-delta";
@@ -54,6 +55,7 @@ export type MandateResultStatus = z.infer<typeof MandateResultStatus>;
54
55
  export declare const MandateSchema: z.ZodObject<{
55
56
  mandate_id: z.ZodString;
56
57
  type: z.ZodEnum<{
58
+ quality: "quality";
57
59
  risk: "risk";
58
60
  archaeology: "archaeology";
59
61
  "archaeology-delta": "archaeology-delta";
@@ -77,13 +79,75 @@ export declare const MandateSchema: z.ZodObject<{
77
79
  }, z.core.$strip>;
78
80
  export type Mandate = z.infer<typeof MandateSchema>;
79
81
  /**
80
- * Tier-2 → Tier-1: A MandateResult is written to disk by a Tier-2 Deep Analyst
81
- * after synthesizing all Tier-3 sub-question answers.
82
+ * READ path — lenient schema for reading historical and current MandateResult files.
83
+ *
84
+ * Tolerates:
85
+ * - item_ids: [] (historical files written before .min(1) was enforced)
86
+ * - analyst names not matching the devsteps-R{N}-{name} convention
87
+ * - findings without a character limit (historical files may be longer)
82
88
  *
83
89
  * Storage: .devsteps/cbp/[sprint_id]/[mandate_id].result.json
84
- * Tier-1 reads via read_mandate_results() — never reads T3 envelopes directly.
85
90
  *
86
- * Max ~800 tokens in findings field — enforced by schema.
91
+ * @see TASK-334 Strengthen Zod validation in MandateResultSchema
92
+ */
93
+ export declare const ReadMandateResultSchema: z.ZodObject<{
94
+ mandate_id: z.ZodString;
95
+ item_ids: z.ZodArray<z.ZodString>;
96
+ sprint_id: z.ZodString;
97
+ analyst: z.ZodString;
98
+ status: z.ZodEnum<{
99
+ escalated: "escalated";
100
+ complete: "complete";
101
+ partial: "partial";
102
+ }>;
103
+ findings: z.ZodString;
104
+ recommendations: z.ZodArray<z.ZodString>;
105
+ confidence: z.ZodNumber;
106
+ token_cost: z.ZodNumber;
107
+ completed_at: z.ZodString;
108
+ escalation_reason: z.ZodOptional<z.ZodString>;
109
+ schema_version: z.ZodDefault<z.ZodString>;
110
+ t3_recommendations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
111
+ n_aspects_recommended: z.ZodOptional<z.ZodNumber>;
112
+ failed_approaches: z.ZodOptional<z.ZodArray<z.ZodString>>;
113
+ }, z.core.$strip>;
114
+ /**
115
+ * WRITE path — strict schema enforced on ALL new MandateResult writes.
116
+ *
117
+ * Differences from ReadMandateResultSchema:
118
+ * - item_ids: requires at least 1 item
119
+ * - analyst: must match devsteps-R{N}-{name} naming convention
120
+ *
121
+ * Used exclusively in handleWriteMandateResult.
122
+ *
123
+ * @see TASK-334 Strengthen Zod validation in MandateResultSchema
124
+ */
125
+ export declare const WriteMandateResultSchema: z.ZodObject<{
126
+ mandate_id: z.ZodString;
127
+ status: z.ZodEnum<{
128
+ escalated: "escalated";
129
+ complete: "complete";
130
+ partial: "partial";
131
+ }>;
132
+ confidence: z.ZodNumber;
133
+ token_cost: z.ZodNumber;
134
+ completed_at: z.ZodString;
135
+ escalation_reason: z.ZodOptional<z.ZodString>;
136
+ schema_version: z.ZodDefault<z.ZodString>;
137
+ t3_recommendations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
138
+ n_aspects_recommended: z.ZodOptional<z.ZodNumber>;
139
+ failed_approaches: z.ZodOptional<z.ZodArray<z.ZodString>>;
140
+ item_ids: z.ZodArray<z.ZodString>;
141
+ analyst: z.ZodString;
142
+ findings: z.ZodString;
143
+ recommendations: z.ZodArray<z.ZodString>;
144
+ sprint_id: z.ZodString;
145
+ }, z.core.$strip>;
146
+ /**
147
+ * Backward-compatible alias — consumers importing MandateResultSchema get
148
+ * the lenient ReadMandateResultSchema. No breaking change for existing imports.
149
+ *
150
+ * @deprecated Use ReadMandateResultSchema (reads) or WriteMandateResultSchema (writes) directly.
87
151
  */
88
152
  export declare const MandateResultSchema: z.ZodObject<{
89
153
  mandate_id: z.ZodString;
@@ -101,7 +165,78 @@ export declare const MandateResultSchema: z.ZodObject<{
101
165
  token_cost: z.ZodNumber;
102
166
  completed_at: z.ZodString;
103
167
  escalation_reason: z.ZodOptional<z.ZodString>;
104
- schema_version: z.ZodDefault<z.ZodLiteral<"1.0">>;
168
+ schema_version: z.ZodDefault<z.ZodString>;
169
+ t3_recommendations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
170
+ n_aspects_recommended: z.ZodOptional<z.ZodNumber>;
171
+ failed_approaches: z.ZodOptional<z.ZodArray<z.ZodString>>;
172
+ }, z.core.$strip>;
173
+ export type MandateResult = z.infer<typeof ReadMandateResultSchema>;
174
+ /**
175
+ * Single dispatch entry — one agent invocation in a fan-out.
176
+ * Written at dispatch time with status 'pending'; patched on MandateResult receipt.
177
+ *
178
+ * Storage: .devsteps/cbp/[sprint_id]/dispatch-manifest-[dispatch_id].json
179
+ *
180
+ * @see TASK-331 Dispatch Manifest per sprint run
181
+ */
182
+ export declare const DispatchEntrySchema: z.ZodObject<{
183
+ mandate_id: z.ZodString;
184
+ agent: z.ZodString;
185
+ ring: z.ZodNumber;
186
+ dispatched_at: z.ZodString;
187
+ expected_by: z.ZodString;
188
+ completed_at: z.ZodNullable<z.ZodString>;
189
+ duration_ms: z.ZodNullable<z.ZodNumber>;
190
+ status: z.ZodEnum<{
191
+ timeout: "timeout";
192
+ complete: "complete";
193
+ pending: "pending";
194
+ failed: "failed";
195
+ }>;
196
+ confidence: z.ZodNullable<z.ZodNumber>;
197
+ output_tokens_approx: z.ZodNullable<z.ZodNumber>;
198
+ }, z.core.$strip>;
199
+ export type DispatchEntry = z.infer<typeof DispatchEntrySchema>;
200
+ /**
201
+ * Top-level dispatch manifest for a single coord fan-out.
202
+ * Written once at fan-out time (all entries status='pending');
203
+ * individual entries are patched as MandateResults arrive.
204
+ *
205
+ * UUID-named file prevents last-write-wins races in multi-process scenarios.
206
+ *
207
+ * Storage: .devsteps/cbp/[sprint_id]/dispatch-manifest-[dispatch_id].json
208
+ *
209
+ * @see TASK-331 Dispatch Manifest per sprint run
210
+ */
211
+ export declare const DispatchManifestSchema: z.ZodObject<{
212
+ schema_version: z.ZodLiteral<"1.0">;
213
+ dispatch_id: z.ZodString;
214
+ sprint_id: z.ZodString;
215
+ triage_tier: z.ZodEnum<{
216
+ QUICK: "QUICK";
217
+ STANDARD: "STANDARD";
218
+ FULL: "FULL";
219
+ COMPETITIVE: "COMPETITIVE";
220
+ }>;
221
+ session_start: z.ZodString;
222
+ expected_by: z.ZodString;
223
+ dispatches: z.ZodArray<z.ZodObject<{
224
+ mandate_id: z.ZodString;
225
+ agent: z.ZodString;
226
+ ring: z.ZodNumber;
227
+ dispatched_at: z.ZodString;
228
+ expected_by: z.ZodString;
229
+ completed_at: z.ZodNullable<z.ZodString>;
230
+ duration_ms: z.ZodNullable<z.ZodNumber>;
231
+ status: z.ZodEnum<{
232
+ timeout: "timeout";
233
+ complete: "complete";
234
+ pending: "pending";
235
+ failed: "failed";
236
+ }>;
237
+ confidence: z.ZodNullable<z.ZodNumber>;
238
+ output_tokens_approx: z.ZodNullable<z.ZodNumber>;
239
+ }, z.core.$strip>>;
105
240
  }, z.core.$strip>;
106
- export type MandateResult = z.infer<typeof MandateResultSchema>;
241
+ export type DispatchManifest = z.infer<typeof DispatchManifestSchema>;
107
242
  //# sourceMappingURL=cbp-mandate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cbp-mandate.d.ts","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;GAWG;AAIH,eAAO,MAAM,WAAW;;;;;;;;;EAStB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAItD,eAAO,MAAM,UAAU;;;;;EAAuD,CAAC;AAC/E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAIpD,eAAO,MAAM,mBAAmB;;;;EAI9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAItE;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;iBAiBxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIpD;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;iBA4B9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"cbp-mandate.d.ts","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;GAWG;AAIH,eAAO,MAAM,WAAW;;;;;;;;;;EAUtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAItD,eAAO,MAAM,UAAU;;;;;EAAuD,CAAC;AAC/E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAIpD,eAAO,MAAM,mBAAmB;;;;EAI9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAItE;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;iBAiBxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIpD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;iBAmClC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;iBAmBnC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;iBAA0B,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAIpE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAqB9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -27,7 +27,8 @@ export const MandateType = z.enum([
27
27
  'risk', // deep-analyst-risk: single-item risk scoring
28
28
  'risk-batch', // deep-analyst-risk: multi-item sprint risk matrix
29
29
  'research', // deep-analyst-research: external technical research
30
- 'quality-review', // deep-analyst-quality: post-implementation gate
30
+ 'quality', // deep-analyst-quality: post-implementation gate (canonical)
31
+ 'quality-review', // deep-analyst-quality: post-implementation gate (legacy alias)
31
32
  'planning', // deep-analyst-planner: atomic step decomposition
32
33
  'planning-rerank', // deep-analyst-planner: adaptive sprint resequencing
33
34
  ]);
@@ -65,43 +66,145 @@ export const MandateSchema = z.object({
65
66
  /** Token budget hint for the analyst (enforcement is advisory) */
66
67
  max_tokens: z.number().int().positive().optional(),
67
68
  });
68
- // ─── MandateResultSchema ──────────────────────────────────────────────────────
69
+ // ─── MandateResultSchema (Read / Write split) ────────────────────────────────
69
70
  /**
70
- * Tier-2 → Tier-1: A MandateResult is written to disk by a Tier-2 Deep Analyst
71
- * after synthesizing all Tier-3 sub-question answers.
71
+ * READ path — lenient schema for reading historical and current MandateResult files.
72
+ *
73
+ * Tolerates:
74
+ * - item_ids: [] (historical files written before .min(1) was enforced)
75
+ * - analyst names not matching the devsteps-R{N}-{name} convention
76
+ * - findings without a character limit (historical files may be longer)
72
77
  *
73
78
  * Storage: .devsteps/cbp/[sprint_id]/[mandate_id].result.json
74
- * Tier-1 reads via read_mandate_results() — never reads T3 envelopes directly.
75
79
  *
76
- * Max ~800 tokens in findings field — enforced by schema.
80
+ * @see TASK-334 Strengthen Zod validation in MandateResultSchema
77
81
  */
78
- export const MandateResultSchema = z.object({
82
+ export const ReadMandateResultSchema = z.object({
79
83
  /** Correlates to the originating Mandate.mandate_id */
80
84
  mandate_id: z.string().uuid(),
81
- /** DevSteps item IDs this result covers */
85
+ /** DevSteps item IDs this result covers — NO .min(1): historical files have [] */
82
86
  item_ids: z.array(z.string()),
83
87
  /** Sprint ID for file path construction */
84
- sprint_id: z.string(),
85
- /** Name of the Tier-2 agent that produced this result */
86
- analyst: z.string(),
88
+ sprint_id: z.string().min(1),
89
+ /** Name of the Tier-2 agent (lenient — historical files use short names) */
90
+ analyst: z.string().min(1),
87
91
  /** Result completeness indicator */
88
92
  status: MandateResultStatus,
89
93
  /**
90
- * Structured synthesis — max ~800 tokens.
91
- * Should be a markdown table or structured paragraphs answering the mandate.
94
+ * Structured synthesis. Lenient on read — no max enforced to tolerate legacy files.
95
+ * Write path enforces the 12000-char limit via WriteMandateResultSchema.
92
96
  */
93
- findings: z.string().max(6000), // ~800 tokens ≈ 6000 chars
94
- /** Top-5 actionable items for Tier-1, max 120 chars each */
95
- recommendations: z.array(z.string().max(200)).max(5),
97
+ findings: z.string(),
98
+ /** Top-5 actionable items for Tier-1 */
99
+ recommendations: z.array(z.string()).max(5),
96
100
  /** 0.0–1.0 confidence in the synthesis quality */
97
101
  confidence: z.number().min(0).max(1),
98
102
  /** Actual token cost of this analyst invocation (for Tier-1 budget tracking) */
99
- token_cost: z.number().int().nonnegative(),
103
+ token_cost: z.number().int().min(0),
100
104
  /** ISO 8601 timestamp when this result was written */
101
105
  completed_at: z.string().datetime(),
102
106
  /** Required when status === "escalated" */
103
107
  escalation_reason: z.string().optional(),
104
108
  /** Schema version for forward compatibility */
105
- schema_version: z.literal('1.0').default('1.0'),
109
+ schema_version: z.string().default('1.0'),
110
+ // ── Optional extension fields (TASK-326) ──────────────────────────────────
111
+ /** Per-analyst recommendations keyed by analyst name */
112
+ t3_recommendations: z.record(z.string(), z.string()).optional(),
113
+ /** Number of aspect-level recommendations aggregated */
114
+ n_aspects_recommended: z.number().int().optional(),
115
+ /** Approaches already tried — prevents retry cycles */
116
+ failed_approaches: z.array(z.string()).optional(),
117
+ });
118
+ /**
119
+ * WRITE path — strict schema enforced on ALL new MandateResult writes.
120
+ *
121
+ * Differences from ReadMandateResultSchema:
122
+ * - item_ids: requires at least 1 item
123
+ * - analyst: must match devsteps-R{N}-{name} naming convention
124
+ *
125
+ * Used exclusively in handleWriteMandateResult.
126
+ *
127
+ * @see TASK-334 Strengthen Zod validation in MandateResultSchema
128
+ */
129
+ export const WriteMandateResultSchema = ReadMandateResultSchema.extend({
130
+ /** At least 1 DevSteps item ID required for new writes */
131
+ item_ids: z.array(z.string()).min(1),
132
+ /** Must follow the devsteps-R{N}-{name} agent naming convention */
133
+ analyst: z.string().regex(/^devsteps-R\d+-/, 'analyst must match devsteps-R{N}-{name} format'),
134
+ /** Structured synthesis, max 12000 chars (~1600 tokens) */
135
+ findings: z
136
+ .string()
137
+ .max(12000, 'findings must be ≤12000 chars (≈1600 tokens) — use bullet points'),
138
+ /** Top-5 actionable items: max 300 chars each */
139
+ recommendations: z.array(z.string().max(300, 'each recommendation must be ≤300 chars')).max(5),
140
+ /** Sprint ID must be safe for filesystem path: no traversal chars */
141
+ sprint_id: z
142
+ .string()
143
+ .min(1)
144
+ .regex(/^[a-zA-Z0-9_.-]+$/, 'sprint_id must contain only alphanumeric, dash, underscore, or dot characters'),
145
+ });
146
+ /**
147
+ * Backward-compatible alias — consumers importing MandateResultSchema get
148
+ * the lenient ReadMandateResultSchema. No breaking change for existing imports.
149
+ *
150
+ * @deprecated Use ReadMandateResultSchema (reads) or WriteMandateResultSchema (writes) directly.
151
+ */
152
+ export const MandateResultSchema = ReadMandateResultSchema;
153
+ // ─── DispatchManifestSchema ───────────────────────────────────────────────────
154
+ /**
155
+ * Single dispatch entry — one agent invocation in a fan-out.
156
+ * Written at dispatch time with status 'pending'; patched on MandateResult receipt.
157
+ *
158
+ * Storage: .devsteps/cbp/[sprint_id]/dispatch-manifest-[dispatch_id].json
159
+ *
160
+ * @see TASK-331 Dispatch Manifest per sprint run
161
+ */
162
+ export const DispatchEntrySchema = z.object({
163
+ /** Correlates to the MandateResult written by this agent */
164
+ mandate_id: z.string().uuid(),
165
+ /** Agent name (e.g. 'analyst-archaeology') */
166
+ agent: z.string(),
167
+ /** Spider Web ring number (1–5) */
168
+ ring: z.number().int().min(1).max(5),
169
+ /** ISO 8601 timestamp when this agent was dispatched */
170
+ dispatched_at: z.string().datetime(),
171
+ /** ISO 8601 deadline for this agent */
172
+ expected_by: z.string().datetime(),
173
+ /** ISO 8601 timestamp when MandateResult was received — null until patched */
174
+ completed_at: z.string().datetime().nullable(),
175
+ /** Wall-clock duration in ms — null until patched */
176
+ duration_ms: z.number().int().nullable(),
177
+ /** Lifecycle status of this dispatch */
178
+ status: z.enum(['pending', 'complete', 'failed', 'timeout']),
179
+ /** Analyst confidence 0–1 — null until patched */
180
+ confidence: z.number().min(0).max(1).nullable(),
181
+ /** Approximate output tokens consumed — null until patched */
182
+ output_tokens_approx: z.number().int().nullable(),
183
+ });
184
+ /**
185
+ * Top-level dispatch manifest for a single coord fan-out.
186
+ * Written once at fan-out time (all entries status='pending');
187
+ * individual entries are patched as MandateResults arrive.
188
+ *
189
+ * UUID-named file prevents last-write-wins races in multi-process scenarios.
190
+ *
191
+ * Storage: .devsteps/cbp/[sprint_id]/dispatch-manifest-[dispatch_id].json
192
+ *
193
+ * @see TASK-331 Dispatch Manifest per sprint run
194
+ */
195
+ export const DispatchManifestSchema = z.object({
196
+ schema_version: z.literal('1.0'),
197
+ /** UUID uniquely identifying this fan-out run */
198
+ dispatch_id: z.string().uuid(),
199
+ /** Sprint or session context identifier (path segment) */
200
+ sprint_id: z.string().min(1),
201
+ /** Triage tier that determined the ring composition */
202
+ triage_tier: z.enum(['QUICK', 'STANDARD', 'FULL', 'COMPETITIVE']),
203
+ /** ISO 8601 timestamp when coord initiated the fan-out */
204
+ session_start: z.string().datetime(),
205
+ /** ISO 8601 deadline for coord to consider the entire dispatch timed out */
206
+ expected_by: z.string().datetime(),
207
+ /** One entry per dispatched agent */
208
+ dispatches: z.array(DispatchEntrySchema),
106
209
  });
107
210
  //# sourceMappingURL=cbp-mandate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cbp-mandate.js","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cbp-mandate.js","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * Unit Tests for CBP Tier-2 Mandate Schemas
3
3
  *
4
- * Tests: MandateSchema, MandateResultSchema
4
+ * Tests: MandateSchema, MandateResultSchema, ReadMandateResultSchema, WriteMandateResultSchema
5
5
  *
6
6
  * @see STORY-108 MandateResult CBP Extension
7
7
  * @see TASK-233 MandateSchema + MandateResultSchema
8
+ * @see TASK-334 Strengthen Zod validation in MandateResultSchema
8
9
  */
9
10
  export {};
10
11
  //# sourceMappingURL=cbp-mandate.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cbp-mandate.test.d.ts","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
1
+ {"version":3,"file":"cbp-mandate.test.d.ts","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -1,13 +1,14 @@
1
1
  /**
2
2
  * Unit Tests for CBP Tier-2 Mandate Schemas
3
3
  *
4
- * Tests: MandateSchema, MandateResultSchema
4
+ * Tests: MandateSchema, MandateResultSchema, ReadMandateResultSchema, WriteMandateResultSchema
5
5
  *
6
6
  * @see STORY-108 MandateResult CBP Extension
7
7
  * @see TASK-233 MandateSchema + MandateResultSchema
8
+ * @see TASK-334 Strengthen Zod validation in MandateResultSchema
8
9
  */
9
10
  import { describe, expect, it } from 'vitest';
10
- import { MandateResultSchema, MandateResultStatus, MandateSchema, MandateType, TriageTier, } from './cbp-mandate.js';
11
+ import { MandateResultSchema, MandateResultStatus, MandateSchema, MandateType, ReadMandateResultSchema, TriageTier, WriteMandateResultSchema, } from './cbp-mandate.js';
11
12
  // ─── Helpers ─────────────────────────────────────────────────────────────────
12
13
  function validMandate() {
13
14
  return {
@@ -125,10 +126,13 @@ describe('MandateResultSchema', () => {
125
126
  expect(MandateResultSchema.safeParse({ ...validMandateResult(), confidence: 1.1 }).success).toBe(false);
126
127
  expect(MandateResultSchema.safeParse({ ...validMandateResult(), confidence: -0.1 }).success).toBe(false);
127
128
  });
128
- it('rejects findings exceeding 6000 characters', () => {
129
+ it('accepts findings exceeding 6000 characters (lenient read schema — no max enforced)', () => {
130
+ // ReadMandateResultSchema (alias: MandateResultSchema) is intentionally lenient.
131
+ // The 6000-char limit is enforced at the handler level for new writes only.
132
+ // See TASK-334: WriteMandateResultSchema / ReadMandateResultSchema split.
129
133
  const tooLong = 'x'.repeat(6001);
130
134
  const result = MandateResultSchema.safeParse({ ...validMandateResult(), findings: tooLong });
131
- expect(result.success).toBe(false);
135
+ expect(result.success).toBe(true);
132
136
  });
133
137
  it('accepts findings at exactly 6000 characters', () => {
134
138
  const exact = 'x'.repeat(6000);
@@ -143,13 +147,16 @@ describe('MandateResultSchema', () => {
143
147
  });
144
148
  expect(result.success).toBe(false);
145
149
  });
146
- it('rejects a recommendation exceeding 200 characters', () => {
150
+ it('accepts a recommendation exceeding 200 characters (lenient read schema)', () => {
151
+ // ReadMandateResultSchema (alias: MandateResultSchema) is intentionally lenient.
152
+ // Per-item character limits are no longer enforced at schema level for reads.
153
+ // See TASK-334: WriteMandateResultSchema / ReadMandateResultSchema split.
147
154
  const tooLong = ['x'.repeat(201)];
148
155
  const result = MandateResultSchema.safeParse({
149
156
  ...validMandateResult(),
150
157
  recommendations: tooLong,
151
158
  });
152
- expect(result.success).toBe(false);
159
+ expect(result.success).toBe(true);
153
160
  });
154
161
  it('accepts all valid status values', () => {
155
162
  for (const status of ['complete', 'partial', 'escalated']) {
@@ -185,4 +192,121 @@ describe('MandateResultSchema', () => {
185
192
  expect(() => MandateResultStatus.parse('failed')).toThrow();
186
193
  });
187
194
  });
195
+ // ─── TASK-334 Regression Gate: Read/Write Schema Split ────────────────────────
196
+ /**
197
+ * Regression gate for TASK-334: ReadMandateResultSchema / WriteMandateResultSchema split.
198
+ *
199
+ * Invariants:
200
+ * 1. ReadMandateResultSchema tolerates item_ids:[] (historical files MUST not break)
201
+ * 2. WriteMandateResultSchema rejects item_ids:[] (new writes MUST have at least 1)
202
+ * 3. WriteMandateResultSchema rejects analyst names not matching devsteps-R{N}-{name}
203
+ * 4. MandateResultSchema (backward-compat alias) behaves like ReadMandateResultSchema
204
+ */
205
+ describe('TASK-334 — ReadMandateResultSchema / WriteMandateResultSchema regression gate', () => {
206
+ /** Minimal valid fields shared by both schemas */
207
+ function minimalBase() {
208
+ return {
209
+ mandate_id: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
210
+ sprint_id: 'sprint-2026-03-05',
211
+ analyst: 'devsteps-R1-archaeology',
212
+ status: 'complete',
213
+ findings: 'Minimal test findings.',
214
+ recommendations: ['Rec 1'],
215
+ confidence: 0.8,
216
+ token_cost: 500,
217
+ completed_at: '2026-03-05T12:00:00.000Z',
218
+ };
219
+ }
220
+ // ── ReadMandateResultSchema ──────────────────────────────────────────────────
221
+ it('RC-1: ReadMandateResultSchema accepts item_ids:[] (tolerates historical files)', () => {
222
+ const result = ReadMandateResultSchema.safeParse({ ...minimalBase(), item_ids: [] });
223
+ expect(result.success).toBe(true);
224
+ });
225
+ it('RC-2: ReadMandateResultSchema accepts item_ids with entries', () => {
226
+ const result = ReadMandateResultSchema.safeParse({ ...minimalBase(), item_ids: ['TASK-334'] });
227
+ expect(result.success).toBe(true);
228
+ });
229
+ it('RC-3: ReadMandateResultSchema accepts short analyst names (historical compat)', () => {
230
+ const result = ReadMandateResultSchema.safeParse({
231
+ ...minimalBase(),
232
+ item_ids: [],
233
+ analyst: 'devsteps-t2-archaeology', // old naming — must be tolerated
234
+ });
235
+ expect(result.success).toBe(true);
236
+ });
237
+ it('RC-4: ReadMandateResultSchema defaults schema_version to "1.0"', () => {
238
+ const result = ReadMandateResultSchema.parse({ ...minimalBase(), item_ids: [] });
239
+ expect(result.schema_version).toBe('1.0');
240
+ });
241
+ it('RC-5: ReadMandateResultSchema accepts optional extension fields (TASK-326)', () => {
242
+ const result = ReadMandateResultSchema.safeParse({
243
+ ...minimalBase(),
244
+ item_ids: ['TASK-334'],
245
+ t3_recommendations: { 'analyst-risk': 'Check impact on shared schemas' },
246
+ n_aspects_recommended: 3,
247
+ failed_approaches: ['inline-approach-1'],
248
+ });
249
+ expect(result.success).toBe(true);
250
+ });
251
+ // ── WriteMandateResultSchema ─────────────────────────────────────────────────
252
+ it('WC-1: WriteMandateResultSchema REJECTS item_ids:[] (new writes need >=1 item)', () => {
253
+ const result = WriteMandateResultSchema.safeParse({ ...minimalBase(), item_ids: [] });
254
+ expect(result.success).toBe(false);
255
+ });
256
+ it('WC-2: WriteMandateResultSchema REJECTS short analyst names', () => {
257
+ const result = WriteMandateResultSchema.safeParse({
258
+ ...minimalBase(),
259
+ item_ids: ['TASK-334'],
260
+ analyst: 'devsteps-t2-archaeology', // does not match devsteps-R{N}- prefix
261
+ });
262
+ expect(result.success).toBe(false);
263
+ });
264
+ it('WC-3: WriteMandateResultSchema REJECTS plain analyst names', () => {
265
+ const result = WriteMandateResultSchema.safeParse({
266
+ ...minimalBase(),
267
+ item_ids: ['TASK-334'],
268
+ analyst: 'short-name',
269
+ });
270
+ expect(result.success).toBe(false);
271
+ });
272
+ it('WC-4: WriteMandateResultSchema accepts valid R{N} analyst names', () => {
273
+ for (const analyst of [
274
+ 'devsteps-R1-archaeology',
275
+ 'devsteps-R2-aspect-impact',
276
+ 'devsteps-R4-exec-impl',
277
+ ]) {
278
+ const result = WriteMandateResultSchema.safeParse({
279
+ ...minimalBase(),
280
+ item_ids: ['TASK-334'],
281
+ analyst,
282
+ });
283
+ expect(result.success, `Expected success for analyst: ${analyst}`).toBe(true);
284
+ }
285
+ });
286
+ it('WC-5: WriteMandateResultSchema accepts item_ids with multiple entries', () => {
287
+ const result = WriteMandateResultSchema.safeParse({
288
+ ...minimalBase(),
289
+ item_ids: ['TASK-334', 'STORY-050'],
290
+ });
291
+ expect(result.success).toBe(true);
292
+ });
293
+ // ── Backward-compat alias ────────────────────────────────────────────────────
294
+ it('BC-1: MandateResultSchema (alias) behaves like ReadMandateResultSchema — accepts item_ids:[]', () => {
295
+ const result = MandateResultSchema.safeParse({ ...minimalBase(), item_ids: [] });
296
+ expect(result.success).toBe(true);
297
+ });
298
+ it('BC-2: MandateResultSchema (alias) accepts short analyst names', () => {
299
+ const result = MandateResultSchema.safeParse({
300
+ ...minimalBase(),
301
+ item_ids: [],
302
+ analyst: 'devsteps-t2-archaeology',
303
+ });
304
+ expect(result.success).toBe(true);
305
+ });
306
+ // ── MandateType enum consistency (TASK-334) ──────────────────────────────────
307
+ it('MT-1: MandateType accepts both "quality" and "quality-review"', () => {
308
+ expect(() => MandateType.parse('quality')).not.toThrow();
309
+ expect(() => MandateType.parse('quality-review')).not.toThrow();
310
+ });
311
+ });
188
312
  //# sourceMappingURL=cbp-mandate.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cbp-mandate.test.js","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cbp-mandate.test.js","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schnick371/devsteps-shared",
3
- "version": "1.1.0-next.3",
3
+ "version": "1.1.0-next.4",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Never Code Alone. Shared types, schemas, and utilities for DevSteps task tracking.",
6
6
  "author": "Thomas Hertel <thomas.hertel@devsteps.dev>",