Commit Graph

3057 Commits

Author SHA1 Message Date
kdletters 1aa457c36b Merge branch 'master' of https://git.genarrative.world/git/GenarrativeAI/Genarrative
Project CI / AI game creator shell Rust crates (push) Successful in 1m24s
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / AI game creator shell Rust smoke (push) Has been cancelled
2026-10-01 19:45:43 +08:00
lhk229 3193182665 修复 AGC 测试编译并保留 CI 编译诊断
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / AI game creator shell Rust smoke (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
删除 Claude 流式结果测试中已失效的回合参数
分片运行器使用 Cargo 渲染诊断并保留 JSON 产物发现
新增编译失败诊断回归测试并更新排障文档
2026-10-01 11:42:48 +00:00
kdletters fee0dc1fa4 合并 origin/master:网站游戏评分与评价 2026-10-01 19:41:30 +08:00
kdletters d1f789cc10 AGC 支持 Anthropic 独立网关路由与后台协议选项
新增平台 Anthropic 网关路由 /api/llm/anthropic/{*path},复用账号 Router 凭据边界
OpenAI 侧规范路径改为 /api/llm/v1/responses 与 /api/llm/v1/chat/completions,旧路径保留兼容
baseUrl 不再携带路由与版本段,统一由协议自己拼 v1/<op>
cc 执行器改走平台网关,ANTHROPIC_AUTH_TOKEN 复用平台会话,不再直连 Router
后台模型目录 agentMode 增加 anthropic,管理页与客户端契约同步
补齐三条路由埋点与静态段白名单,新增三条回归测试
同步后端架构文档、模型别名文档与排障记忆
2026-10-01 19:41:08 +08:00
k88936 348d20bf55 AGC 壳后台 Runtime 用例的等待预算覆盖分片 2 的假红面
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m14s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m40s
Project CI / Backend tests (pull_request) Failing after 44s
Project CI / Frontend tests (pull_request) Successful in 2m2s
Project CI / Repository checks (pull_request) Failing after 17s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m40s
Project CI / Native shell tests (pull_request) Successful in 5m47s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 10m52s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 12m22s
- tests/mod.rs 已有的 MOCK_PROVIDER_REQUEST_TIMEOUT / AGENT_RUNTIME_TERMINAL_WAIT_BUDGET 现向 runtime_actions 子模块导出(support.rs)
- project_tools.rs:background_agent_runtime_can_create_checkpoint_before_file_write 的三处 mock provider 等待由 2s/2s/10s 改为统一预算
- action_execution.rs:background_agent_runtime_can_schedule_ready_manifest_tasks 的两处等待同上
- tool_planning.rs:background_agent_runtime_loads_same_agent_continuity_through_tool_observation 的五处等待同上
- task_lifecycle.rs:background_agent_runtime_can_cancel_active_task_and_retry_it 的取消收口轮询由固定 50×20ms 改为终态预算,并同步放宽首条请求等待
- 依据:origin/master 的 run 3143 与 run 3141 在同一 lane(分片 2/4)分别红了这四条用例,现场全是 2 秒预算或多轮轮询被 CI 分片并发放大,链路本身正常
- 验证:本机 4 条用例串行通过;两 lane 并发下连跑 6 次全绿;分片 1/2/3/4 全量 ok
2026-10-01 19:22:08 +08:00
k88936 7224bd0dc0 直连工具结果与计划回灌不再脱敏,只做长度收口
- `direct_validation`:浏览器/命令验证回执里的 error/output 原文返回给 Codex
- `direct_patch`:补丁工具输出原文返回
- `direct_delivery`:计划步文案、`contract.scope`、未过验收的缺口清单原文返回
- `direct_runtime`:浏览器事实证据(diagnostic / console.error / exception / fatal request)、陶泥儿整包完成告警、可返修错误的反馈提示原文返回
- `provider_request_builders`:回灌给模型的 `thinkingSummary` / `fallbackResponse` 原文返回
- 两个测试改为断言原文进入 prompt(`browser_diagnostics_go_verbatim_to_the_model_before_same_thread_repair`、`completed_regeneration_replays_the_exact_lost_response`)
- 去掉因不再脱敏而失去用途的 `root` 形参:`update_plan`、`bound_for_completed_workflow_at` / `validate_completed_workflow_result_at`
- 审计/诊断侧照旧脱敏:`record_direct_codex_failure`、`DirectTurnTerminal::failed`、`persist_agent_runtime_error`、`codex_app_server` 日志
2026-10-01 19:21:57 +08:00
lhk229 b60aea4e71 实现网站游戏评分与评价 (#561)
Project CI / AI game creator shell Rust crates (push) Successful in 1m43s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 2m7s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m55s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 3m23s
Project CI / Frontend tests (push) Successful in 3m3s
Project CI / Repository checks (push) Successful in 3m42s
Project CI / AI game creator shell web tests (push) Successful in 2m3s
Project CI / Backend tests (push) Successful in 6m19s
Project CI / Native shell tests (push) Successful in 8m7s
公开游戏详情页新增评分与评价:登录用户可提交并修改自己对每款游戏的唯一一条 1–10 分评价,评论可空且最多 4000 个 Unicode 码点;游客可分页浏览评价并查看平均分与评分人数。

- 新增私有评价表及共享 DTO/API,事务内校验游戏公开可见性、保证唯一性,并计算分页与全量评分统计;下架或封禁后关闭读写,重新公开及更新版本保留评价。
- 详情页支持编辑预填、取消、提交期间冻结输入、失败保留草稿,以及保存、翻页和账号/游戏切换时的旧响应隔离;复用现有认证与公共组件。
- 同步主规范、里程碑、实施计划、生成绑定、表目录和验收脚本。不扩展 AGC、外部 API、评论审核或评分缓存。

验证:
- 本轮审查复跑前端定向测试 40 项、评价领域测试 2 项,均通过。
- 网站 typecheck、Rust/TypeScript DTO 对齐、SpacetimeDB schema、文档索引、编码与 diff 检查通过。
- 实施文档另记录本地隔离数据库/API 49 项及桌面/移动视口浏览器 smoke 通过;本轮审查未重跑这些运行时验收,也未运行完整测试套件。

发布说明:新增 SpacetimeDB 表,部署时需同步 module 与 API。尚未部署 dev/production,待用户验收。

Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/561
Co-authored-by: Linghong <ink29535@proton.me>
Co-committed-by: Linghong <ink29535@proton.me>
2026-10-01 19:19:58 +08:00
k88936 b0ec155401 委派回执给模型的明细不再脱敏,审计记录自己脱敏
- `build_static_delegate_result_for_child_at` / `publish_game_creator_agent_delegate_result` 的结果明细只做长度上限
- 回执任务文案不再 `sanitize_prompt_context`,父子 run 之间传的是原文
- `record_game_creator_agent_delegate_result_success` 在写 `resultPreview` 审计时自行脱敏
- 抑制态回执任务的 `task` / `terminalDetail` 与 `agent.schedule_ready` 观察改为长度收口
2026-10-01 18:55:04 +08:00
k88936 f8ba46fa4f Runtime 工具观察只做长度收口,脱敏只留给审计写入
- 各工具构造 `AgentRuntimeToolObservation` 时不再调用 `sanitize_agent_runtime_text` / `redact_agent_runtime_project_paths`,改为只做长度上限的 `truncate_agent_runtime_text`
- 保留 `append_agent_db_record` / 事件 / `append_patchset_audit` 等审计写入处的脱敏
- `agent.action_history` 读取的账本仍按写入侧口径脱敏,读取路径不再二次脱敏
- 委派(`agent.delegate` / `agent.spawn_isolated`)与 `agent.schedule_ready` 的结果明细原样进回执
- 去掉因参数失去用途的 `root` 形参:`canvas_durable_result_reconciliation_observation`、`rejected`、`error_observation`、`error_observation_with_revision_advance`
2026-10-01 18:54:11 +08:00
k88936 cf6ed72f34 工具观察原样进 prompt:去掉按 token 预算的脱敏与截断
- 删除 `bound_observation_for_prompt` 与 `truncate_to_estimated_tokens`
- `prepare_game_creator_agent_runtime_prompt_history` 去掉 `tool_output_token_limit` 参数,观察原样进 prompt
- 调用处同步去掉该参数:`provider_request_builders`、`tests/runtime_state`
- 删除只验证旧有界行为的 `tool_output_is_bounded_by_token_limit` 测试
- 脱敏仍只发生在写审计/持久化时(`sanitize_game_creator_agent_runtime_context_observations_for_storage`)
2026-10-01 18:53:40 +08:00
kdletters 44f415d057 合并 origin/master(58 个提交):生产 Nginx 模板收敛与记录同步
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 2m23s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 1m15s
Project CI / AI game creator shell Rust crates (push) Successful in 1m14s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m35s
Project CI / Frontend tests (push) Successful in 2m53s
Project CI / Repository checks (push) Successful in 3m36s
Project CI / Backend tests (push) Successful in 4m26s
Project CI / AI game creator shell web tests (push) Successful in 2m23s
Project CI / Native shell tests (push) Successful in 7m27s
- 合并 origin/master 58 个提交,解决 2 处文件冲突:决策记录与踩坑记录均按两侧新增条目并存处理
- claude_code_cli.rs 自动合并通过:本机 Claude sidecar 诊断改动与上游 sidecar 归位并存,无重复函数定义、无冲突残留
- 保留本地未推送提交:AGC Claude 执行认证与错误诊断、Claude sidecar 超时诊断
- 本次推送主体内容不变:生产 Nginx 模板收敛、host-only snippet 与运维/踩坑/决策文档同步
2026-10-01 18:38:56 +08:00
k88936 214055e319 给模型的工具结果不再脱敏或截断,脱敏只留在诊断侧
- bridge_tool_failure 原样回传 typed 错误的 message,去掉 redact_agent_runtime_error
- compose_direct_tool_outcome 只在写诊断时按 ToolFailure::redact_limit 脱敏截断,模型面用原文
- 编辑器执行与 Cocos 执行的成功回执去掉脱敏/路径替换,report 原样进工具结果
- 账号素材导入的 failures、生成/抠图/美术准备的 warnings 不再脱敏
- 删除随之失效的 bridge_safe_warning_messages 及其断言脱敏的测试
2026-10-01 18:31:21 +08:00
k88936 7db769c5bb 并发追加指令用例不再钉死败者错误文案
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m29s
Project CI / Backend tests (pull_request) Failing after 16s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m58s
Project CI / Frontend tests (pull_request) Successful in 2m11s
Project CI / Repository checks (pull_request) Failing after 17s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m44s
Project CI / Native shell tests (pull_request) Successful in 5m43s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 11m51s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 10m47s
- runtime_protocol/steering.rs:concurrent_distinct_frozen_root_steers_create_only_one_replacement 的败者断言改为「根 Run 已被接管」类错误收口,覆盖三种真实交错(替代 Run 已写回 session 状态 / 仅终止旧根 Run / 状态切换中途)
- 该用例要守的结构不变量保持不变:恰好一次成功、一次失败、只产生一个替代 Run
- 该断言此前在分片里约三成概率因文案不同而假红,而三种文案都由生产侧抢占顺序决定,不是用例要测的结构语义
2026-10-01 18:28:54 +08:00
k88936 6af95b8a22 回退「工具回执进 message 前先按各自预算做有界序列化」
- 撤销 004889f27:给模型的工具结果不做任何截断,报告原文完整回给模型
- 撤销 tool/error.rs 的 bounded_report_text 及 browser_playtest / cocos_execute / environment_check / editor_execute 四处调用
- 截断与脱敏只保留在诊断/审计侧(persist_agent_runtime_error)
2026-10-01 18:28:26 +08:00
k88936 ac0b69875f 删除已退役 Supervisor 的持久进程协作治理用例
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
- tests/command_runtime.rs:删除 `process_session_supervisor_collaboration_blocks_stdin_but_allows_poll_and_terminate_in_isolated_registry`——Supervisor 已于 2026-09-21 永久退役(项目对话收敛为 DirectProject 与 Design Agent,前端零引用),这条用例不再有现役调用方
- tests/mod.rs:同批删除它唯一的夹具 `process_session_supervisor_collaboration_governance_fixture`(256 行)
- 保留 `process_session_agent_runtime_*_isolated_registry` 两条兄弟用例:它们走的是未退役的 `code-prototype` 路径,且仍是通用 process_session 收口的守门人
- 该用例也是分片偶发假红的来源:慢容器上 terminate 收口按设计翻成 needs-reconciliation(finalize_live_process_session 的 2 秒排水窗口),退役面不值得继续钉
- 验证:用例总数 3154 → 3153;两条兄弟用例通过;无新增编译告警;check:encoding、git diff --check 通过
2026-10-01 18:17:30 +08:00
k88936 f435d48399 AGC 认证错误改为每个变体一个具名载荷类型
- auth_error.rs:枚举改为 newtype 变体,每个变体持有一个同名 `#[ts(export)]` 载荷结构体
- auth_session.rs:41 处构造点改为 `ClientAuthError::X(X { .. })` 并导入载荷类型
- 重新生成 services/generated:ClientAuthError.ts 变成 `{ type } & 具名类型`,新增 19 个载荷类型文件
- tests/clientAuthError.test.ts:新增编译期用例,switch (error.type) 分支里错误窄化成具名载荷类型
2026-10-01 18:08:18 +08:00
k88936 31fbadf260 交付类工具的裸 cause 补工具前缀
- delivery_status 的 StatusUnavailable 文案改为「交付状态读取失败:{cause}」
- register_delivery_contract 的 ContractRejected 文案改为「登记交付合同失败:{cause}」
- update_plan 的 PlanRejected 文案改为「更新计划失败:{cause}」
- 这些 cause 是 direct_delivery 的内部机器码(如 delivery-status-worker-exited),原来单独回给模型时没有任何工具上下文
2026-10-01 17:56:33 +08:00
k88936 004889f273 工具回执进 message 前先按各自预算做有界序列化
- tool/error.rs 新增 bounded_report_text:把 JSON 载荷按给定预算先截断再拼进文案
- browser_playtest / cocos_execute / environment_check / editor_execute 的 report 变体改用该 helper,预算取变体自己的 redact_limit
- 最终可见的头部内容不变,只是不再把整份大载荷搬进多趟脱敏;超长报告被截掉的尾部本来也不会出现在最终文案里
2026-10-01 17:56:16 +08:00
k88936 b561db9249 删除认证失败上报的派生分类层,改为调用方按具体变体分流
- 删除 clientAuthErrorKind / clientAuthErrorNotice,clientAuthError.ts 只留 isClientAuthError 形状读取
- 删除 resolveClientAuthFailure 与 ClientAuthFailureResolution,AuthenticatedClient 直接 switch 具体变体名
- 同步重写相关单测与 ADR 第 3 节前端分流描述
2026-10-01 17:55:54 +08:00
k88936 7eb62b09e2 编辑器执行 code 的三种校验失败拆成独立变体
- EditorExecuteError 的 CodeInvalid 拆成 CodeEmpty / CodeContainsNul / CodeTooLong{got_bytes,max_bytes},每个 case 一个变体
- editor_execute/error.rs 新增 EDITOR_CODE_MAX_BYTES 常量,direct_tool_bridge 的校验改用该常量并分别返回对应变体
- 模型能从文案看出具体违反了哪条规则,不再只看到一句话笼统覆盖三种失败
2026-10-01 17:55:41 +08:00
k88936 bab88d62e0 includeSequenceFrames 类型错回显改用 not_text_repr
- direct_tool_bridge 里 IncludeSequenceFramesNotBoolean.got 由 value.to_string() 换成 not_text_repr(value)
- 与该工具其它「字段给了错误类型」的变体同一口径:回显按 120 字符截断
2026-10-01 17:55:04 +08:00
JenkenB 97617608ba 修正 Web 预检错误分流
Project CI / AI game creator shell Rust smoke (push) Successful in 1m46s
Project CI / AI game creator shell Rust crates (push) Successful in 1m10s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / Backend tests (push) Successful in 4m33s
Project CI / Native shell tests (push) Successful in 6m15s
Project CI / Frontend tests (push) Successful in 2m3s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 10m31s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 11m48s
Project CI / AI game creator shell web tests (push) Successful in 2m3s
Project CI / Repository checks (push) Successful in 3m31s
2026-10-01 17:54:53 +08:00
k88936 47b6454696 web_search 的 maxResults 类型错回显改用 not_text_repr
- direct_tool_bridge 里 MaxResultsNotInteger.got 由 value.to_string() 换成 not_text_repr(value)
- 与 query 的 QueryNotText 一致:不受信回显按 120 字符截断,不再把整段值带进错误消息与序列化 typed error
2026-10-01 17:54:51 +08:00
k88936 75e3152412 agc_generate_image 的 kind 不合法时回显截到 120 字符
- KindUnsupported 的 got 原来把整段 kind 原样带进文案与序列化错误;这条路径没有长度校验,与上方 KindNotText 的 not_text_repr 口径也不一致
- 改用 bounded_echo(kind),与其它不受信回显同一上限;仍保留开头的原值,模型能看出自己传了什么

验证:cargo fmt --check 通过
2026-10-01 17:52:38 +08:00
k88936 0354fd353c assetIds/localPaths 与 sliceCount 的类型错回显改用 not_text_repr
- ImportAccountAssetsField::not_string_array 与 GenerateImageError::SliceCountInvalid 原来把整个值 to_string() 后嵌进错误,MCP 预检又原样回给调用方,超大数组会整份被反射
- 改用共享的 not_text_repr(120 字符截断),与其它「给错类型」的回显同一口径

验证:cargo fmt --check 通过
2026-10-01 17:52:06 +08:00
k88936 6a4efa15ee 未登记的客户端工具名在构造处截到 120 字符
- dispatch 兜底分支构造 UnknownClientToolRejection 时改用 bounded_echo,客户端给的超长工具名不再原样进 to_user_msg 与序列化诊断
- 该名字在构造处就有界,后续 clone/序列化都受同一上限约束

验证:cargo check --bin genarrative-ai-game-creator-shell --tests 通过;cargo fmt --check 通过
2026-10-01 17:51:44 +08:00
k88936 7d51504e09 不认识的字段名回显限长到 120 字符,回显口径收进 tool/error.rs
- ToolArgumentsRejection::check 构造 UnknownField 时改成 bounded_echo(field),超长键名不再整份进文案与诊断
- 有界回显的常量与 bounded_echo 从 arguments.rs 移到公共 tool/error.rs(BOUNDED_ECHO_MAX_CHARS=120),not_text_repr 变成它的 JSON 值封装,实现仍只有一份

验证:cargo check --bin genarrative-ai-game-creator-shell --tests 通过;cargo fmt --check 通过
2026-10-01 17:50:57 +08:00
k88936 0e60ecb769 共享入参解析器补「入参必须是对象」的契约断言与文档
- optional_text/required_text/page 加 debug_assert!(arguments.is_object()):非对象时 Value::get 恒为 None,会把 NotObject 静默判成「没给字段」或默认分页
- 文档写明调用方必须先跑 ToolArgumentsRejection::check;所有现有调用点已满足,release 行为不变

验证:cargo test --bin genarrative-ai-game-creator-shell -- agent::direct_tool_bridge:: agent::direct_tools_mcp:: 72 passed / 0 failed;cargo fmt --check 通过
2026-10-01 17:49:25 +08:00
k88936 b7d77053ea 分页 offset/limit 的类型错回显改用 not_text_repr,与其它字段同一限长口径
- arguments::page 的 OffsetNotInteger / LimitNotInteger 原来用 value.to_string() 无界回显,超大对象/字符串会整份进错误消息与诊断
- 改用共享的 not_text_repr(120 字符截断),与 optional_text 及内联判类型的字段一致

验证:cargo fmt --check 通过
2026-10-01 17:47:23 +08:00
k88936 c2a27aed2a 新增认证失败上报判据的端到端测试
- 新测试 mock 模块级 @tauri-apps/api/core invoke,从而能观察 report_client_error 是否被调用
- 覆盖:手机号或密码错误、发码限流不写错误池;网络不可达带 auth/login 上报一次
- 已用变异验证:把分流改成一律上报时,两条业务用例会失败
2026-10-01 17:41:45 +08:00
k88936 ae3811a8aa 部分导入按失败回的口径落注释:不再按 write_permit 区分 isError
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m35s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m19s
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / Frontend tests (pull_request) Successful in 2m0s
Project CI / Repository checks (pull_request) Failing after 21s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m48s
Project CI / Native shell tests (pull_request) Successful in 5m44s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 10m38s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 11m15s
- bridge_import_account_assets 的 failed/partial 分支补注释,说明 partial 与 failed 一样按失败回是有意为之,口径已确认
- 只加注释,不改行为:report 仍在消息里,Direct 回合与外部 MCP 客户端的 isError 保持一致
2026-10-01 17:16:36 +08:00
k88936 bdd315f12f AGC 壳 Rust 单测统一 mock provider 请求预算,修掉分片 4 第二次往返超时
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m1s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m37s
Project CI / Backend tests (pull_request) Successful in 3m54s
Project CI / Frontend tests (pull_request) Successful in 1m54s
Project CI / Native shell tests (pull_request) Successful in 5m53s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 9m53s
Project CI / Repository checks (pull_request) Successful in 2m28s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m52s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 11m53s
- tests/mod.rs 新增 MOCK_PROVIDER_REQUEST_TIMEOUT(30 秒),作为「等一条 mock provider 请求到达」的唯一预算
- tests/sessions.rs 的 7 处 recv_timeout 由散落的 2 秒 / 10 秒改为引用该常量,确认「不会有下一个请求」的 200ms 负向断言保持不变
- wait_for_captured_mock_request 的内联 10 秒预算改为引用同一常量
- pitfalls 记录该超时是 CI 分片并发放大所致,而非产品缺陷,并附本次复核证据
2026-10-01 17:16:16 +08:00
k88936 a7cc28134d AGC Rust 分片失败复核改按名单精确匹配,覆盖 bin 目标用例名
- run-rust-shell-test-shards.mjs:extractFailingTestNames 改为按本片名单精确匹配用例名,不再用 `tests::` / `process_session::tests::` 前缀白名单——bin 目标的 `agent::…::tests::…` 原先永远进不了复核,偶发假红直接判红
- run-rust-shell-test-shards.mjs:复核也失败时同时保留首次失败现场,不再只留复核那一次
- run-rust-shell-test-shards.test.mjs:新增「命名空间用例名也会进复核」的回归用例
- 验证:node --test apps/ai-game-creator-shell/scripts/run-rust-shell-test-shards.test.mjs 3 项通过
2026-10-01 17:16:16 +08:00
k88936 c177dde5c3 AGC 壳通知计数按线程隔离,修掉跨用例后台广播串台
- runtime_driver/entrypoints.rs:测试通知计数从进程级 AtomicU64 改成线程作用域 Cell,只统计本测试线程发出的通知
- runtime_driver/entrypoints.rs:`--test-threads=1` 只串行测试线程,前一个用例放行留下的后台回合仍在宿主 async runtime 工作线程上广播「运行中的项目」通知,不再是断言的取样来源
- thread_manager/mod.rs:同步用例注释,说明计数为何按线程隔离,断言语义(放行 1 / 内容变化 1 / 重复进度 0 / 收口 1)不变
- pitfalls:记录现场、根因、现行口径与验证(修复前 5 次红 3 次,修复后 CI 那一片连跑 18 次全绿)
2026-10-01 17:16:16 +08:00
k88936 ede3457464 edit_image 的派生失败转发内层前缀:补注释说明这是有意为之
- ResourceEdit 继续原样转发 CreateOrDeriveResourceError 的「生成或派生资源失败:…」,不改文案
- 注释写清理由:该路径与 agc_create_or_derive_resource 同源,内层文案指向真实失败环节;调用方身份由运行时错误事件的 code(工具名)承担,不靠前缀区分工具
2026-10-01 17:13:44 +08:00
k88936 5b59d50a8c 错误事件 sidecar 的 error 字段递归脱敏,保留 typed 错误的 JSON 形状
- persist_agent_runtime_error 落盘前对 error 的字符串叶子走与 message 同一条脱敏流水线(URL/项目路径/绝对路径/密钥),键、类型、数组长度都不动
- 每个叶子有 4000 字符预算(AGENT_RUNTIME_ERROR_MAX_ERROR_TEXT_CHARS),sidecar 本身的 16 KiB 上限不变
- 返回的 AgentRuntimeErrorEvent.error 与落盘内容一致;应用日志那条 error 行原本就已脱敏,行为不变
- 新增回归测试:形状留住(变体名/字段名/数字/布尔),叶子脱敏(<absolute-path>、<redacted-url>、无 token)
- 更新原测试里「typed 错误原样进 sidecar」的注释

验证:cargo test --bin genarrative-ai-game-creator-shell -- agent::runtime_error:: 4 passed / 0 failed;cargo fmt --check 通过
2026-10-01 17:12:32 +08:00
kdletters bc6f40d6db 完善 Claude sidecar 超时诊断
认证缺失时提前返回可操作错误

超时时保留 sidecar stderr 摘要
2026-10-01 17:04:24 +08:00
k88936 6b31d4971b Merge remote-tracking branch 'origin/master' into fix/wrong-report
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m33s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m12s
Project CI / Backend tests (pull_request) Successful in 3m55s
Project CI / Frontend tests (pull_request) Successful in 2m12s
Project CI / Native shell tests (pull_request) Successful in 6m29s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 10m27s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 11m29s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m53s
Project CI / Repository checks (pull_request) Successful in 2m34s
# Conflicts:
#	docs/project-memory/shared-memory/decision-log.md
2026-10-01 17:01:52 +08:00
k88936 c7da67ed47 非字符串回显限长补齐到内联判类型的四处(承接上一提交)
- arguments.rs 导出 not_text_repr,optional_text 与内联判类型的字段共用同一份截断口径
- 抠图 backgroundMode / screenColor、美术准备 mode、生成图片 kind 这四处原来直接 value.to_string(),现在同样限长到 120 字符
- 测试补一条:art_preparation_mode 的超大数组回显必须带截断标记且长度可控

验证:cargo test --bin genarrative-ai-game-creator-shell -- non_text_field_values 通过;cargo fmt --check 通过
2026-10-01 16:55:29 +08:00
k88936 a22e3448a6 抠图的 backgroundMode / screenColor 类型错改成「必须是字符串」
- BackgroundModeNotText、ScreenColorNotText 只在入参不是字符串时触发,文案却回的是取值白名单,模型会以为类型对了、只是值不对
- 改成与本模块其它 *NotText 变体一致的「必须是字符串」;取值白名单仍由 BackgroundModeUnsupported / ScreenColorMalformed 承担
- 文案字面变化:backgroundMode「必须是 complex 或 flat」→「必须是字符串」;screenColor「必须是 auto 或 #RRGGBB」→「必须是字符串」

验证:cargo fmt --all --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -- --check 通过
2026-10-01 16:52:42 +08:00
k88936 97c3fc83c1 非字符串入参的回显截断到 120 字符,不再把整个对象原样带进诊断
- arguments::optional_text 里的 not_text 改为传截断后的序列化值:类型错只需要看出「传了什么」
- got 同时出现在 to_user_msg 与序列化 error 里,限长后工具结果与诊断 sidecar 都不会被超大数组/对象灌爆
- 复用 runtime_state::truncate_agent_runtime_text,不新增第二套截断实现
- 测试补一条:超大数组回显必须带截断标记且长度可控

验证:cargo test --bin genarrative-ai-game-creator-shell -- non_text_field_values 通过;cargo fmt --check 通过
2026-10-01 16:51:50 +08:00
k88936 8fefd393b2 Merge remote-tracking branch 'origin/master' into fix/wrong-report
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
# Conflicts:
#	docs/project-memory/shared-memory/decision-log.md
2026-10-01 16:51:37 +08:00
k88936 8834f844e6 分页助手加 debug_assert,默认 limit 配到上限之上会在测试期炸出来
- arguments::page 增加 debug_assert!(default_limit <= max_limit):默认值本身越界时不再让省略 limit 的请求静默地每次都报 LimitOutOfRange
- 文档注释写清这条调用点契约;三个列表工具当前都满足(50/100 对 100)

验证:cargo test --bin genarrative-ai-game-creator-shell -- agent::direct_tool_bridge:: agent::direct_tools_mcp:: 72 passed / 0 failed;cargo fmt --check 通过
2026-10-01 16:47:32 +08:00
k88936 402233ae9e 去掉续期凭据缺失文案里的 result-unknown 机器前缀
- AuthResponseMalformed 变体就是分流键,该前缀没有任何解析方,去掉后用户看到完整中文提示
- 该模块的 result-unknown 前缀只在本条出现,其它 result-unknown 属于 resource_editor 等其它链路
2026-10-01 16:47:12 +08:00
k88936 c5153a7ed2 去掉认证网络失败文案里的 network-error 机器前缀
- AUTH_NETWORK_ERROR / AUTH_NETWORK_TIMEOUT 不再带 network-error: 前缀,用户看到的就是完整中文提示
- 前端按 type 分流后不再解析该前缀,没有任何 Rust/TS 消费方依赖它
- auth.suite.ts 与 clientAuthHost.test.ts 的对应 fixture/断言同步更新
2026-10-01 16:46:46 +08:00
k88936 9bdeed13a0 kind 白名单从 DirectResourceGenerationKind::ALL 取,删掉第二份字符串清单
- DirectResourceGenerationKind 新增 ALL: [Self; 5],顺序与 parse/as_str 一致
- KindUnsupported 的「只允许 …」改为由 ALL 生成,新增 kind 时不再需要手动同步这句文案
- 文案字面不变:image、video、character-animation、sound-effect、background-music

验证:cargo fmt --all --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -- --check 通过
2026-10-01 16:45:10 +08:00
k88936 698b3ffc90 抽出 presentAuthFailure 收口登录与发码的失败处理
- 登录/发码两处 catch 的"分流 + 提示 + 上报"逻辑抽成 presentAuthFailure(error, fallback, action)
- 错误池指纹的 action 由调用点传入,避免新增认证动作时各自拼一套导致指纹漂移
2026-10-01 16:44:36 +08:00
k88936 3c2dc57c57 未登记资源指引抽到 tool/error.rs,生成与抠图共用同一份文案
- UNREGISTERED_SOURCE_HINT 从 create_or_derive_resource/error.rs 移到公共 tool/error.rs
- remove_background 的 SourceAssetNotRegistered 改为拼接同一常量,去掉逐字复制的副本
- 两个工具的 SourceAssetNotRegistered 文案字面不变(前缀各自保留「生成或派生资源失败:」/「抠图失败:」)
- remove_background/error.rs 一处 format! 收口改动使该 match 触发 rustfmt 重排,随该文件一并 rustfmt(只此一个文件,其余文件未动)

验证:cargo fmt --all --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -- --check 通过
2026-10-01 16:44:25 +08:00
k88936 d1e637b9fd 修正 DirectTurnEnqueueFailure 文档对 message 来源的描述
- 原文写"一处生成的 Display 文案"不准确:可留痕的宿主/环境失败走 record_direct_codex_failure 的 direct-codex-failure:v2 收口文案
- 文档改为写明两条来源(Display 与脱敏诊断收口文案),并保留"Rust 侧不解析该字符串"的约定
2026-10-01 16:43:03 +08:00
k88936 b202c70271 退役词表:DirectProject 域不再使用"拒单"
- direct_turn_error.rs 模块文档把"拒单载荷"改写为"入队失败载荷",与 2026-09-24 ADR 的词表一致
- agentRuntimeModel.test.ts 的用例名与注释同步改成"入队失败"
2026-10-01 16:42:43 +08:00