Skip to content

Commit 4c5b448

Browse files
committed
feat(mvp8): 7.22.0 — корпус Tier-B и порог 60 %; MVP8 закрыт
Срез 8.7. Десять зафиксированных фикстур Tier-B — не пробы отдельных API, а целые игровые идиомы: kill-brick, подбор монеты со счётом в leaderstats, дверь на твине, наземный луч, урон по времени, тег-спавнер с Debris, сохранение при выходе игрока, отмена твина, конфиг через атрибуты, низкая гравитация. Каждая пересекает три-четыре сервиса сразу: набор API может пройти все двадцать строк Tier-A и всё равно не суметь запустить kill-brick — ровно этот разрыв второй ярус и ловит. Гейт: не меньше 60 % Tier-A + Tier-B работают без единой правки исходника. Фикстура, «прошедшая» через pcall вокруг NOT_IMPLEMENTED, не засчитывается — харнесс считает попадание в заглушку провалом. Отрицательные близнецы: испорченные копии трёх названных фикстур обязаны падать, и каждая по своей причине, а не по любой. Харнессу корпуса добавлены подключённый серверный игрок и управляемый порт физики. Сервер Roblox всегда имеет игроков, а идиомы корпуса — серверный код: пустой Players мерил бы харнесс, а не API (Players.LocalPlayer при этом остаётся nil, как и должно быть на сервере, — TAC-020 падает по своей прежней правильной причине). Столкновение для kill-brick вводится вручную: в headless-корпусе движка нет, и иначе самая частая идиома Roblox осталась бы непроверенной — при этом исходник фикстуры остаётся ровно тем, что пишет разработчик, вводится только физическое событие, которое дал бы настоящий движок. EditMode: 3578 тестов, 3569 passed, 0 failed, 9 skipped.
1 parent d966f1f commit 4c5b448

37 files changed

Lines changed: 731 additions & 24 deletions

‎Assets/CoreAI/CHANGELOG.md‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@
22

33
## [Unreleased]
44

5+
## [7.22.0] - 2026-09-05
6+
7+
### Added
8+
9+
- **Корпус совместимости Tier-B и порог MVP8 (срез 8.7).** Десять зафиксированных фикстур — не
10+
пробы отдельных API, а целые игровые идиомы: kill-brick, подбор монеты со счётом в `leaderstats`,
11+
дверь на твине, наземный луч, урон по времени, тег-спавнер с `Debris`, сохранение при выходе
12+
игрока, отмена твина, конфиг через атрибуты, низкая гравитация. Каждая пересекает по три-четыре
13+
сервиса: API-набор может пройти все двадцать строк Tier-A и всё равно не суметь запустить
14+
kill-brick — ровно этот разрыв Tier-B и ловит.
15+
Гейт: **не меньше 60 % Tier-A + Tier-B работают без единой правки исходника**, и фикстура,
16+
«прошедшая» через `pcall` вокруг `NOT_IMPLEMENTED`, не засчитывается — харнесс считает попадание
17+
в заглушку провалом. Отрицательные близнецы: испорченные копии трёх названных фикстур обязаны
18+
падать, причём каждая по своей причине.
19+
- Харнесс корпуса получил подключённого серверного игрока и управляемый порт физики. Сервер Roblox
20+
всегда имеет игроков, а идиомы, которые меряет корпус, — серверный код; пустой `Players` мерил бы
21+
харнесс, а не API. Столкновение для kill-brick вводится вручную: в headless-корпусе нет движка, и
22+
без этого самая частая идиома Roblox осталась бы непроверенной — при этом исходник фикстуры
23+
остаётся ровно тем, что пишет разработчик.
24+
525
## [7.21.0] - 2026-09-05
626

727
### Added

‎Assets/CoreAI/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreai",
3-
"version": "7.21.0",
3+
"version": "7.22.0",
44
"displayName": "CoreAI",
55
"unity": "6000.0",
66
"description": "Portable C# core with no UnityEngine dependency. Orchestration, chat/tool contracts, scripted/stub clients, and required MEAI references are always present; COREAI_LLM adds provider-backed HTTP/MEAI implementations and COREAI_LUA adds Lua. Unity integration ships in com.neoxider.coreaiunity.",
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreaibenchmark",
3-
"version": "7.21.0",
3+
"version": "7.22.0",
44
"displayName": "CoreAI Benchmark",
55
"unity": "6000.0",
66
"description": "LLM game-creation benchmark harness and scenarios for CoreAI: drives execute_lua and world_command through real PlayMode scenarios (G1-G8), grades tool correctness, reasoning, instruction adherence, and determinism, and reports suite/role fitness scores. Depends on com.neoxider.coreai / com.neoxider.coreaiunity / com.neoxider.coreaimods.",
@@ -11,8 +11,8 @@
1111
"license": "PolyForm-Noncommercial-1.0.0",
1212
"licensesUrl": "https://github.com/NeoXider/CoreAI/blob/main/LICENSE",
1313
"dependencies": {
14-
"com.neoxider.coreai": "7.21.0",
15-
"com.neoxider.coreaiunity": "7.21.0",
16-
"com.neoxider.coreaimods": "7.21.0"
14+
"com.neoxider.coreai": "7.22.0",
15+
"com.neoxider.coreaiunity": "7.22.0",
16+
"com.neoxider.coreaimods": "7.22.0"
1717
}
1818
}

