k88936
|
134046f806
|
树根拖拽的指针取消不再提交偏移
PreviewWorkspace.tsx 拆出 handleTreePointerCancel:pointercancel 只清拖拽状态与指针捕获,不再按抬手坐标算最终偏移,避免浏览器取消手势时把意外偏移写进文档
tests/previewRightPanDrag.test.tsx 补「抬起提交、取消不提交」用例,并给画布夹具补上 setTreeOffset 桩
|
2026-09-24 16:06:48 +08:00 |
|
k88936
|
9ecb084b68
|
宿主:失败载荷的 kind 改成 typed 枚举
- 新增 `DirectTurnFailureKind`,成为 `DirectTurnFailure.kind` 的唯一取值表:`timeout / model-failed / transport-failed / request-rejected / environment-not-ready / turn-interrupted / host-dropped`(补齐原先两份注释都漏掉的 `turn-interrupted`)
- `DirectModelCallKind::wire_kind` 与 `DirectTurnError::wire_kind` 改成返回该枚举,`DirectTurnFailure::new` / `DirectTurnTerminal::host_dropped` 同步改签名;线上取值仍是原来的 kebab-case 字符串
- 补 `failure_kind_wire_values_are_stable` 用例:7 个变体的序列化 / 反序列化取值逐条钉住,改名即改协议会先在这里失败
- 前端生成绑定重新导出:`chat/generated/DirectTurnFailureKind.ts` 新增,`DirectTurnFailure.ts` 的 `kind` 由 `string` 收窄成 union
- 受影响断言(`direct_thread_manager` / `direct_turn_accept` / `direct_thread_wire` / `codex_app_server`)改成比较枚举变体
|
2026-09-24 16:05:34 +08:00 |
|
k88936
|
064c26d7c9
|
按右键按下时的命中目标决定是否弹节点菜单
PreviewWorkspace.tsx 在右键按下时记住命中元素,抬起时改成按它解析节点与树:指针被视口捕获后 pointerup 的 target 是捕获元素,原先按抬起目标找不到 [data-node-id],节点菜单永远打不开
指针取消时同步清掉记录的目标
tests/previewRightPanDrag.test.tsx 补「抬起被重定向到捕获元素仍弹菜单」用例
|
2026-09-24 16:05:16 +08:00 |
|
k88936
|
ef4601c555
|
让节点删除默认落到选中节点所在的树
src/view/ui-editor/useUiEditorPage.ts 的 deleteNode 默认 treeId 改为 treeForSelectedNode?.src_ui_design ?? activeImageId:选中节点可以来自非激活界面图,Inspector 删除按钮不给 treeId 时会静默删不掉
src/view/ui-editor/uiEditorKeyboardShortcuts.ts 与 view/ui-editor/index.tsx 去掉键盘删除强制传 activeImageId 的接线,treeId 改为可选,同时删掉已无消费者的 activeImageId 入参
tests/uiEditorPage.test.ts 补「非激活树里的节点默认也能删除」用例,uiEditorKeyboardShortcuts.test.ts 断言改为只传节点 id
|
2026-09-24 16:04:29 +08:00 |
|
k88936
|
12e8287f92
|
避免超大缩放让网格步长计算死循环
previewGrid.ts 的 resolvePreviewGridStep 在 screenSpacing 溢出成 Infinity 时直接回基础步长:原先第二个 while 里 Infinity/2 仍是 Infinity,画布会卡死
previewWorkspaceZoom.test.tsx 补 Number.MAX_VALUE 缩放的回退用例
|
2026-09-24 16:02:10 +08:00 |
|
k88936
|
9e49db419f
|
让状态不变量校验先判字段类型再取值
src/features/ui-editor/stateInvariants.ts 在取 path.trim 与 pixel_size.every 前先判 string / Array.isArray,残缺持久化文档此前会在 firstUiDesignInvariantMessage 里抛 TypeError,被保存流程吞成通用失败文案
tests/uiEditorState.test.ts 补三组残缺界面图都回落到 invalid-image 的用例
|
2026-09-24 16:01:14 +08:00 |
|
k88936
|
e2e9243415
|
拒绝不是二元组的树偏移输入
src/features/ui-editor/stateTransition.ts 的 set-tree-offset 分支增加 min.length !== 2 判据:空数组会让 every 空真通过,缺坐标时 max 会算出 NaN 污染渲染消费的偏移
tests/uiEditorState.test.ts 补「[12] 与 [] 都判 invalid」用例
|
2026-09-24 16:00:13 +08:00 |
|
k88936
|
a871684bd7
|
改掉检查点漂移文案把时间戳说成轮次的说法
ui_editor/agent_tools/steps/write_back.rs 的 checkpoint_drift_message 原先输出「检查点第 1759... 轮基线 revision」,round.at 其实是秒级 Unix 时间戳;改为先给基线 revision,再标注时间戳含义
|
2026-09-24 15:58:45 +08:00 |
|
k88936
|
0e15d76046
|
让 ui-design-doc 的参数说明真正进入工具 schema
agent_native_tools.rs 给 from-images 的 images 属性挂上 texts/ui-design-doc.json 里已写好的说明,run-workflow 与 into-js 改用带 description 的单字符串 schema 生成器 one_string_input_schema_with_description,原先这三条文案没有任何引用点,模型看不到
|
2026-09-24 15:58:35 +08:00 |
|
k88936
|
ac870fd41a
|
文档登记失败时回滚本次顺带登记的设计图
ui_editor/agent_tools/creation.rs 登记文档资源失败时先摘掉 prepare_design_images 登记进来的图片条目,避免 manifest 留下没有文档引用的孤儿设计图
把「按 id 摘条目」抽成 drop_manifest_assets,rollback_created_document 复用同一实现
|
2026-09-24 15:58:24 +08:00 |
|
k88936
|
588768bff0
|
给 ui-design-doc 三个观察的 rejected 摘要统一脱敏
agent/runtime_tools/ui_design_doc.rs 让 rejected 接收项目根并复用 redact_agent_runtime_project_paths:项目上下文缺失时的报错会带上宿主路径,原先把 rejected 当成「只含模型参数」直接透出,摘要会泄露绝对路径
|
2026-09-24 15:58:08 +08:00 |
|
k88936
|
940d7b5793
|
修正 run-workflow 观察里误用文档 revision 判断清单失效
agent/runtime_tools/ui_design_doc.rs 改为在工作流结束后重读项目 revision,与开始前的项目 revision 比较;原先比较的 result.revision 是随文档重置的文档 revision,项目 revision 一超过它就永远判不出清单变化,前端会一直看到旧清单
|
2026-09-24 15:57:52 +08:00 |
|
k88936
|
1c7d90a950
|
把 ui-design-doc.run-workflow 认成可推进 revision 的验收证据
agent/runtime_protocol/acceptance_graph.rs 在 acceptance_evidence_tool_may_advance_project_revision 里补回被退役工具腾出的位置,写回文档会让 before 与 after 不同,不再被误判为 revision 不匹配
同一文件补 ui_design_doc_workflow_evidence_may_advance_project_revision 用例,锁住「证据工具」与「可推进 revision」两处识别一致
|
2026-09-24 15:57:27 +08:00 |
|
k88936
|
c844f857ef
|
交接阶段补上 ui-design-doc.from-images 设计图路径校验
tool_plan_handoff/content_validation.rs 为 from-images 的 images[].path 逐项做绝对路径与逃逸判据,恢复退役工作流工具留出的早检位
|
2026-09-24 15:48:53 +08:00 |
|
k88936
|
d082c5ab15
|
删除无人调用的 required_tool_arguments 组合封装
ui_editor/commands/utils.rs 去掉只做「找工具调用 + 解析参数」拼接的封装,识别与切分调用点都自带日志与错误映射,没有消费方
|
2026-09-24 15:46:57 +08:00 |
|
k88936
|
9694faa620
|
让节点 offset 在反序列化时缺省成零偏移
ui_editor/layout/node.rs 给 Node.offset 加 #[serde(default)],历史设计文档缺该字段时按零偏移解析
ui_editor/persistence.rs 补 legacy_nodes_without_offset_field_fall_back_to_zero_offset 锁定该回退口径
|
2026-09-24 15:45:25 +08:00 |
|
k88936
|
2331f62f1a
|
测试:登录态用例的会话刷新 spy 补 mock 实现
- `chat-composer` 的"登录态失效不重跑整轮"用例给 `requestPlatformSessionRefresh` 的 spy 补 `mockResolvedValue`,真回归时以 mock 结果干净失败,不再在测试里发起真实刷新
- 桩值用现役的 `stale`(`PlatformSessionRefreshResult` 只有 `refreshed / stale / failed` 三种)
|
2026-09-24 14:48:37 +08:00 |
|
k88936
|
7941aaa660
|
前端:埋点句柄只在结构化拒单时清掉
- `runTurn` 的 catch 先读结构化拒单,只有"这一轮没接单"的拒单才清 `pendingRunAnalyticsRef`;非结构化错误(IPC 失败、命令 panic)可能发生在接单之后,句柄留着等 `turn.completed` 结算,不再让宿主侧这一轮的候选永远没人结算
- chat-composer 用例的注释同步:这一轮没接单,就没有回合终态事件来驱动结算
|
2026-09-24 14:48:32 +08:00 |
|
k88936
|
6cee61b973
|
前端:Direct 回合失败分支去掉嵌套三元
- `runTurn` 的 catch 先把非结构化错误折成文本,再让结构化拒单文案覆盖,替掉原先"拒单 / Error / 其它"三层嵌套的三元表达式
|
2026-09-24 14:48:21 +08:00 |
|
k88936
|
2ce96a73f0
|
前端:拒单提示的空文案不再返回空串
- `directTurnRejectionNotice` 认得的拒单在宿主文案为空白时返回 `null`,不再返回空串:`''` 显示不出任何提示,却会被按 `!== null` 判据的调用方当成"有提示"
- 补注释把"有提示"的判据说清:要么给一条能显示的话,要么给 `null`
|
2026-09-24 14:48:10 +08:00 |
|
k88936
|
8d635c2ff7
|
合并:把 master 的告警清理与首页对话退役并进接单化分支
- 冲突 codex_app_server/mod.rs:保留类型化回合失败 DirectTurnRunFailure 与 EnvironmentNotReady 分类,接受删除 audit/metrics 参数
- 冲突 direct_runtime/mod.rs:保留类型化错误反馈循环与"交付报告只读一次",保留 check_direct_turn_preconditions,接受 master 的 turn_kind 贯穿与首页无项目对话退役
- 冲突 direct_runtime/user_input.rs:保留接单后发射器与 canonical 用户条目的新调用签名
- 删除:随 master 移除 direct_codex_audit、direct_turn_metrics 两个账本模块及其全部引用
- 删除:direct_codex_error_should_feedback 字符串判据与首页对话函数及其测试
- 调整:direct_codex_error_feedback_prompt 收成单参数,与已落地的提示词模板一致
- 修复:master 新插入的用户条目冻结块改用 DirectTurnError::turn_failed
|
2026-09-24 14:30:02 +08:00 |
|
k88936
|
dc5a5a4a62
|
修复合并后 CI 失败:退役命令的残留清单与用例
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m21s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m57s
Project CI / Backend tests (pull_request) Successful in 4m0s
Project CI / Frontend tests (pull_request) Successful in 1m53s
Project CI / Native shell tests (pull_request) Successful in 5m51s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 9m13s
Project CI / Repository checks (pull_request) Successful in 2m1s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 9m20s
Project CI / AI game creator shell web tests (pull_request) Failing after 2m40s
- scripts/check-config.mjs 的 native-only 白名单删除已退役的 bind_components 与 create_ui_design_resource,两端原生能力检查重新自洽
- appSurface 的 UI 原型入口用例改断言 create_ui_design_doc_from_images,并按新契约补齐 relativePath / imageIds 返回形状
- 验证:npm run typecheck(含 skill-pack 与 check-config)、npx vitest run tests/appSurface.test.ts(211 passed / 9 skipped)
|
2026-09-24 14:21:14 +08:00 |
|
k88936
|
2873bed732
|
合并 origin/master 到 feat/ui-editor-v3
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m27s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m5s
Project CI / Native shell tests (pull_request) Failing after 1m47s
Project CI / Backend tests (pull_request) Successful in 3m53s
Project CI / Frontend tests (pull_request) Successful in 1m38s
Project CI / AI game creator shell web tests (pull_request) Failing after 38s
Project CI / Repository checks (pull_request) Failing after 1m33s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 9m0s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 9m2s
- 合入 master 179 个提交(后台管理页、游戏发行入口、AGC 运行页签、编译 warning 清理等)
- policy.rs 采用 master 版本:删除无调用方的 autonomous_design_foundation_command_is_allowed 重复名单,design-foundation 权限以 tool_policy_snapshot.rs 为准
- native-tools.json 保留双方结果:master 的描述文本 + 分支删除已退役的 ui.workflow.run.description
- useUiEditorPage.ts 保留分支的 save / saveAndGenerateCode 状态返回契约,并接上 master 的 beginUiSaveAnalytics 与 saveSource: 'auto' 埋点
- 验证:cargo check --bin genarrative-ai-game-creator-shell、npm run check:rustfmt、tsc --noEmit、vitest tests/uiEditorPage.test.ts + tests/clientAnalytics.test.tsx(47 passed)
|
2026-09-24 13:53:34 +08:00 |
|
k88936
|
c8478f07ef
|
文档:接单化 review 收口的不变式写进 ADR 与共享记忆
- ADR §2 补两条不变式:终态的写点在整轮结束之后、封口返修要求不是回合失败
- 技术方案同步改写"终态由事实判定"一段,并补"终态写点在整轮结束之后"的判据
- ADR 末尾补 2026-09-24 后续更新索引,指向技术方案与决策记录
- 决策记录追加 2026-09-24 条目:终态写点、返修控制流、终止判据、登录态重试与失败载荷健壮性
|
2026-09-24 13:51:10 +08:00 |
|
k88936
|
f19bd8de8c
|
宿主:终态写点挪到整轮结束之后,解析失败也能落进终态
- Direct 回合的终态判定事实改成先固定上下文,写点留到解析与线程释放之后
- structured output 解析折进同一个收尾结果:解析失败不再"终态写完才失败",改走失败载荷
- 收尾结果拆成 `DirectTurnReport`(报告正文 + 解析结果),终态兜底文案仍取被解析的那份文本
- 新增 `DirectTurnTerminalContext::write` 作为唯一终态出口,占用解除与 `turn.completed` 一起走
- `direct_turn_terminal_write` 改成"报告 / 失败"两个入参,便于单测覆盖三种投影
- 补单测:解析失败投影成 `model-failed` 载荷,正常收尾不带失败载荷
|
2026-09-24 13:49:38 +08:00 |
|
k88936
|
64e3eba55a
|
宿主:封口返修要求改成 typed 控制流,不再写成失败
- 新增 `HostOutcomeText`:封口复核的"继续返修批次"用独立变体表达,不再伪装成 `LlmError::InvalidRequest`
- 新增 `DirectTurnRunFailure`:app-server 回合结果区分"真失败"与"返修控制流",`RepairRequired` 不写终态
- `direct_turn_terminal_write` 收口终态写出:返修要求跳过,真失败从 typed 错误投影 `kind` / `message`
- 早退取得宿主收尾事实的分支只认真失败,返修控制流不再被中断成一次收束
- `DirectTurnError` 新增 `RepairRequired` 变体并重新生成前端绑定
- 返修循环同时消费 `ReviewRequired` / `RepairRequired`,次数上限仍留在产生侧
- 补单测:返修要求不写终态、真失败投影成 transport-failed、正常收尾不带载荷
|
2026-09-24 13:40:36 +08:00 |
|
k88936
|
a39b322af6
|
将 UI 编辑器 Agent 工具模块由 design_doc 重命名为 agent_tools
- 重命名 src-tauri/src/ui_editor/design_doc/{checkpoint,creation,mod,run_workflow,test_support}.rs 与 steps/** 到 ui_editor/agent_tools/
- 更新 main.rs、ui_editor/mod.rs、agent/runtime_tools/ui_design_doc.rs 中的模块路径引用
- 更新 steps/recognize.rs 与 steps/separate/mod.rs 内部对 agent_tools 夹具的引用
- 更新 tests/project.rs 注释中的 creation.rs 与 next_ui_design_path 模块路径
- 更新 agent_tools/test_support.rs 模块注释为 agent_tools 单测共用夹具
- 更新技术方案《UI编辑器代码地图与模块职责》《UI编辑器Agent工具化重写》的模块树与落地顺序路径
- 更新 shared-memory decision-log 中该次重写的测试过滤器为 agent_tools
|
2026-09-24 13:34:14 +08:00 |
|
k88936
|
0da63721df
|
宿主:用户按下的终止不再被记成通道失败
execution.rs:`fail_turn` 的判据从"只看 is_closed"改成"`is_closed` 或 `host_stop_requested` 都不算失败"。用户点「终止」时 `cancel_from_host` 先同步置位 `host_stop_requested`、再异步中断会话,`closed` 与阶段要等那个任务跑到才变;这段窗口里到达的 `TransportClosed` / `interrupted` 都是宿主自己收尾的结果,以前会被记成 `transport-failed`。判据收在 `fail_turn` 里,调用点不必各写一遍,将来新增收口路径也不会漏。不记失败事实照旧收束,原因仍写进报告。
mod.rs:`interrupted` 分支去掉现在重复的 `!host_stop_requested()` 检查(同一个事实只留一处判据)。
execution.rs 单测:新增"用户请求过终止 + 未 closed 时 fail_turn 不写失败事实、原因仍进报告";变异验证:撤掉新判据该用例变红。codex_app_server 过滤 101 passed。
|
2026-09-24 13:21:26 +08:00 |
|
k88936
|
080ef53b68
|
宿主:登录态失效的两条分类路径统一成可重试
direct_turn_error.rs:DirectCodexNativeKind::is_retryable 把 Unauthorized 归进 false 组,而同一份事实走 DirectDomainFact::AuthenticationRejected 时是 true,于是 retryable 取决于哪一层先认出它;旧口径对 401 / authentication-required 一律返回 true,这里对齐成可重试,并写明与 recovery_hint 同口径的理由。
direct_runtime/mod.rs:补一条断言(原生 codex-app-server-error:unauthorized 与深层 authentication-required: HTTP 401 同为可重试、都不可反馈给模型);agent:: 过滤 950 passed。
|
2026-09-24 13:17:21 +08:00 |
|
k88936
|
0262e82572
|
把 write-back 步骤拆成独立模块
新增 steps/write_back.rs,承载保存 State、追加 write-back / outdated 行与漂移文案
把 rebuild_target_state 从 run_workflow.rs 移到 steps/mod.rs,作为已记录 DTO 的重放入口
run_workflow.rs 只保留输入输出类型、三步编排与检查点恢复判定
把 DRIFT_REASON 与两条漂移文案收敛到 write_back 模块,避免编排层和写回层各写一套
同步两份 UI 编辑器技术方案的模块布局与代码地图
|
2026-09-24 13:09:57 +08:00 |
|
k88936
|
d287061c61
|
宿主:交付报告兜底只读一次 terminal_report
direct_runtime/mod.rs:两处 `Err(_) if terminal_report(...).is_some()` 的 guard 与取值各调了一次 terminal_report,两次之间状态变化就会拿到不一致的结果——流式分支第二次拿到 None 时会把空串当回复返回(界面显示"未返回可展示的回复"),非流式分支则绕过"未返回结果"的兜底错误。改成一次读取后落变量,判据与取值同源;两个分支的优先级(有报告 > 可反馈修复 > 原样抛出)不变。direct_ 过滤 474 passed。
|
2026-09-24 13:08:48 +08:00 |
|
k88936
|
1c03736d6b
|
宿主:删掉恒为 false 的 invites_repair 判据
direct_turn_error.rs:DirectDomainFact::invites_repair 每个分支都返回 false,is_model_repairable 里的 is_none_or(invites_repair) 实际等价于 is_none(),第一个分支还误导性地暗示"有些事实值得反馈"。删掉该方法,调用点直接写 is_none(),并把"认出是哪一类就拦"的理由写进注释;行为逐条不变(direct_ 过滤 474 passed)。
|
2026-09-24 13:06:21 +08:00 |
|
k88936
|
6ef64c3bcf
|
将 design_doc 的切分模块提升为目录模块
把 steps/separate.rs 提升为 steps/separate/mod.rs,只保留纯 State 变换
把 design_doc/cut_images.rs 移到 steps/separate/cut_images.rs,与它服务的切分步骤同层
把 normalize_cut_image_path 从 steps/mod.rs 下沉到 steps/separate/mod.rs,紧邻两个使用点
run_workflow.rs 改从 steps::separate 统一导入切分入口与登记入口
同步两份 UI 编辑器技术方案的模块布局与代码地图
|
2026-09-24 13:05:44 +08:00 |
|
k88936
|
db11bae2d8
|
注释:说明失败说明身份在无身份无时间时会撞成一条
directTurnFailure.ts:原来那句"身份不可证明时退化成与事件时间绑定的固定形状……不会让两轮失败互相覆盖"漏了 `at` 也拿不到的那一档——常量 direct-thread-turn-failure 会让两条这样的失败按同一个 itemId 合并。补上这一档的真实行为与取舍(唯一性与重放不变不可兼得,这里选重放不变),代码不动。
|
2026-09-24 13:04:11 +08:00 |
|
k88936
|
b0e870e7e2
|
前端:失败终态载荷的 message 缺字段不再打断 reducer
directThreadChat.ts:`turn.completed.failure.message` 在生成类型里是必填 string,但跨 IPC 的载荷没有运行时校验,缺字段 / null 时 `.trim()` 会在 reducer 里抛错,把这条订阅之后的所有事件一起打断;改成与兄弟函数 directTurnFailureNoticeText 一致的 typeof 判据,取不到非空字符串就按"没有原因"收口。
directThreadChat.test.ts:补一条回归用例(message 为 undefined / null 时不抛错、不补空气泡、终态照样收口);变异验证:撤掉 typeof 判据后该用例变红。
|
2026-09-24 13:03:53 +08:00 |
|
k88936
|
286d919129
|
测试:失败终态用例断言映射后的文案不落会话列表
断言原来查的是命令 Err 的原始文本,而这条文本永远不会被渲染(前端先用 projectRuntimeVisibleError 映射成通用可见文案,再走头部状态行的横幅),因此断言空过、盖不住"命令通道又写一条聊天文案"这个回归。
改成在 `陶泥儿消息` 列表里查映射后的文案(横幅不在这个列表里),并用一次变异验证:在 catch 里补一条 appendLocalMessage 后该用例变红,撤掉即绿。
|
2026-09-24 13:02:41 +08:00 |
|
lhk229
|
ec3a187dd7
|
处理编译大量warning问题 (#503)
Project CI / AI game creator shell Rust crates (push) Successful in 1m11s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m34s
Project CI / Backend tests (push) Successful in 4m46s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 8m31s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 9m41s
Project CI / Frontend tests (push) Successful in 2m19s
Project CI / Native shell tests (push) Successful in 7m5s
Project CI / AI game creator shell web tests (push) Successful in 1m54s
Project CI / Repository checks (push) Successful in 2m36s
Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/503
Co-authored-by: Linghong <ink29535@proton.me>
Co-committed-by: Linghong <ink29535@proton.me>
|
2026-09-24 13:01:31 +08:00 |
|
suzmii
|
1931852e9e
|
补齐打开/选择目录入口的提权拒绝记忆清除
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m25s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m45s
Project CI / Backend tests (pull_request) Successful in 3m54s
Project CI / Frontend tests (pull_request) Successful in 2m5s
Project CI / Native shell tests (pull_request) Successful in 6m0s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 8m24s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m38s
Project CI / Repository checks (pull_request) Successful in 2m10s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 10m1s
- aclElevation:新增唯一入口 clearAclElevationDenials()(Tauri 环境判断 + 命令失败只吞掉,旁路动作不影响本次操作)
- useRecentProjects:rememberRecentWorkspace / refreshRecentWorkspace 改用该共享入口,删掉本地同名实现
- useHomeProjectCreation:openProject 入口先清除拒绝记忆再 inspect,覆盖行内打开、运行中项目入口与文件选择器选择目录;此前只挂在「打开/新建成功之后」,用户点了打开会撞上 120s 冷却直接失败且不弹 UAC
- appSurface/home.suite:新增断言「用户动作先 clear 再 inspect」,并做逆向确认(去掉该调用即红)
- docs:decision-log 写清前端唯一入口与必须挂的四个入口,pitfalls 记录 leader 失效接管这条残余边界
|
2026-09-24 12:56:47 +08:00 |
|
suzmii
|
9034b8a2d3
|
合并 master 到 fix/acl-elevation-single-flight
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m30s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m8s
Project CI / Backend tests (pull_request) Successful in 4m8s
Project CI / Frontend tests (pull_request) Successful in 2m10s
Project CI / Native shell tests (pull_request) Successful in 6m13s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 8m48s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m39s
Project CI / Repository checks (pull_request) Successful in 2m14s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
- 合入 origin/master(dcb4f2a1c):DirectProject 过程卡读秒粒度与样式修复(#508)
- pitfalls.md 冲突按「两边都保留」解决:ACL 单飞条目置顶,其后保留上游 2026-09-24 读秒条目
- 本次合并未改动 ACL 单飞实现(含刚收口的 key 归一化与冷却基准改动)
|
2026-09-24 12:08:58 +08:00 |
|
suzmii
|
3480a2f331
|
评审收口:闸门 key 归一化路径写法 + 冷却改从结果落库时刻算起(#498)
- acl_repair_gate:冷却基准从 leader 起跑时刻改为结果落库时刻;UAC 被挂着几十秒到两分钟时,120s 拒绝冷却不再提前过期,避免紧跟的自动整表重查立刻再弹一次
- config:新增 windows_acl_repair_gate_key,闸门 key 的路径半边先去掉 \\?\ / \\?\UNC\ 前缀再统一小写;最近项目列表里同一项目实测同时存在 \\?\C:\... 与 C:\... 两种写法,按原始字符串做 key 会让同一个目录弹两次 UAC
- tests/acl_repair_gate:补「冷却从结果落库时刻算起」与「路径写法归一成一个 key」两条用例;两条都做过逆向确认(改回修复前语义即失败)
- docs:decision-log 与 pitfalls 补记 key 归一化、冷却基准,以及真机复现的三个坑(DENY 要加在祖先的父目录、夹具路径必须落在 Managed 放行范围内、提权子进程会按 repair target 再校验 scope)
|
2026-09-24 12:05:42 +08:00 |
|
suzmii
|
dcb4f2a1c1
|
Merge pull request '修复 AGC DirectProject 运行中过程卡的读秒粒度与样式' (#508) from fix/recover-100ms into master
Project CI / AI game creator shell Rust smoke (push) Successful in 1m48s
Project CI / AI game creator shell Rust crates (push) Successful in 1m0s
Project CI / Backend tests (push) Successful in 4m59s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 8m33s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 10m30s
Project CI / Native shell tests (push) Successful in 6m29s
Project CI / Frontend tests (push) Successful in 2m46s
Project CI / AI game creator shell web tests (push) Successful in 1m59s
Project CI / Repository checks (push) Successful in 2m48s
Reviewed-on: #508
|
2026-09-24 11:57:11 +08:00 |
|
suzmii
|
67d5ad6026
|
合并 master 到 fix/acl-elevation-single-flight
- 合入 origin/master(87e52860a):后台游戏审核弹窗、客户端维护态错误弹窗、发行入口同源路径等上游变更
- decision-log.md 冲突按「两边都保留」解决:单飞决策条目置顶,其后保留上游同日条目
- 本次合并未改动 ACL 单飞实现本身(acl_repair_gate.rs / config.rs / useRecentProjects.ts 无冲突)
|
2026-09-24 11:47:33 +08:00 |
|
suzmii
|
e80279c174
|
修复 AGC DirectProject 运行中过程卡的读秒粒度与样式
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m8s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 53s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 8m21s
Project CI / Backend tests (pull_request) Successful in 4m12s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 10m2s
Project CI / Frontend tests (pull_request) Successful in 2m11s
Project CI / Repository checks (pull_request) Successful in 2m33s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m1s
Project CI / Native shell tests (pull_request) Successful in 6m27s
- apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectConversation.tsx 的 DirectTurnElapsed 改用对话侧共享时钟 useLiveNow(100ms),删掉组件自带的 1000ms setInterval 与 now state:耗时文案不足一分钟保留一位小数,秒级 tick 会让小数位一秒才动一格
- apps/ai-game-creator-shell/src/styles.css 重写 .project-chat-process-card:去掉旧面板遗留的 78px 最小高度与 9px 行距,收敛为单行状态条(padding 8px 12px)
- apps/ai-game-creator-shell/src/styles.css 状态点与扫光改走 --platform-accent(原先写死绿色),标题提到 --platform-text-strong,耗时改 --platform-text-base 并加 tabular-nums
- apps/ai-game-creator-shell/src/styles.css 删除两条永不命中的选择器(卡片渲染在消息列表外,规则却写着 …message-list > .project-chat-process-card)与已无 <p> 渲染的多行摘要样式
- apps/ai-game-creator-shell/src/styles.css 过程卡与最后一条消息之间补 12px 上间距,原先 margin 简写把它清零
- apps/ai-game-creator-shell/tests/directProjectProcessStatus.test.tsx 新增读秒粒度回归用例与「无运行中回合不订阅时钟」用例
- apps/ai-game-creator-shell/tests/appSurface/project-development.suite.ts 与 tests/AgentMessageContent.test.tsx 的选择器契约同步到现行 DOM 结构
- docs/project-memory/shared-memory/pitfalls.md 记录「刷新粒度必须与显示精度同格」这条复发坑
|
2026-09-24 11:47:32 +08:00 |
|
kdletters
|
87e52860a7
|
游戏发行入口改为平台同源路径
Project CI / AI game creator shell Rust crates (push) Successful in 1m26s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m11s
Project CI / Backend tests (push) Successful in 5m12s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 8m26s
Project CI / Native shell tests (push) Successful in 6m31s
Project CI / Frontend tests (push) Successful in 2m20s
Project CI / Repository checks (push) Successful in 2m25s
Project CI / AI game creator shell web tests (push) Successful in 1m21s
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
- 审核通过时由 api-server 按 gameId 派生 /games/{gameId}/ 相对路径写入公开投影,删除 AppConfig 的发行入口模板字段与读取逻辑
- 删除 deploy/env 两份示例中的 GENARRATIVE_GAME_DISTRIBUTION_RELEASE_ENTRY_TEMPLATE
- 三份 nginx 模板内联同源发行入口 location,把 /games/<gameId>/ 与子资源转发到发行网关并在边缘清空 Cookie
- SPA allowlist 补齐 components、design-system、games、games/detail、games/mine、games/play、games/publish
- 前端 normalizeGameEntryUrl 支持相对路径与同源发行路径,按当前 origin 解析并补尾斜杠,继续兼容历史绝对 URL
- 删除退役的独立来源模板 deploy/nginx/genarrative-release-origin.conf、门禁脚本 scripts/check-release-origin-config.mjs 与其 npm 脚本
- 游戏分发 e2e 脚本改为在公开投影上断言 entryUrl 等于 /games/{gameId}/
- 同步平台主规范、运维主规范、nginx README 与共享决策记录
|
2026-09-24 00:21:27 +08:00 |
|
kdletters
|
efbdf7031e
|
统一客户端维护态错误弹窗
Project CI / AI game creator shell Rust crates (push) Successful in 1m30s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m57s
Project CI / Backend tests (push) Successful in 3m54s
Project CI / Frontend tests (push) Successful in 2m5s
Project CI / Native shell tests (push) Successful in 6m4s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 8m14s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 9m19s
Project CI / AI game creator shell web tests (push) Successful in 1m23s
Project CI / Repository checks (push) Successful in 1m55s
客户端维护响应统一识别并广播维护事件
AGC 与网页端根部展示维护大弹窗,收口发布、上传、资源换签和登录错误
补充维护态弹窗测试、类型检查与实施计划说明
|
2026-09-23 23:16:23 +08:00 |
|
kdletters
|
093f832ef9
|
优化后台游戏审核操作弹窗
Project CI / AI game creator shell Rust crates (push) Successful in 1m29s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m2s
Project CI / Backend tests (push) Successful in 3m48s
Project CI / Frontend tests (push) Successful in 2m4s
Project CI / Native shell tests (push) Successful in 5m57s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 8m15s
Project CI / Repository checks (push) Successful in 2m10s
Project CI / AI game creator shell web tests (push) Successful in 1m35s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 9m38s
移除游戏审核页的发行地址提示
将拒绝理由与下架原因改为点击按钮后输入
补充审核与安全下架交互测试
|
2026-09-23 22:50:36 +08:00 |
|
k88936
|
cf79ac31f7
|
文档:给"早退"补一句定义
docs/adr/【ADR】DirectProject命令接单化-2026-09-23.md:§2 写明"早退"= 回合内任何没走到正常终态的收口点(turn/start 被拒、注入失败、panic)。
docs/technical/【实施计划】DirectProject命令接单化-2026-09-23.md:第 2 步同一处补定义。
docs/technical/【技术方案】DirectProject Codex原始历史与异常恢复-2026-09-04.md:宿主异常收场段补同一句定义。
|
2026-09-23 22:09:15 +08:00 |
|
k88936
|
ce668bbff3
|
文档:接单化落地收尾,ADR 转已接受并同步下游口径
docs/adr/【ADR】DirectProject命令接单化-2026-09-23.md:状态改成已接受并指向实施计划;"落地时要同步的文档与注释"改成已同步清单。
docs/adr/【ADR】DirectProject对话历史单一事实源-2026-09-16.md:顶部取代注扩到"事件不带回合身份"与"宿主侧 Drop 守卫兜底"两条决策形状,影响一节的两条已知边界逐条写明新口径。
docs/technical/【实施计划】DirectProject命令接单化-2026-09-23.md:四步标记落地并补每步落地结果、验收证据(rust agent:: 949 / 前端 4473)与已知坑。
docs/technical/【技术方案】DirectProject Codex原始历史与异常恢复-2026-09-04.md:正常回合改成接单后先落盘再注入;异常回合收尾写明唯一终态出口是占用对象。
docs/project-memory/shared-memory/decision-log.md:host-dropped 两条口径加取代注(含 kind 追加 environment-not-ready),并追加 2026-09-23 接单化决策一条。
docs/README.md:索引行去掉"未实施",改成四步均已落地。
|
2026-09-23 22:05:11 +08:00 |
|
k88936
|
2772081791
|
注释:收尾接单化后两个入口的分工与待办
direct_runtime/user_input.rs:补 CLI 与 GUI 的分工——CLI 入口保持 await(它要回复文本,没有事件订阅),两个入口共用同一份接单前检查、同一个命令主体与同一份 Display 文案;DirectTaonierActiveInvocationGuard 的注释改成只挡并发、不再是首页快照来源。
direct_runtime/mod.rs:TODO(Direct 命令接单化) 改成 TODO(失败条目进历史),指向备选方案第 3 条;失败说明本轮不落历史的口径不变。
cli.rs:删掉"带上诊断与 详情: 引用"的过期注释,改成与 GUI 同一份 Display 文案、不另加引用,差别只在 CLI 自己 await 整轮。
|
2026-09-23 22:04:48 +08:00 |
|
k88936
|
93202f2f91
|
前端:发送队列放行与埋点结算改听回合终态
- reducer 新增 `completedTurnCount`(单调计数):一轮可能在同一次 consume 里开始并结束,
下降沿不可靠,收口是**状态**不是转移
- 队列放行只在"回合终态或拒绝接单"发生;命令返回不再驱动出队
(接单被拒仍当场出队,权限被拒等从未发出的路径保持原样)
- 埋点结算挂到回合终态:接单返回时成绩还没入账,句柄因此活过命令返回;
拒单只丢句柄、不发一次注定被丢弃的结算
- 本地在途标签活到宿主认领这一轮(身份命中 / 出现开始事件 / 收口计数变化),
"命令返回"不再等于"这一轮结束",命令与开始事件之间不再有可发送的空窗
- 删掉 `markTurnStopped()`:终止成功的回合边界由宿主写的兜底终态收口
- 删掉 `turn.started` 的"重复起点保留第一次"兼容分支(接单只发一次开始事件)
- 同步注释:发送时序、待认领窗口、`commandInFlight` 的真实含义
- 测试:队列用例改用终态事件驱动,认证失败用例断言拒单不结算,reducer 补收口计数用例
|
2026-09-23 21:54:53 +08:00 |
|