fix: harden anti-ghost-wiring gate and fix silently-dropped review agents#2000
Conversation
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request hardens the codebase's anti-ghost-wiring toolset and resolves a critical bug in the review agent loading process. By introducing a manifest-driven gate, the system now enforces that runtime components are properly wired at boot. Additionally, it improves the reliability of the pre-PR review process by fixing YAML parsing issues and adding preflight checks for agent availability. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI (base), Organization UI (inherited) Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
📜 Recent review details⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
🧰 Additional context used📓 Path-based instructions (1)tests/**/*.py📄 CodeRabbit inference engine (CLAUDE.md)
Files:
⚙️ CodeRabbit configuration file
Files:
🧠 Learnings (1)📚 Learning: 2026-05-05T09:04:46.195ZApplied to files:
🔇 Additional comments (2)
WalkthroughThis PR introduces a complete "ghost-wiring" detection system to identify runtime components (classes, functions) that are defined and tested but never constructed or wired at boot time. The implementation consists of a new Python gate script that parses a manifest file, scans the codebase using AST analysis to locate symbol definitions and call sites, and enforces that declared components have at least one external construction site. The gate is wired into pre-push CI via pre-commit hook and integrated into both the codebase audit (slot 14, replacing a retired regex agent) and pre-PR review pipelines as a mini-pass. The PR updates ten agent descriptions, expands audit skill documentation to describe the 159-agent roster and new mini-pass, and provides comprehensive unit test coverage. All changes are documented via reference materials and manifest conventions. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Code Review
This pull request introduces a "ghost-wiring" detection system designed to identify runtime components that are defined and tested but unreachable during the application boot path. Key additions include a new AST-based verification script (scripts/check_no_ghost_wiring.py), a manifest for tracking enforced components, and a pre-push hook. The PR also reassigns agent slot 14 to this new concern, updates documentation, and standardizes agent descriptions with double-quotes to prevent YAML parsing issues. Feedback was provided to optimize the file scanning logic in the new script by targeting specific runtime directories instead of the entire source tree.
| def _iter_runtime_py(repo_root: Path) -> Iterable[Path]: | ||
| base = repo_root / SCAN_ROOT | ||
| if base.is_dir(): | ||
| yield from sorted(base.rglob("*.py")) |
There was a problem hiding this comment.
The current implementation of _iter_runtime_py scans the entire src/synthorg tree and then filters the results in _scan_sites. For a large codebase, it would be more efficient to only scan the directories specified in RUNTIME_PREFIXES. This avoids unnecessary filesystem traversal for out-of-scope modules like core/ or utils/.
| def _iter_runtime_py(repo_root: Path) -> Iterable[Path]: | |
| base = repo_root / SCAN_ROOT | |
| if base.is_dir(): | |
| yield from sorted(base.rglob("*.py")) | |
| def _iter_runtime_py(repo_root: Path) -> Iterable[Path]: | |
| """Yield all .py files in the runtime modules.""" | |
| paths: set[Path] = set() | |
| for prefix in RUNTIME_PREFIXES: | |
| path = repo_root / prefix | |
| if path.is_dir(): | |
| paths.update(path.rglob("*.py")) | |
| elif path.is_file() and path.suffix == ".py": | |
| paths.add(path) | |
| yield from sorted(paths) |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.claude/skills/pre-pr-review/SKILL.md:
- Around line 760-766: The prose describing the mini-pass skip rules incorrectly
states that when only tests/ Python files change you should “run only
mini-pass-missing-event-constants and mini-pass-race-conditions and skip the
other three,” but the roster lists six agents so it must say “skip the other
four”; update the sentence in the SKILL.md block that references the two
test-scoped agents (mini-pass-missing-event-constants,
mini-pass-race-conditions) to replace “skip the other three” with “skip the
other four” so the count matches the six-agent roster and avoids ambiguous
behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 5830d3ce-5afc-4b4d-b0b8-34c8cc95deab
📒 Files selected for processing (19)
.claude/agents/comment-analyzer.md.claude/agents/comment-quality-rot.md.claude/agents/conventions-enforcer.md.claude/agents/go-security-reviewer.md.claude/agents/infra-reviewer.md.claude/agents/logging-audit.md.claude/agents/pr-test-analyzer.md.claude/agents/resilience-audit.md.claude/agents/silent-failure-hunter.md.claude/agents/test-quality-reviewer.md.claude/skills/codebase-audit/SKILL.md.claude/skills/pre-pr-review/SKILL.md.pre-commit-config.yamldata/runtime_stats.yamldocs/reference/audit-category-gate-coverage.mddocs/reference/convention-gates.mdscripts/_ghost_wiring_manifest.txtscripts/check_no_ghost_wiring.pytests/unit/scripts/test_check_no_ghost_wiring.py
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
- GitHub Check: Build Web Assets (melange)
- GitHub Check: Lighthouse Site
- GitHub Check: Test Unit
- GitHub Check: Test Integration
- GitHub Check: Test E2E
- GitHub Check: Test Conformance (SQLite)
- GitHub Check: Build Preview
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: Analyze (python)
- GitHub Check: Analyze (go)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.md
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.md: Numerics in README and public docs sourced fromdata/runtime_stats.yamlvia<!--RS:NAME-->markers per data/README.md
Used2for architecture / nested containers,mermaidfor flowcharts / sequence / pipelines. Markdown tables for tabular data. D2 theme 200 (Dark Mauve), D2 CLI pinned to v0.7.1 in CI
Files:
docs/reference/audit-category-gate-coverage.mddocs/reference/convention-gates.md
tests/**/*.py
📄 CodeRabbit inference engine (CLAUDE.md)
tests/**/*.py: Test markers:@pytest.mark.{unit,integration,e2e,slow}. Asyncauto. Timeout 30s global. Coverage 80% min. xdist-n 8 --dist=loadfileauto-applied via pyproject addopts
Windows: unit tests useWindowsSelectorEventLoopPolicy(3.14 IOCP teardown race). Subprocess tests override back
Test doubles: useFakeClockfor Clock seam,mock_of[T](**overrides)for typed-boundary substitutions,SimpleNamespacefor attribute-bags. BareMagicMockat typed boundary is blocked by scripts/check_mock_spec.py (zero-tolerance)
FakeClock andmock_ofimport fromtests._shared; inject viaclock=and helper's spec subscript
Hypothesis: 10 deterministic CI examples; failures are real bugs (fix + add@example(...)). Flaky: NEVER skip/xfail; fix fundamentally. Useasyncio.Event().wait()notsleep(large)
Files:
tests/unit/scripts/test_check_no_ghost_wiring.py
⚙️ CodeRabbit configuration file
Test files do not require Google-style docstrings on classes or functions -- ruff D rules are only enforced on src/. A bare
@settings() decorator with no arguments on Hypothesis property tests is a no-op and should not be suggested -- the HYPOTHESIS_PROFILE env var controls example counts via registered profiles, which@given() honors automatically.
Files:
tests/unit/scripts/test_check_no_ghost_wiring.py
🧠 Learnings (8)
📚 Learning: 2026-05-16T18:36:31.446Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1944
File: docs/reference/conventions.md:787-789
Timestamp: 2026-05-16T18:36:31.446Z
Learning: In Aureliolo/synthorg, do not require adding `<!--RS:...-->` “Doc Numeric Claims (MANDATORY)” numeric macros for Python version numbers mentioned in documentation prose (e.g., “Python 3.14”, “Python 3.15”). The `scripts/check_doc_numeric_macros.py` gate only applies to `README.md`, `docs/index.md`, `docs/roadmap/index.md`, `docs/architecture/decisions.md`, and `docs/reference/convention-gates.md`, and it only flags digits adjacent to specific stat nouns (tests/providers/agents/stars/releases), not language version mentions like “Python 3.14”.
Applied to files:
docs/reference/audit-category-gate-coverage.mddocs/reference/convention-gates.md
📚 Learning: 2026-05-16T18:36:35.250Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1944
File: docs/getting_started.md:109-109
Timestamp: 2026-05-16T18:36:35.250Z
Learning: When reviewing Markdown in the synthorg repo, account for the CI gate `check_doc_numeric_macros.py`: it skips fenced code blocks entirely, and it only flags digits that are adjacent to these stat nouns: `tests`, `providers`, `agents`, `stars`, `releases`. Therefore, numeric examples such as CLI flag values (e.g., `--num-workers=4` in fenced bash blocks) and prose version numbers (e.g., `3.14`/`3.15`) are not expected to trigger this check; prioritize changes only when digits appear next to one of the listed nouns (e.g., “5 tests”, “10 stars”, etc.).
Applied to files:
docs/reference/audit-category-gate-coverage.mddocs/reference/convention-gates.md
📚 Learning: 2026-05-16T18:36:35.250Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1944
File: docs/getting_started.md:109-109
Timestamp: 2026-05-16T18:36:35.250Z
Learning: When reviewing markdown files for the "Doc Numeric Claims (MANDATORY)" RS-marker rule, only require/flag missing RS markers in the files that are actually in-scope for the rule. The scope is enforced via an identical _SCOPED_FILES allowlist in scripts/check_doc_numeric_macros.py and scripts/inject_runtime_stats.py, and currently includes: README.md; docs/index.md; docs/roadmap/index.md; docs/architecture/decisions.md; docs/reference/convention-gates.md. For any other markdown files (e.g., docs/getting_started.md, docs/guides/*), missing RS markers for numeric claims are no-ops and should NOT be flagged.
Applied to files:
docs/reference/audit-category-gate-coverage.mddocs/reference/convention-gates.md
📚 Learning: 2026-05-16T18:36:35.250Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1944
File: docs/getting_started.md:109-109
Timestamp: 2026-05-16T18:36:35.250Z
Learning: When reviewing Markdown in the synthorg repo against the `check_doc_numeric_macros.py` gate, account for its documented behavior: it skips fenced code blocks entirely, and it only flags digits that are adjacent to specific stat nouns (`tests`, `providers`, `agents`, `stars`, `releases`). As a result, CLI-style numbers (e.g., `--num-workers=4`) inside fenced bash code blocks should never be treated as violations of this gate; only non-fenced text needs checking, and only around those specific nouns.
Applied to files:
docs/reference/audit-category-gate-coverage.mddocs/reference/convention-gates.md
📚 Learning: 2026-05-16T18:36:19.195Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1944
File: docs/guides/contributing.md:95-95
Timestamp: 2026-05-16T18:36:19.195Z
Learning: In the SynthOrg repo, the “Doc Numeric Claims (MANDATORY)” RS-marker rule should be applied only to these docs: README.md; docs/index.md; docs/roadmap/index.md; docs/architecture/decisions.md; docs/reference/convention-gates.md. This rule is enforced by scripts/check_doc_numeric_macros.py (with runtime substitution by scripts/inject_runtime_stats.py), so reviewers should not flag similar numeric-claim issues in other paths (e.g., anything under docs/guides/). When checking those scoped files, the rule skips fenced code blocks and only flags digits that are adjacent to stat nouns (tests/providers/agents/stars/releases). Numeric CLI flags like “--num-workers=4” inside fenced bash code blocks are not subject to this rule.
Applied to files:
docs/reference/convention-gates.md
📚 Learning: 2026-05-16T18:36:31.446Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1944
File: docs/reference/conventions.md:787-789
Timestamp: 2026-05-16T18:36:31.446Z
Learning: In Aureliolo/synthorg, follow the `Doc Numeric Claims (MANDATORY)` rule enforced by `scripts/check_doc_numeric_macros.py` only for these markdown files: `README.md`, `docs/index.md`, `docs/roadmap/index.md`, `docs/architecture/decisions.md`, and `docs/reference/convention-gates.md`. The gate flags digits that appear adjacent to the stat nouns `tests`, `providers`, `agents`, `stars`, and `releases`—those numeric claims must use the required `<!--RS:...-->` macro format. Do not apply this rule to prose that mentions Python version numbers (e.g., “Python 3.14” / “Python 3.15”); those should not be flagged as requiring `<!--RS:...-->`.
Applied to files:
docs/reference/convention-gates.md
📚 Learning: 2026-05-16T18:36:35.250Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1944
File: docs/getting_started.md:109-109
Timestamp: 2026-05-16T18:36:35.250Z
Learning: In the synthorg repo, the “Doc Numeric Claims (MANDATORY)” RS-marker rule is enforced only for this exact set of Markdown files: README.md, docs/index.md, docs/roadmap/index.md, docs/architecture/decisions.md, and docs/reference/convention-gates.md. During code reviews, do not raise RS-marker/numeric-claims findings for numeric values in any other files (e.g., docs/getting_started.md, docs/guides/*, docs/reference/conventions.md), since they are not checked or injected by scripts/check_doc_numeric_macros.py or scripts/inject_runtime_stats.py.
Applied to files:
docs/reference/convention-gates.md
📚 Learning: 2026-05-05T09:04:46.195Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1760
File: scripts/_dual_backend_parity_lib.py:215-216
Timestamp: 2026-05-05T09:04:46.195Z
Learning: This repository targets Python 3.14+ and follows PEP 758. Therefore, reviewer tooling should NOT treat unparenthesized multi-exception `except` clauses written without an `as` clause (e.g., `except MemoryError, RecursionError:`) as syntax errors. Only flag `except`-clause problems when they are genuinely invalid for Python 3.14+.
Applied to files:
tests/unit/scripts/test_check_no_ghost_wiring.pyscripts/check_no_ghost_wiring.py
🪛 LanguageTool
.claude/skills/codebase-audit/SKILL.md
[style] ~353-~353: To elevate your writing, try using an alternative expression here.
Context: ...s its own file), so order-of-completion does not matter -- only that the pool stays saturated u...
(MATTERS_RELEVANT)
.claude/skills/pre-pr-review/SKILL.md
[style] ~765-~765: Consider an alternative for the overused word “exactly”.
Context: ...e/endpoint without wiring it at boot is exactly the regression this catches). Skip it o...
(EXACTLY_PRECISELY)
🪛 markdownlint-cli2 (0.22.1)
.claude/skills/pre-pr-review/SKILL.md
[warning] 790-790: Spaces inside code span elements
(MD038, no-space-in-code)
[warning] 805-805: Spaces inside code span elements
(MD038, no-space-in-code)
🔇 Additional comments (27)
.claude/skills/codebase-audit/SKILL.md (1)
2-2: LGTM!Also applies to: 9-9, 28-29, 315-317, 351-351, 357-357, 359-359, 679-740, 3763-3763, 3788-3788, 4137-4137, 4224-4224, 4299-4299
.claude/agents/comment-analyzer.md (1)
3-3: LGTM!.claude/agents/comment-quality-rot.md (1)
3-3: LGTM!.claude/agents/conventions-enforcer.md (1)
3-3: LGTM!.claude/agents/go-security-reviewer.md (1)
3-3: LGTM!.claude/agents/infra-reviewer.md (1)
3-3: LGTM!.claude/agents/logging-audit.md (1)
3-3: LGTM!.claude/agents/pr-test-analyzer.md (1)
3-3: LGTM!.claude/agents/resilience-audit.md (1)
3-3: LGTM!.claude/agents/silent-failure-hunter.md (1)
3-3: LGTM!.claude/agents/test-quality-reviewer.md (1)
3-3: LGTM!docs/reference/audit-category-gate-coverage.md (1)
3-3: LGTM!Also applies to: 19-19
docs/reference/convention-gates.md (1)
38-38: LGTM!Also applies to: 62-62
data/runtime_stats.yaml (1)
23-24: LGTM!scripts/check_no_ghost_wiring.py (6)
1-47: LGTM!
49-84: LGTM!
86-109: LGTM!
112-154: LGTM!
157-190: LGTM!
193-254: LGTM!scripts/_ghost_wiring_manifest.txt (1)
1-30: LGTM!.pre-commit-config.yaml (1)
243-253: LGTM!tests/unit/scripts/test_check_no_ghost_wiring.py (5)
1-62: LGTM!
64-103: LGTM!
105-131: LGTM!
133-199: LGTM!
201-215: LGTM!
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #2000 +/- ##
=======================================
Coverage 84.97% 84.97%
=======================================
Files 1880 1880
Lines 110872 110872
Branches 9457 9457
=======================================
+ Hits 94212 94214 +2
+ Misses 14347 14345 -2
Partials 2313 2313 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
- SKILL.md: skip-count three becomes four for 6-agent mini-pass roster (CodeRabbit) - check_no_ghost_wiring.py: scan only RUNTIME_PREFIXES dirs; drop redundant _scan_sites filter and unused SCAN_ROOT (Gemini) - SKILL.md: rephrase to fix MD038 spaces-in-code-span at lines 790/805 (CodeRabbit markdownlint)
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/check_no_ghost_wiring.py`:
- Around line 91-94: The code splits manifest lines with head, _, note =
line.partition(" -- ") but never verifies that the partition actually found the
" -- " delimiter; update the validation to treat lines missing that delimiter as
malformed by checking the separator variable (the second result assigned to _)
equals " -- " (and/or that note is non-empty) and include that condition
alongside the existing checks (parts length and parts[0] membership in
_VALID_STATES) so malformed lines like "ENFORCED Foo `#123` extra text" are
rejected in the same way as other invalid manifest lines.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 5234f3c8-7d45-41b3-afa5-df42d3bb0bcd
📒 Files selected for processing (2)
.claude/skills/pre-pr-review/SKILL.mdscripts/check_no_ghost_wiring.py
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
- GitHub Check: Deploy Preview
- GitHub Check: Build Web Assets (melange)
- GitHub Check: Lighthouse Site
- GitHub Check: Test Unit
- GitHub Check: Test E2E
- GitHub Check: Test Conformance (SQLite)
- GitHub Check: Test Integration
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: Analyze (python)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2026-05-05T09:04:46.195Z
Learnt from: Aureliolo
Repo: Aureliolo/synthorg PR: 1760
File: scripts/_dual_backend_parity_lib.py:215-216
Timestamp: 2026-05-05T09:04:46.195Z
Learning: This repository targets Python 3.14+ and follows PEP 758. Therefore, reviewer tooling should NOT treat unparenthesized multi-exception `except` clauses written without an `as` clause (e.g., `except MemoryError, RecursionError:`) as syntax errors. Only flag `except`-clause problems when they are genuinely invalid for Python 3.14+.
Applied to files:
scripts/check_no_ghost_wiring.py
🪛 LanguageTool
.claude/skills/pre-pr-review/SKILL.md
[style] ~765-~765: Consider an alternative for the overused word “exactly”.
Context: ...e/endpoint without wiring it at boot is exactly the regression this catches). Skip it o...
(EXACTLY_PRECISELY)
🔇 Additional comments (1)
.claude/skills/pre-pr-review/SKILL.md (1)
730-765: LGTM!Also applies to: 786-810
- check_no_ghost_wiring.py: validate mandatory ' -- ' manifest delimiter and require exact 3-field head (fail-closed on malformed lines); rename _MIN_MANIFEST_FIELDS to _MANIFEST_HEAD_FIELDS, extract _MANIFEST_DELIM (CodeRabbit Major) - test: add regression test for delimiter-missing manifest line
<!-- HIGHLIGHTS_START --> ## Highlights > _AI-generated summary (model: `openai/gpt-4.1-mini` via GitHub Models). Commit-based changelog below._ ### What you'll notice - Multi-agent coordination is now active immediately on startup for smoother operation. - Governance rules are fully enforced during use, ensuring compliance at all times. - Coordination metrics update live, giving real-time insights into system activity. - Review agents are now reliably processed, preventing silent drops in tasks. - Sandbox containers can be reused for agents and tasks, speeding up execution and reducing overhead. ### What's new - Agents support online runtime with a minimal safety framework to improve stability. - Recorded LLM interactions can be deterministically replayed at the provider interface. - Distributed path validation has been enhanced for more robust data routing. - A client-simulation runtime was added for end-to-end testing of the IntakeEngine. - A new work pipeline spine architecture has been introduced to streamline task processing. ### Under the hood - Infrastructure, Python, and web dependencies have all been updated to latest versions. - Updated apko lockfiles in the CI/CD pipeline improve build consistency. <!-- HIGHLIGHTS_END --> :robot: I have created a release *beep* *boop* --- ## [0.8.6](v0.8.5...v0.8.6) (2026-05-19) ### Features * agent runtime online + minimal safety spine (runtime root) ([#2003](#2003)) ([e5eef1a](e5eef1a)), closes [#1956](#1956) * deterministic recorded-LLM cassette replay at the provider chokepoint ([#2010](#2010)) ([cabf55d](cabf55d)) * distributed path validation + hardening ([#2011](#2011)) ([a382e4a](a382e4a)), closes [#1966](#1966) * wire IntakeEngine via boot client-simulation runtime (e2e test harness) ([#2006](#2006)) ([6a9c0aa](6a9c0aa)), closes [#1961](#1961) * work pipeline spine ([#1960](#1960)) ([#2013](#2013)) ([29b64e3](29b64e3)) ### Bug Fixes * bring the multi-agent coordinator online at boot ([#2007](#2007)) ([180b38a](180b38a)), closes [#1958](#1958) * full governance enforcement online ([#1957](#1957)) ([#2005](#2005)) ([4140fc5](4140fc5)) * harden anti-ghost-wiring gate and fix silently-dropped review agents ([#2000](#2000)) ([89b57ce](89b57ce)) * make coordination metrics live ([#1959](#1959)) ([#2012](#2012)) ([c4775e2](c4775e2)) * sandbox lifecycle dispatch (per-agent / per-task container reuse) ([#2008](#2008)) ([03d2587](03d2587)), closes [#1965](#1965) ### Documentation * add GitButler concept-only concurrency research ([#1978](#1978)) ([#2009](#2009)) ([9e4f5c1](9e4f5c1)) * honest-hybrid refresh of README, site, and design specs ([#2001](#2001)) ([f485bea](f485bea)) ### CI/CD * update apko lockfiles ([#2004](#2004)) ([e2b9eee](e2b9eee)) ### Maintenance * Update Infrastructure dependencies ([#2014](#2014)) ([0b16bdf](0b16bdf)) * Update Python dependencies ([#2015](#2015)) ([a7224bb](a7224bb)) * Update Web dependencies ([#2016](#2016)) ([7a7fe76](7a7fe76)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: synthorg-repo-bot[bot] <279117679+synthorg-repo-bot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Summary
Builds on the anti-ghost-wiring toolset (gate + audit agent 14 + pre-PR mini-pass) with a hardening pass and the resolution of a long-standing review-agent loading bug surfaced during this PR's own
/pre-pr-review.Anti-ghost-wiring gate (
scripts/check_no_ghost_wiring.py)return 1instead of an uncaught traceback (was inconsistent with the manifest-missing branch).stateisLiteral["ENFORCED","PENDING"];RUNTIME_PREFIXESannotatedFinal[tuple[str, ...]]; nudge cap is a named constant; docstring usesuv run; generator simplified.tests/unit/scripts/test_check_no_ghost_wiring.py(12 cases): happy path, regression, defining-module exclusion, attribute-call, non-runtime-prefix, PENDING nudge, manifest-missing, malformed manifest, syntax-error fail-closed, non-UTF8 fail-closed, CLI--repo-root. Matches the siblingtests/unit/scripts/test_check_*.pypattern.Review-agent loading bug (RCA + fix)
/pre-pr-reviewcould dispatch only 16 of 26.claude/agents/*.md. Root cause (26/26 correlation): the agent loader parses YAML frontmatter; an unquoteddescription:scalar containing an internal:(colon-space) fails YAML's block-mapping parse, so Claude Code silently drops the agent. All 16 working agents had no internal:; all 10 failing ones had exactly one. This also explains why the earliermodel: inherit -> sonnetworkaround (#1875) never worked. Fix: double-quoted thedescription:value in the 10 affected agent files (behaviour-preserving; bodies untouched). They register on the next Claude Code restart.Skill hardening
pre-pr-review/SKILL.mdPhase 4 gains a MANDATORY agent-registry preflight: rosteredsubagent_types are checked against the live list and missing agents surface the RCA + remediation, then run viageneral-purposeseeded with the verbatim agent body, instead of silently degrading.Docs
audit-category-gate-coverage.md: new classification row for the runtime-component ghost-wiring category;~155 -> ~159agents.pre-pr-review/SKILL.md:~155 -> ~159; mini-pass skip-condition "five -> six".Test plan
uv run ruff check+ruff formatclean on the gate and test.uv run mypyclean.uv run python -m pytest tests/unit/scripts/test_check_no_ghost_wiring.py-> 12 passed.uv run python scripts/check_no_ghost_wiring.py-> exit 0 on the real tree.no-ghost-wiringgate, mypy-affected, pytest-affected, convention-gate inventory, no-review-origin, no-migration-framing).description:with an internal:remain across all 26 files.Review coverage
/pre-pr-reviewran: docs-consistency, tool-parity-checker, code-reviewer, python-reviewer, type-design-analyzer (the other 4 were blocked by the very bug fixed here). All valid findings (16) implemented; no deferrals. type-design optional extras intentionally skipped per the finding's own "do not over-engineer a small gate" guidance.Relates to EPIC #1955 (this is the regression gate protecting that work; it does not wire the runtime).