Skip to content

fix(context): 防止当前有效的关键项目规则因上下文预算不足而被整块省略 #214

Closed

Description

@NanaseInori

2026-10-14 完成与整理记录

已由 PR #239 集成至 main。实现提交 1d0a5d71 保留显式固定的必需项目规则,并在预算无法容纳时拒绝发送;现有测试覆盖实际模型请求、预算不足、重开与压缩。按已完成关闭。

核对版本:main@88a7ba86。以下保留原问题/PR 说明。


问题

当前项目规则与摘要、工作看板等内容共享上下文预算。规则块放不下时可以被记入 OmittedSources,但不会因此阻止本轮继续调用模型。

因此,「规则已保存在 Run 配置中」不等于「这次请求实际携带了该规则」。本项要补齐当前有效关键规则的投递保证,不是保证模型一定遵守所有自然语言规则,也不把项目规则提升为工具执行权限。

审查基准:0e15d1d104fe535965cf68df50bca6f106f20d52。

影响范围:Go control plane、项目指令上下文构建、预算选择和投递审计。

当前代码依据

  • internal/application/run_supervisor.go:projectInstructionContextSections() 将规则包装为 project_instruction,优先级为 760 + source.Depth,最高 799;supervisorMemoryContextWithinBudget() 中摘要为 1000、工作看板为 900。
  • internal/contextmgr/selector.go:SelectSections() 在某个块超过剩余预算时将其放入 OmittedSources,继续选择其他块,最终可以正常返回。
  • internal/application/supervisor_context_compaction.go:requireSupervisorContinuityContext() 保证任务目标、摘要和继承历史存在,但没有检查项目规则是否完整投递。
  • internal/application/run_supervisor.go:上述选择与必需内容检查之后,本轮继续准备模型请求和工具能力。

已有遗漏来源审计;缺少的是规则被省略时的执行约束,而不是完全没有记录。

触发场景

在有效项目规则中写入「保持公共接口不变,交付前运行指定检查」。用合法且有界的高优先级摘要、目标和工作看板占用预算,使规则块超过剩余空间。

预期必须先确认适用于本轮的关键规则已进入实际请求;若无法容纳,应缩减可选背景、按适用路径收敛规则,或明确停止并说明原因,不能只记录省略后继续。

最小可用目标

明确项目规则中必需约束与可选背景的投递语义,对已确定适用于当前任务/路径的必需规则预留预算并检查投递完整性。第一阶段由操作者显式确认来源或规则块的 mandatory/optional 分类,并绑定该来源的版本/指纹;不要求模型从任意自然语言自动推断哪些句子是关键约束。不要仅提高一个优先级常量,因为总量超过预算时仍会出现同类问题。

每轮审计绑定实际投递的来源、版本/指纹和省略原因;被当前操作者指令明确替代或不适用的旧规则不能重新生效。「当前有效」指当前 Run 已固定并确认的 pinned snapshot,不自动等于磁盘上的最新文本;沿用 ProjectInstructionService.Refresh() 的显式确认及指纹校验,未确认的磁盘变更不自动生效。

第一阶段以单一 TargetPath 对应的 pinned snapshot 和显式 refresh 为范围,验证该路径下规则层级与覆盖。按工具调用动态切换路径并刷新规则可以后续扩展,不作为本项首阶段前提;任何范围选择与快照更新都不从仓库文本推导权限。

验收条件

  • 确定性夹具可构造合法的预算压力场景;检查实际发出的模型请求,而非仅检查数据库中的规则记录。
  • 当前有效的必需规则不会被无提示省略;无法完整投递时,在新的模型调用和工具分发前返回明确状态。
  • 可选背景仍可有界省略,审计中的 included/omitted、估算用量和实际请求保持一致。
  • 压缩、连续工具分段和数据库重开后,仍按同一规则来源及版本执行投递检查,不靠模型记忆补偿。
  • 测试单一 TargetPath 下的目录规则层级、冲突覆盖、显式 mandatory/optional 分类及已确认 refresh;磁盘文本变化不越过 pinned snapshot 自动生效,过期、不适用或被明确替代的规则不会复活。
  • 规则内容不能绕过权限、审批、范围、Run 预算或 lease 检查;既有无项目规则任务保持兼容。
  • 面向用户的说明区分「规则已配置」「本轮已投递」与「模型是否遵循」,不把三者混为一谈。

权限与非目标

不增加文件、命令、网络或凭据权限。不把任意项目文本都无条件设为永久必需;目标是对已经认定有效且必需的约束提供明确投递合同。不要求将所有历史规则和所有目录规则每轮全文注入。

证据边界

这是固定提交中的条件性上下文遗漏路径。提交本项不声称已实测某个模型因此修改了公共接口;回归应验证请求内容和失败行为,不用模型是否碰巧遵守作为唯一验收标准。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions