Skip to content

fix(ui): preserve available Agent memory feedback - #6765

Merged
huangruiteng merged 2 commits into
mainfrom
codex/reward-memory-availability-copy-20261018-172716
Oct 17, 2026
Merged

huangruiteng merged 2 commits into
mainfrom
codex/reward-memory-availability-copy-20261018-172716

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

A Goal with one available independent Agent memory route and an unbound sibling showed both “Independent binding · Available” and “No experience configuration is currently enabled.” The empty-state condition used the aggregate binding diagnostic, which can describe an unhealthy sibling while another route is usable.

Use the existing typed effective_available projection for the Goal-wide notice. Show “no usable experience configuration” only when availability is explicitly false; preserve each Agent's detailed status and leave unknown availability unresolved.

同一 Goal 中,独立 Agent 的经验配置可用时,不再因其它绑定未配置而显示全局空状态;全部不可用与状态未知分别处理。

  • Entry: Goal settings → Memory & sources → Learn from outcomes.
  • Outcome basis: reproduced settings contradiction; intended base loopx-project/loopx:main.
  • Before → after: the same mixed-availability projection fails on the baseline installed bundle and passes on the changed bundle, with the available Agent row visible.

Author Declaration

  • Written by: OpenAI Codex, GPT-6 family (model_agent).
  • Specification and revision: docs/development/design.md (“Earn The User's Attention”), docs/development/frontend-delivery.md (“Task-first delivery”), and projectRewardMemoryBindings at baseline 84dfa63c26a6b03a3c5e6039108f1540e8b2b1bb.
Criterion Disposition Symbol / path Evidence
Reuse the existing availability owner implemented goal-capability-settings.tsx consumes effective_available Mixed available/unbound regression
Keep failure and uncertainty honest implemented Existing memory empty-state notice and Agent rows No usable routes show the notice; unknown availability does not assert absence
Verify the packaged interaction implemented Existing capability-scope scenario and installed configuration API Desktop/mobile capture; isolated backend enable, drift/restore and scoped disable

Self-check: read the typed aggregate and its callers, reproduced the rendered contradiction before changing the condition, and inspected the packaged viewports. The regression stays in the existing capability scenario.

Scope And Continuation

Complete within this UI repair: one existing projection field, bilingual notice, and focused regression/evidence. The configuration transaction and typed binding owner retain their existing behavior. No new setting, module, vocabulary or provider abstraction is introduced. The bounded refactoring pass found no additional extraction useful for this predicate.

Maintainer review, merge and released-App adoption remain separate from this proposal. Broader memory effectiveness and task-utility qualification are outside this UI repair.

Validation

  • Tested revision: 558c82e037e41ddcb7fff964dce4a8e4b92016ef.
  • Bundle built at production-code commit 167ec262ff286a14fe10031e9d398680a74bca08; its source fingerprints were validated against the final head. The second commit changes only regression framing/waits and synthetic images. The final scenario source was exercised against that installed bundle.
  • Run state: finished for the checks below; remote CI is pending.
  • Input classes: synthetic, public_fixture.
Check kind Result Public-safe evidence / limitation
static passed Dashboard tsc --noEmit; normal Chat bundle build and wheel installation; bundle integrity/source-fingerprint validation
unit passed reward-memory-settings.test.mjs: both existing scope/write-only-path serialization checks
regression_parity passed Extended capability-scope fails on the baseline with the contradictory empty claim and passes on the changed installed bundle; covers mixed availability, none available, unknown availability and narrow overflow
real_entrypoint passed LOOPX_PERSONAL_WORKSPACE_PACKAGED=1 LOOPX_PERSONAL_WORKSPACE_SCENARIO=capability-scope node examples/personal-workspace-browser-smoke.mjs with an isolated installed interpreter
real_backend passed Isolated installed LoopX 2.0.0a1 HTTP configuration owner over disposable synthetic control state, with an actual scoped OpenViking connection: missing config, enable, digest drift/restore, and single-Agent disable. Shared declarations stayed identical. Raw evidence remains private.
manual passed Ego Lite walkthrough of the installed packaged pages; Chinese/English notice, desktop/mobile, and typed readback; no horizontal overflow at 390px
static passed Changed-path loopx check: 6 checks, no errors/warnings; bilingual RFC diff check and git diff --check

Coverage boundary: the public browser fixture checks presentation, while the separate installed-backend walkthrough checks the real owner. This change makes no storage/performance or memory-benefit claim; backend decision and storage code are unchanged. An installed customer App and subsequent task outcomes were not qualified.

Visual Evidence

UI impact: changed. Actual packaged browser captures with public synthetic fixture data, not live operating state. Desktop is 1512×982; mobile is 390×844. The captures show the binding readback reached through the existing controls. The available Agent and failed sibling stay visible; the contradictory Goal-wide notice is removed. Failures and unknown states retain their own treatment.

Before — baseline installed bundle

Before: available Agent contradicted by the empty notice

After — source-verified installed bundle

After: available Agent and failed sibling remain distinct

After: narrow binding readback

  • Preview: disposable validation servers were stopped; the captures and packaged scenario above are retained.
  • Attention/craft review: keep the existing purpose, target and Agent rows; remove the false absence claim. No layout, color, motion or new controls were added.

Type of Change

  • Bug fix
  • Test update

LoopX Area

  • Public docs or presentation surface (dashboard)

Shared-authority RFC Fixture Impact

N/A: this PR changes a display predicate and regression captures; it does not change an authority provider or claim migration progress.

Boundary Checklist

  • Public source, body and images contain synthetic data only; private operating evidence and credentials are excluded.
  • Scope is the reproduced memory-settings contradiction; related work was checked.
  • No paired RFC changed; the bilingual diff check passed.
  • Actual packaged desktop/mobile visual evidence is embedded above.
  • Both commits have DCO Signed-off-by trailers.

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

APPROVE — 当前完整 head 558c82e037e41ddcb7fff964dce4a8e4b92016ef 没有发现阻塞性问题;结论只覆盖下述已验证的展示结果与边界。

动机

为多个 Agent 检查经验配置的用户,需要分清整个 Goal 是否有可用路线,以及具体哪条路线仍需修复。

一个独立 Agent 路线可用、另一共享路线缺少配置时,原页仍宣称整个 Goal 没有启用配置;用户可能因此重复配置健康路线。当前页只在明确没有任何可用路线时显示总体提示,具体失败路线继续单列。

本轮正常构建产物和真实配置读接口中,可用与不可用 Agent 同时保留,总体空态不再与健康路线矛盾;全部不可用仍提示,未返回可用性时不捏造“没有”。

本次只修复经验配置可用性的展示,不启用记忆、改写绑定、验证云端服务收益,或宣称自动召回与写回已经取得长期净收益。

改动思路

直接消费既有类型化 owner 的 effective_available;它表示至少一条实际读回为可用的路线,和聚合最差绑定状态不是同一个问题。无需新增布尔状态、后端决定源或配置开关。

当前 PR 边界是一条既有可用性投影的空态条件及其双向回归;绑定选择、配置写入、隔离与 provider IO 全部留在原 owner。

不修改会留下已观察到的阅读负担或错误状态;只删除解释或所有空态也会丢掉必要事实。当前修复从既有 owner 的事实出发,不新增配置准备、信息重填或确认回合。已有用户意图与权限足够,普通浏览需要的额外强制交互为零;帮助展开属于自愿探索,不是执行前置步骤。

具体改动

以 84dfa63c26a6b03a3c5e6039108f1540e8b2b1bb 的 docs/development/design.md 为不可变验收基线,并结合已读的 docs/development/frontend-delivery.md。采用前述 attention/真实任务与读回建议;恢复 RFC、全部迁移和长期净收益不是这次有界 UI 修复的附加门槛。

验收映射:Earn The User's Attention:implemented,CapabilityCatalog reward_memory notice and existing per-Agent rows,以 Same mixed-route scenario fails base and passes current packaged build 核对;Status And Control-Plane States:implemented,projectRewardMemoryBindings → effective_available → notice,以 Mixed/none/missing-field cases, real configuration HTTP projection and per-Agent readback 核对。

关键代码讲解

  • CapabilityCatalog(apps/presentation/dashboard/src/features/personal-workspace/goal-capability-settings.tsx:260):Uses explicit false for no usable experience configuration。
  • projectRewardMemoryBindings(loopx/control_plane/capabilities/reward_memory_binding.ts:61):Existing typed owner separates worst binding status from any available route。

关键分歧在于“最差路线的绑定状态”和“有没有至少一条可用路线”是两个读模型问题。既有 TS owner 会保留每条 Agent 的观察,再从 available 行派生 effective_available;所以 unbound 与 true 可以同时合法出现。改写客户端聚合或把 unbound 改成 verified 都会遮蔽坏路线,当前条件复用已有值更合适。

我用同一个新 capability-scope 场景运行旧84dfa构建,实际在“可用路线却被 Goal 空态反驳”的断言失败;相同场景在当前构建通过。旧版本运行器因期望另一种错误文案退出4,这个测试包装问题和原断言均保留,没有把失败重新标绿。另以真实配置、实际 Python/TS owner 和生产 HTTP 投影创建一次性合成状态:reviewer 独立路线可用,writer 共享路线缺少配置,整体 unbound / effective_available=true。真实打包页呈现这两个不同事实,没有总体空态。

现有场景还覆盖全部不可用时显示新提示、可用性字段缺失时不显示,以及 Goal/设备默认切换不携带旧草稿或触发额外应用。既有独立绑定的禁用、漂移、修复、共享路线保持和不跨 Agent 回退由34个配置/运行时/API测试与5个类型化测试核对。

变更分类:5个路径,文本 +34/-1;1个产品条件、既有场景33行和3张合成状态截图。图片是展示材料,运行和状态结论由实际读回支持;提交范围的 DCO trailer 已逐一核对。

对主干的风险

最强反例是手工可用夹具与真实 owner 的语义不一致,或条件把缺失字段强转成 false。我补充真实配置 HTTP/TS 投影与打包 Ego 读回,看到 reviewer 可用和 writer 缺配置同时保留;unknown 使用严格 false 判定,缺失值不会被读成没有。窄屏无横向溢出,返回原作用范围仍由既有配置流程管理。一次性夹具读回0次写入尝试,配置与原始文件不变;没有使用活跃 Goal 做测试。

当前 build:chat、打包 capability-scope、34个配置/运行时/API测试、5个 TS 测试,以及 premerge 4项直接检查和5项选中检查全部通过,语义与公开边界扫描包含在内。本轮没有读取、轮询或等待 CI。测试涉及的 provider 使能/漂移覆盖是既有本地测试边界;真实 HTTP页面使用合成有效回执来检验生产投影,没有冒充云端 provider 在线、自动 hook 采用或长期净收益。

展示条件不会扩大绑定授权,特定 Agent 的关闭仍不能继承共享路线。这里没有新共享枚举、协议版本、模型调用、配额或调度变化,也没有另开 Python 决策源。无需为了一个已有投影条件再抽象一层。

语义与 CI 对齐

本次复用现有类型化投影和协议词汇;无 substring 分类或提示文本充当机器义务。开发期 advisory 对 TSX 并不提供语义证明,因此另外读了实际 owner/caller;随后执行完整 semantic smoke。上述本地验证通过与 GitHub reviewDecision、其他 review、线程及合并授权仍是独立条件,不能用其中一个替代另一个。

我的整体评价

交付判断为 goal_achieved,仅指开头界定的这一展示任务;long_horizon=preserved,user_experience=improved。同一旧构建反例与当前构建成功形成差异证据,真实配置投影也独立支持这个条件;修复不会把坏路线误标成健康。

相邻边界的收敛检查已经完成:直接复用 effective_available 已经是最小有用收敛;另设字段、同步状态或通用判定器都不增加当前价值。 兼容性没有新版本分支或持久化迁移,默认关闭及既有执行授权保持。剩余风险是上述未测平台、已安装 App 与 live model/provider 边界,不能扩大为完整长期产品资格。

English verdict: APPROVE. The current packaged UI consumes the existing effective-availability owner correctly, preserves unhealthy sibling details, and distinguishes unavailable from unknown. No merge, provider activation or full lifecycle qualification is authorized by this review.

@huangruiteng
huangruiteng merged commit 0da60df into main Oct 17, 2026
29 of 39 checks passed
@huangruiteng
huangruiteng deleted the codex/reward-memory-availability-copy-20261018-172716 branch October 17, 2026 19:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants