#104: host-portability fold setup owner surface#363
Conversation
…op(HostWorkflowSpec 七面投影/non-admin merge/host-env release checks)
🤖 Tests reviewer: reject,缺少两个 fail-closed 分支的行为测试TL;DR
详细说明这次实现把 release required checks 从硬编码默认改成 host env 配置,这是对的,但测试少了两个关键负向路径。 需要补两类行为测试:第一, 📎 完整 codex 原始输出(存档备查)---
pr: 363
role: tests
verdict: reject
---
## Verdict
Reject: the PR adds new fail-closed release behavior for missing host-required release checks, but does not add behavior tests that exercise those denial paths.
## Evidence
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/gate.py:254` adds a new live release-gate branch where `RELEASE_AUTO_ENABLE=true` and `HOST_GITHUB_RELEASE_REQUIRED_CHECKS` is empty returns `missing_host_required_release_checks`; I found only source/literal coverage for that string, not a behavior test that runs the gate with branch env present and the required-check list absent.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/publish_preflight.py:230` adds the same fail-closed reason to release publish preflight when `required_release_checks(load_host_env(...))` is empty, but `skills/codex-refactor-loop/scripts/test_release_publish_preflight.py:71` and `:80` update both host opt-in helpers to always include `HOST_GITHUB_RELEASE_REQUIRED_CHECKS`, so the new denial branch is never exercised.
- `skills/codex-refactor-loop/scripts/test_auto_release_gate.py:97` has an explicit host-owned env helper that omits `HOST_GITHUB_RELEASE_REQUIRED_CHECKS`, but the related test at `:845` uses prewritten green fixture signals and only asserts a decision artifact exists. It does not cover the new live `required_checks_recent_green` fail-closed path at `gate.py:254`.
## What would change your verdict
Add behavior tests that prove:
- release gate blocks `required_checks_recent_green` with `missing_host_required_release_checks` when `RELEASE_AUTO_ENABLE=true`, `GH_REPO_SLUG`, `REVIEW_BASE_BRANCH`, and `INTEGRATION_BRANCH` are present, but `HOST_GITHUB_RELEASE_REQUIRED_CHECKS` is absent or empty;
- `ReleasePublishPreflight.validate()` denies with `missing_host_required_release_checks` for an otherwise ready candidate when host opt-in is true but required check names are absent.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:363:tests:reject⟦AI:AUTO-LOOP⟧ |
🤖 Quality review approveTL;DR
详细说明我按三点看了这轮改动: 命名是否表达业务意图、是否引入多余抽象或死代码、是否有 unrelated cleanup。结论是这次 fold 比较克制: release required checks 只从 host.env 读取, HostWorkflowSpec 只增加 data-only projection, GitHub workflow portability checklist 也折回现有 downstream install / host-owned artifact surface。 具体证据在内部 artifact 里。关键点是没有新增 standalone setup skill, 没有新增第二套 release-check owner, 📎 完整 codex 原始输出(存档备查)---
pr: 363
role: quality
verdict: approve
---
## Verdict
Approve: the diff keeps the #104 portability fold readable and scoped, with no quality-level dead code, needless abstraction, or unclear naming found.
## Evidence
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/required_checks.py:22` adds `required_release_checks`, a small host-env parser whose business intent is explicit; it is reached by release gate, preflight, publisher, and wrapper callers rather than sitting as unused private code.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/required_checks.py:105` keeps `ReleaseRequiredChecksProjection` as the existing projection owner and only injects `required_checks`, avoiding a second release-check abstraction or host-specific hardcoded default list.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:72` names the allowed projection keys directly as `WORKFLOW_PROJECTION_KEYS`, and `ValidatedWorkflowSpec.projection()` at `workflow_spec.py:152` is a straightforward serialization of existing validated data, not a new workflow authority layer.
- `skills/codex-refactor-loop/SKILL.md:187` folds the GitHub workflow portability checklist into the existing downstream install and host-env owner surface; the text names allowed artifacts and forbidden setup actions without creating a standalone setup skill or parallel protocol.
- `skills/codex-refactor-loop/SKILL.md:190` includes the required self-documenting `#104` rationale with readable scope and no `see issue #X` placeholder; this satisfies the self-doc policy for the changed skill contract.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/controller_actions.py:259` removes the `--admin` merge flag in the existing `merge_pr` path without adding branching or cleanup complexity; the failure path records a blocked-by-host-policy pending event and returns before label/worktree cleanup.
- Modified tests stay focused on the same surfaces: required release checks, workflow projection, host-env matrix, label contract wording, and non-admin merge behavior. I did not find unrelated one-off cleanup or three-plus duplicated snippets that should be extracted.
## What would change your verdict (only if comment or reject)
N/A
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:363:quality:approve⟦AI:AUTO-LOOP⟧ |
🤖 Architect review approveTL;DR
详细说明我核对了三点:一是 #104 没有新增独立 setup skill 或第二套 protocol owner;二是 HostWorkflowSpec 仍然只是七个 data-only surface,不能注入 label / merge / git / executor 等生命周期字段;三是 release required checks 改为由
📎 完整 codex 原始输出(存档备查)pr: 363
|
🤖 review-gate r1 — tests reject → fix r2 派出
tests reject:新增的 host-required release checks fail-closed denial 行为缺 behavior test 覆盖 denial 路径。fix r2 须补 denial-path 测试。完成后重派 reviewers。 ⟦AI:AUTO-LOOP⟧ |
🤖 PR 363 round 2 fix 已补齐 release fail-closed 行为测试TL;DR
详细说明本轮只有
📎 完整 codex 原始输出(存档备查)# Fix report for PR 363 round 2
## Applied
- (A) skills/codex-refactor-loop/scripts/test_release_gate_module.py:193: added a live `AutoReleaseGate.compute_stability()` behavior test for `RELEASE_AUTO_ENABLE=true` with branch env present and `HOST_GITHUB_RELEASE_REQUIRED_CHECKS` absent or empty; it asserts `required_checks_recent_green` fails closed with `missing_host_required_release_checks` and does not call the Checks API. (addresses reviewer:tests evidence #1 and #3)
- (A) skills/codex-refactor-loop/scripts/test_release_publish_preflight.py:80 and skills/codex-refactor-loop/scripts/test_release_publish_preflight.py:226: added a host-env fixture for auto-release opt-in without required check names and an otherwise-ready `ReleasePublishPreflight.validate()` denial test; it asserts the only denial reason is `missing_host_required_release_checks`. (addresses reviewer:tests evidence #2)
## Rejected as false positive
- None.
## Blocked (cannot fix this round)
- None.
## Build status
- build: pass (`bash -lc "$BUILD_CMD"`; `BUILD_CMD=true`)
- tests: pass (`bash -lc "$TEST_CMD"`; 946 tests, skipped=1)
- targeted tests: pass (`python3 -m unittest skills/codex-refactor-loop/scripts/test_release_gate_module.py`; 16 tests) and pass (`python3 -m unittest skills/codex-refactor-loop/scripts/test_release_publish_preflight.py`; 20 tests)
## Recommendation for next round
- expect unanimous; the only reject demand was missing behavior coverage for the new fail-closed release required-check paths, and both requested denial paths now have direct tests.
⟦AI:AUTO-LOOP⟧
FIX_DONE:363:round-2:applied-2:rejected-0:blocked-0⟦AI:AUTO-LOOP⟧ |
…ehavior tests(applied-2)
🤖 fix r2 完成 → reviewers r2 派出FIX_DONE:363 round-2 applied-2:已补 host-required release checks fail-closed denial-path behavior tests(消除 tests reviewer r1 reject)。新 HEAD 434f8f4,3 reviewer r2 重审。 ⟦AI:AUTO-LOOP⟧ |
🤖 Quality review: commentTL;DR
详细说明整体可读性是可以接受的,改动范围也贴合 #104 host-portability。两个点值得收口: 这些是质量建议,不是行为阻塞。修法也很小:把 callable 别名改成动词/函数名,或者直接调用 📎 完整 codex 原始输出(存档备查)pr: 363
|
🤖 Tests review r2: approveTL;DR
详细说明这轮重点看了新增生产逻辑是否有真实行为测试,不是只靠 source string 或 fixture 存在。 其他 host-portability 面也有对应测试: workflow spec projection 断言只有 7 个 data-only surface 且不含 lifecycle/command 字段, controller merge 测试断言不再使用 📎 完整 codex 原始输出(存档备查)---
pr: 363
role: tests
verdict: approve
---
## Verdict
Approve: round 2 adds concrete behavior and source-regression coverage for the host-portability changes, including the previously missing fail-closed release paths.
## Evidence
- `skills/codex-refactor-loop/scripts/test_release_gate_module.py:193` exercises live release-gate behavior with `RELEASE_AUTO_ENABLE=true` and missing/empty `HOST_GITHUB_RELEASE_REQUIRED_CHECKS`; it asserts the gate is not ready, the signal source is `host.env`, the reason is `required_checks_recent_green:missing_host_required_release_checks`, and no `gh api` check-run query is made.
- `skills/codex-refactor-loop/scripts/test_release_publish_preflight.py:226` covers the matching publish-preflight denial for otherwise ready release artifacts when host required checks are absent; it asserts `missing_host_required_release_checks` is the only remaining denial reason.
- `skills/codex-refactor-loop/scripts/test_required_release_checks.py:136` verifies the new required-check parser reads only `HOST_GITHUB_RELEASE_REQUIRED_CHECKS` and ignores legacy `REQUIRED_RELEASE_CHECKS`, which directly covers the host-owned surface migration.
- `skills/codex-refactor-loop/scripts/test_host_workflow_spec.py:105` validates the workflow projection emits exactly the seven data-only surfaces and excludes lifecycle/command fields such as `labels`, `merge`, `executor`, and `git`.
- `skills/codex-refactor-loop/scripts/test_controller_actions.py:266` covers the non-admin merge path and host-policy block behavior by asserting `gh pr merge` is called without `--admin`, no cleanup side effects happen after a merge failure, and a pending event records `blocked-by-host-policy`.
- Mechanical scan of the PR test diff found no added skip/manual markers, no added sleep/delay pacing, and no obvious assertion loosening. Focused verification passed: `python3 -m unittest skills/codex-refactor-loop/scripts/test_release_gate_module.py skills/codex-refactor-loop/scripts/test_release_publish_preflight.py skills/codex-refactor-loop/scripts/test_required_release_checks.py skills/codex-refactor-loop/scripts/test_host_workflow_spec.py skills/codex-refactor-loop/scripts/test_controller_actions.py skills/codex-refactor-loop/scripts/test_release_publisher.py` ran 105 tests OK.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:363:tests:approve⟦AI:AUTO-LOOP⟧ |
🤖 architect r2 reject: release required-check contract has a stale fact sourceTL;DR
详细说明PR 已经把 runtime 路径改成 host-env 驱动,这是 #104 的正确方向:release gate 和 publisher 读取 问题是 contract surface 没同步干净。 修法很小:把 Skill degradation source-repo validation 段和 degradation checker marker 改成 release required-check names come from 📎 完整 codex 原始输出(存档备查)---
pr: 363
role: architect
verdict: reject
---
## Verdict
reject - the PR correctly moves release required checks to host.env in runtime paths, but leaves a stale SKILL/source-regression contract that still requires this repository's old three check names.
## Evidence
- `skills/codex-refactor-loop/SKILL.md:260` now says release stability reads every name in `$HOST_GITHUB_RELEASE_REQUIRED_CHECKS`, but `skills/codex-refactor-loop/SKILL.md:322` still says "`consensus-rnd-cli release-gate` requires it beside `contract-tests` and `manifest-version-sync`." That creates two live facts for the same release-gate requirement. PROJECT_RULES clause: "事实源唯一:同一约束禁止在多处平行声明。版本号 -> `.version-bump.json`;host 运行时事实 -> `host.env`;skill 行为 -> 该 skill 的 SKILL.md 与 `scripts/test_*.py`。"
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/checks/degradation.py:117-125` still locks the old source-regression marker `release gate ... requires skill-degradation`, while the new behavior in `release/required_checks.py` and `release/gate.py` deliberately uses `HOST_GITHUB_RELEASE_REQUIRED_CHECKS`. This means the source-regression guard now preserves the stale repo-specific rule instead of the new host-owned rule. PROJECT_RULES clause: "行为变更必须配套 **behavior test**(断言行为本身)+ **source-regression test**(对 SKILL.md 段落标题、narrow allowlist 字面、授权来源 path 等做字面断言),防止\"改文档没改实现\"或反之。"
## What would change your verdict
Update the Skill degradation source-repo validation paragraph and its source-regression marker to say that release-gate required check names come from `$HOST_GITHUB_RELEASE_REQUIRED_CHECKS`, with this repo's `contract-tests,manifest-version-sync,skill-degradation` only as the dogfood `host.env.example` value. Keep the behavior tests that prove runtime callers do not treat those three names as universal defaults.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:363:architect:reject⟦AI:AUTO-LOOP⟧ |
🤖 fix r3 派出(解冲突 + architect reject)architect r2 reject(陈旧 SKILL/source-regression 仍要求旧三 check 名)+ PR 与 auto-refact-dev CONFLICTING。fix r3 codex 一并:解 SKILL.md/test_skill_reference_anchors.py merge 冲突 + 将 required-checks 契约改为 host.env-driven。完成后 controller commit/push,重派 reviewers r3。 ⟦AI:AUTO-LOOP⟧ |
…ssue104-fold-setup-owner-surface # Conflicts: # skills/codex-refactor-loop/SKILL.md # skills/codex-refactor-loop/scripts/test_skill_reference_anchors.py
…ssue104-fold-setup-owner-surface
🤖 fix r3 完成 + rebase → reviewers r3#363(#104 host-portability)fix r3(applied-2):解 SKILL.md/test_skill_reference_anchors merge 冲突 + 将 release required-checks 契约改为 host.env-driven(消除 architect r2 reject 的陈旧旧三 check 名)。已 rebase 到含 #344 的新 auto-refact-dev(无冲突,146 tests 绿)。reviewer r3 重审。 ⟦AI:AUTO-LOOP⟧ |
🤖 架构审查通过:#104 owner surface 没有越界TL;DR
详细说明从架构边界看,这次改动把 GitHub workflow portability 折回 release required checks 改为 host.env 注入的 📎 完整 codex 原始输出(存档备查)pr: 363
|
🤖 Tests review: reject, standalone release-required-checks 缺失空配置覆盖TL;DR
详细说明这次改动把 release required checks 从硬编码迁到 host.env 的 风险点是: 默认 projection 的 required check 列表为空时, required-check 循环不会跑, 📎 完整 codex 原始输出(存档备查)pr: 363
|
🤖 Quality review: commentTL;DR
详细说明我只看到一个质量层面的 nit: 建议删除 📎 完整 codex 原始输出(存档备查)---
pr: 363
role: quality
verdict: comment
---
## Verdict
Comment: the PR is readable and focused overall, but one new wrapper method looks like unused public surface.
## Evidence
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:193`: `ValidatedWorkflowSpec.as_dict()` is newly introduced but has no caller in the PR branch; `projection()` is the exercised API (`test_host_workflow_spec.py` calls `spec.projection()`), so this wrapper adds a second name for the same behavior without a compatibility note.
## What would change your verdict (only if comment or reject)
Delete `as_dict()` and keep `projection()` as the single API, or add a concrete caller / compatibility comment that explains why both names must exist.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:363:quality:comment
⟦AI:AUTO-LOOP⟧ |
…ssue104-fold-setup-owner-surface
…ult-projection behavior test(applied-1)
🤖 Quality review: 一个小的 dead public surfaceTL;DR
详细说明
这不是 merge blocker, 但从质量角度看, 📎 完整 codex 原始输出(存档备查)---
pr: 363
role: quality
verdict: comment
---
## Verdict
Comment: the PR is focused and readable overall, but it introduces one tiny public alias that appears unused and makes the workflow-spec surface wider than needed.
## Evidence
- skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:193 adds `ValidatedWorkflowSpec.as_dict()` as a public method, but the branch has no caller for it; the new behavior test exercises `projection()` directly, and `git grep` only finds this method declaration. Because `projection()` is already the business-named API for the seven host workflow surfaces, the alias reads like dead public surface rather than an intentional caller contract.
- skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:152 keeps the actual serializer under `projection()`, whose name matches the host workflow projection vocabulary used by the docs and tests. I did not find naming, complexity, duplication, or self-doc-comment issues elsewhere in the touched runtime files.
## What would change your verdict (only if comment or reject)
Delete `ValidatedWorkflowSpec.as_dict()` unless a real caller needs the generic serialization convention; if keeping it, add a direct caller or a short comment/test that explains why both `projection()` and `as_dict()` are intentional public surfaces.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:363:quality:comment⟦AI:AUTO-LOOP⟧ |
🤖 架构审查 r4:comment-only,可合并但建议删掉空兼容别名TL;DR
详细说明从架构边界看,这个 PR 把 #104 setup 收回 我只留一个 comment: 📎 完整 codex 原始输出(存档备查)---
pr: 363
role: architect
verdict: comment
---
## Verdict
comment-only: architecture is mergeable from my angle, with one deletion-first cleanup note on the retained empty release-check compatibility alias.
## Evidence
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/required_checks.py:16`: the PR converts `REQUIRED_RELEASE_CHECKS` into an exported empty "Compatibility alias only" while the new owner surface is `required_release_checks()` / `$HOST_GITHUB_RELEASE_REQUIRED_CHECKS`. This is minor but touches the deletion-first clause: "废弃 skill、deprecated wrapper、`*.bak/*.old/*.deprecated` 直接删除,不保留兼容空壳;历史由 git 与 CHANGELOG 保留。" It is not a blocking architecture violation because runtime callers in this diff use `required_release_checks()` and the projection fails closed when host checks are missing.
- `skills/codex-refactor-loop/SKILL.md:71`, `skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:21`, and `skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:222`: the HostWorkflowSpec expansion remains data-only, repo-relative, host-namespaced, and rejects lifecycle/command fields before validation. That matches the host boundary clauses: "host 运行时事实 → `host.env`" and "skill 间通过 `host.env` + 文件 artifact + GitHub API 等稳定边界协作,不耦合彼此内部脚本".
- `skills/codex-refactor-loop/SKILL.md:168` and `skills/codex-refactor-loop/SKILL.md:176`: #104 setup is folded into the existing owner surface and explicitly forbids host `.github`, label, issue/PR, branch-protection, git, merge/close, tag/release, and lifecycle mutation. That does not introduce a second setup skill or move host production authority into `.refactor-loop`.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/controller_actions.py:259`: removing `--admin` from `gh pr merge` narrows controller authority and records blocked host-policy merge failures at line 265; this is aligned with "最小权限动作".
- `skills/codex-refactor-loop/SKILL.md:101`, `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/gate.py:254`, `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/publish_preflight.py:230`, and `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/publisher.py:272`: release required check names now come from host.env and fail closed when auto-release is enabled without configured checks. This stays within the existing release-publication allowlist and host runtime fact injection model.
## What would change your verdict
Delete the public `REQUIRED_RELEASE_CHECKS` compatibility alias/export if there are no live consumers, or document it as a narrow legacy-read/migration surface with source-regression coverage if it must remain temporarily.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:363:architect:comment⟦AI:AUTO-LOOP⟧ |
🤖 测试视角 r4 通过TL;DR
详细说明我按 tests 角度检查了 host-configured release checks、HostWorkflowSpec projection、non-admin merge failure reporting、folded setup 文档锚点这些改动面。新增测试不是只测“没抛异常”: 它们断言 fail-closed reason、不会调用 我也在 detached PR-head worktree 📎 完整 codex 原始输出(存档备查)---
pr: 363
role: tests
verdict: approve
---
## Verdict
Approve: the changed runtime surfaces have behavior coverage plus source-regression anchors, and I did not find test-quality regressions in the PR diff.
## Evidence
- `skills/codex-refactor-loop/scripts/test_required_release_checks.py:136` covers `required_release_checks()` parsing only the host-owned `HOST_GITHUB_RELEASE_REQUIRED_CHECKS` key, and `:143` covers the default projection failing closed without calling `gh api` when the host list is missing or empty.
- `skills/codex-refactor-loop/scripts/test_release_gate_module.py:193` covers the live release gate fail-closed path for auto-release without host required checks and asserts no Checks API polling occurs.
- `skills/codex-refactor-loop/scripts/test_release_publish_preflight.py:226` covers publish preflight denial when auto-release lacks host required checks, with no unrelated denial reasons.
- `skills/codex-refactor-loop/scripts/test_release_publisher.py:319` and `:334` keep the exact-SHA check gate behavior covered after host-configured required checks are injected into `ReleaseRequiredChecksProjection`.
- `skills/codex-refactor-loop/scripts/test_host_workflow_spec.py:105` covers the new seven-key `ValidatedWorkflowSpec.projection()` surface and asserts lifecycle/command fields are absent from the projected data.
- `skills/codex-refactor-loop/scripts/test_wakeup_plan.py:1084` and `skills/codex-refactor-loop/scripts/test_package_triage.py:238` assert host workflow/status projections stay no-lifecycle-authority and do not grow label/assignee/spawn/merge fields.
- `skills/codex-refactor-loop/scripts/test_controller_actions.py:266` covers the new non-admin merge failure path: it attempts `gh pr merge --squash --delete-branch`, records `blocked-by-host-policy`, and skips cleanup/recent-merge writes on failure.
- Source-regression coverage was updated in `test_skill_reference_anchors.py`, `test_check_skill_degradation.py`, `test_host_env_surface_matrix.py`, `test_label_contract_source.py`, and `test_source_publication_boundary.py` for the folded setup surface, host-configurable release checks, and loop-owned label language.
- I found no added `sleep`/`time.sleep` test pacing, no added skips/manual traits, no weakened assertions in touched tests, and no mock-only tests that merely verify a call without asserting the business outcome.
- Targeted PR-head verification passed: `python3 -m unittest skills/codex-refactor-loop/scripts/test_host_workflow_spec.py skills/codex-refactor-loop/scripts/test_required_release_checks.py skills/codex-refactor-loop/scripts/test_release_gate_module.py skills/codex-refactor-loop/scripts/test_release_publish_preflight.py skills/codex-refactor-loop/scripts/test_release_publisher.py skills/codex-refactor-loop/scripts/test_controller_actions.py skills/codex-refactor-loop/scripts/test_controller_lib_label_helper.py skills/codex-refactor-loop/scripts/test_host_env_surface_matrix.py skills/codex-refactor-loop/scripts/test_skill_reference_anchors.py skills/codex-refactor-loop/scripts/test_wakeup_plan.py skills/codex-refactor-loop/scripts/test_package_triage.py` from detached PR-head worktree `.worktrees/review-pr363-tests` ran 252 tests in 33.293s and passed. `git diff --check origin/auto-refact-dev...HEAD` also passed there.
## What would change your verdict (only if comment or reject)
N/A.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:363:tests:approve⟦AI:AUTO-LOOP⟧ |
* #344: 发版目标 issue 存在时默认进入版本倒计时(crnd:milestone:release-target label + release-gate/wakeup-plan 倒计时投影,r4 minimal consensus) (#366) * #345: skill 身份重定位 — audit 降为 fallback issue-producer (#365) * #345: skill 身份重定位 — audit 降为 fallback issue-producer,主路径=issue resolution(r6 structural consensus,no-CLAUDE-change skill-local main-path) * #365 fix r2: SKILL.md 详细 Producer Contract 改为 audit-fallback 一致,消除同源 competing facts(applied-1) * #104: host-portability fold setup owner surface (#363) * #104: host-portability — fold setup owner surface 进 codex-refactor-loop(HostWorkflowSpec 七面投影/non-admin merge/host-env release checks) * #363 fix r2: 补 host-required release checks fail-closed denial-path behavior tests(applied-2) * #363 fix r4: 补 missing/empty HOST_GITHUB_RELEASE_REQUIRED_CHECKS default-projection behavior test(applied-1) * #337: 源码 English-only 契约系统性收敛 (#367) * #337: 源码 English-only 契约系统性收敛 — test-only source-language guard + HOST_REFACTOR_COMMENT_POLICY default→none,删历史中文注释(r3 structural consensus) * #367 fix r2: source-language guard negative test 改走真实 scanner 入口(comment_findings/string_findings/scan_python_source_language),applied-1 * #367 fix r1: source-language guard 加 iterN/cluster refactor-history 负向覆盖 + 检测逻辑(applied-1,addr tests reject) * #364: Path-A divergent-source contract-only locator(SKILL solver source contract + 3 solver prompt + source-regression;无新 module/parser/header) (#368) * fix(#369 review r1): source-lang guard honor HOST_REFACTOR_COMMENT_POLICY + 删 workflow_spec ValidatedWorkflowSpec.as_dict dead alias(quality reject,applied-2)
摘要
#104 design-consensus r4 共识(structural,maintainer 发版必含件):把 host setup owner surface fold 进 codex-refactor-loop,实现 host-adaptive GitHub 模板/配置跨项目可移植性。不新增独立 setup skill。
范围
27 files (+307/-76):release/{gate,publisher,publish_preflight,required_checks}.py + workflow_spec.py + controller_actions.py + degradation.py + SKILL.md/README.md/host.env.example + 配套 tests。本地 release/host-workflow 测试全绿。
Closes #104
🤖 Auto-loop / codex-refactor-loop
⟦AI:AUTO-LOOP⟧