Skip to content

fix: harden anti-ghost-wiring gate and fix silently-dropped review agents#2000

Merged
Aureliolo merged 4 commits into
mainfrom
ci/anti-ghost-wiring-toolset
May 18, 2026
Merged

fix: harden anti-ghost-wiring gate and fix silently-dropped review agents#2000
Aureliolo merged 4 commits into
mainfrom
ci/anti-ghost-wiring-toolset

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

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)

  • Fail-closed, clean UX: malformed manifest, unreadable/non-UTF8 source, and syntax errors now print a clear gate message and return 1 instead of an uncaught traceback (was inconsistent with the manifest-missing branch).
  • Closes a fail-open: now excludes a symbol's own defining module when counting construction sites, properly enforcing the manifest contract ("outside its own defining module"). A symbol only ever referenced inside its own file is correctly still a ghost.
  • state is Literal["ENFORCED","PENDING"]; RUNTIME_PREFIXES annotated Final[tuple[str, ...]]; nudge cap is a named constant; docstring uses uv run; generator simplified.
  • New test suite 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 sibling tests/unit/scripts/test_check_*.py pattern.

Review-agent loading bug (RCA + fix)

/pre-pr-review could dispatch only 16 of 26 .claude/agents/*.md. Root cause (26/26 correlation): the agent loader parses YAML frontmatter; an unquoted description: 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 earlier model: inherit -> sonnet workaround (#1875) never worked. Fix: double-quoted the description: 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.md Phase 4 gains a MANDATORY agent-registry preflight: rostered subagent_types are checked against the live list and missing agents surface the RCA + remediation, then run via general-purpose seeded 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 -> ~159 agents.
  • pre-pr-review/SKILL.md: ~155 -> ~159; mini-pass skip-condition "five -> six".

Test plan

  • uv run ruff check + ruff format clean on the gate and test.
  • uv run mypy clean.
  • 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.
  • Pre-push hooks all passed (incl. the new no-ghost-wiring gate, mypy-affected, pytest-affected, convention-gate inventory, no-review-origin, no-migration-framing).
  • Agent fix verified: zero unquoted description: with an internal : remain across all 26 files.

Review coverage

/pre-pr-review ran: 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).

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, 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

  • Anti-ghost-wiring Gate: Introduced a new CI gate (scripts/check_no_ghost_wiring.py) that enforces runtime reachability for critical components, preventing them from becoming 'ghosts' (defined but never constructed). It uses a manifest file to track components and includes a robust test suite.
  • Review Agent Loading Fix: Resolved a bug where review agents were silently dropped due to YAML frontmatter parsing errors caused by unquoted colons in descriptions. All affected agent files have been updated with double-quoted descriptions.
  • Skill Hardening: Updated pre-pr-review/SKILL.md to include a mandatory agent-registry preflight check, ensuring all rostered agents are available and providing clear remediation steps if they are not.
Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 17, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 17, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 02d4a7f5-5bfa-4629-ba21-cf17353976a9

📥 Commits

Reviewing files that changed from the base of the PR and between 0d99ace and 73e6a1e.

📒 Files selected for processing (2)
  • scripts/check_no_ghost_wiring.py
  • tests/unit/scripts/test_check_no_ghost_wiring.py
📜 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)
  • GitHub Check: Deploy Preview
  • GitHub Check: Test Conformance (SQLite)
  • GitHub Check: Test Unit
  • GitHub Check: Test E2E
  • GitHub Check: Test Integration
  • GitHub Check: Build Web Assets (melange)
  • GitHub Check: Lighthouse Site
  • GitHub Check: Analyze (python)
  • GitHub Check: Analyze (javascript-typescript)
🧰 Additional context used
📓 Path-based instructions (1)
tests/**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

tests/**/*.py: Test markers: @pytest.mark.{unit,integration,e2e,slow}. Async auto. Timeout 30s global. Coverage 80% min. xdist -n 8 --dist=loadfile auto-applied via pyproject addopts
Windows: unit tests use WindowsSelectorEventLoopPolicy (3.14 IOCP teardown race). Subprocess tests override back
Test doubles: use FakeClock for Clock seam, mock_of[T](**overrides) for typed-boundary substitutions, SimpleNamespace for attribute-bags. Bare MagicMock at typed boundary is blocked by scripts/check_mock_spec.py (zero-tolerance)
FakeClock and mock_of import from tests._shared; inject via clock= and helper's spec subscript
Hypothesis: 10 deterministic CI examples; failures are real bugs (fix + add @example(...)). Flaky: NEVER skip/xfail; fix fundamentally. Use asyncio.Event().wait() not sleep(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 (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
  • tests/unit/scripts/test_check_no_ghost_wiring.py
🔇 Additional comments (2)
scripts/check_no_ghost_wiring.py (1)

1-261: LGTM!

tests/unit/scripts/test_check_no_ghost_wiring.py (1)

1-225: LGTM!


Walkthrough

This 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)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.43% which is insufficient. The required threshold is 40.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'fix: harden anti-ghost-wiring gate and fix silently-dropped review agents' accurately captures the two main objectives of the changeset: hardening the anti-ghost-wiring gate script and fixing the review-agent loading bug.
Description check ✅ Passed The description comprehensively explains the changeset, detailing the anti-ghost-wiring gate hardening, the root cause and fix of the review-agent loading bug, skill hardening, documentation updates, and the test plan with specific verification steps.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@Aureliolo Aureliolo temporarily deployed to cloudflare-preview May 17, 2026 22:46 — with GitHub Actions Inactive
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread scripts/check_no_ghost_wiring.py Outdated
Comment on lines +112 to +115
def _iter_runtime_py(repo_root: Path) -> Iterable[Path]:
base = repo_root / SCAN_ROOT
if base.is_dir():
yield from sorted(base.rglob("*.py"))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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/.

Suggested change
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)

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between a7253b4 and 85b6674.

