重做 master 合并,找回上次合并丢失的分支工作
Project CI / Repository checks (pull_request) Successful in 2m58s
Project CI / Frontend tests (pull_request) Successful in 3m4s
Project CI / Backend tests (pull_request) Successful in 4m6s
Project CI / Native shell tests (pull_request) Failing after 11m28s

上次合并 3d8abac33 把 24 个双边改动文件里的 7 个整份取了 master,另有数个
实质取了 master 版本,静默回滚了分支工作;其中 main_loop.rs 保留 master 的
调用点、provider_recovery.rs 保留分支的 cfg(test) 门,导致非测试构建编译失败。

本次从 ca6a3cd4c 对最新 master(341761ee3) 重做,逐个人工解析 38 处冲突:

- 澄清等待态:保留分支的 lane 外 parent-wake 设计与锁守卫,套上 master 新增的
  parent task 身份校验与 game-chat 安全默认返工;`_locked` 两种 false 语义在
  delivery.rs 按 trusted_game_chat_autonomous_parent_chain_at 区分。
- decision-log:按日期把 master 三条插进分支条目之间,57 处 M1 记录全部保留。
- manifest.rs:采用 master 的 windows_sys 绑定,保留分支的目录/reparse point 拒绝。
- 做方案入口按 master 的提交重构改造:resolveProjectSupervisorRuntimeSubmission
  新增 planningEntry,startMode 经 launcher context 传到 App;并把策划入口从
  direct-codex 产品默认中摘出,做游戏与做素材保持 master 新默认。
- 首页两条入口用例按 master 已改的创建流程更新;非空目录确认用例因该流程
  在首页入口不再可达而移除。

验证:cargo check --all-targets 通过;agc typecheck 通过;appSurface 395 passed。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 13:15:16 +00:00
179 changed files with 25236 additions and 3944 deletions
+13 -15
View File
@@ -2441,10 +2441,16 @@ function assertAiGameCreatorShellUserDevBoundary() {
if (
!httpPermission ||
JSON.stringify(httpPermission.allow ?? []) !==
JSON.stringify([{ url: 'https://dev.genarrative.world/api/*' }])
JSON.stringify([
{ url: 'https://dev.genarrative.world/api/*' },
{ url: 'https://www.genarrative.world/api/*' },
{ url: 'https://*/api/*' },
{ url: 'http://localhost:*/*' },
{ url: 'http://127.0.0.1:*/*' },
])
) {
throw new Error(
'AI game creator native HTTP scope must stay limited to the dev API',
'AI game creator native HTTP scope must match the release, dev, custom HTTPS, and loopback API boundary',
);
}
@@ -2582,22 +2588,14 @@ function assertAiGameCreatorShellUserDevBoundary() {
'AI game creator preview must not invoke the external browser',
);
}
const developerWindowCallCount = [
...aiGameCreatorShellTauriSource.matchAll(
/open_developer_window\(app\.handle\(\)\)\?;/g,
),
].length;
if (
!aiGameCreatorShellTauriSource.includes(
'#[cfg(all(debug_assertions, not(test)))]\npub(crate) fn open_developer_window(',
) ||
!/#\[cfg\(all\(debug_assertions, not\(test\)\)\)\]\s+if game_chat_launch\.is_none\(\) \{\s+open_developer_window\(app\.handle\(\)\)\?;\s+\}/u.test(
aiGameCreatorShellTauriSource,
) ||
developerWindowCallCount !== 1
aiGameCreatorShellTauriSource.includes('fn open_developer_window(') ||
aiGameCreatorShellTauriSource.includes(
'open_developer_window(app.handle())?;',
)
) {
throw new Error(
'AI game creator developer window must stay compile-time debug-only and outside game-chat launch',
'AI game creator normal startup must not automatically open a developer window',
);
}
for (const snippet of [
File diff suppressed because it is too large Load Diff
+1
View File
@@ -20,6 +20,7 @@ git cat-file -e "${head_ref}^{commit}" 2>/dev/null || {
echo "[repository-ci] base=${base_ref} head=$(git rev-parse "${head_ref}")"
SPACETIME_SCHEMA_BASE_REF="${base_ref}" npm run lint
npm run test -- apps/ai-game-creator-shell/tests/appSurface.test.ts
npm run build
npm run check:content
git diff --check "${base_ref}"..."${head_ref}"
+4
View File
@@ -257,6 +257,10 @@ test('Gitea Repository checks and master pre-push share the same repository comm
repositoryScript,
/SPACETIME_SCHEMA_BASE_REF="\$\{base_ref\}" npm run lint/u,
);
assert.match(
repositoryScript,
/npm run lint[\s\S]*npm run test -- apps\/ai-game-creator-shell\/tests\/appSurface\.test\.ts[\s\S]*npm run build/u,
);
assert.match(repositoryScript, /npm run build/u);
assert.match(repositoryScript, /npm run check:content/u);
assert.match(repositoryScript, /git diff --check/u);
+5 -1
View File
@@ -111,7 +111,11 @@ describe('project CI workflow', () => {
expect(install).not.toContain('--prefix');
}
for (const jobName of ['frontend-tests', 'native-shell-tests'] as const) {
for (const jobName of [
'repository-checks',
'frontend-tests',
'native-shell-tests',
] as const) {
const install = stepSection(
jobName,
'Install AI game creator dependencies',