Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bin/lib/usage-notice.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@
"https://docs.openclaw.ai/gateway/security"
],
"links": [],
"interactivePrompt": "Type 'yes' to accept the NemoClaw license and and third-party software notice and continue [no]: "
"interactivePrompt": "Type 'yes' to accept the NemoClaw license and third-party software notice and continue [no]: "
}
24 changes: 24 additions & 0 deletions src/lib/onboard/usage-notice.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
//
// The interactive acceptance prompt is served from bin/lib/usage-notice.json to
// both the installer and `nemoclaw onboard`. Guard the shipped copy against the
// doubled-conjunction defect reported in #7301.

import { describe, expect, it } from "vitest";

import { loadUsageNoticeConfig } from "./usage-notice";

describe("usage notice acceptance prompt (#7301)", () => {
it("reads the shipped interactive prompt without a doubled word", () => {
const { interactivePrompt } = loadUsageNoticeConfig();

// The exact grammatical form the prompt must present to the user.
expect(interactivePrompt).toBe(
"Type 'yes' to accept the NemoClaw license and third-party software notice and continue [no]: ",
);
// Guard against any adjacent duplicated word ("and and", "the the", ...),
// not just the specific occurrence that regressed.
expect(interactivePrompt).not.toMatch(/\b(\w+)\s+\1\b/i);
});
});
Loading