📒 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.yaml
  • data/runtime_stats.yaml
  • docs/reference/audit-category-gate-coverage.md
  • docs/reference/convention-gates.md
  • scripts/_ghost_wiring_manifest.txt
  • scripts/check_no_ghost_wiring.py
  • tests/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 from data/runtime_stats.yaml via <!--RS:NAME--> markers per data/README.md
Use d2 for architecture / nested containers, mermaid for 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.md
  • docs/reference/convention-gates.md
tests/**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

tests/**/*.py: Test markers: @pytest.mark.{unit,integration,e2e,slow}. Async auto. Timeout 30s global. Coverage 80% min. xdist -n 8 --dist=loadfile auto-applied via pyproject addopts
Windows: unit tests use WindowsSelectorEventLoopPolicy (3.14 IOCP teardown race). Subprocess tests override back
Test doubles: use FakeClock for Clock seam, mock_of[T](**overrides) for typed-boundary substitutions, SimpleNamespace for attribute-bags. Bare MagicMock at typed boundary is blocked by scripts/check_mock_spec.py (zero-tolerance)
FakeClock and mock_of import from tests._shared; inject via clock= and helper's spec subscript
Hypothesis: 10 deterministic CI examples; failures are real bugs (fix + add @example(...)). Flaky: NEVER skip/xfail; fix fundamentally. Use asyncio.Event().wait() not sleep(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.md
  • 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: 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.md
  • 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: 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.md
  • 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: 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.md
  • docs/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.py
  • scripts/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!

Comment thread .claude/skills/pre-pr-review/SKILL.md
@codecov
Copy link
Copy Markdown

codecov Bot commented May 17, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.97%. Comparing base (a7253b4) to head (73e6a1e).
✅ All tests successful. No failed tests found.

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

- 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)
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 85b6674 and 0d99ace.

📒 Files selected for processing (2)
  • .claude/skills/pre-pr-review/SKILL.md
  • scripts/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

Comment thread scripts/check_no_ghost_wiring.py Outdated
- 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
@Aureliolo Aureliolo merged commit 89b57ce into main May 18, 2026
81 checks passed
@Aureliolo Aureliolo deleted the ci/anti-ghost-wiring-toolset branch May 18, 2026 05:30
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview May 18, 2026 05:30 — with GitHub Actions Inactive
Aureliolo pushed a commit that referenced this pull request May 19, 2026
<!-- 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>
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