Repository navigation
fix(benchmark): audit non-disclosing credential probes - #7613
Conversation
Signed-off-by: huangruiteng <huangrt01@163.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; OpenAI; gpt-6.1-sol; runtime_reported; reasoning_effort=max
REQUEST_CHANGES at f86b80b006b4ce6a2807916031a06f9c815f44fe。运行时的有界调整与负例已验证;有一项需要在本 PR 修正的 canonical 文档冲突。
动机 / Motivation
运行 benchmark 完整性资格检查的维护者,在隔离轨迹中出现未泄露凭据的环境探测时遇到此问题。
原先仅执行 env、且只返回普通环境字段,也会被直接取消资格;本次改为保留待审警告,凭据值暴露和显式环境合同越权仍拒绝。
真实 CLI 已验证新的待审结果及拒绝边界;当前 canonical 使用说明仍把同一探测写为必拒,交付尚需同步这条规则。
本 PR 只改变事后资格裁决,不改变 runner 隔离、凭据注入、实际任务执行或官方评分,也不证明原私有实验和长期收益。
改动思路 / Approach
分类与裁决继续留在既有 benchmark-toolkit integrity owner,复用现成审计状态;不新增开关、存储、权限 owner 或 Python/TypeScript 并行决定。
当前 PR 的完整边界应包含这项默认裁决调整、真实 CLI 证据和 canonical 说明同步;无需扩展 runner 或新增前端。
“探测”只表示轨迹中的命令尝试读取环境;它本身不证明敏感内容已被读到或使用。当前实现把无显式任务环境合同的探测接入既有 restricted-access 审计:资格可以通过,同时保留 review_required=true。声明过精确 typed 环境合同的任务仍须使用原授权操作,广泛枚举不能借这次修改逃过合同;已登记的敏感值或既有密钥模式仍独立阻断。真实 CLI 的同输入对照覆盖了这两个方向,未把可计入资格当作官方分数成立。
具体改动 / Changes
评审依据是已在读实现前核对的 loopx/capabilities/benchmark_toolkit/README.md,规格修订为 fc62d52498a2189ce80b1535b736f647ce744cf9。该路径由 capability catalog 明确登记为 canonical 文档;本次 Skill 不能单独替代它。以下标识只定位已有原文要求,不增加新标准:
| 原文要求定位 | 本 head 的结果 |
|---|---|
IQ-probe-rule,525–533 行的凭据探测拒绝规则 |
not_met:无合同的非泄露探测已变成可通过的待审结果,canonical 文字仍称拒绝。须在本 PR 同步新规则和硬拒绝例外。 |
IQ-private,446–450 行的紧凑私密边界 |
implemented:24 次 CLI 不回显合成敏感值、原始输入或输入路径,输入文件树均不变。 |
IQ-exact-env,473–485 行的精确任务环境合同 |
implemented:合法 typed 读取通过,广泛枚举、未声明变量仍拒绝。 |
IQ-isolation,319–324、525–533 行的 runner 隔离义务 |
implemented:缺少凭据隔离证明的轨迹仍失败,未改 runner。 |
IQ-adjudication,412–444 行的事后审计与确认门槛 |
implemented:pending 和合法审计警告可区分,确认披露并使用仍失败。 |
关键代码讲解
_RESTRICTED_ACCESS_REVIEW_CATEGORIES加入已存在的credential_probe类别。实际扫描仍由未改的environment_access.credential_probe_present解析执行命令;没有新造状态词汇或扩大访问权限。build_benchmark_integrity_qualification只在未声明任务环境合同时,把探测从硬 blocker 移到审计集合。credential_value_observed、网络限制、完整轨迹和 runner attestation 继续独立参与拒绝;同一 receipt 仍把正式score_claim_countable和 matched-pair 结论留为 false。_build_restricted_access_review是复用的消费者:新类别沿现成 pending / adjudicated / confirmed 分支读取,没有第二条 adjudication 规则。Skill 补了新类别和两个硬拒绝例外;测试增加两项新场景,并修改原扫描测试的预期以披露默认语义变化。
全 diff 为三个文件、67 增加/7 删除:production 10/1、Skill 7/4、测试 50/2。既有公开 CLI 调用 owner 未改。Python 在此承担既有专用轨迹归约,不构成新的通用 control-plane 决策 owner;为这个有界修改另做语言迁移没有收益。
对主干的风险 / Risks
[P2] 同步 canonical 的拒绝规则
新增类别和 1297–1303 行的豁免使无显式合同的 env 在无泄露时返回 integrity_qualified=true,--require-qualified 退出 0;不可变 base 对完全相同输入退出 1。与此同时,未改的 loopx/capabilities/benchmark_toolkit/README.md 525–531 行 仍明确将“credential probing outside an exact task-environment contract”列为拒绝条件。catalog 又将这份 README 作为规范入口,因此按正常文档接入的调用者与按 Skill 操作的调用者会对同一轨迹采用相反资格规则。这是本次行为变化新增的规范不一致,不能以 Skill 或 PR 描述已更新消除。
最小修复是更新该 canonical 拒绝列表及相关解释,准确写明无显式合同、无观测泄露时的待审语义,保留显式合同越权、敏感值暴露和隔离缺失的硬拒绝;不要求回退本次运行时修复或增加新机制。复验现有完整测试和相同 CLI 对照,并确认 catalog、README 与 Skill 的规则一致即可。
PASS:在此精确 head 独立执行 tests/capabilities/test_benchmark_toolkit.py,170 项通过、零跳过。另用同一套合成输入分别调用不可变 base 和 head 的真实公开 CLI,各 12 次:两个新允许场景在 base 失败、head 通过;普通操作和合法 typed 读取的完整 JSON 完全一致;显式合同越权、已登记敏感值、密钥模式、网络访问、缺隔离、残缺轨迹及确认使用等八种拒绝保留。24 次输入文件树均不变,没有活动 Goal 或真实 benchmark 操作。
标准 premerge 的六项直接检查和六项 catalog 检查全部通过,包含 semantic vocabulary;命令整体仍返回 1,原因是 benchmark_sensitive 人工评审 hold,不能写成整个合并门已通过。最新目标 b47bbc6c91e4cfedbeab4f21b7b25e4933fa5242 与 head 的 merge-tree 无冲突;未把此静态组合冒称完整运行时集成。未查询或等待 CI。
语义与 CI 对齐
这里复用既有类别及审计 vocabulary,但故意改变默认的资格裁决。新增 Skill 句子保留了事后阶段、原权限、敏感值拒绝和精确合同边界;canonical 说明尚未对齐 IQ-probe-rule。预检通过只能证明机械检查通过,不能代替这项语义修正,也不授权追溯抹掉历史失败或改写冻结实验。
我的整体评价 / Verdict
当前交付判断为 not_yet_proven,缺口限定为本 PR 的 canonical 规则同步。long_horizon 的执行与结果边界保留:资格检查仍只读,runner、真实评分与后续实验归原 owner;没有据测试数量或一次重判宣称长期净收益。user_experience 的实际误拒绝已有改善,但两条正式文档入口给出相反规则,须修复这一阅读回归。
本次只改变事后 CLI 资格结果和任务触发的 Skill 文本,没有渲染页面变化,visual_review 为 not_applicable。 没有声称实际模型采用、原私有实验重判或完整长期成本收益已验收。
结构上保留既有 owner 与可回滚的单点裁决改动是合适选择;当前 PR 的完整边界应包含这项默认裁决调整、真实 CLI 证据和 canonical 说明同步;无需扩展 runner 或新增前端。 没有发现需要另建协议、兼容分支或前端配置的理由。已发表的历史失败和私有原始证据应继续保留;本次不改变任何活动实验状态。
English verdict: REQUEST_CHANGES at f86b80b. The bounded runtime change passed 170 tests and 24 real CLI comparisons, but the canonical integrity contract still requires rejection of the newly countable probe. Synchronize that rule and its hard-failure exceptions; the benchmark-sensitive merge hold remains separate.
Signed-off-by: huangruiteng <huangrt01@163.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; OpenAI; gpt-6.1-sol; runtime_reported; reasoning_effort=max
APPROVE at b4c01d3629261a981451aa706d167d18797f1587。没有发现阻塞问题。原评审指出的 canonical 文档冲突已在这个新 head 修复;以下结论来自完整 PR 复核和本轮验证。
动机 / Motivation
运行 benchmark 完整性资格检查的维护者,在隔离轨迹中出现未泄露凭据的环境探测时遇到此问题。
原先仅执行 env、且只返回普通环境字段,也会被直接取消资格;本次改为保留待审警告,凭据值暴露和显式环境合同越权仍拒绝。
真实 CLI 已验证待审与硬拒绝两种结果;本 head 的 canonical README、Skill 和运行时规则已一致。
本 PR 只改变事后资格裁决,不改变 runner 隔离、凭据注入、实际任务执行或官方评分,也不证明原私有实验和长期收益。
改动思路 / Approach
分类与裁决继续留在既有 benchmark-toolkit integrity owner,复用现成审计状态;不新增开关、存储、权限 owner 或并行决定。
本 PR 的交付边界是默认资格裁决、对应的 canonical/Skill 说明及真实 CLI 验证;runner 和科学评分继续由原 owner 负责。
当前实现没有忽略探测,而是将无显式任务环境合同的 credential_probe 放入已有 restricted-access 审计。凭据值是否实际暴露仍单独扫描;精确 typed 环境合同存在时,广泛枚举继续违反该合同。与“停止扫描”或新增白名单相比,这个改法保留了事后调查信息和严格例外,也避免建立第二套政策。下面的对照来自相同合成输入,表达的是 CLI 资格结果,不是最终分数。
| 输入 | 不可变 base | 当前 head |
|---|---|---|
| 无合同、无泄露的 env | 拒绝,exit 1 | 待审资格,exit 0 |
| 同类探测完成合法审计 | 拒绝,exit 1 | audit warning,exit 0 |
| 显式合同下广泛枚举 | 拒绝 | 拒绝 |
| 敏感值暴露、缺隔离或确认披露并使用 | 拒绝 | 拒绝 |
具体改动 / Changes
读实现前核对的规格是 loopx/capabilities/benchmark_toolkit/README.md,spec_revision=fc62d52498a2189ce80b1535b736f647ce744cf9。原文的广泛探测拒绝规则是本次有意调整的既有政策,不能将新 head 文档倒用作原规范。当前任务用已复现的非泄露误拒绝支持这一有界调整;新文本同时明确其严格例外。
| 原文要求定位 | 当前判断 |
|---|---|
IQ-probe-rule |
implemented:有意将无合同、无观测敏感值的探测改为审计;README 475–488、532–538 与 Skill 现在披露同一规则。原阻塞已修复。 |
IQ-private |
implemented:输出只含标签、计数和 digest;24 次 CLI 未回显合成敏感值或输入路径,输入树不变。 |
IQ-exact-env |
implemented:合法 typed 读取成功,未声明变量和广泛枚举仍拒绝。 |
IQ-isolation |
implemented:缺隔离 attestation 仍失败,runner 没有改动。 |
IQ-adjudication |
implemented:pending、合法审计和确认披露且因果使用仍明确区分。 |
关键代码讲解
_RESTRICTED_ACCESS_REVIEW_CATEGORIES加入已有的credential_probe,没有增加新的分类器或权限。扫描仍由原environment_access.credential_probe_present执行。build_benchmark_integrity_qualification的 1291–1305 行只豁免无精确合同的探测;敏感值、网络、完整轨迹与隔离证据仍独立决定失败。正式score_claim_countable与 matched-pair 判断仍为 false。_build_restricted_access_review复用原 pending / adjudicated / confirmed 分支,不写入实验状态。修复提交仅补 canonical README;我同时重读了整个 base-to-head diff,没有沿用旧批准。
完整差异为四个文件、77 增加/12 删除:runtime 10/1、README 10/5、Skill 7/4、测试 50/2。与原 f86b80b006b4ce6a2807916031a06f9c815f44fe 相比,运行时和测试未改变,新增文档修复明确区分无合同待审、显式合同违规和敏感值暴露。
对主干的风险 / Risks
PASS:本轮在精确 head 独立执行完整 tests/capabilities/test_benchmark_toolkit.py,170 项通过、零跳过。相同 harness 对 base/head 各执行 12 次公开 CLI:两个政策变化场景在旧版拒绝、新版通过;普通操作及合法 typed 读取的完整 JSON 相等;八种硬拒绝保留。24 次输入树均未改变,没有运行真实 benchmark 或调用模型。
PASS:标准 premerge 的六项直接检查、十项 catalog、八项 risk-profile 和一项 public-boundary 检查通过,含 semantic vocabulary。整体命令仍因 benchmark_sensitive 返回 manual_review_required;这是独立的维护者合并门,未写成合并许可。目标 652f503842609e948e8ff832ae3977f23f79f28d 与 head 静态 merge-tree 无冲突,未将它冒称运行时集成验证。没有查询或等待 CI。
语义与 CI 对齐
本次复用已有 category 和审计 vocabulary,主动改变默认的事后资格政策,README 与 Skill 已同步披露。强负例保留了相反方向的防护:这项修复不能让显式合同越权或已观测敏感值通过。有限模式扫描不能证明所有未知凭据都未出现,实际 runner 隔离和审计仍是必要输入;本次测试没有冒充对原私有实验的独立调查。
我的整体评价 / Verdict
交付判断为 goal_achieved,范围仅为这个误拒绝修复。long_horizon 为 preserved:只读裁决保留原轨迹、审计、runner 及分数边界,不新增执行或结算路径。user_experience 为 improved:正常调用者能读到与 CLI 一致的规则,并保留可操作的待审状态。
本次只改变事后 CLI 资格和任务触发的说明,没有渲染页面变化,visual_review 为 not_applicable。未验证范围包括实际模型理解、原私有实验及长期效果和完整成本收益。
保留现有 owner 和窄 predicate 的设计合适;本 PR 的交付边界是默认资格裁决、对应的 canonical/Skill 说明及真实 CLI 验证;runner 和科学评分继续由原 owner 负责。没有新增兼容分支或需要另开框架的理由。批准与旧阻塞收口、精确 head 的原生 readiness、维护者合并授权分别处理。
English verdict: APPROVE at b4c01d3. The canonical policy conflict is fixed; 170 tests and 24 real CLI comparisons pass. The benchmark-sensitive merge hold remains separate.
已在 b4c01d3 独立复核完整 PR:canonical README475–488、532–538已同步非泄露探测待审及显式合同/敏感值/隔离硬拒绝,与 Skill 和真实 CLI 一致。170测试、24实际CLI对照和标准premerge自动检查通过;新精确头批准见 review5693072248。仅收口原文档冲突,保留原讨论、历史测试和benchmark-sensitive独立合并门。
Goal And Delivered Outcome
env, although provider credentials were excluded and no credential value appeared in the trajectory.envprobe changed from an unconditional integrity blocker to a countable restricted-access suspicion that requires review. Observed credential values and probes that bypass an explicit typed task-environment contract remain hard failures.main.Author Declaration
Implemented against
fc62d5249are the basis.build_benchmark_integrity_qualificationpytest -q tests/capabilities/test_benchmark_toolkit.pycredential_value_observedblockertask_environment_accessblocker handlingScope And Continuation
Validation
f86b80b00unitpassedpytest -q tests/capabilities/test_benchmark_toolkit.py: 170 passed.integrationpassedstaticpassedstaticblockedSee validation disclosure guidance.
Frontend / Visual Evidence
Type of Change
LoopX Area
Technical Direction
Shared-authority RFC fixture impact
N/A.
Boundary Checklist
.loopx/,.codex/goals/, and liveACTIVE_GOAL_STATE.md).python3 scripts/check_rfc_bilingual.py --base origin/main --head HEADpasses, or no paired RFC changed.none.Signed-off-bytrailer (git commit -s).