Repository navigation
kb init(jiuwenswarm): deepen - #277
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 49b6a371c9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| | PR 描述在做什么 | 精确规则 | 第一批 live 源码 | | ||
| |---|---|---| | ||
| | common、config、配置、模型选择、model catalog、mode、工作区、cron、updater、doctor、hooks、kv cache… | 入口 | `jiuwenswarm/common/_build_config.py`、`jiuwenswarm/common/chat_final.py`、`jiuwenswarm/common/cleanup.py` | | ||
|
|
There was a problem hiding this comment.
Route Direct reviews to the new rule pages
For changes such as jiuwenswarm/common/config.py, _routes.yaml still routes Direct to this _index.md; the returned quick map is marked ok/read_required: false and contains only the generic 入口 row plus this link, not any of JIUWENSW-I1/I4/I13/I17. The same problem affects the new extension and process-CLI rules, so the Direct contract stops navigation without presenting any of the 16 rules even though this commit enables the lifecycle. Point the owner routes at the new rule pages or embed their rule rows in the routed quick maps.
AGENTS.md reference: knowledge/AGENTS.md:L16-L16
Useful? React with 👍 / 👎.
|
|
||
| ## JIUWENSW-I39 — _write_worker_result 是 worker 与父 REPL 之间的接口,字段和写入时机都不能随意改 | ||
|
|
||
| - worker 和父 REPL 之间没有传输层,只通过 `_session_result_file`(内容只有 session_id)和 `_worker_result_file`(JSON,字段为 `operation`、`session_id`、`mode`、`work_mode`、`project_dir`)交换已提交的状态。改字段名、删字段、换编码,都会破坏父进程这一侧的解析。 |
There was a problem hiding this comment.
Describe pre-commit create results accurately
In the pinned app.py create flow (lines 282–321), _write_worker_result runs before the AFTER_RESULT_DELIVERY commit, and a commit failure is logged rather than rethrown; therefore the parent can receive a result for a session that has not been committed. Calling these files an exchange of only “已提交的状态” gives reviewers the wrong lifecycle invariant and contradicts the required early write in the next bullet. Distinguish create from the switch/fork paths instead of labeling every exchanged result committed.
Useful? React with 👍 / 👎.
kb initstage deepen forjiuwenswarm(openJiuwen-ai/jiuwenswarm).f0a69728c96b5961d993449f1a901cbd2f4dac5b856f3adf8e0e9acb30dbdd0a2f21c8fda158a152Human-merged. Rules were screened by the docs redundancy filter, checked at the pin, and given an advisory verdict;
failrules are already removed.repos/jiuwenswarm/components/common-core/rules.mdrepos/jiuwenswarm/components/common-core/rules.mdrepos/jiuwenswarm/components/common-core/rules.mdrepos/jiuwenswarm/components/common-core/rules.mdrepos/jiuwenswarm/components/extensions-plugins/rules.mdrepos/jiuwenswarm/components/extensions-plugins/rules.mdrepos/jiuwenswarm/components/extensions-plugins/rules.mdrepos/jiuwenswarm/components/extensions-plugins/rules.mdrepos/jiuwenswarm/components/extensions-plugins/rules.mdrepos/jiuwenswarm/components/extensions-plugins/rules.mdrepos/jiuwenswarm/components/extensions-plugins/rules.mdrepos/jiuwenswarm/components/gateway-channels/rules.mdrepos/jiuwenswarm/components/gateway-channels/rules.mdrepos/jiuwenswarm/components/gateway-channels/rules.mdrepos/jiuwenswarm/components/gateway-channels/rules.mdrepos/jiuwenswarm/components/gateway-channels/rules.mdDropped rules
save_models_candidatedeep-copies the candidate and adds missing business IDs before writing it, so it does not write it unchanged (Lconfig.py:L1547-L1621显示:无变化时返回None的是migrate_model_business_ids内的_mutate;migrate_model_business_ids本身返回changed,即False。此外,config.py:L1496-L1540只在model_config_obj是字典时写入_source,并非无条件写入。", "non_contradictory": "所示规则中没有冲突。I1 也规定 mutator 返回None时跳过写盘;I5 对 `resolve_coding_memory_project_name确实使用清洗后的 basename、canonical 路径的 SHA-256 前 12 位及所述截断方式。但“改动其中任何一个,已有项目都会映射到新目录”过于绝对:例如修改_INVALID_DIRECTORY_CHARS只会影响名称含相关字符的项目。见 coding_memory_paths.py:L14-L80。", "non_contradictory": "所示 I1、I4、I5、I7、I9、I13–I18 均未对 coding memory 目录键提出冲突要求。",settle只检查checkpoint_open是否为 False,并未验证此前执行过close;未知动作也会在store.replay之前被拒绝。因此规则的这两处表述比代码更绝对。", "non_contradictory": "所示 I21 的重放去重要求及 I22 的状态上报顺_safe_upstream_error, but the configuration-error path sendsstr(exc)directly to_send_gateway_error. That helper does not sanitize its message. Evidence: qwen_omni_gateway.py:L42-L79 and L104-L175.", "non_contradictor_persist_env_updates仅对非空值使用json.dumps;空值写成KEY=。规则称值都用json.dumps加引号,与代码不符。此外,_provider()将多种环境变量组合映射为joyai,因此它与update_settings并非严格的互逆运算。", "non_contradictory": "所示 I20–I29、I31 分别约束任务、网关和 JoyAI 等行为;没有与这条设置持久化规则冲突的要求。", "actionable": "settingsdescribe_session先调用 Runtime,取得 descriptor 后才校验频道(client.py:L151-L166)。其余关于 commit、abort、权限快照及会话归属检查的描述有相应代码支持。", "non_contradictory": "所列相邻规则 I32、I33、I35–I43 没有提出与该规则冲突的要求。", "actionable": "规则给出了可检查的缺陷条件:新增 Runtime 调用时核对频道校验;switch、fork、delete 调用前核对live_input.close()未经过_bounded_cleanup。其余关于取消请求、异常分支和内层finally的描述分别得到 L566-L582、L867-L888、L908-L929 支持。", "non_contradictory": "所示周边规则没有要求放宽 chat 专属的cleanup_session条件,也没有要求跳过取消或关闭步骤;I37 对控制器close()的要求与本规则所列步骤没有直接冲突。", "actionable":interactiveis false; it does not establish that every mismatch causes that outcome. L530-L563 supports the request methods and parameters, but does not show a cal_pump仅在error is not None时才抛出;没有错误时不会抛出。证据:duplex_control.py:L173-L200。", "non_contradictory": "所示其他规则没有与队列上限、停止顺序或流任务清理要求冲突的内容。", "actionable": "审查者可据此检查队列上限、stop_input的清队列顺序,以及consume和close_streams是否妥善处理任务。证据:duplex_control.py:L67-L70、L244-L251、L287-final,root_terminal, orexplicitbefore settingcompleted = True. The proposed rule gives the no-pending and not-suspended guards but omits that required completion signal; it also omitsevent.is_completefrom theroot_terminalcondition (L2_failis too broad: a concurrent read raisesRuntimeErrordirectly (duplex_input.py:L215-L220). The cited excerpts also do not show howread_documentuses_reading.", "non_contradictory": "The surrounding rules I32–I42 address session, runtiCoverage:
Hot paths without rules:
jiuwenswarm/channels/desktop/desktop_app.py(11 PRs)jiuwenswarm/runtime/service.py(10 PRs)jiuwenswarm/runtime/session/coordinator.py(4 PRs)jiuwenswarm/runtime/session_input.py(4 PRs)jiuwenswarm/symphony/service.py(4 PRs)jiuwenswarm/runtime/cron/models.py(3 PRs)jiuwenswarm/runtime/cron/store.py(3 PRs)jiuwenswarm/common/auth/service.py(2 PRs)jiuwenswarm/instance_manager/lock.py(2 PRs)jiuwenswarm/observability/config.py(2 PRs)jiuwenswarm/observability/sink.py(2 PRs)jiuwenswarm/observability/store.py(2 PRs)jiuwenswarm/runtime/cron/cron_job_mutations.py(2 PRs)jiuwenswarm/runtime/cron/etcd_store.py(2 PRs)jiuwenswarm/runtime/cron/store_base.py(2 PRs)jiuwenswarm/runtime/session/model.py(2 PRs)jiuwenswarm/runtime/session_provisioner.py(2 PRs)jiuwenswarm/symphony/adapter.py(2 PRs)jiuwenswarm/symphony/config.py(2 PRs)jiuwenswarm/symphony/evolution/service.py(2 PRs)jiuwenswarm/symphony/evolution/session_consumer.py(2 PRs)jiuwenswarm/acp/stdio_client.py(1 PRs)jiuwenswarm/acp/subprocess_env.py(1 PRs)jiuwenswarm/app.py(1 PRs)jiuwenswarm/common/auth/account_kit.py(1 PRs)jiuwenswarm/common/auth/apig.py(1 PRs)jiuwenswarm/common/auth/model_catalog.py(1 PRs)jiuwenswarm/common/auth/passthrough.py(1 PRs)jiuwenswarm/common/auth/remote_config.py(1 PRs)jiuwenswarm/common/auth/session_owners.py(1 PRs)Notes: