Skip to content

v0.82.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 12:59
· 21 commits to main since this release
fd24209

下载与校验说明

  • 推荐下载 agateon-v0.82.0.tar.gz(本体):解压即得版本目录内容(agate/ 与登记根文件)。
  • GitHub 自动生成的 "Source code" 压缩包是整仓(整个仓库的快照),不是安装包,请勿用于安装。
  • agateon-v0.82.0-offline-<平台>.tar.gz 为离线安装包(含依赖 wheel),面向 Python 3.11。
  • SHA256SUMS 仅用于发现下载损坏,不认证发布者:它与资产同处一个 Release,发布者账号被攻破时无法防护;
    需要更强保证请从 git tag 自行构建(agate-release.py build)后逐成员比对,或经第二渠道核对哈希。

新增

  • 效率度量进 summary(RM-AG0074 ① / RM-AG0095 ① 的 summary 面):
    ① agate-dispatch-cost.py::measure_duration 优先从账本 state_transition 事件算阶段耗时——
    账本随 git 版本化 + 哈希链防改写,远优于手写的 .state.yaml::history(本仓实测:账本 22/43 个任务有事件、18/43 可算;history 口径在本仓 0/43——43 个任务无一有 history 键);账本不足时仍回退 history,两者都不可用
    如实报不可算(不编造)。② agate-summary.py 新增效率度量节:本仓实测可算 18/43,
    按时长列出「任务 / 耗时(h) / 派发份数 / 上下文(KiB)」——如 TAG0050 56.3h / 75 份 / 1346 KiB、
    TAG0042 48.0h / 50 份。⚠️ token / 步数不可得(harness 不报)⇒ 明确标注、不猜。
    (RM-AG0074 的 ② M3 指标提取方、③ judge 预算实测仍待做。)

变更

  • TAG0051 任务与发布解耦(任务止于 READY;Release 独立流程 + 发布门):把不可逆的对外发布动作
    (tag → GitHub Release)从任务 P8 结构性移出——① 任务终态 = READY(交付物 + CHANGELOG [Unreleased]
    含 task_id + bump_type 意图 + 交付收尾 + CI 全绿含 push 口径;不落 tag / 不 bump version 文件);
    ② Release = 独立流程:release.yml 新增 workflow_dispatch 人工授权入口,并在创建 tag/Release 前过一道
    机械发布门(目标提交 CI success + tag↔提交一致 + check-protocol-consistency.py CHECK 7/13 0 ERROR +
    roadmap RM done;由 agate-release.py 新增 gate 子命令承载,release.yml 调用它做 fail-closed backstop)。
    ③ 配套:delivery.method 收紧为三值枚举(新增契约级快照 rules/task-data/level-2.yaml,extends: 1,
    method ∈ {release-notes, tag-release, none},只对非 legacy 且等级 ≥ 2 任务生效);state-machine.md
    显式发布授权转移(复用既有 PAUSED/NEED_CONFIRM 语义、不引第二套阻塞);AGENTS.md/git-integration.md
    统一 tag 时点(先合 release PR → main CI 绿 → 后打 tag → Release);新增 R6 差分 wrapper
    docs/design-notes/r6-differential-prepare.sh。面向新任务的准入行为变化(非「无破坏性变更」,详见
    agate/UPGRADING.md);legacy 任务退出码与 ERROR 集合不变(R6 双向差分未匹配 0 条)。

修复

  • 默认分支解析单源收敛(DEBT0065):check-mvwu.py::_default_branch_base 原本自建
    symbolic-ref origin/HEAD 候选表(全仓第三份实现、口径还不同)⇒ 改为复用
    agate_common.default_branch() 取分支名,再转候选 ref(refs/remotes/origin/<name> 优先
    → refs/heads/<name> 回退 → main/master 兜底),纯本地仓库仍可用;守护用例锁源码面。
  • gate_p0 的声明校验按任务所属项目根(DEBT0066):原先 agate-config.py validate 按进程
    cwd
    找 agate.config.yaml ⇒ 从项目外调用会校验错的项目(hook 里 cwd=仓库恰好掩盖)。
    现按 task_dir 推项目根(git toplevel → 含 agate-workspace 的最近祖先 → cwd 兜底)再传 cwd=;
    回归用例覆盖跨项目场景(任务在 A、调用方 cwd 在 B ⇒ 按 A 判定)。
  • gate_p0 声明校验的测试脆弱性 + 本仓补 agate.config.yaml(v0.81.0 发版期):本仓加入
    自己的项目声明后,CI 里两条 BDD-8(断言「项目无声明 ⇒ gate_p0 出 WARNING」)转红——因为它们
    依赖「pytest 进程 cwd(= 仓库根)没有声明」。用例改为自带项目根(显式 cwd),语义回到
    「该项目没有声明」。⚠️ 连带登记 DEBT0066:gate_p0 的声明校验本身按进程 cwd 找
    agate.config.yaml(hook 场景 cwd=仓库恰好掩盖),从项目外调用会校验错的项目(低影响,提示级)。
  • 写侧白名单与 schema 合法字段分叉(DEBT0067):agate-md-field-set.py 的可写 key 白名单
    原仅 = GENERIC_HEADER_KEYS ∪ phases.yaml task_fields,而 check-frontmatter.py::SCHEMAS 认的
    合法字段(ceremony/override/coupling_checklist/implicit_coupling 等)写不进去 ⇒ 卡片要求
    声明的字段只能手写,与派发纪律「不要手写 frontmatter」冲突;dispatch_plan 更被「追加/嵌套字段」
    直接拒写。修复:白名单增第三来源 = 该 basename 的 schema 合法字段(SCHEMAS.migrated_keys
    单源派生),并让 dispatch_plan/delivery 结构化写入(写值经 YAML 解析后落盘);同时解耦
    「可写面」与「本阶段该填/缺失面」(task_fields 恢复原值,可选字段不再被报成"剩余缺失")、
    展示面区分「可 set」与「仅登记/需 append」。
  • P2 卡 batches[].output 与 checker 深度上限矛盾(DEBT0068):P2 卡把 dispatch_plan.batches[].output
    列为合法可选键并承诺 checker 不受影响,但 agate-frontmatter-check.py::MAX_DEPTH=3 因该键
    (嵌套深度 4)判 ERROR ⇒ 照卡示例写即 commit 失败。修复:深度校验对 dispatch_plan 单键豁免
    (其结构校验走 agate-md-field-get dispatch_plan + json.loads),P2 卡补说明;其余字段的
    深度/类型/必填校验一律不变
    (负例锁定 coupling_checklist 深 4 仍 ERROR)。
  • release.preset 无值消费方(DEBT0069):agate.config.yaml 的 release.preset 此前
    无任何值消费方(既有引用仅默认值字典 / init 模板 / 迁移期提示文案,均不读其值)。现由发布门
    agate-release.py gate 消费:已知发布流(运行时单源于 rules/schema/project-config.schema.json
    的 release.preset.enum,不手抄副本)按既有检查集执行并回显所用 preset;未知 ⇒ 门非 0;
    未声明 ⇒ 回落默认、不阻断。声明本身未删(schema 仍视其为合法键)。无面向既有合法项目的
    破坏性变更
    (未知值本就 schema 非法:agate-config.py validate 早已 rc=1)。
  • agate-md-field-set.py append 路径缺「系统/证据字段」守卫(DEBT0072):append 此前对「由脚本/
    角色产出」字段无守卫——实测 append pass/append fail 可写入(OK: pass 追加一项 …),与 set 侧
    及 --list 展示「由脚本产出、不可 set」的声明矛盾,且可污染 P6 判据的输入面。修复:append
    (及同族 upsert/remove)在列表写入唯一入口复用 set 的同一判据(_key_capability == "script"
    ——契约 writer: system ∪ 证据字段表,单源、ADR-014)→ 对这类字段一律拒绝;契约外字段维持既有
    拒绝文案不变。面穷尽:逐 basename 核对 SCHEMAS 四个条目 + 契约 files 节——P6 pass/fail/
    regression_pass,P7 blocker_count/deviation_count/deviation_critical_count/design_gap_count/
    design_gap_reviewed_count/code_map_new_files_count/code_map_reviewed_count(含评审点名的
    blocker_count)。合法 append 目标不受影响(scope_resolved/need_confirm/results 仍可追加);
    回归用例 test_debt0072_append_guard.py 覆盖上述面。

offline 包内 wheel(文件名与 sha256)

linux-x86_64

  • pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl sha256 b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d

windows-x86_64

  • pyyaml-6.0.3-cp311-cp311-win_amd64.whl sha256 9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf