Compare commits

...

3 Commits

Author SHA1 Message Date
Infuseting b1cf9fa6ca fix: remove time wait 2026-10-14 11:29:27 +02:00
Infuseting 5d9b9dd914 fix(chat): wait for chat window before displaying welcome message 2026-10-14 11:27:35 +02:00
Infuseting ede87a3951 docs: require agents to commit completed changes 2026-10-14 11:22:02 +02:00
3 changed files with 37 additions and 1 deletions

View File

@ -21,3 +21,16 @@ After implementing or modifying any feature, the agent must verify that it works
- Fix issues introduced by the change, then repeat the runtime test and Output inspection until the feature behaves as expected without related errors.
- Compilation, static checks, and automated tests complement this verification; they do not replace the MCP runtime check.
- In the completion report, briefly state what was tested and the result of the Output inspection. If the MCP is unavailable or verification cannot be completed, explicitly report the blocker and the unverified behavior instead of claiming the feature is verified.
# Commit changes before completing a discussion
All AI assistants working in this repository must create a Git commit for their changes before ending a discussion or declaring an added or modified feature complete.
- Complete the applicable verification before committing, including Roblox Studio MCP runtime verification for feature changes.
- Stage and commit only changes belonging to the current task. Do not include unrelated user changes or changes from other agents.
- Use a clear commit message describing the completed changes.
- If the discussion produced no repository changes, do not create an empty commit.
- If a commit cannot be created, explicitly report the blocker and the changes left uncommitted.
- Include the commit hash in the completion report. Creating a commit does not authorize pushing it to a remote repository.
This policy applies to every AI assistant contributing to the project.

View File

@ -6,10 +6,14 @@ import { WELCOME_CHAT, WELCOME_CHAT_MESSAGE } from "shared/welcome-chat";
@Controller()
export class WelcomeChatController implements OnStart {
public onStart(): void {
task.delay(WELCOME_CHAT.delaySeconds, () => this.displayWelcome());
task.spawn(() => this.displayWelcome());
}
private displayWelcome(): void {
if (!game.IsLoaded()) {
game.Loaded.Wait();
}
const deadline = os.clock() + WELCOME_CHAT.channelTimeoutSeconds;
const channels = TextChatService.WaitForChild(
"TextChannels",
@ -22,6 +26,24 @@ export class WelcomeChatController implements OnStart {
return;
}
// Channels can exist before the chat UI subscribes to system messages.
const window = TextChatService.WaitForChild(
"ChatWindowConfiguration",
math.max(deadline - os.clock(), 0),
);
if (!window?.IsA("ChatWindowConfiguration")) {
Log.Warn("Welcome chat unavailable: the chat window configuration is missing");
return;
}
while (window.AbsoluteSize.X <= 0 || window.AbsoluteSize.Y <= 0) {
if (os.clock() >= deadline) {
Log.Warn(
"Welcome chat unavailable: the chat window did not become ready before the timeout",
);
return;
}
task.wait(0.1);
}
channel.DisplaySystemMessage(WELCOME_CHAT_MESSAGE);
}
}

View File

@ -1,3 +1,4 @@
import Log, { LogLevel } from "@rbxts/log";
import { RunService } from "@rbxts/services";