fix(workflow): allow RSI Discovery loopback to park no-follow-on

This commit is contained in:
mvschwarz committed 2026-05-05 00:21:04 -07:00
1 parent 1aa8bcd0ad
commit 24db2b09e5
2 files changed
+28 -1

No files matched your search

@@ -106,7 +106,7 @@ workflow:
Surface and classify a candidate from raw signal; route the shaped
candidate forward to Product Lab, OR close as no-op with rationale
recorded in the closure_evidence.
allowed_exits: [handoff, waiting, failed]
allowed_exits: [handoff, done, waiting, failed]
next_hop:
mode: prefer
suggested_roles: [product-lab-planner]
@@ -0,0 +1,27 @@
import { readFileSync } from "node:fs";
import { join } from "node:path";
import { describe, expect, it } from "vitest";
import { parseWorkflowSpec } from "../src/domain/workflow-spec-cache.js";
const SPEC_PATH = join(
process.cwd(),
"src/builtins/workflow-specs/rsi-v2-hot-potato.yaml",
);
describe("built-in rsi-v2-hot-potato workflow spec", () => {
it("lets Discovery park no-follow-on loopback signal with done", () => {
const spec = parseWorkflowSpec(readFileSync(SPEC_PATH, "utf8"), SPEC_PATH);
const discovery = spec.steps.find((step) => step.id === "discovery");
expect(discovery?.objective).toContain("close as no-op");
expect(discovery?.allowed_exits).toContain("done");
});
it("declares QA handoff back to Discovery through next_hop", () => {
const spec = parseWorkflowSpec(readFileSync(SPEC_PATH, "utf8"), SPEC_PATH);
const qa = spec.steps.find((step) => step.id === "qa");
expect(qa?.allowed_exits).toContain("handoff");
expect(qa?.next_hop?.suggested_roles).toContain("discovery-router");
});
});