@pellux/goodvibes-sdk 0.22.0 → 0.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/_internal/platform/agents/completion-report.d.ts +21 -6
  2. package/dist/_internal/platform/agents/completion-report.d.ts.map +1 -1
  3. package/dist/_internal/platform/agents/completion-report.js +40 -8
  4. package/dist/_internal/platform/agents/orchestrator-prompts.d.ts.map +1 -1
  5. package/dist/_internal/platform/agents/orchestrator-prompts.js +4 -0
  6. package/dist/_internal/platform/agents/wrfc-controller.d.ts +2 -0
  7. package/dist/_internal/platform/agents/wrfc-controller.d.ts.map +1 -1
  8. package/dist/_internal/platform/agents/wrfc-controller.js +105 -6
  9. package/dist/_internal/platform/agents/wrfc-prompt-addenda.d.ts +22 -0
  10. package/dist/_internal/platform/agents/wrfc-prompt-addenda.d.ts.map +1 -0
  11. package/dist/_internal/platform/agents/wrfc-prompt-addenda.js +103 -0
  12. package/dist/_internal/platform/agents/wrfc-reporting.d.ts +3 -3
  13. package/dist/_internal/platform/agents/wrfc-reporting.d.ts.map +1 -1
  14. package/dist/_internal/platform/agents/wrfc-reporting.js +49 -4
  15. package/dist/_internal/platform/agents/wrfc-runtime-events.d.ts +6 -0
  16. package/dist/_internal/platform/agents/wrfc-runtime-events.d.ts.map +1 -1
  17. package/dist/_internal/platform/agents/wrfc-runtime-events.js +8 -1
  18. package/dist/_internal/platform/agents/wrfc-types.d.ts +18 -1
  19. package/dist/_internal/platform/agents/wrfc-types.d.ts.map +1 -1
  20. package/dist/_internal/platform/runtime/emitters/workflows.d.ts +13 -0
  21. package/dist/_internal/platform/runtime/emitters/workflows.d.ts.map +1 -1
  22. package/dist/_internal/platform/runtime/emitters/workflows.js +7 -0
  23. package/dist/_internal/platform/runtime/events/workflows.d.ts +13 -0
  24. package/dist/_internal/platform/runtime/events/workflows.d.ts.map +1 -1
  25. package/dist/_internal/platform/tools/agent/manager.d.ts +2 -0
  26. package/dist/_internal/platform/tools/agent/manager.d.ts.map +1 -1
  27. package/dist/_internal/platform/version.js +1 -1
  28. package/package.json +1 -1
@@ -10,6 +10,23 @@ export interface BaseCompletionReport {
10
10
  summary: string;
11
11
  wrfcId?: string;
12
12
  }
13
+ /**
14
+ * A single constraint extracted from the task prompt or inherited from a parent chain.
15
+ */
16
+ export interface Constraint {
17
+ id: string;
18
+ text: string;
19
+ source: 'prompt' | 'inherited';
20
+ }
21
+ /**
22
+ * A reviewer's finding about whether a specific constraint was satisfied.
23
+ */
24
+ export interface ConstraintFinding {
25
+ constraintId: string;
26
+ satisfied: boolean;
27
+ evidence: string;
28
+ severity?: 'critical' | 'major' | 'minor';
29
+ }
13
30
  /** Engineer agent completion report. */
14
31
  export interface EngineerReport extends BaseCompletionReport {
15
32
  archetype: 'engineer';
@@ -25,6 +42,8 @@ export interface EngineerReport extends BaseCompletionReport {
25
42
  }>;
26
43
  issues: string[];
27
44
  uncertainties: string[];
45
+ /** Constraints enumerated from the task prompt (or inherited from parent chain). Defaults to [] when absent. */
46
+ constraints?: Constraint[];
28
47
  }
29
48
  /** Reviewer agent completion report. */
30
49
  export interface ReviewerReport extends BaseCompletionReport {
@@ -44,6 +63,8 @@ export interface ReviewerReport extends BaseCompletionReport {
44
63
  line?: number;
45
64
  pointValue: number;
46
65
  }>;
66
+ /** Per-constraint satisfaction findings from the reviewer. Defaults to [] when absent. */
67
+ constraintFindings?: ConstraintFinding[];
47
68
  }
48
69
  /** Tester agent completion report. */