‎Assets/CoreAIHub/package.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreaihub",
3-
"version": "7.21.0",
3+
"version": "7.22.0",
44
"displayName": "CoreAI Hub (UI Toolkit)",
55
"unity": "6000.0",
66
"description": "Optional UI Toolkit window for CoreAI: a tabbed Hub that renders pages registered into CoreAI's HubPageRegistry (Chat, Settings, Statistics, Mods, and C#/Lua-authored pages). Lazy per-tab content, live tab rebuild on register/unregister, semi-transparent runtime panel, and a future path to Unity 6.5 world-space PanelRenderer. Install this package only when you want the built-in Hub window; without it CoreAI still exposes the registry so you can render pages on your own uGUI/UITK canvas via the API. Depends on com.neoxider.coreai.",
@@ -11,7 +11,7 @@
1111
"license": "PolyForm-Noncommercial-1.0.0",
1212
"licensesUrl": "https://github.com/NeoXider/CoreAI/blob/main/LICENSE",
1313
"dependencies": {
14-
"com.neoxider.coreai": "7.21.0",
15-
"com.neoxider.coreaiunity": "7.21.0"
14+
"com.neoxider.coreai": "7.22.0",
15+
"com.neoxider.coreaiunity": "7.22.0"
1616
}
1717
}

‎Assets/CoreAIMcp/Runtime/Protocol/McpMethods.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static class McpServerInfo
2929
/// Advertised server version. MUST equal the <c>version</c> field of the package manifest;
3030
/// <c>McpPackageVersionEditModeTests</c> fails the build when the two drift apart.
3131
/// </summary>
32-
public const string Version = "7.21.0";
32+
public const string Version = "7.22.0";
3333

3434
/// <summary>
3535
/// Protocol version echoed when the client omits one. The server echoes the client's requested

‎Assets/CoreAIMcp/package.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreaimcp",
3-
"version": "7.21.0",
3+
"version": "7.22.0",
44
"displayName": "CoreAI MCP Server",
55
"unity": "6000.0",
66
"description": "Optional Model Context Protocol (MCP) server that runs INSIDE a live CoreAI game session (play mode or a build) so an external agent - Claude Code and any other MCP client - can drive the running game over a standard protocol. Exposes the in-game Command Bar surface (execute_lua, manage_mods, get_mod_logs, screenshot, and world_command when present) as MCP tools over localhost streamable HTTP. Off by default: drop a CoreAiMcpServer component into a scene (or call CoreAiMcpServer.StartServer). Loopback-only and opt-in, with Origin/Host validation and bearer-token auth (the token is printed to the console at start) - never expose beyond loopback. Depends on com.neoxider.coreaimods; the world tool registers only when that service exists in the current composition.",
@@ -11,7 +11,7 @@
1111
"license": "PolyForm-Noncommercial-1.0.0",
1212
"licensesUrl": "https://github.com/NeoXider/CoreAI/blob/main/LICENSE",
1313
"dependencies": {
14-
"com.neoxider.coreaimods": "7.21.0",
15-
"com.neoxider.coreaiunity": "7.21.0"
14+
"com.neoxider.coreaimods": "7.22.0",
15+
"com.neoxider.coreaiunity": "7.22.0"
1616
}
1717
}

‎Assets/CoreAIMirror/package.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreaimirror",
3-
"version": "7.21.0",
3+
"version": "7.22.0",
44
"displayName": "CoreAI Mirror transport",
55
"unity": "6000.0",
66
"description": "Optional Mirror transport for CoreAI's online worlds: authenticated admission, real RemoteEvent/RemoteFunction traffic over the wire, and the server clock offset. Install it only when you run a host; without it CoreAI stays solo on the loopback bridge and nothing in this package compiles. Requires Mirror (Asset Store or UPM), which defines MIRROR — the assemblies here carry that as a define constraint, so a project without Mirror never builds them.",
@@ -11,7 +11,7 @@
1111
"license": "PolyForm-Noncommercial-1.0.0",
1212
"licensesUrl": "https://github.com/NeoXider/CoreAI/blob/main/LICENSE",
1313
"dependencies": {
14-
"com.neoxider.coreai": "7.21.0",
15-
"com.neoxider.coreaimods": "7.21.0"
14+
"com.neoxider.coreai": "7.22.0",
15+
"com.neoxider.coreaimods": "7.22.0"
1616
}
1717
}

‎Assets/CoreAIMods/Tests/EditMode/RbxApi/CompatibilityCorpus/FixturesB.meta‎

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
local CollectionService = game:GetService("CollectionService")
2+
3+
local brick = Instance.new("Part")
4+
brick.Name = "KillBrick"
5+
brick.Parent = workspace
6+
CollectionService:AddTag(brick, "Kill")
7+
8+
local victim = Instance.new("Part")
9+
victim.Name = "Victim"
10+
victim.Parent = workspace
11+
12+
local humanoid = Instance.new("Humanoid")
13+
humanoid.Parent = workspace
14+
15+
for _, part in ipairs(CollectionService:GetTagged("Kill")) do
16+
part.Touched:Connect(function(other)
17+
if other.Name == "Victim" then
18+
humanoid.Health = 0
19+
end
20+
end)
21+
end
22+
23+
humanoid.Died:Connect(function()
24+
workspace:SetAttribute("TierACorpusResult", "TBC-001-kill-brick")
25+
end)

‎Assets/CoreAIMods/Tests/EditMode/RbxApi/CompatibilityCorpus/FixturesB/TBC-001-kill-brick.lua.meta‎

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)