dotnet-techne-cross-repo-impact — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited dotnet-techne-cross-repo-impact (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
graph kept warm), or
Use the companion dotnet-techne-synopsis skill to auto-download and detect the binary.
gh for GitHub (authenticated, repo read).glab for GitLab (authenticated, MR read).searchOpenPrs tool.
other repo in the fleet as peer directories (Synopsis discovers repos by .git markers under the root).
Trigger this skill when a PR diff touches any of:
by other projects.
verb attributes.
DbContext overrides, OnModelCreatingconfigurations, ToTable / HasColumnName calls, or migration files.
[JsonPropertyName], [DataMember],[JsonConverter], or used as HttpClient request/response bodies.
PackageReference elements in .csproj or Directory.Packages.propswhere the package is also referenced by other repos.
appsettings.json keys that appear as ConfigurationKey nodes in theSynopsis 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.
Pick the mode based on what is available:
Used when a long-running synopsis mcp daemon is already serving a combined multi-repo graph (typical deployment for an autonomous review agent).
reindex_repository) atthe head SHA before analysis; other repos stay warm.
turns.
Used when Synopsis is not running as a daemon (Claude Code user running this skill manually, CI one-shot, etc.).
synopsis scan to producehead.graph.json.
synopsis scan →base.graph.json).
synopsis breaking-diff base.graph.json head.graph.json --json toget classified breaking changes.
<name> --blast-radius --json`.
Both modes produce the same findings; the skill text below uses MCP tool names and notes CLI equivalents where relevant.
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.
via git diff --name-only <base>...<head>.
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.
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.
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".
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:
synonyms.
fix/*<symbol>*,chore/sync-<pr-number>, bump/<package>-<version>).
#N, search openPRs in downstream repos mentioning that issue number.
since the PR under review was opened, whichever is longer).
GitHub example:
gh pr list --repo <owner>/<downstream-repo> --state open \
--search "<symbol> in:title,body" --json number,title,url,headRefNameGitLab example:
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.
Start with the classifier's base severity, then apply these transforms:
escalate severity by one level (Low → Medium → High → Critical).
search-failed warning.
Ambiguous or Unresolved: cap severityat Medium and add an ambiguous-evidence warning.
least Critical.
See references/severity-rubric.md for the full table including edge cases.
Produce the cross-repo-impact.md report following the schema in references/report-schema.md. Output destinations:
review comment.
Always also emit a structured JSON summary for programmatic consumers:
{
"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.
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.
| 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. |
These invariants apply every run. Consumers cannot override them:
row from breaking_diff output AND at least one node/edge from blast_radius.
re-interpret while rendering.
BLOCK, etc.) aresuggestions. Gate enforcement is the code host's responsibility.
reported — the standard code-review skills own those.
rules table including edge cases.
references/report-schema.md — exactmarkdown format for cross-repo-impact.md.
heuristics and CLI recipes for GitHub, GitLab, and others.
dotnet-techne-synopsis — installs the Synopsis binary, exposes thegraph query surface. This skill depends on it.
dotnet-techne-code-review — standard .NET PR review skill. Runsalongside this skill; this one only handles cross-repo findings.
dotnet-techne-csharp-api-design — guidance on designing API changesto avoid creating cross-repo breaks in the first place.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.