49
70
  export interface TesterReport extends BaseCompletionReport {
@@ -68,11 +89,5 @@ export interface GenericReport extends BaseCompletionReport {
68
89
  result: string;
69
90
  }
70
91
  export type CompletionReport = EngineerReport | ReviewerReport | TesterReport | GenericReport;
71
- /**
72
- * Parse a completion report from raw LLM output.
73
- * Looks for a JSON block delimited by ```json\n{...}\n``` or a bare JSON object
74
- * with a "version": 1 field.
75
- * Returns null if no valid report found.
76
- */
77
92
  export declare function parseCompletionReport(rawOutput: string): CompletionReport | null;
78
93
  //# sourceMappingURL=completion-report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"completion-report.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/completion-report.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;;GAGG;AAEH,oDAAoD;AACpD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,cAAe,SAAQ,oBAAoB;IAC1D,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wCAAwC;AACxC,MAAM,WAAW,cAAe,SAAQ,oBAAoB;IAC1D,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;QACxD,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAa,SAAQ,oBAAoB;IACxD,SAAS,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACzD,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,CAAC;AAE9F;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAyChF"}
1
+ {"version":3,"file":"completion-report.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/completion-report.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,22 @@
1
1
  /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
- /**
3
- * Parse a completion report from raw LLM output.
4
- * Looks for a JSON block delimited by ```json\n{...}\n``` or a bare JSON object
5
- * with a "version": 1 field.
6
- * Returns null if no valid report found.
7
- */
2
+ /** Returns true if a Constraint entry is well-formed. */
3
+ function isWellFormedConstraint(c) {
4
+ if (typeof c !== 'object' || c === null)
5
+ return false;
6
+ const obj = c;
7
+ return (typeof obj['id'] === 'string' && obj['id'].length > 0 &&
8
+ typeof obj['text'] === 'string' && obj['text'].length > 0 &&
9
+ (obj['source'] === 'prompt' || obj['source'] === 'inherited'));
10
+ }
11
+ /** Returns true if a ConstraintFinding entry is well-formed. */
12
+ function isWellFormedConstraintFinding(f) {
13
+ if (typeof f !== 'object' || f === null)
14
+ return false;
15
+ const obj = f;
16
+ return (typeof obj['constraintId'] === 'string' && obj['constraintId'].length > 0 &&
17
+ typeof obj['satisfied'] === 'boolean' &&
18
+ typeof obj['evidence'] === 'string' && obj['evidence'].length > 0);
19
+ }
8
20
  export function parseCompletionReport(rawOutput) {
9
21
  // Strategy 1: Find ```json ... ``` block
10
22
  const jsonBlockMatch = rawOutput.match(/```json\s*\n(\{[\s\S]*?\})\s*\n```/);
@@ -12,7 +24,7 @@ export function parseCompletionReport(rawOutput) {
12
24
  try {
13
25
  const parsed = JSON.parse(jsonBlockMatch[1]);
14
26
  if (parsed.version === 1 && parsed.archetype)
15
- return parsed;
27
+ return applyConstraintDefaults(parsed);
16
28
  }
17
29
  catch { /* fall through */ }
18
30
  }
@@ -48,7 +60,7 @@ export function parseCompletionReport(rawOutput) {
48
60
  try {
49
61
  const parsed = JSON.parse(candidate);
50
62
  if (parsed.version === 1 && parsed.archetype)
51
- return parsed;
63
+ return applyConstraintDefaults(parsed);
52
64
  }
53
65
  catch { /* fall through */ }
54
66
  }
@@ -56,3 +68,23 @@ export function parseCompletionReport(rawOutput) {
56
68
  }
57
69
  return null;
58
70
  }
71
+ /**
72
+ * Normalize constraint-related fields on a parsed report:
73
+ * - defaults `constraints` and `constraintFindings` to []
74
+ * - silently filters out malformed entries
75
+ *
76
+ * Pure: returns a new object rather than mutating the input, so callers can
77
+ * share references without surprise writes.
78
+ */
79
+ function applyConstraintDefaults(parsed) {
80
+ const next = { ...parsed };
81
+ if (next['archetype'] === 'engineer') {
82
+ const raw = next['constraints'];
83
+ next['constraints'] = Array.isArray(raw) ? raw.filter(isWellFormedConstraint) : [];
84
+ }
85
+ if (next['archetype'] === 'reviewer') {
86
+ const raw = next['constraintFindings'];
87
+ next['constraintFindings'] = Array.isArray(raw) ? raw.filter(isWellFormedConstraintFinding) : [];
88
+ }
89
+ return next;
90
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-prompts.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/orchestrator-prompts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;KACpF,CAAC;IACF,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;YAAE,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,GAAG,SAAS,CAAC;KAC/E,CAAC;CACH,CAAC;AAmFF;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,IAAI,CAAC,EAAE,iBAAiB,GACvB,MAAM,CAyLR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,iBAAiB,GACvB,MAAM,CAwCR"}
1
+ {"version":3,"file":"orchestrator-prompts.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/orchestrator-prompts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;KACpF,CAAC;IACF,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;YAAE,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,GAAG,SAAS,CAAC;KAC/E,CAAC;CACH,CAAC;AAmFF;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,IAAI,CAAC,EAAE,iBAAiB,GACvB,MAAM,CA8LR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,iBAAiB,GACvB,MAAM,CAwCR"}
@@ -267,6 +267,10 @@ The report format depends on your role:
267
267
  }
268
268
  // --- Layer 5: Task ---
269
269
  parts.push(`## Task\n${record.task}`);
270
+ // --- Layer 6: System prompt addendum (WRFC constraint injection) ---
271
+ if (record.systemPromptAddendum) {
272
+ parts.push(record.systemPromptAddendum);
273
+ }
270
274
  return parts.join('\n\n');
271
275
  }
272
276
  /**
@@ -15,6 +15,8 @@ export declare class WrfcController {
15
15
  private unsubscribers;
16
16
  private activeChainCount;
17
17
  private readonly pendingParentChainIds;
18
+ /** Constraints to inherit when a gate-retry child chain is created via the pending path. */
19
+ private readonly pendingParentConstraints;
18
20
  private readonly sessionId;
19
21
  private readonly workmap;
20
22
  private readonly projectRoot;
@@ -1 +1 @@
1
- {"version":3,"file":"wrfc-controller.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrfc-controller.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-controller.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,8 @@ import { logger } from '../utils/logger.js';
10
10
  import { summarizeError } from '../utils/error-display.js';
11
11
  import { emitWorkflowChainFailed, emitWorkflowFixAttempted, emitWorkflowReviewCompleted, } from '../runtime/emitters/index.js';
12
12
  import { getWrfcAutoCommit, getWrfcMaxFixAttempts, getWrfcScoreThreshold, } from './wrfc-config.js';
13
- import { completeWrfcOrchestrationNode, createWrfcWorkflowContext, emitWrfcAutoCommitted, emitWrfcCascadeAbort, emitWrfcChainCreated, emitWrfcChainPassed, emitWrfcGraphCreated, emitWrfcStateChanged, failWrfcOrchestrationNode, startWrfcOrchestrationNode, } from './wrfc-runtime-events.js';
13
+ import { buildEngineerConstraintAddendum, } from './wrfc-prompt-addenda.js';
14
+ import { completeWrfcOrchestrationNode, createWrfcWorkflowContext, emitWrfcAutoCommitted, emitWrfcCascadeAbort, emitWrfcChainCreated, emitWrfcChainPassed, emitWrfcConstraintsEnumerated, emitWrfcGraphCreated, emitWrfcStateChanged, failWrfcOrchestrationNode, startWrfcOrchestrationNode, } from './wrfc-runtime-events.js';
14
15
  import { runWrfcGateChecks } from './wrfc-gate-runtime.js';
15
16
  export { extractScoreFromText, extractPassedFromText, extractIssuesFromText } from './wrfc-reporting.js';
16
17
  const VALID_TRANSITIONS = {
@@ -30,6 +31,8 @@ export class WrfcController {
30
31
  unsubscribers = [];
31
32
  activeChainCount = 0;
32
33
  pendingParentChainIds = new Map();
34
+ /** Constraints to inherit when a gate-retry child chain is created via the pending path. */
35
+ pendingParentConstraints = new Map();
33
36
  sessionId;
34
37
  workmap;
35
38
  projectRoot;
@@ -166,7 +169,19 @@ export class WrfcController {
166
169
  }
167
170
  startReview(chain, report) {
168
171
  this.transition(chain, 'reviewing');
169
- const reviewerRecord = this.spawnWrfcAgent(chain, 'reviewer', buildReviewTask(chain.id, report, getWrfcScoreThreshold(this.configManager)), true);
172
+ // Prepend any synthetic issues from the controller (e.g. fixer constraint-continuity
173
+ // violations) to the review task body, then clear them so they fire only once.
174
+ let reviewTask = buildReviewTask(chain.id, report, getWrfcScoreThreshold(this.configManager), chain.constraints);
175
+ if (chain.syntheticIssues && chain.syntheticIssues.length > 0) {
176
+ const syntheticBlock = [
177
+ `## Synthetic issues from controller`,
178
+ ``,
179
+ ...chain.syntheticIssues.map((issue) => `- [${issue.severity.toUpperCase()}] ${issue.description}`),
180
+ ].join('\n');
181
+ reviewTask = syntheticBlock + '\n\n---\n\n' + reviewTask;
182
+ chain.syntheticIssues = [];
183
+ }
184
+ const reviewerRecord = this.spawnWrfcAgent(chain, 'reviewer', reviewTask, true);
170
185
  chain.reviewerAgentId = reviewerRecord.id;
171
186
  chain.allAgentIds.push(reviewerRecord.id);
172
187
  reviewerRecord.wrfcId = chain.id;
@@ -183,11 +198,24 @@ export class WrfcController {
183
198
  }
184
199
  async processReview(chain, review) {
185
200
  const threshold = getWrfcScoreThreshold(this.configManager);
186
- this.completeCurrentNode(chain, `Score ${review.score}/10${review.passed ? ' passed' : ' needs fixes'}`);
201
+ const allFindings = review.constraintFindings ?? [];
202
+ const unsatisfied = allFindings.filter((f) => !f.satisfied);
203
+ const constraintsSatisfied = allFindings.filter((f) => f.satisfied).length;
204
+ const constraintsTotal = allFindings.length;
205
+ const constraintFailure = unsatisfied.length > 0;
206
+ const passed = review.score >= threshold && !constraintFailure;
207
+ this.completeCurrentNode(chain, `Score ${review.score}/10${passed ? ' passed' : ' needs fixes'}`);
187
208
  emitWorkflowReviewCompleted(this.runtimeBus, createWrfcWorkflowContext(this.sessionId, chain.id), {
188
209
  chainId: chain.id,
189
210
  score: review.score,
190
- passed: review.passed,
211
+ passed,
212
+ ...(chain.constraints.length > 0
213
+ ? {
214
+ constraintsSatisfied,
215
+ constraintsTotal,
216
+ unsatisfiedConstraintIds: unsatisfied.map((f) => f.constraintId),
217
+ }
218
+ : {}),
191
219
  });
192
220
  this.workmap.append({
193
221
  ts: new Date().toISOString(),
@@ -207,9 +235,11 @@ export class WrfcController {
207
235
  score: review.score,
208
236
  threshold,
209
237
  fixAttempts: chain.fixAttempts,
238
+ constraintFailure,
239
+ unsatisfiedCount: unsatisfied.length,
210
240
  });
211
241
  chain.reviewScores.push(review.score);
212
- if (review.score >= threshold) {
242
+ if (passed) {
213
243
  this.transition(chain, 'awaiting_gates');
214
244
  await this.checkAndRunGatesForAll();
215
245
  return;
@@ -238,7 +268,7 @@ export class WrfcController {
238
268
  attempt: chain.fixAttempts,
239
269
  maxAttempts,
240
270
  });
241
- const fixerRecord = this.spawnWrfcAgent(chain, 'engineer', buildFixTask(chain.id, review, getWrfcScoreThreshold(this.configManager), chain.fixAttempts), true);
271
+ const fixerRecord = this.spawnWrfcAgent(chain, 'engineer', buildFixTask(chain.id, review, getWrfcScoreThreshold(this.configManager), chain.fixAttempts, chain.constraints, review.constraintFindings ?? []), true);
242
272
  chain.fixerAgentId = fixerRecord.id;
243
273
  chain.allAgentIds.push(fixerRecord.id);
244
274
  fixerRecord.wrfcId = chain.id;
@@ -324,9 +354,29 @@ export class WrfcController {
324
354
  const followUpChain = this.findChainByAgentId(followUpRecord.id);
325
355
  if (followUpChain) {
326
356
  followUpChain.parentChainId = chain.id;
357
+ // Inherit constraints from the parent chain as source: 'inherited'.
358
+ // Phase 4 limitation: the child engineer's returned constraints are ignored
359
+ // (constraintsEnumerated starts true), so the child cannot ADD new constraints
360
+ // from a different prompt. The inherited list is treated as authoritative.
361
+ if (chain.constraints.length > 0) {
362
+ followUpChain.constraints = chain.constraints.map((c) => ({
363
+ id: c.id,
364
+ text: c.text,
365
+ source: 'inherited',
366
+ }));
367
+ followUpChain.constraintsEnumerated = true;
368
+ }
327
369
  }
328
370
  else {
329
371
  this.pendingParentChainIds.set(followUpRecord.id, chain.id);
372
+ // Store parent constraints for inheritance when the child chain is registered later.
373
+ if (chain.constraints.length > 0) {
374
+ this.pendingParentConstraints.set(followUpRecord.id, chain.constraints.map((c) => ({
375
+ id: c.id,
376
+ text: c.text,
377
+ source: 'inherited',
378
+ })));
379
+ }
330
380
  }
331
381
  logger.debug('WrfcController.processGateResults: gate failure — spawned follow-up agent', {
332
382
  parentChainId: chain.id,
@@ -473,6 +523,10 @@ export class WrfcController {
473
523
  chain.currentNodeId = undefined;
474
524
  }
475
525
  createBaseChain(engineerRecord) {
526
+ // Inject the engineer constraint addendum before the runner reads the system prompt.
527
+ // createBaseChain is called synchronously inside manager.spawn() before
528
+ // executor.runAgent(record), so the field is visible to the runner.
529
+ engineerRecord.systemPromptAddendum = '\n\n---\n\n' + buildEngineerConstraintAddendum();
476
530
  const chain = {
477
531
  id: this.generateWrfcId(),
478
532
  state: 'pending',
@@ -483,6 +537,8 @@ export class WrfcController {
483
537
  reviewCycles: 0,
484
538
  gateRetryDepth: 0,
485
539
  reviewScores: [],
540
+ constraints: [],
541
+ constraintsEnumerated: false,
486
542
  createdAt: Date.now(),
487
543
  };
488
544
  this.chains.set(chain.id, chain);
@@ -506,6 +562,15 @@ export class WrfcController {
506
562
  chain.gateRetryDepth = parent.gateRetryDepth + (parent.gateFailureFingerprint ? 1 : 0);
507
563
  }
508
564
  this.pendingParentChainIds.delete(agentId);
565
+ // Inherit constraints from parent when they were queued via the pending path.
566
+ // Phase 4 limitation: constraintsEnumerated is set true so the child engineer's
567
+ // returned constraints are ignored — the inherited list is authoritative.
568
+ const inherited = this.pendingParentConstraints.get(agentId);
569
+ if (inherited && inherited.length > 0) {
570
+ chain.constraints = inherited;
571
+ chain.constraintsEnumerated = true;
572
+ }
573
+ this.pendingParentConstraints.delete(agentId);
509
574
  }
510
575
  startEngineeringChain(chain, emitCreated) {
511
576
  this.activeChainCount += 1;
@@ -527,6 +592,40 @@ export class WrfcController {
527
592
  task: chain.task,
528
593
  });
529
594
  }
595
+ // Capture constraints from the engineer report and emit the enumeration event.
596
+ // Only emit once per chain — the initial engineer completion, not fixer re-runs.
597
+ //
598
+ // Note on narrowing: EngineerReport.archetype is the literal 'engineer', but
599
+ // GenericReport.archetype is a wide `string`. A bare `report.archetype === 'engineer'`
600
+ // check does NOT narrow away GenericReport under strict TS because 'engineer'
601
+ // is assignable to `string`. We use a type predicate to force the narrow.
602
+ const isEngineerReportShape = (r) => r.archetype === 'engineer';
603
+ if (!chain.constraintsEnumerated) {
604
+ chain.constraints = isEngineerReportShape(report) ? (report.constraints ?? []) : [];
605
+ chain.constraintsEnumerated = true;
606
+ emitWrfcConstraintsEnumerated(this.runtimeBus, this.sessionId, chain.id, chain.constraints);
607
+ }
608
+ else {
609
+ // Fixer continuity validation: verify the fixer returned the same constraint id-set.
610
+ // If it diverged, inject a synthetic critical issue for the next review pass.
611
+ const fixerConstraints = isEngineerReportShape(report) ? (report.constraints ?? []) : [];
612
+ const expectedIds = new Set(chain.constraints.map((c) => c.id));
613
+ const actualIds = new Set(fixerConstraints.map((c) => c.id));
614
+ const missing = [...expectedIds].filter((id) => !actualIds.has(id));
615
+ const extra = [...actualIds].filter((id) => !expectedIds.has(id));
616
+ if (missing.length > 0 || extra.length > 0) {
617
+ const description = `Fixer regressed constraint continuity: missing=[${missing.join(',')}] extra=[${extra.join(',')}]`;
618
+ logger.warn('WrfcController: fixer constraint-continuity violation', {
619
+ chainId: chain.id,
620
+ missing,
621
+ extra,
622
+ });
623
+ chain.syntheticIssues ??= [];
624
+ chain.syntheticIssues.push({ severity: 'critical', description });
625
+ }
626
+ // The authoritative constraint list is NOT overwritten — chain.constraints remains the
627
+ // original enumeration from the initial engineer turn.
628
+ }
530
629
  this.startReview(chain, report);
531
630
  }
532
631
  spawnWrfcAgent(chain, template, task, dangerouslyDisableWrfc) {
@@ -0,0 +1,22 @@
1
+ /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
+ export declare function buildEngineerConstraintAddendum(): string;
3
+ /**
4
+ * Addendum appended to the reviewer system prompt in every WRFC chain.
5
+ *
6
+ * Instructs the reviewer to verify each enumerated constraint from the
7
+ * engineer's report independently of the 10-dimension rubric.
8
+ *
9
+ * Memoized — the string is static and built once per process.
10
+ */
11
+ export declare function buildReviewerConstraintAddendum(): string;
12
+ /**
13
+ * Addendum appended to fixer spawns in WRFC chains with non-empty constraints.
14
+ *
15
+ * Instructs the fixer to preserve every satisfied constraint and satisfy any
16
+ * unsatisfied ones, while avoiding silent regressions. Also mandates that the
17
+ * returned EngineerReport carries the exact same constraints[] list.
18
+ *
19
+ * Memoized — the string is static and built once per process.
20
+ */
21
+ export declare function buildFixerConstraintAddendum(): string;
22
+ //# sourceMappingURL=wrfc-prompt-addenda.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrfc-prompt-addenda.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-prompt-addenda.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAmBrF,wBAAgB,+BAA+B,IAAI,MAAM,CAwBxD;AAGD;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,IAAI,MAAM,CAqBxD;AAGD;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAgBrD"}
@@ -0,0 +1,103 @@
1
+ /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
+ /**
3
+ * System-prompt addenda injected into WRFC agent spawns.
4
+ *
5
+ * Phase 2 wires `buildEngineerConstraintAddendum` into engineer spawns.
6
+ * Reviewer (Phase 3) and fixer (Phase 4) addenda are declared here for
7
+ * module-shape stability but throw at call time until their phase lands.
8
+ */
9
+ /**
10
+ * Addendum appended to the engineer system prompt in every WRFC chain.
11
+ *
12
+ * Instructs the engineer to enumerate explicit constraints from the task
13
+ * prompt as self-declared acceptance criteria before beginning GATHER.
14
+ *
15
+ * Memoized — the string is static and built once per process.
16
+ */
17
+ let _engineerAddendumCache = null;
18
+ export function buildEngineerConstraintAddendum() {
19
+ if (_engineerAddendumCache !== null)
20
+ return _engineerAddendumCache;
21
+ _engineerAddendumCache = `## Constraint enumeration (pre-work step)
22
+
23
+ Before you begin GATHER, read the user's task prompt once and decide: **does this prompt contain explicit build instructions with constraints worth enumerating?**
24
+
25
+ A **build task with constraints** looks like: size limits ("under 200 lines"), feature inclusions/exclusions ("must support X but not Y"), style rules ("no \`any\` types", "prefer functional"), performance targets, naming conventions, API shape requirements, explicit scope boundaries, or any specific behavioral requirement the user stated.
26
+
27
+ A **non-build or unconstrained prompt** looks like: a question, a conversational exchange, a request for explanation, exploratory research, a one-shot utility, or a build request that delegates all decisions to your judgment ("make it nice", "fix the bug", "implement whatever makes sense").
28
+
29
+ **Decision:**
30
+ - If the prompt is non-build or unconstrained, emit \`"constraints": []\` in your EngineerReport. Do NOT fabricate constraints. Do NOT convert soft preferences, politeness, or task description into constraints. Proceed with normal GATHER/PLAN/APPLY.
31
+ - If the prompt contains explicit constraints, enumerate them as \`{ id, text, source: "prompt" }\`. Use the user's words, quoted or minimally paraphrased. Assign ids \`c1\`, \`c2\`, … in order of appearance. Do NOT add constraints that are merely your own best practices. Do NOT split a single requirement into multiple ids for bulk. Do NOT summarize the task goal itself as a constraint — constraints are the *shape* of the work, the task is the *what*.
32
+
33
+ **Calibration examples (follow the spirit, not the literal phrasing):**
34
+ - \`"Write a function that adds two numbers"\` → \`constraints: []\` (no shape declared beyond the task itself).
35
+ - \`"Write a function that adds two numbers, must be pure, no external deps, under 20 lines"\` → three constraints.
36
+ - \`"What does this code do?"\` → \`constraints: []\` (not a build task).
37
+ - \`"Refactor this file to use hooks, keep public exports identical"\` → two constraints.
38
+
39
+ **Hard cap: at most ~16 constraints.** If you find more, you are over-enumerating — consolidate. Real user prompts almost never produce more than 5-10.
40
+
41
+ These constraints become your self-declared acceptance criteria. The reviewer will verify each one independently. If you cannot satisfy a constraint, record it under \`issues[]\` with an explanation — do not silently drop it.`;
42
+ return _engineerAddendumCache;
43
+ }
44
+ let _reviewerAddendumCache = null;
45
+ /**
46
+ * Addendum appended to the reviewer system prompt in every WRFC chain.
47
+ *
48
+ * Instructs the reviewer to verify each enumerated constraint from the
49
+ * engineer's report independently of the 10-dimension rubric.
50
+ *
51
+ * Memoized — the string is static and built once per process.
52
+ */
53
+ export function buildReviewerConstraintAddendum() {
54
+ if (_reviewerAddendumCache !== null)
55
+ return _reviewerAddendumCache;
56
+ _reviewerAddendumCache = `## Constraint verification (runs alongside the 10-dimension rubric, NOT instead of it)
57
+
58
+ The engineer's \`EngineerReport.constraints\` is the authoritative list of user-declared requirements for this task. In the review task payload you will receive this list explicitly — verify it against the applied changes.
59
+
60
+ **For each constraint:**
61
+ 1. Judge whether the applied changes satisfy it (\`satisfied: true\` / \`false\`).
62
+ 2. Cite concrete evidence — a file and line, a diff observation, or a test behavior. "Looks fine" is not evidence.
63
+ 3. Emit a \`constraintFindings[]\` entry referencing \`constraintId\`.
64
+
65
+ **Severity rules for unsatisfied constraints**:
66
+ - A violated hard limit (size, perf target, explicitly forbidden API) → **critical**.
67
+ - A violated explicit user rule (style rules, naming conventions, required features) → **major**.
68
+ - An ambiguous or partially-satisfied constraint → **minor** with evidence explaining the partial satisfaction.
69
+ - If the constraint phrasing is ambiguous enough that verification is impossible, emit \`satisfied: false, severity: 'minor', evidence: 'constraint ambiguous, cannot verify'\` — surfaces the issue without failing the chain on a technicality.
70
+
71
+ **If the constraint list is empty** (non-build prompt → engineer emitted \`[]\`), emit \`constraintFindings: []\` and skip this section entirely. Do NOT invent findings. Do NOT penalize the score for "missing constraints".
72
+
73
+ **Constraint findings are INDEPENDENT of the rubric dimensions.** A run can score 10/10 on the rubric and still fail because a constraint is unsatisfied. Conversely, all constraints can be satisfied while the rubric flags quality issues elsewhere.`;
74
+ return _reviewerAddendumCache;
75
+ }
76
+ let _fixerAddendumCache = null;
77
+ /**
78
+ * Addendum appended to fixer spawns in WRFC chains with non-empty constraints.
79
+ *
80
+ * Instructs the fixer to preserve every satisfied constraint and satisfy any
81
+ * unsatisfied ones, while avoiding silent regressions. Also mandates that the
82
+ * returned EngineerReport carries the exact same constraints[] list.
83
+ *
84
+ * Memoized — the string is static and built once per process.
85
+ */
86
+ export function buildFixerConstraintAddendum() {
87
+ if (_fixerAddendumCache !== null)
88
+ return _fixerAddendumCache;
89
+ _fixerAddendumCache = `## Constraint preservation during fix
90
+
91
+ The chain's authoritative constraint list is fixed — the engineer declared it on the first turn and it does not change across fix iterations. Every constraint that was declared is still binding on your fix.
92
+
93
+ **Your job is to resolve the reviewer's issues WITHOUT regressing any satisfied constraint, and to satisfy any constraints the reviewer marked unsatisfied.**
94
+
95
+ **Before APPLY, for each constraint in the list:**
96
+ - If the reviewer marked it \`satisfied: true\`, your fix must keep it satisfied. Do not change code in ways that break it.
97
+ - If the reviewer marked it \`satisfied: false\`, your fix must satisfy it AND resolve whichever rubric issues the reviewer flagged.
98
+ - If the reviewer marked it \`UNVERIFIED\` (no finding was recorded), treat it as a constraint you must verify and satisfy before returning.
99
+ - If a reviewer issue can only be resolved by violating a constraint, STOP. Record the conflict under \`issues[]\` with both the \`constraintId\` and the reviewer issue id/description. Do NOT silently regress the constraint.
100
+
101
+ **Return protocol:** Your output must be an \`EngineerReport\` carrying the exact same \`constraints[]\` array you received — same ids, same text, same order. The controller will verify continuity. Renaming, dropping, reordering, or adding constraints will be treated as a regression and surface as a synthetic critical issue in the next review cycle.`;
102
+ return _fixerAddendumCache;
103
+ }
@@ -1,11 +1,11 @@
1
- import type { CompletionReport, ReviewerReport } from './completion-report.js';
1
+ import type { CompletionReport, Constraint, ConstraintFinding, ReviewerReport } from './completion-report.js';
2
2
  import type { QualityGateResult } from './wrfc-types.js';
3
3
  export declare function extractScoreFromText(text: string): number | null;
4
4
  export declare function extractPassedFromText(text: string, score: number, threshold: number): boolean;
5
5
  export declare function extractIssuesFromText(text: string): ReviewerReport['issues'];
6
6
  export declare function parseEngineerCompletionReport(rawOutput: string, _template?: string): CompletionReport;
7
7
  export declare function parseReviewerCompletionReport(chainId: string, rawOutput: string, threshold: number): ReviewerReport;
8
- export declare function buildReviewTask(chainId: string, report: CompletionReport, threshold: number): string;
9
- export declare function buildFixTask(chainId: string, review: ReviewerReport, threshold: number, fixAttempts: number): string;
8
+ export declare function buildReviewTask(chainId: string, report: CompletionReport, threshold: number, constraints?: Constraint[]): string;
9
+ export declare function buildFixTask(chainId: string, review: ReviewerReport, threshold: number, fixAttempts: number, constraints?: Constraint[], constraintFindings?: ConstraintFinding[]): string;
10
10
  export declare function buildGateFailureTask(chainId: string, task: string, failedGates: readonly QualityGateResult[]): string;
11
11
  //# sourceMappingURL=wrfc-reporting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrfc-reporting.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOzD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBhE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAK7F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAa5E;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAiBrG;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,cAAc,CA6BhB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,GAChB,MAAM,CAyBR;AA0FD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAyBR;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,SAAS,iBAAiB,EAAE,GACxC,MAAM,CAkBR"}
1
+ {"version":3,"file":"wrfc-reporting.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAkB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG9H,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOzD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBhE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAK7F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAa5E;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAiBrG;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,cAAc,CA6BhB;AAID,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,UAAU,EAAO,GAC7B,MAAM,CA8CR;AA0FD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,UAAU,EAAO,EAC9B,kBAAkB,GAAE,iBAAiB,EAAO,GAC3C,MAAM,CAwDR;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,SAAS,iBAAiB,EAAE,GACxC,MAAM,CAkBR"}
@@ -1,4 +1,5 @@
1
1
  import { parseCompletionReport } from './completion-report.js';
2
+ import { buildFixerConstraintAddendum, buildReviewerConstraintAddendum } from './wrfc-prompt-addenda.js';
2
3
  import { logger } from '../utils/logger.js';
3
4
  const REVIEW_BRIEF_ITEM_LIMIT = 6;
4
5
  const REVIEW_BRIEF_FILE_LIMIT = 8;
@@ -96,9 +97,10 @@ export function parseReviewerCompletionReport(chainId, rawOutput, threshold) {
96
97
  issues: extractedIssues,
97
98
  };
98
99
  }
99
- export function buildReviewTask(chainId, report, threshold) {
100
+ const CONSTRAINTS_TASK_LIMIT = 20;
101
+ export function buildReviewTask(chainId, report, threshold, constraints = []) {
100
102
  const lines = buildReviewBrief(report);
101
- return [
103
+ const base = [
102
104
  `WRFC Review Request`,
103
105
  `Chain ID: ${chainId}`,
104
106
  ``,
@@ -120,7 +122,24 @@ export function buildReviewTask(chainId, report, threshold) {
120
122
  `- passed: <boolean>`,
121
123
  `- dimensions: array of { name, score, maxScore, issues[] }`,
122
124
  `- issues: array of { severity, description, file?, line?, pointValue }`,
125
+ ];
126
+ if (constraints.length === 0) {
127
+ return base.join('\n');
128
+ }
129
+ const visible = constraints.slice(0, CONSTRAINTS_TASK_LIMIT);
130
+ const overflow = constraints.length - visible.length;
131
+ const constraintLines = visible.map((c) => `- ${c.id}: ${c.text}`);
132
+ if (overflow > 0) {
133
+ constraintLines.push(`(+${overflow} more)`);
134
+ }
135
+ const constraintSection = [
136
+ `## Constraints to verify`,
137
+ ``,
138
+ `The engineer enumerated the following user-declared constraints from the task prompt. Verify each one in your review. Unsatisfied constraints are independent of the quality rubric and will force chain failure regardless of score.`,
139
+ ``,
140
+ ...constraintLines,
123
141
  ].join('\n');
142
+ return base.join('\n') + '\n\n---\n\n' + constraintSection + '\n\n---\n\n' + buildReviewerConstraintAddendum();
124
143
  }
125
144
  function truncateReviewText(text, max = REVIEW_BRIEF_TEXT_LIMIT) {
126
145
  const normalized = text.replace(/\s+/g, ' ').trim();
@@ -197,14 +216,14 @@ function buildReviewBrief(report) {
197
216
  appendListSection(lines, 'Uncertainties', engineer.uncertainties, 4);
198
217
  return lines;
199
218
  }
200
- export function buildFixTask(chainId, review, threshold, fixAttempts) {
219
+ export function buildFixTask(chainId, review, threshold, fixAttempts, constraints = [], constraintFindings = []) {
201
220
  const issueList = review.issues
202
221
  .map((issue) => {
203
222
  const location = issue.file ? ` (${issue.file}${issue.line ? `:${issue.line}` : ''})` : '';
204
223
  return `- [${issue.severity.toUpperCase()}] ${issue.description}${location} (-${issue.pointValue} pts)`;
205
224
  })
206
225
  .join('\n');
207
- return [
226
+ const base = [
208
227
  `WRFC Fix Request`,
209
228
  `Chain ID: ${chainId}`,
210
229
  ``,
@@ -222,6 +241,32 @@ export function buildFixTask(chainId, review, threshold, fixAttempts) {
222
241
  `3. Re-run Gather, Plan, Apply explicitly before writing your final answer.`,
223
242
  `4. Return a structured EngineerReport JSON block including gatheredContext, plannedActions, and appliedChanges in your final response.`,
224
243
  ].join('\n');
244
+ if (constraints.length === 0) {
245
+ return base;
246
+ }
247
+ // Build a finding-lookup map: constraintId -> ConstraintFinding
248
+ const findingMap = new Map();
249
+ for (const finding of constraintFindings) {
250
+ findingMap.set(finding.constraintId, finding);
251
+ }
252
+ const visible = constraints.slice(0, CONSTRAINTS_TASK_LIMIT);
253
+ const overflow = constraints.length - visible.length;
254
+ const constraintLines = visible.map((c) => {
255
+ const finding = findingMap.get(c.id);
256
+ const marker = finding === undefined ? 'UNVERIFIED' : finding.satisfied ? 'SATISFIED' : 'UNSATISFIED';
257
+ return `- ${c.id} [${marker}]: ${c.text}`;
258
+ });
259
+ if (overflow > 0) {
260
+ constraintLines.push(`(+${overflow} more)`);
261
+ }
262
+ const constraintSection = [
263
+ `## Constraints (authoritative — preserve through fix)`,
264
+ ``,
265
+ `These are the user-declared constraints for this chain. They are binding on every fix iteration.`,
266
+ ``,
267
+ ...constraintLines,
268
+ ].join('\n');
269
+ return base + '\n\n---\n\n' + constraintSection + '\n\n---\n\n' + buildFixerConstraintAddendum();
225
270
  }
226
271
  export function buildGateFailureTask(chainId, task, failedGates) {
227
272
  const gateFailureSummary = failedGates
@@ -1,4 +1,5 @@
1
1
  import type { RuntimeEventBus } from '../runtime/events/index.js';
2
+ import type { Constraint } from './completion-report.js';
2
3
  import type { WrfcState } from './wrfc-types.js';
3
4
  export type WorkflowContext = {
4
5
  sessionId: string;
@@ -14,6 +15,11 @@ export declare function emitWrfcGateResult(runtimeBus: RuntimeEventBus, sessionI
14
15
  export declare function emitWrfcChainPassed(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string): void;
15
16
  export declare function emitWrfcAutoCommitted(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string, commitHash?: string): void;
16
17
  export declare function emitWrfcCascadeAbort(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string, reason: string): void;
18
+ /**
19
+ * Thin wrapper for WORKFLOW_CONSTRAINTS_ENUMERATED.
20
+ * Wired in Phase 2 — emitted once per chain on initial engineer completion.
21
+ */
22
+ export declare function emitWrfcConstraintsEnumerated(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string, constraints: Constraint[]): void;
17
23
  export declare function emitWrfcGraphCreated(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string, title: string): void;
18
24
  export declare function startWrfcOrchestrationNode(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string, suffix: string, role: WrfcNodeRole, title: string, agentId?: string): string;
19
25
  export declare function completeWrfcOrchestrationNode(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string, nodeId: string, summary?: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"wrfc-runtime-events.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-runtime-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAejD,MAAM,MAAM,eAAe,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AACrF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAM7F;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,SAAS,GACZ,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAExH;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAEvI;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzG;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,IAAI,CAMN;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAqBR;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAUN;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,IAAI,CAUN"}
1
+ {"version":3,"file":"wrfc-runtime-events.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-runtime-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgBjD,MAAM,MAAM,eAAe,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AACrF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAM7F;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,SAAS,GACZ,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAExH;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAEvI;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzG;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,IAAI,CAEN;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,UAAU,EAAE,GACxB,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,IAAI,CAMN;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAqBR;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAUN;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,IAAI,CAUN"}
@@ -1,4 +1,4 @@
1
- import { emitOrchestrationGraphCreated, emitOrchestrationNodeAdded, emitOrchestrationNodeCompleted, emitOrchestrationNodeFailed, emitOrchestrationNodeStarted, emitWorkflowAutoCommitted, emitWorkflowCascadeAborted, emitWorkflowChainCreated, emitWorkflowChainPassed, emitWorkflowGateResult, emitWorkflowStateChanged, } from '../runtime/emitters/index.js';
1
+ import { emitOrchestrationGraphCreated, emitOrchestrationNodeAdded, emitOrchestrationNodeCompleted, emitOrchestrationNodeFailed, emitOrchestrationNodeStarted, emitWorkflowAutoCommitted, emitWorkflowCascadeAborted, emitWorkflowChainCreated, emitWorkflowChainPassed, emitWorkflowConstraintsEnumerated, emitWorkflowGateResult, emitWorkflowStateChanged, } from '../runtime/emitters/index.js';
2
2
  export function createWrfcWorkflowContext(sessionId, chainId) {
3
3
  return {
4
4
  sessionId,
@@ -27,6 +27,13 @@ export function emitWrfcAutoCommitted(runtimeBus, sessionId, chainId, commitHash
27
27
  export function emitWrfcCascadeAbort(runtimeBus, sessionId, chainId, reason) {
28
28
  emitWorkflowCascadeAborted(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), { chainId, reason });
29
29
  }
30
+ /**
31
+ * Thin wrapper for WORKFLOW_CONSTRAINTS_ENUMERATED.
32
+ * Wired in Phase 2 — emitted once per chain on initial engineer completion.
33
+ */
34
+ export function emitWrfcConstraintsEnumerated(runtimeBus, sessionId, chainId, constraints) {
35
+ emitWorkflowConstraintsEnumerated(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), { chainId, constraints });
36
+ }
30
37
  export function emitWrfcGraphCreated(runtimeBus, sessionId, chainId, title) {
31
38
  emitOrchestrationGraphCreated(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), {
32
39
  graphId: createWrfcOrchestrationGraphId(chainId),
@@ -1,4 +1,4 @@
1
- import type { CompletionReport, ReviewerReport } from './completion-report.js';
1
+ import type { CompletionReport, Constraint, ReviewerReport } from './completion-report.js';
2
2
  import type { AgentRecord } from '../tools/agent/index.js';
3
3
  /** Queued chain waiting to start. */
4
4
  export interface QueuedChain {
@@ -40,6 +40,23 @@ export interface WrfcChain {
40
40
  agentId: string;
41
41
  fullOutput?: string;
42
42
  };
43
+ /** Constraints propagated for this chain. Initialized to [] on construction. */
44
+ constraints: Constraint[];
45
+ /**
46
+ * Internal bookkeeping flag — true once constraints have been captured and
47
+ * WORKFLOW_CONSTRAINTS_ENUMERATED has been emitted for this chain.
48
+ * Prevents duplicate emission on fixer re-runs.
49
+ */
50
+ constraintsEnumerated: boolean;
51
+ /**
52
+ * Synthetic critical issues injected by the controller (e.g. fixer constraint-continuity
53
+ * violations). Prepended to the next review task body, then cleared so they fire once per cycle.
54
+ * Internal only — not surfaced on events.
55
+ */
56
+ syntheticIssues?: Array<{
57
+ severity: 'critical';
58
+ description: string;
59
+ }>;
43
60
  }
44
61
  /** Quality gate definition. */
45
62
  export interface QualityGate {
@@ -1 +1 @@
1
- {"version":3,"file":"wrfc-types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mCAAmC;AACnC,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,aAAa,GACb,WAAW,GACX,QAAQ,GACR,gBAAgB,GAChB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,YAAY,CAAC;AAEjB,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yFAAyF;IACzF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,kBAAkB,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,+BAA+B;AAC/B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"wrfc-types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/agents/wrfc-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mCAAmC;AACnC,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,aAAa,GACb,WAAW,GACX,QAAQ,GACR,gBAAgB,GAChB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,YAAY,CAAC;AAEjB,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yFAAyF;IACzF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,kBAAkB,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,gFAAgF;IAChF,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAED,+BAA+B;AAC/B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -1,4 +1,5 @@
1
1
  import type { RuntimeEventBus } from '../events/index.js';
2
+ import type { Constraint } from '../../agents/completion-report.js';
2
3
  import type { WrfcState } from '../../agents/wrfc-types.js';
3
4
  import type { EmitterContext } from './index.js';
4
5
  export declare function emitWorkflowChainCreated(bus: RuntimeEventBus, ctx: EmitterContext, data: {
@@ -14,11 +15,15 @@ export declare function emitWorkflowReviewCompleted(bus: RuntimeEventBus, ctx: E
14
15
  chainId: string;
15
16
  score: number;
16
17
  passed: boolean;
18
+ constraintsSatisfied?: number;
19
+ constraintsTotal?: number;
20
+ unsatisfiedConstraintIds?: string[];
17
21
  }): void;
18
22
  export declare function emitWorkflowFixAttempted(bus: RuntimeEventBus, ctx: EmitterContext, data: {
19
23
  chainId: string;
20
24
  attempt: number;
21
25
  maxAttempts: number;
26
+ targetConstraintIds?: string[];
22
27
  }): void;
23
28
  export declare function emitWorkflowGateResult(bus: RuntimeEventBus, ctx: EmitterContext, data: {
24
29
  chainId: string;
@@ -40,4 +45,12 @@ export declare function emitWorkflowCascadeAborted(bus: RuntimeEventBus, ctx: Em
40
45
  chainId: string;
41
46
  reason: string;
42
47
  }): void;
48
+ /**
49
+ * Emit WORKFLOW_CONSTRAINTS_ENUMERATED when an engineer agent has reported its constraints.
50
+ * DO NOT CALL YET — declaration only for Phase 1. Emission is wired in Phase 2.
51
+ */
52
+ export declare function emitWorkflowConstraintsEnumerated(bus: RuntimeEventBus, ctx: EmitterContext, data: {
53
+ chainId: string;
54
+ constraints: Constraint[];
55
+ }): void;
43
56
  //# sourceMappingURL=workflows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/emitters/workflows.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtC,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,SAAS,CAAA;CAAE,GACxD,IAAI,CAEN;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACxD,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC9D,IAAI,CAEN;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACvD,IAAI,CAEN;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACxB,IAAI,CAEN;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC,IAAI,CAEN;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,IAAI,CAEN;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC,IAAI,CAEN"}
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/emitters/workflows.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtC,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,SAAS,CAAA;CAAE,GACxD,IAAI,CAEN;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CACrC,GACA,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9F,IAAI,CAEN;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACvD,IAAI,CAEN;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACxB,IAAI,CAEN;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC,IAAI,CAEN;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,IAAI,CAEN;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC,IAAI,CAEN;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,GACnD,IAAI,CAEN"}
@@ -29,3 +29,10 @@ export function emitWorkflowAutoCommitted(bus, ctx, data) {
29
29
  export function emitWorkflowCascadeAborted(bus, ctx, data) {
30
30
  bus.emit('workflows', createEventEnvelope('WORKFLOW_CASCADE_ABORTED', { type: 'WORKFLOW_CASCADE_ABORTED', ...data }, ctx));
31
31
  }
32
+ /**
33
+ * Emit WORKFLOW_CONSTRAINTS_ENUMERATED when an engineer agent has reported its constraints.
34
+ * DO NOT CALL YET — declaration only for Phase 1. Emission is wired in Phase 2.
35
+ */
36
+ export function emitWorkflowConstraintsEnumerated(bus, ctx, data) {
37
+ bus.emit('workflows', createEventEnvelope('WORKFLOW_CONSTRAINTS_ENUMERATED', { type: 'WORKFLOW_CONSTRAINTS_ENUMERATED', ...data }, ctx));
38
+ }
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * WorkflowEvent — discriminated union for WRFC workflow lifecycle events.
3
3
  */
4
+ import type { Constraint } from '../../agents/completion-report.js';
4
5
  import type { WrfcState } from '../../agents/wrfc-types.js';
5
6
  export type WorkflowEvent = {
6
7
  type: 'WORKFLOW_CHAIN_CREATED';
@@ -16,11 +17,19 @@ export type WorkflowEvent = {
16
17
  chainId: string;
17
18
  score: number;
18
19
  passed: boolean;
20
+ /** Number of constraints that were satisfied (optional; populated in Phase 2+). */
21
+ constraintsSatisfied?: number;
22
+ /** Total number of constraints evaluated (optional; populated in Phase 2+). */
23
+ constraintsTotal?: number;
24
+ /** IDs of constraints that were NOT satisfied (optional; populated in Phase 2+). */
25
+ unsatisfiedConstraintIds?: string[];
19
26
  } | {
20
27
  type: 'WORKFLOW_FIX_ATTEMPTED';
21
28
  chainId: string;
22
29
  attempt: number;
23
30
  maxAttempts: number;
31
+ /** Constraint IDs this fix iteration is targeting (optional; populated in Phase 2+). */
32
+ targetConstraintIds?: string[];
24
33
  } | {
25
34
  type: 'WORKFLOW_GATE_RESULT';
26
35
  chainId: string;
@@ -41,6 +50,10 @@ export type WorkflowEvent = {
41
50
  type: 'WORKFLOW_CASCADE_ABORTED';
42
51
  chainId: string;
43
52
  reason: string;
53
+ } | {
54
+ type: 'WORKFLOW_CONSTRAINTS_ENUMERATED';
55
+ chainId: string;
56
+ constraints: Constraint[];
44
57
  };
45
58
  export type WorkflowEventType = WorkflowEvent['type'];
46
59
  //# sourceMappingURL=workflows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/events/workflows.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,SAAS,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,yBAAyB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/events/workflows.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,SAAS,CAAA;CAAE,GACnF;IACE,IAAI,EAAE,2BAA2B,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CACrC,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,GACD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,yBAAyB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,iCAAiC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAE5F,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC"}
@@ -64,6 +64,8 @@ export interface AgentRecord {
64
64
  executionProtocol: 'direct' | 'gather-plan-apply';
65
65
  reviewMode: 'none' | 'wrfc';
66
66
  communicationLane: 'parent-only' | 'parent-and-children' | 'cohort' | 'direct';
67
+ /** Appended verbatim to the system prompt when the agent runs. Used by WRFC to inject constraint addenda. */
68
+ systemPromptAddendum?: string;
67
69
  knowledgeInjections?: Array<{
68
70
  id: string;
69
71
  cls: string;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/tools/agent/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/tools/agent/manager.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- let version = '0.22.0';
3
+ let version = '0.23.1';
4
4
  try {
5
5
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
6
6
  version = pkg.version ?? version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-sdk",
3
- "version": "0.22.0",
3
+ "version": "0.23.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/mgd34msu/goodvibes-sdk.git"