Skip to content
Back to skills

Dotnet Techne Cross Repo Impact

ASecurity

Use when reviewing a .NET pull request for breaking changes that may affect other microservice repositories. Detects cross-repo API, DTO, endpoint, EF entity, and NuGet-package breaks, and checks whether a compatible downstream PR already exists. Keywords: cross-repo impact, breaking change, microservice compatibility, downstream break, compatible PR, blast radius review, api compatibility, contract break, dto shape change, endpoint break.

  • 666 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 8, 2026
ai-agentsbashnodecode-reviewgitapi

Works with

  • claude code
  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned October 8, 2026

npx -y skills add majiayu000/claude-skill-registry --skill dotnet-techne-cross-repo-impact --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dotnet Techne Cross Repo Impact?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dotnet Techne Cross Repo Impact
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-dotnet-techne-cross-repo-impact/badge)](https://www.skillsdirectory.com/skills/majiayu000-dotnet-techne-cross-repo-impact)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: dotnet-techne-cross-repo-impact
description: "Use when reviewing a .NET pull request for breaking changes that may affect other microservice repositories. Detects cross-repo API, DTO, endpoint, EF entity, and NuGet-package breaks, and checks whether a compatible downstream PR already exists. Keywords: cross-repo impact, breaking change, microservice compatibility, downstream break, compatible PR, blast radius review, api compatibility, contract break, dto shape change, endpoint break."
disable-model-invocation: false
user-invocable: true
license: MIT
compatibility: Requires Synopsis v1.6.0+ (from dotnet-techne-synopsis skill) with either its MCP daemon or CLI accessible. Requires git and a code-host CLI (gh for GitHub, glab for GitLab) for compatible-PR search. Works with any AI agent that supports the Agent Skills specification.
metadata:
  author: Metalnib
  version: "1.0.0"
  trigger_keywords:
    - cross-repo impact
    - breaking change review
    - microservice compatibility
    - downstream break
    - compatible PR
    - blast radius review
    - api compatibility
    - contract break
    - dto shape change
    - endpoint break
    - shared library bump
---

# .NET Cross-Repo Impact Analysis

Procedural recipe for reviewing a .NET pull request against a multi-repo
microservice workspace: detect breaking changes, trace their blast radius
across repo boundaries, check for a compatible downstream PR, and render
a structured `cross-repo-impact.md` report.

This skill is **procedural only**. It does not describe agent identity,
default stance, or severity philosophy — those belong in the consuming
agent's system prompt. This skill tells the agent *how* to run the
analysis when invoked.

## Requirements

- **Synopsis v1.6.0+** binary available, either:
  - as a long-running MCP daemon (preferred — fastest, combined multi-repo
    graph kept warm), or
  - as a CLI invoked per-run (one-shot mode, no daemon required).
  Use the companion `dotnet-techne-synopsis` skill to auto-download and
  detect the binary.
- **git** on the PATH for diff inspection.
- A code-host CLI on the PATH for compatible-PR search:
  - `gh` for GitHub (authenticated, repo read).
  - `glab` for GitLab (authenticated, MR read).
  - Others acceptable if the agent's harness provides an equivalent
    `searchOpenPrs` tool.
- Read access to a **workspace root** that contains the PR repo AND every
  other repo in the fleet as peer directories (Synopsis discovers repos
  by `.git` markers under the root).

## When to use this skill

Trigger this skill when a PR diff touches any of:

- Public types, methods, records, or interfaces in an assembly referenced
  by other projects.
- ASP.NET controllers, minimal-API endpoints, route constants, or HTTP
  verb attributes.
- EF Core entity classes, `DbContext` overrides, `OnModelCreating`
  configurations, `ToTable` / `HasColumnName` calls, or migration files.
- DTO classes or records carrying `[JsonPropertyName]`, `[DataMember]`,
  `[JsonConverter]`, or used as `HttpClient` request/response bodies.
- `PackageReference` elements in `.csproj` or `Directory.Packages.props`
  where the package is also referenced by other repos.
- `appsettings.json` keys that appear as `ConfigurationKey` nodes in the
  Synopsis graph.

If the diff is pure internal refactor (no public surface change, no
cross-repo edges touched), skip this skill and run standard review skills
only.

## Operating modes

Pick the mode based on what is available:

### Mode A — Daemon mode (preferred)

Used when a long-running `synopsis mcp` daemon is already serving a
combined multi-repo graph (typical deployment for an autonomous review
agent).

- Call MCP tools on the already-running daemon.
- Ask the daemon to re-index only the PR repo (`reindex_repository`) at
  the head SHA before analysis; other repos stay warm.
- Fastest: typical review in a few seconds of graph work plus the LLM
  turns.

### Mode B — One-shot mode

Used when Synopsis is not running as a daemon (Claude Code user running
this skill manually, CI one-shot, etc.).

- Scan the workspace once with `synopsis scan` to produce
  `head.graph.json`.
- Scan the base revision (checkout base ref → `synopsis scan` →
  `base.graph.json`).
- Run `synopsis breaking-diff base.graph.json head.graph.json --json` to
  get classified breaking changes.
- Query the head graph for blast radius via `synopsis query symbol --fqn
  <name> --blast-radius --json`.

Both modes produce the same findings; the skill text below uses MCP tool
names and notes CLI equivalents where relevant.

## Procedure

### 1. Resolve the workspace and PR

- Determine the **workspace root** (the directory containing all
  microservice repo checkouts). The agent's harness should provide it;
  if not, infer from the parent of the PR repo and verify at least two
  sibling `.git` directories exist.
- Identify the PR repo, base ref, head SHA, and the list of changed files
  via `git diff --name-only <base>...<head>`.

### 2. Ensure Synopsis sees the head revision

**Mode A:** call `reindex_repository { path: <pr-repo-abs-path>, ref: <head-sha> }`.
Wait for response. Inspect returned delta stats to confirm at least one
node changed.

**Mode B:** `synopsis scan <workspace-root> -o head.graph.json`
at head SHA, then `git checkout <base-ref>`, then
`synopsis scan <workspace-root> -o base.graph.json`, then restore head.

### 3. Compute classified breaking changes

**Mode A:** call `breaking_diff { before: <base.graph.json>, after: <head.graph.json> }`.
(The daemon may cache `before` as part of its pre-PR baseline; confirm in
the returned metadata.)

**Mode B:** `synopsis breaking-diff base.graph.json head.graph.json --json`.

The response is a typed list of changes. Each change has:

- `kind` — paired change kinds (`ApiSignatureChange`, `EndpointRouteChange`,
  `EndpointVerbChange`, `TableRename`, `NugetVersionBump`), removal kinds
  (`ApiRemoved`, `EndpointRemoved`, `TableRemoved`, `PackageRemoved`), or
  detection-pending kinds (`DtoShapeChange`, `EntityColumnChange`,
  `SerializationContractChange` — not yet emitted; reserved for future
  pass work).
- `severity` — classifier's base severity (Critical/High/Medium/Low).
- `certainty` — Synopsis certainty (`Exact` / `Inferred` / `Ambiguous` /
  `Unresolved`).
- `affectedNodes[]` — graph node IDs touched.
- `beforeSnippet`, `afterSnippet` — one-line summaries.
- `sourceLocation` — file + line (where applicable).

If the list is empty, skip to step 7 and emit a clean pass.

### 4. Filter to cross-repo impact

For each classified change, call `blast_radius { symbol: <nodeId>, direction: "upstream", depth: 4 }`
(CLI equivalent: `synopsis query symbol --fqn <name> --blast-radius --depth 4`).

Retain only changes whose upstream callers include at least one node with
`repositoryName != prRepo.name`. Group hits by downstream repository.

Changes with no cross-repo callers are not reported by this skill — they
are handled by the standard code-review skills. Always count them in the
summary as "internal-only changes: N".

### 5. Search for compatible downstream PRs

For each affected downstream repo, search open PRs/MRs that likely fix
the break. See `references/compat-pr-search.md` for the full heuristic
catalogue; the minimum set:

- **Keyword search** on the affected symbol's display name and common
  synonyms.
- **Branch-name patterns** commonly used in your org (e.g. `fix/*<symbol>*`,
  `chore/sync-<pr-number>`, `bump/<package>-<version>`).
- **Linked-issue** lookup: if the PR references issue `#N`, search open
  PRs in downstream repos mentioning that issue number.
- **Freshness window**: only consider PRs opened in the last 30 days (or
  since the PR under review was opened, whichever is longer).

GitHub example:

```bash
gh pr list --repo <owner>/<downstream-repo> --state open \
  --search "<symbol> in:title,body" --json number,title,url,headRefName
```

GitLab example:

```bash
glab mr list --repo <group>/<downstream-repo> --state opened \
  --search "<symbol>"
```

Record for each affected repo: `compatiblePrUrl: <url>` OR `compatiblePr: NONE FOUND`.

If the search hits its rate limit or errors, mark `compatiblePr: UNKNOWN`
for that repo and proceed — never fail the whole analysis on search
flakiness.

### 6. Apply severity rules

Start with the classifier's base severity, then apply these transforms:

- If **no compatible PR** was found for an affected downstream repo:
  escalate severity by one level (Low → Medium → High → Critical).
- If compat-PR search returned UNKNOWN: escalate by one level and add a
  `search-failed` warning.
- If all upstream callers are `Ambiguous` or `Unresolved`: cap severity
  at **Medium** and add an `ambiguous-evidence` warning.
- Never down-escalate. A change the classifier called Critical stays at
  least Critical.

See `references/severity-rubric.md` for the full table including edge
cases.

### 7. Render the report

Produce the `cross-repo-impact.md` report following the schema in
`references/report-schema.md`. Output destinations:

- If the agent has a "post inline comment" capability — post this as a PR
  review comment.
- If not, write the file to the workspace root and print its path.

Always also emit a structured JSON summary for programmatic consumers:

```json
{
  "severity": "<highest finding severity>",
  "counts": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
  "affectedRepos": 0,
  "compatiblePrsFound": 0,
  "compatiblePrsMissing": 0,
  "findings": [
    { "kind": "...", "symbol": "...", "severity": "...", "recommendation": "..." }
  ]
}
```

Recommendation values: `BLOCK` | `REQUIRE-COORDINATED-PR` | `FLAG` | `OK`.

## Confidence mapping

The report's `Confidence` field mirrors the weakest Synopsis certainty
contributing to the finding:

| Synopsis certainty | Confidence |
|---|---|
| `Exact` | High |
| `Inferred` | Medium |
| `Ambiguous` | Low |
| `Unresolved` | Unknown |

When a finding has mixed certainty across its evidence, report the
**lowest** value.

## Failure modes

| Situation | Behaviour |
|---|---|
| Synopsis daemon unreachable (Mode A) | Fall back to Mode B. If that also fails, emit a degraded report with `severity: Unknown`, reason stated, and still run standard review skills. |
| `breaking_diff` returns no changes | Emit the summary JSON with all zero counts and a one-line "no cross-repo-relevant breaking changes detected" note. No markdown report. |
| `git checkout <base-ref>` fails in Mode B | Fall back to last common commit via `git merge-base`; record a warning in the report. |
| Compat-PR search CLI absent | Mark all findings `compatiblePr: UNKNOWN`, escalate one level, emit warning in each finding. |
| LLM suggests a cross-repo caller Synopsis did not report | **Reject the suggestion.** Every caller in the report must cite a Synopsis node or edge. If evidence is missing, omit the claim. |

## Skill hygiene

These invariants apply every run. Consumers cannot override them:

- **Classifier-first citation.** Every finding references at least one
  row from `breaking_diff` output AND at least one node/edge from
  `blast_radius`.
- **One-pass severity.** Severity is computed once in step 6. Do not
  re-interpret while rendering.
- **Advisory output only.** Recommendations (`BLOCK`, etc.) are
  suggestions. Gate enforcement is the code host's responsibility.
- **Cross-repo only.** Internal-only findings are counted but not
  reported — the standard code-review skills own those.

## References

- [`references/severity-rubric.md`](references/severity-rubric.md) — full
  rules table including edge cases.
- [`references/report-schema.md`](references/report-schema.md) — exact
  markdown format for `cross-repo-impact.md`.
- [`references/compat-pr-search.md`](references/compat-pr-search.md) —
  heuristics and CLI recipes for GitHub, GitLab, and others.

## See also

- `dotnet-techne-synopsis` — installs the Synopsis binary, exposes the
  graph query surface. This skill depends on it.
- `dotnet-techne-code-review` — standard .NET PR review skill. Runs
  alongside this skill; this one only handles cross-repo findings.
- `dotnet-techne-csharp-api-design` — guidance on designing API changes
  to avoid creating cross-repo breaks in the first place.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.