faberun 0.25.0 → 0.26.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/package.json +1 -1
- package/skills/faberun/references/contract.md +34 -28
- package/src/campaign/campaign-brief-graph.mjs +218 -0
- package/src/campaign/campaign-brief.mjs +15 -167
- package/src/campaign/metrics-command.mjs +3 -1
- package/src/cli/brand.mjs +1 -0
- package/src/cli/plan.mjs +75 -3
- package/src/cli/setup.mjs +22 -5
- package/src/cli.mjs +35 -1
- package/src/contract/definition-of-done.mjs +48 -8
- package/src/contract/human-step.mjs +54 -0
- package/src/contract/index.mjs +25 -38
- package/src/contract/judge-independence.mjs +170 -0
- package/src/contract/judges.mjs +27 -0
- package/src/contract/provider.mjs +103 -0
- package/src/contract/runtime.mjs +19 -2
- package/src/contract/snapshot.mjs +31 -1
- package/src/contract/task-packet.mjs +4 -1
- package/src/contract/worker-result.mjs +35 -4
- package/src/engine/assignment.mjs +41 -5
- package/src/engine/backoff.mjs +30 -9
- package/src/engine/dispatch.mjs +19 -2
- package/src/engine/failover.mjs +10 -2
- package/src/engine/judge-gate.mjs +24 -4
- package/src/engine/judge-list.mjs +206 -0
- package/src/engine/lifecycle.mjs +29 -24
- package/src/engine/resume.mjs +49 -12
- package/src/engine/runtime-discovery.mjs +72 -11
- package/src/engine/scheduler.mjs +27 -6
- package/src/harnesses/catalogue.mjs +9 -2
- package/src/harnesses/index.mjs +2 -2
- package/src/harnesses/model-tiers.mjs +39 -0
- package/src/harnesses/protocol.mjs +4 -1
- package/src/host/config.mjs +7 -2
- package/src/plan/contest.mjs +78 -0
- package/src/plan/freeze.mjs +118 -7
- package/src/plan/human-step.mjs +38 -0
- package/src/plan/pipeline.mjs +224 -313
- package/src/plan/preflight.mjs +5 -3
- package/src/plan/proof-check.mjs +161 -0
- package/src/plan/proof-run.mjs +6 -2
- package/src/plan/proof-scope.mjs +175 -0
- package/src/plan/resolve.mjs +182 -0
- package/src/plan/reviewer.mjs +82 -0
- package/src/plan/rounds.mjs +446 -0
- package/src/plan/routing.mjs +11 -4
- package/src/plan/template.mjs +36 -14
- package/src/repo/signal-block.mjs +10 -3
- package/src/repo/source-identity.mjs +45 -5
- package/src/repo/worktree-prune.mjs +72 -0
- package/src/report/campaign-brief-estimate.mjs +1 -1
- package/src/report/campaign-brief.mjs +4 -0
- package/src/report/metrics-report.mjs +34 -1
- package/src/report/render.mjs +31 -10
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* R16: a requirement's `constraints` bullet can declare a step only the
|
|
3
|
+
* operator can perform (the planner and every worker run inside a sandbox
|
|
4
|
+
* that is never the operator's real environment). Detected here so
|
|
5
|
+
* freeze.mjs can carry it on the frozen plan as an explicit stop, and the
|
|
6
|
+
* Campaign Brief can list it among the human decisions. Pure text matching:
|
|
7
|
+
* no file I/O, no git, no model.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** @typedef {{requirementId: string, step: string, command: string}} HumanStep */
|
|
11
|
+
|
|
12
|
+
/** The word a requirement's constraints must use to name the actor a worker cannot be. */
|
|
13
|
+
const OPERATOR_KEYWORD = /\boperator\b/iu;
|
|
14
|
+
|
|
15
|
+
/** The one command the declared step names, quoted the way the spec format already writes one (spec-format.md). */
|
|
16
|
+
const COMMAND_FENCE = /`([^`]+)`/u;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @param {import("./spec.mjs").SpecRequirement} requirement
|
|
20
|
+
* @returns {HumanStep|null}
|
|
21
|
+
*/
|
|
22
|
+
export function detectHumanStep(requirement) {
|
|
23
|
+
const text = requirement.constraints;
|
|
24
|
+
if (!text || !OPERATOR_KEYWORD.test(text)) return null;
|
|
25
|
+
const command = COMMAND_FENCE.exec(text);
|
|
26
|
+
if (!command) return null;
|
|
27
|
+
return { requirementId: requirement.id ?? requirement.title, step: text, command: command[1] };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {import("./spec.mjs").SpecRequirement[]} requirements
|
|
32
|
+
* @returns {HumanStep[]}
|
|
33
|
+
*/
|
|
34
|
+
export function collectHumanSteps(requirements) {
|
|
35
|
+
return requirements
|
|
36
|
+
.map((requirement) => detectHumanStep(requirement))
|
|
37
|
+
.filter((step) => step !== null);
|
|
38
|
+
}
|