fix(scripts): dedupe docker lane resources

This commit is contained in:
Vincent Koc
2026-05-25 11:41:16 +02:00
parent 9a60fcfd3c
commit 5e944691b7
3 changed files with 19 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ Docs: https://docs.openclaw.ai
- Slack: keep downloaded read-only files out of reply media so Slack file reads do not echo files back to the conversation. (#86318) Thanks @neeravmakwana.
- Cron: accept leading-plus relative durations such as `+5m` for one-shot `--at` schedules. (#86341) Thanks @mushuiyu886.
- Agents/media: preserve async-started media tool metadata so background generation starts no longer surface generic incomplete-turn warnings while replay stays unsafe. (#85933) Thanks @fuller-stack-dev.
- Docker E2E: dedupe scheduler lane resources so npm/service package lanes are not over-counted and serialized unnecessarily.
- xAI/LM Studio: avoid buffering ordinary bracketed or `final` prose until stream completion while watching for plain-text tool-call fallbacks.
- Discord: suppress a bot's previous reply body and referenced media from prompt context when a user replies to that bot message, while keeping reply metadata for routing. (#86238) Thanks @fuller-stack-dev.
- Docker E2E: avoid rebuilding the Control UI twice while preparing the shared OpenClaw package tarball for package-backed scenario runs.

View File

@@ -290,7 +290,7 @@ export function laneWeight(poolLane) {
}
export function laneResources(poolLane) {
return ["docker", ...(poolLane.resources ?? [])];
return [...new Set(["docker", ...(poolLane.resources ?? [])])];
}
export function laneSummary(poolLane) {

View File

@@ -771,6 +771,23 @@ describe("scripts/lib/docker-e2e-plan", () => {
expect(plan.needs.package).toBe(true);
});
it("dedupes scheduler resources from lane wrappers and explicit lane metadata", () => {
const plan = planFor({
selectedLaneNames: ["release-user-journey", "release-plugin-marketplace"],
});
expect(plan.lanes.map((lane) => ({ name: lane.name, resources: lane.resources }))).toEqual([
{
name: "release-user-journey",
resources: ["docker", "npm", "service"],
},
{
name: "release-plugin-marketplace",
resources: ["docker", "npm"],
},
]);
});
it("plans the Droid ACP bind live lane as Factory-auth proof", () => {
const plan = planFor({ selectedLaneNames: ["live-acp-bind-droid"] });