Skip to content

Issue #696: Ingress v1 Phase 5 — docs + full guards (ingress layer v1 shipped)#710

Merged
eanzhao merged 1 commit into
feature/routerfrom
feat/2026-05-19_ingress-phase5-docs-guards
May 20, 2026
Merged

Issue #696: Ingress v1 Phase 5 — docs + full guards (ingress layer v1 shipped)#710
eanzhao merged 1 commit into
feature/routerfrom
feat/2026-05-19_ingress-phase5-docs-guards

Conversation

@eanzhao
Copy link
Copy Markdown
Contributor

@eanzhao eanzhao commented May 19, 2026

Issue

Closes #696 — Ingress v1 · Phase 5 — docs + full guards + close #672 #674

Ingress layer v1 shipped. This PR is the top of the 6-PR stacked train (#699#703#704#705#709 → this).

Implementation summary

See .implement-loop/runs/implement-issue-696.md.

  • Adds the "router = config actor + boundary resolver" entry to docs/canon/architecture-vocabulary.md, citing ADR-0024: Chat Route PolicyChatRoutePolicyGAgent holds per-scope config, ChatRouteResolver is a stateless boundary decision; no new actor hop, no persisted decision.
  • Full guard/test suite run and results recorded honestly in the implement summary.

Stacked-PR position

  • Base: feat/2026-05-19_ingress-phase4-voice-ws (Phase 4's branch — top of the stack)
  • Head: feat/2026-05-19_ingress-phase5-docs-guards
  • Auto-loop iteration: codex-implement-loop / milestone 20 (Ingress v1)

Guard / test status

  • docs lint (tools/docs/lint.sh) passed — 43 files, 0 errors.
  • architecture_guards.sh: every guard passes except the pre-existing playground asset drift guard (cli-app.js vs demo-app.js) — unrelated, no frontend assets touched in this milestone.
  • dotnet test aevatar.slnx: 6 observed failures, all pre-existing baseline (DI-registration / Ornn-NyxIdApiClient / workflow-coverage tests) — none touch ChatRouting; a 1-line docs diff cannot cause them. Per issue body, ~15 baseline failures are expected and excluded.

Remaining milestone closeout (controller / human)

The codex-implement-loop never merges PRs, so the GitHub issue-lifecycle steps in the issue body are deferred to human merge time:

🤖 Generated by codex-implement-loop. Reviewer is a Claude subagent (see PR comments for round-N review reports).

Adds the "router = config actor + boundary resolver" entry to
docs/canon/architecture-vocabulary.md, citing ADR-0024. Full guard/test
results recorded in .implement-loop/runs/implement-issue-696.md.

Implemented per .implement-loop/runs/implement-issue-696.md.

Closes #696

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@eanzhao eanzhao added this to the Ingress layer v1 milestone May 19, 2026
@eanzhao
Copy link
Copy Markdown
Contributor Author

eanzhao commented May 19, 2026

Review of PR #710 — round 1

Verdict: pass
Issue: #696 — Ingress v1 · Phase 5 — docs + full guards + close #672 #674
Head: feat/2026-05-19_ingress-phase5-docs-guards @ fcf8b6f
Base: feat/2026-05-19_ingress-phase4-voice-ws
Reviewed by: Claude subagent (codex-implement-loop)

Verdict rationale (one paragraph)

The in-repo deliverable is satisfied cleanly. The diff is a single +1/-0 change to docs/canon/architecture-vocabulary.md, adding one "Router" row to the §1.1 "已经存在但容易和上面混淆的词" table. The entry accurately ties router to the "config actor + boundary resolver" shape, names the two shipped types (ChatRoutePolicyGAgent, ChatRouteResolver), correctly states the invariants ("不是新增 actor hop" / "也不持久化决策"), and links ADR-0024 via a path (../adr/0024-chat-route-policy.md) that resolves to a real file. All claims are faithful to ADR-0024 (D1 three-part form / no router actor, D2 transient decisions) and to what shipped in Phases 2-4. The canon file frontmatter is intact, the change is docs-only with no drive-by edits, and the single commit in the three-dot diff is the expected one. The recorded test/guard failures are plausibly pre-existing baseline (DI-registration, Ornn NyxIdApiClient, workflow coverage, playground tsc not found) and cannot be caused by a one-line docs change. Deferred GitHub-lifecycle actions are an intentional controller scoping decision, not a finding.

Findings

F1 — Vocabulary row accurately reflects ADR-0024 and shipped code

  • Severity: comment
  • Dimension: issue-intent
  • Location: docs/canon/architecture-vocabulary.md:41
  • Evidence: | Router | 新的转发 Actor / hot-path 调度中心 | 在 ingress 语境里,router = **config actor + boundary resolver**:ChatRoutePolicyGAgent 只作为 per-scope 配置权威持有策略,ChatRouteResolver 只在入口边界做无状态、瞬时决策;它不是新增 actor hop,也不持久化决策。见 [ADR-0024 ...](../adr/0024-chat-route-policy.md)。 |
  • Why it's a problem: Not a problem — this is a positive confirmation. The row matches ADR-0024 §D1 ("Three-part form, no router actor"; ChatRoutePolicyGAgent = per-scope config aggregate; ChatRouteResolver = stateless library function) and §D2 ("Decisions are transient ... MUST NOT be persisted"). Both ChatRoutePolicyGAgent.cs and ChatRouteResolver exist in the stack's earlier-phase worktrees. The row was placed in the correct table (§1.1, aevatar 术语 | 不等价于 | 区分), following the established three-column "easily confused terms" pattern rather than the §1 deepening-vocabulary table — a sound editorial choice.
  • What would change your verdict: nothing; informational.

What's good (mandatory on pass)

  • Docs-only, single file, single commit (fcf8b6fa) — exactly the controller-scoped deliverable; no "顺手清理" violation of the issue's 关键不变量 ("不在 phase 5 内做任何顺手清理").
  • Canon frontmatter (title/status/owner) intact, satisfying CLAUDE.md "文档系统" ("所有 docs/canon/ 和 docs/adr/ 文件必须有 YAML frontmatter,包含 title、status、owner 字段"); ADR link path resolves to a real file; no edit to auto-generated docs/README.md.
  • Implement summary is honest: it records the dotnet test and architecture_guards.sh failures and correctly attributes them to pre-existing baseline (DI-registration, Ornn NyxIdApiClient, playground tsc not found) outside the docs change, with no attempt to disable tests to go green.

REVIEW_VERDICT:pass:Docs-only router vocabulary entry accurate vs ADR-0024; clean scoped diff

@codecov
Copy link
Copy Markdown

codecov Bot commented May 19, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.43%. Comparing base (f4e9bdf) to head (fcf8b6f).

@@                           Coverage Diff                            @@
##           feat/2026-05-19_ingress-phase4-voice-ws     #710   +/-   ##
========================================================================
  Coverage                                    82.43%   82.43%           
========================================================================
  Files                                          944      944           
  Lines                                        59886    59886           
  Branches                                      7843     7843           
========================================================================
  Hits                                         49369    49369           
  Misses                                        7133     7133           
  Partials                                      3384     3384           
Flag Coverage Δ
ci 82.43% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@eanzhao eanzhao changed the base branch from feat/2026-05-19_ingress-phase4-voice-ws to feature/router May 20, 2026 06:03
@eanzhao eanzhao merged commit 388e80f into feature/router May 20, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant