@exaudeus/workrail 3.45.0 → 3.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +3 -1
- package/dist/cli/commands/worktrain-pipeline.d.ts +17 -0
- package/dist/cli/commands/worktrain-pipeline.js +121 -0
- package/dist/console-ui/assets/{index-BpanIvmi.js → index-BQFhoMcY.js} +1 -1
- package/dist/console-ui/index.html +1 -1
- package/dist/coordinators/adaptive-pipeline.d.ts +57 -0
- package/dist/coordinators/adaptive-pipeline.js +104 -0
- package/dist/coordinators/modes/full-pipeline.d.ts +4 -0
- package/dist/coordinators/modes/full-pipeline.js +256 -0
- package/dist/coordinators/modes/implement-shared.d.ts +4 -0
- package/dist/coordinators/modes/implement-shared.js +201 -0
- package/dist/coordinators/modes/implement.d.ts +3 -0
- package/dist/coordinators/modes/implement.js +108 -0
- package/dist/coordinators/modes/quick-review.d.ts +3 -0
- package/dist/coordinators/modes/quick-review.js +37 -0
- package/dist/coordinators/modes/review-only.d.ts +2 -0
- package/dist/coordinators/modes/review-only.js +28 -0
- package/dist/coordinators/routing/route-task.d.ts +21 -0
- package/dist/coordinators/routing/route-task.js +55 -0
- package/dist/manifest.json +89 -17
- package/dist/mcp/output-schemas.d.ts +16 -16
- package/dist/trigger/trigger-router.d.ts +3 -0
- package/dist/trigger/trigger-router.js +9 -0
- package/dist/v2/durable-core/schemas/artifacts/discovery-handoff.d.ts +29 -0
- package/dist/v2/durable-core/schemas/artifacts/discovery-handoff.js +26 -0
- package/dist/v2/durable-core/schemas/artifacts/index.d.ts +2 -1
- package/dist/v2/durable-core/schemas/artifacts/index.js +7 -1
- package/dist/v2/durable-core/schemas/compiled-workflow/index.d.ts +8 -8
- package/docs/ideas/backlog.md +86 -0
- package/package.json +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DiscoveryHandoffArtifactV1Schema = exports.DISCOVERY_HANDOFF_CONTRACT_REF = void 0;
|
|
4
|
+
exports.isDiscoveryHandoffArtifact = isDiscoveryHandoffArtifact;
|
|
5
|
+
exports.parseDiscoveryHandoffArtifact = parseDiscoveryHandoffArtifact;
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
exports.DISCOVERY_HANDOFF_CONTRACT_REF = 'wr.contracts.discovery_handoff';
|
|
8
|
+
exports.DiscoveryHandoffArtifactV1Schema = zod_1.z
|
|
9
|
+
.object({
|
|
10
|
+
kind: zod_1.z.literal('wr.discovery_handoff'),
|
|
11
|
+
version: zod_1.z.literal(1),
|
|
12
|
+
selectedDirection: zod_1.z.string().min(1),
|
|
13
|
+
designDocPath: zod_1.z.string(),
|
|
14
|
+
confidenceBand: zod_1.z.enum(['high', 'medium', 'low']),
|
|
15
|
+
keyInvariants: zod_1.z.array(zod_1.z.string().min(1)),
|
|
16
|
+
})
|
|
17
|
+
.strict();
|
|
18
|
+
function isDiscoveryHandoffArtifact(artifact) {
|
|
19
|
+
return (typeof artifact === 'object' &&
|
|
20
|
+
artifact !== null &&
|
|
21
|
+
artifact.kind === 'wr.discovery_handoff');
|
|
22
|
+
}
|
|
23
|
+
function parseDiscoveryHandoffArtifact(artifact) {
|
|
24
|
+
const result = exports.DiscoveryHandoffArtifactV1Schema.safeParse(artifact);
|
|
25
|
+
return result.success ? result.data : null;
|
|
26
|
+
}
|
|
@@ -2,6 +2,7 @@ export { ASSESSMENT_CONTRACT_REF, AssessmentArtifactV1Schema, AssessmentDimensio
|
|
|
2
2
|
export { LOOP_CONTROL_CONTRACT_REF, LoopControlDecisionSchema, LoopControlMetadataV1Schema, LoopControlArtifactV1Schema, isLoopControlArtifact, parseLoopControlArtifact, findLoopControlArtifact, type LoopControlDecision, type LoopControlMetadataV1, type LoopControlArtifactV1, } from './loop-control.js';
|
|
3
3
|
export { COORDINATOR_SIGNAL_CONTRACT_REF, CoordinatorSignalKindSchema, CoordinatorSignalArtifactV1Schema, isCoordinatorSignalArtifact, parseCoordinatorSignalArtifact, type CoordinatorSignalKind, type CoordinatorSignalArtifactV1, } from './coordinator-signal.js';
|
|
4
4
|
export { REVIEW_VERDICT_CONTRACT_REF, ReviewVerdictArtifactV1Schema, isReviewVerdictArtifact, parseReviewVerdictArtifact, type ReviewVerdictArtifactV1, } from './review-verdict.js';
|
|
5
|
-
export
|
|
5
|
+
export { DISCOVERY_HANDOFF_CONTRACT_REF, DiscoveryHandoffArtifactV1Schema, isDiscoveryHandoffArtifact, parseDiscoveryHandoffArtifact, type DiscoveryHandoffArtifactV1, } from './discovery-handoff.js';
|
|
6
|
+
export declare const ARTIFACT_CONTRACT_REFS: readonly ["wr.contracts.assessment", "wr.contracts.loop_control", "wr.contracts.coordinator_signal", "wr.contracts.review_verdict", "wr.contracts.discovery_handoff"];
|
|
6
7
|
export type ArtifactContractRef = (typeof ARTIFACT_CONTRACT_REFS)[number];
|
|
7
8
|
export declare function isValidContractRef(ref: string): ref is ArtifactContractRef;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ARTIFACT_CONTRACT_REFS = exports.parseReviewVerdictArtifact = exports.isReviewVerdictArtifact = exports.ReviewVerdictArtifactV1Schema = exports.REVIEW_VERDICT_CONTRACT_REF = exports.parseCoordinatorSignalArtifact = exports.isCoordinatorSignalArtifact = exports.CoordinatorSignalArtifactV1Schema = exports.CoordinatorSignalKindSchema = exports.COORDINATOR_SIGNAL_CONTRACT_REF = exports.findLoopControlArtifact = exports.parseLoopControlArtifact = exports.isLoopControlArtifact = exports.LoopControlArtifactV1Schema = exports.LoopControlMetadataV1Schema = exports.LoopControlDecisionSchema = exports.LOOP_CONTROL_CONTRACT_REF = exports.parseAssessmentArtifact = exports.isAssessmentArtifact = exports.AssessmentDimensionSubmissionSchema = exports.AssessmentArtifactV1Schema = exports.ASSESSMENT_CONTRACT_REF = void 0;
|
|
3
|
+
exports.ARTIFACT_CONTRACT_REFS = exports.parseDiscoveryHandoffArtifact = exports.isDiscoveryHandoffArtifact = exports.DiscoveryHandoffArtifactV1Schema = exports.DISCOVERY_HANDOFF_CONTRACT_REF = exports.parseReviewVerdictArtifact = exports.isReviewVerdictArtifact = exports.ReviewVerdictArtifactV1Schema = exports.REVIEW_VERDICT_CONTRACT_REF = exports.parseCoordinatorSignalArtifact = exports.isCoordinatorSignalArtifact = exports.CoordinatorSignalArtifactV1Schema = exports.CoordinatorSignalKindSchema = exports.COORDINATOR_SIGNAL_CONTRACT_REF = exports.findLoopControlArtifact = exports.parseLoopControlArtifact = exports.isLoopControlArtifact = exports.LoopControlArtifactV1Schema = exports.LoopControlMetadataV1Schema = exports.LoopControlDecisionSchema = exports.LOOP_CONTROL_CONTRACT_REF = exports.parseAssessmentArtifact = exports.isAssessmentArtifact = exports.AssessmentDimensionSubmissionSchema = exports.AssessmentArtifactV1Schema = exports.ASSESSMENT_CONTRACT_REF = void 0;
|
|
4
4
|
exports.isValidContractRef = isValidContractRef;
|
|
5
5
|
var assessment_js_1 = require("./assessment.js");
|
|
6
6
|
Object.defineProperty(exports, "ASSESSMENT_CONTRACT_REF", { enumerable: true, get: function () { return assessment_js_1.ASSESSMENT_CONTRACT_REF; } });
|
|
@@ -27,11 +27,17 @@ Object.defineProperty(exports, "REVIEW_VERDICT_CONTRACT_REF", { enumerable: true
|
|
|
27
27
|
Object.defineProperty(exports, "ReviewVerdictArtifactV1Schema", { enumerable: true, get: function () { return review_verdict_js_1.ReviewVerdictArtifactV1Schema; } });
|
|
28
28
|
Object.defineProperty(exports, "isReviewVerdictArtifact", { enumerable: true, get: function () { return review_verdict_js_1.isReviewVerdictArtifact; } });
|
|
29
29
|
Object.defineProperty(exports, "parseReviewVerdictArtifact", { enumerable: true, get: function () { return review_verdict_js_1.parseReviewVerdictArtifact; } });
|
|
30
|
+
var discovery_handoff_js_1 = require("./discovery-handoff.js");
|
|
31
|
+
Object.defineProperty(exports, "DISCOVERY_HANDOFF_CONTRACT_REF", { enumerable: true, get: function () { return discovery_handoff_js_1.DISCOVERY_HANDOFF_CONTRACT_REF; } });
|
|
32
|
+
Object.defineProperty(exports, "DiscoveryHandoffArtifactV1Schema", { enumerable: true, get: function () { return discovery_handoff_js_1.DiscoveryHandoffArtifactV1Schema; } });
|
|
33
|
+
Object.defineProperty(exports, "isDiscoveryHandoffArtifact", { enumerable: true, get: function () { return discovery_handoff_js_1.isDiscoveryHandoffArtifact; } });
|
|
34
|
+
Object.defineProperty(exports, "parseDiscoveryHandoffArtifact", { enumerable: true, get: function () { return discovery_handoff_js_1.parseDiscoveryHandoffArtifact; } });
|
|
30
35
|
exports.ARTIFACT_CONTRACT_REFS = [
|
|
31
36
|
'wr.contracts.assessment',
|
|
32
37
|
'wr.contracts.loop_control',
|
|
33
38
|
'wr.contracts.coordinator_signal',
|
|
34
39
|
'wr.contracts.review_verdict',
|
|
40
|
+
'wr.contracts.discovery_handoff',
|
|
35
41
|
];
|
|
36
42
|
function isValidContractRef(ref) {
|
|
37
43
|
return exports.ARTIFACT_CONTRACT_REFS.includes(ref);
|
|
@@ -22,8 +22,8 @@ export declare const CompiledWorkflowSnapshotV1Schema: z.ZodDiscriminatedUnion<"
|
|
|
22
22
|
}, "strip", z.ZodTypeAny, {
|
|
23
23
|
workflowId: string;
|
|
24
24
|
name: string;
|
|
25
|
-
description: string;
|
|
26
25
|
version: string;
|
|
26
|
+
description: string;
|
|
27
27
|
schemaVersion: 1;
|
|
28
28
|
sourceKind: "v1_preview";
|
|
29
29
|
preview: {
|
|
@@ -34,8 +34,8 @@ export declare const CompiledWorkflowSnapshotV1Schema: z.ZodDiscriminatedUnion<"
|
|
|
34
34
|
}, {
|
|
35
35
|
workflowId: string;
|
|
36
36
|
name: string;
|
|
37
|
-
description: string;
|
|
38
37
|
version: string;
|
|
38
|
+
description: string;
|
|
39
39
|
schemaVersion: 1;
|
|
40
40
|
sourceKind: "v1_preview";
|
|
41
41
|
preview: {
|
|
@@ -132,8 +132,8 @@ export declare const CompiledWorkflowSnapshotV1Schema: z.ZodDiscriminatedUnion<"
|
|
|
132
132
|
}, "strip", z.ZodTypeAny, {
|
|
133
133
|
workflowId: string;
|
|
134
134
|
name: string;
|
|
135
|
-
description: string;
|
|
136
135
|
version: string;
|
|
136
|
+
description: string;
|
|
137
137
|
schemaVersion: 1;
|
|
138
138
|
sourceKind: "v1_pinned";
|
|
139
139
|
definition?: unknown;
|
|
@@ -168,8 +168,8 @@ export declare const CompiledWorkflowSnapshotV1Schema: z.ZodDiscriminatedUnion<"
|
|
|
168
168
|
}, {
|
|
169
169
|
workflowId: string;
|
|
170
170
|
name: string;
|
|
171
|
-
description: string;
|
|
172
171
|
version: string;
|
|
172
|
+
description: string;
|
|
173
173
|
schemaVersion: 1;
|
|
174
174
|
sourceKind: "v1_pinned";
|
|
175
175
|
definition?: unknown;
|
|
@@ -226,8 +226,8 @@ export declare const CompiledWorkflowSnapshotSchema: z.ZodDiscriminatedUnion<"so
|
|
|
226
226
|
}, "strip", z.ZodTypeAny, {
|
|
227
227
|
workflowId: string;
|
|
228
228
|
name: string;
|
|
229
|
-
description: string;
|
|
230
229
|
version: string;
|
|
230
|
+
description: string;
|
|
231
231
|
schemaVersion: 1;
|
|
232
232
|
sourceKind: "v1_preview";
|
|
233
233
|
preview: {
|
|
@@ -238,8 +238,8 @@ export declare const CompiledWorkflowSnapshotSchema: z.ZodDiscriminatedUnion<"so
|
|
|
238
238
|
}, {
|
|
239
239
|
workflowId: string;
|
|
240
240
|
name: string;
|
|
241
|
-
description: string;
|
|
242
241
|
version: string;
|
|
242
|
+
description: string;
|
|
243
243
|
schemaVersion: 1;
|
|
244
244
|
sourceKind: "v1_preview";
|
|
245
245
|
preview: {
|
|
@@ -336,8 +336,8 @@ export declare const CompiledWorkflowSnapshotSchema: z.ZodDiscriminatedUnion<"so
|
|
|
336
336
|
}, "strip", z.ZodTypeAny, {
|
|
337
337
|
workflowId: string;
|
|
338
338
|
name: string;
|
|
339
|
-
description: string;
|
|
340
339
|
version: string;
|
|
340
|
+
description: string;
|
|
341
341
|
schemaVersion: 1;
|
|
342
342
|
sourceKind: "v1_pinned";
|
|
343
343
|
definition?: unknown;
|
|
@@ -372,8 +372,8 @@ export declare const CompiledWorkflowSnapshotSchema: z.ZodDiscriminatedUnion<"so
|
|
|
372
372
|
}, {
|
|
373
373
|
workflowId: string;
|
|
374
374
|
name: string;
|
|
375
|
-
description: string;
|
|
376
375
|
version: string;
|
|
376
|
+
description: string;
|
|
377
377
|
schemaVersion: 1;
|
|
378
378
|
sourceKind: "v1_pinned";
|
|
379
379
|
definition?: unknown;
|
package/docs/ideas/backlog.md
CHANGED
|
@@ -6395,3 +6395,89 @@ When a post-implementation MR review finds a UI/UX finding (wrong affordance, mi
|
|
|
6395
6395
|
### Priority
|
|
6396
6396
|
|
|
6397
6397
|
Design this as part of the adaptive coordinator (#3). The `touchesUI` flag belongs on the classification output alongside `taskComplexity` and `maturity`. The UI detection logic and the design workflow insertion are both coordinator-level concerns, not engine-level.
|
|
6398
|
+
|
|
6399
|
+
---
|
|
6400
|
+
|
|
6401
|
+
## Current state update (Apr 20, 2026)
|
|
6402
|
+
|
|
6403
|
+
**npm version: v3.45.0**
|
|
6404
|
+
|
|
6405
|
+
### What shipped in this session (Apr 19-20, 2026)
|
|
6406
|
+
|
|
6407
|
+
All five top-priority autonomous pipeline items shipped:
|
|
6408
|
+
|
|
6409
|
+
- ✅ **#1 -- Worktree isolation + auto-commit** (PR #630) -- Each WorkTrain coding session now runs in an isolated git worktree (`~/.workrail/worktrees/<sessionId>`). `trigger.workspacePath` is never mutated; all tool factories receive `sessionWorkspacePath`. Crash recovery sidecar persists `worktreePath` for orphan cleanup. `delivery-action.ts` asserts HEAD branch before push. `test-task` trigger: `branchStrategy: worktree`, `autoCommit: true`, `autoOpenPR: true`.
|
|
6410
|
+
|
|
6411
|
+
- ✅ **#2 -- Stuck detection escalation** (PR #636) -- New `WorkflowRunResult._tag: 'stuck'` discriminant. When `repeated_tool_call` heuristic fires and `stuckAbortPolicy !== 'notify_only'` (default: `'abort'`), daemon aborts the session immediately instead of burning the 30-min wall clock. Writes structured entry to `~/.workrail/outbox.jsonl`. `stuckAbortPolicy` and `noProgressAbortEnabled` configurable per trigger in `agentConfig`. `ChildWorkflowRunResult` updated atomically.
|
|
6412
|
+
|
|
6413
|
+
- ✅ **#3 -- Adaptive pipeline coordinator** (PR #639) -- `worktrain run pipeline --issue N --workspace path` routes tasks to the right pipeline via pure static routing:
|
|
6414
|
+
- dep-bump + PR number → QUICK_REVIEW (delegates to `runPrReviewCoordinator`)
|
|
6415
|
+
- PR/MR number → REVIEW_ONLY
|
|
6416
|
+
- `current-pitch.md` exists → IMPLEMENT (coding + PR + review + merge)
|
|
6417
|
+
- Default → FULL (discovery → shaping → coding → PR → review → merge)
|
|
6418
|
+
- Fix loop cap: 2 iterations max. Escalating audit chain for Critical findings. UX gate for UI-touching tasks. 6 hardcoded timeout constants. Pitch archived after IMPLEMENT/FULL completes.
|
|
6419
|
+
|
|
6420
|
+
- ✅ **#4 -- GitHub issue queue poll trigger** (PR #637) -- New `github_queue_poll` trigger provider. Polls GitHub issues matching `GitHubQueueConfig` (assignee-based MVP, `label`/`mention`/`query` typed but `not_implemented`). Maturity inference from 3 deterministic heuristics. Idempotency check (conservative: parse errors = active). JSONL decision log at `~/.workrail/queue-poll.jsonl`. `maxTotalConcurrentSessions` cap. Bot identity config (`botName`, `botEmail`).
|
|
6421
|
+
|
|
6422
|
+
- ✅ **#5 -- Context assembly layer** (PR #624, shipped earlier) -- `ContextAssembler` injects git diff summary + prior session notes before turn 1. Feeds into coordinator pre-dispatch.
|
|
6423
|
+
|
|
6424
|
+
- ✅ **Performance sweep** (all 10 issues #248-257 -- already confirmed complete)
|
|
6425
|
+
- ✅ **Console session tree** (PR #607 -- parentSessionId rendered in UI)
|
|
6426
|
+
- ✅ **Daemon file-nav tools** (PR #619) -- Glob, Grep, Edit + upgraded Read/Write with staleness guard
|
|
6427
|
+
- ✅ **`spawn_agent` artifacts** (PR #613) -- `lastStepArtifacts` surfaced through spawn_agent return
|
|
6428
|
+
- ✅ **`wr.shaping` workflow** (PR #610) -- faithful Shape Up shaping, 9 steps
|
|
6429
|
+
- ✅ **Coding workflow Phase 0.5** (PR #610) -- upstream context detection, three-workflow pipeline
|
|
6430
|
+
|
|
6431
|
+
### WorkTrain current capabilities (v3.45.0)
|
|
6432
|
+
|
|
6433
|
+
**Autonomous workflow execution -- confirmed working:**
|
|
6434
|
+
- `worktrain run pipeline --issue N` routes to the right pipeline and runs it end-to-end
|
|
6435
|
+
- `worktrain run pr-review` autonomous PR review with structured verdicts and auto-merge
|
|
6436
|
+
- Coding sessions run in isolated worktrees, auto-commit, auto-open PR
|
|
6437
|
+
- Sessions abort when stuck (instead of burning 30-min wall clock)
|
|
6438
|
+
- GitHub issue queue polling: assign issue to `worktrain-etienneb` → daemon picks it up automatically
|
|
6439
|
+
- All sessions start with git diff + prior session notes injected (ContextAssembler)
|
|
6440
|
+
- Daemon file-nav tools: Glob, Grep, Edit, Read (paginated), Write (staleness guard)
|
|
6441
|
+
- Escalating audit chain: Critical findings → prod audit → re-review → escalate if still Critical
|
|
6442
|
+
- Fix loop: minor findings → max 2 fix iterations before escalation
|
|
6443
|
+
|
|
6444
|
+
**WorkTrain agent tool set (v3.45.0):**
|
|
6445
|
+
`complete_step`, `continue_workflow` (deprecated), `Bash`, `Read`, `Write`, `Glob`, `Grep`, `Edit`, `report_issue`, `spawn_agent`, `signal_coordinator`
|
|
6446
|
+
|
|
6447
|
+
**Trigger system:**
|
|
6448
|
+
- Generic webhook, GitLab MR polling, GitHub Issues polling, GitHub PR polling
|
|
6449
|
+
- **NEW: `github_queue_poll`** -- assignee-based issue queue with maturity inference
|
|
6450
|
+
- `branchStrategy: worktree` -- isolated worktree per session
|
|
6451
|
+
- `autoCommit: true` / `autoOpenPR: true` -- full delivery pipeline
|
|
6452
|
+
- `stuckAbortPolicy: 'abort' | 'notify_only'`
|
|
6453
|
+
- `goalTemplate`, `referenceUrls`, `contextMapping`, `agentConfig`
|
|
6454
|
+
|
|
6455
|
+
### Accurate limitations (v3.45.0)
|
|
6456
|
+
|
|
6457
|
+
1. **`dispatchAdaptivePipeline()` not yet connected** -- `TriggerRouter.dispatchAdaptivePipeline()` exists but `polling-scheduler.ts` still calls `router.dispatch()`. Queue poll sessions run as generic sessions, not routed through the adaptive coordinator. Cross-PR gap documented with TODO.
|
|
6458
|
+
|
|
6459
|
+
2. **`findingCategory` not on review-verdict** -- Audit chain always dispatches `production-readiness-audit` for Critical findings regardless of finding type. `findingCategory` field on `findings[]` items needs to be added to `wr.review_verdict` schema as a follow-up so architecture findings can route to `architecture-scalability-audit` correctly.
|
|
6460
|
+
|
|
6461
|
+
3. **Bot account setup required before first queue run** -- `worktrain-etienneb` GitHub account must be created, PAT generated with `repo:read` scope, stored as `WORKTRAIN_BOT_TOKEN`, and added as repo collaborator. Commit identity: `worktrain-etienneb@users.noreply.github.com`. Without this, `github_queue_poll` trigger has no bot identity.
|
|
6462
|
+
|
|
6463
|
+
4. **No auto-merge setting in `worktrain init`** -- Auto-merge policy is hardcoded in the coordinator. Should be a `~/.workrail/config.json` setting exposed during `worktrain init`.
|
|
6464
|
+
|
|
6465
|
+
5. **Grooming loop not built** -- Three open design decisions must be settled before building (human-ack boundary, compute budget, priority signal source). Deferred until Level 1 usage data exists.
|
|
6466
|
+
|
|
6467
|
+
6. **Knowledge graph not wired** -- `src/knowledge-graph/` module exists (DuckDB + ts-morph), `ts-morph` in devDependencies. No daemon tool yet. Architecture decision: belongs in context assembly layer, not as a daemon tool.
|
|
6468
|
+
|
|
6469
|
+
7. **`worktrain inbox --watch` stub** -- Prints "not yet implemented." The outbox mechanism exists; just needs a polling loop.
|
|
6470
|
+
|
|
6471
|
+
8. **Artifact store not built** -- Agents dump markdown in the repo. `~/.workrail/artifacts/` not created.
|
|
6472
|
+
|
|
6473
|
+
### Next priorities (groomed Apr 20)
|
|
6474
|
+
|
|
6475
|
+
1. **Connect `dispatchAdaptivePipeline()`** -- Wire `polling-scheduler.ts` to call `TriggerRouter.dispatchAdaptivePipeline()` when `context.taskCandidate` is present. Small change, unlocks the full autonomous queue → pipeline connection.
|
|
6476
|
+
|
|
6477
|
+
2. **`findingCategory` on review-verdict schema** -- Add `findingCategory: 'correctness' | 'security' | 'architecture' | 'ux' | 'performance' | 'testing'` to `findings[]` in `ReviewVerdictArtifactV1Schema`. Update `mr-review-workflow-agentic` final step to emit it. Unlocks correct audit routing.
|
|
6478
|
+
|
|
6479
|
+
3. **Bot account setup + `worktrain init` overhaul** -- Create `worktrain-etienneb`, add `worktrain daemon --check` command (API key + git fetch dry run), expose auto-merge policy in `worktrain init`.
|
|
6480
|
+
|
|
6481
|
+
4. **Level 1 usage: run WorkTrain on its own backlog** -- Create `worktrain:ready` issues for the top 10 ready tasks, assign to `worktrain-etienneb`, observe one full queue → pipeline run. Collect data on misclassifications and weak PRs before designing the grooming loop.
|
|
6482
|
+
|
|
6483
|
+
5. **`worktrain inbox --watch`** -- Close the notification loop. Outbox exists, just needs the polling implementation.
|