cluster-029: workflow scope/channel use typed proto fields, not metadata bag#689
Conversation
set -euo pipefail at top + when ADD_DIRS is empty array
triggered 'ADD_DIRS[@]: unbound variable' exit 1, blocking every
spawn-codex.sh call that didn't pass --add-dir. Iter15 audit dispatch
failed before reaching codex.
Guard with the empty-array-safe ${ADD_DIRS[@]+"${ADD_DIRS[@]}"}
parameter expansion — expands to nothing when unset, preserves
individual element quoting when set.
Verified: probe call without --add-dir now succeeds.
Co-Authored-By: codex-refactor-loop <noreply@aevatar>
…ster-029) Refactor (iter15/cluster-029): - Old pattern: ChatRunRequestNormalizer accepted scope id / channel facts from metadata bag string keys as fallback to typed fields, letting stable business semantics live in an open extension bag. Violated CLAUDE.md "核心语义强类型:影响业务语义、控制流、稳定读取且 仓库内可控的数据,必须建模为 proto field / typed option / typed sub-message". - New principle: stable scope/channel use typed proto fields; metadata bag remains only for genuine open extension. Fallback paths removed; typed field is the only source of truth. 4 scoped files. Targeted tests pass; query_projection_priming_guard + architecture_guards green. Co-Authored-By: codex (gpt-5) <noreply@openai.com>
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## dev #689 +/- ##
=======================================
Coverage 82.42% 82.42%
=======================================
Files 938 938
Lines 59753 59731 -22
Branches 7831 7826 -5
=======================================
- Hits 49251 49235 -16
+ Misses 7128 7124 -4
+ Partials 3374 3372 -2
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 1 file with indirect coverage changes 🚀 New features to boost your workflow:
|
🤖 Multi-codex review (v2, round 1) — Phase 8Verdicts | 三组独立 codex 评审结论
Not unanimous approve → enter fix-retry loop (per Phase 8 policy, max 3 rounds before human escalation). EnglishThe 3 reviewer codex ran independently against
Next action (automatic): fix codex round 1 dispatched to add the defaultMetadata scope-key test on a worktree off this PR's HEAD. Full local artifacts: 中文3 个独立 reviewer codex 在
下一步 (自动): fix codex round 1 已 dispatch 到本 PR HEAD 的 worktree,补 defaultMetadata scope-key 测试。 本地完整产物: |
Applied 7 fixes (FIX_DONE:689:round-1:applied-7:rejected-0:blocked-0): - (A) tests: add defaultMetadata scope_id/scope-key behavior test (addresses tests reviewer reject — was the blocking demand) - (A) architect: add Refactor (iter15/cluster-029) old/new comments on NormalizedChatContext + AddNormalizedMetadataEntry - (A) quality: delete dead WorkflowChatRunStartError.ConflictingScopeId enum member (no longer produced after scope conflict refactor) - (B) quality SCOPE_EXTEND: remove dead ConflictingScopeId mappings from ChatRunStartErrorMapper + ScopeWorkflowEndpoints (parallel API outcome cleanup for the deleted enum member) - (A) quality: revert unrelated spawn-codex.sh drift change out of this PR (already on auto-refact-dev where it belongs) Build pass; targeted tests 27/27 pass; test_stability_guards pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
🤖 Fix codex round 1 —
|
✅ Multi-codex consensus reached (round 2) — auto-mergingVerdicts | 共识结论
Unanimous approve → auto-merge queued via EnglishAll 3 reviewer codex independently re-evaluated PR HEAD
The cluster's net behavior: workflow scope/channel routing now uses typed proto fields ( After this auto-merge, cluster-029 moves to Local artifacts: 中文3 个独立 reviewer codex 在 fix-codex 处理完所有需求后,对新 HEAD
cluster 净行为: workflow scope/channel 路由改用 typed proto field ( auto-merge 后 cluster-029 进入 本地产物: |
Summary
iter15 cluster-029 (
mediumseverity, AG-STRONG-TYPING-01 + AG-METADATA-01).Violated CLAUDE.md "核心语义强类型".
Scope
4 files (+35/-54, net deletion). Targeted tests pass; query_projection_priming_guard + architecture_guards green.
See implement-cluster-029 summary.
🤖 Auto-loop / codex-refactor-loop iter15 batch A