Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Runs a Trailmark structural review gate over a branch, pull request, fix commit, release diff, or git ref range to detect new entrypoints, new tainted paths, removed validation or authorization calls, privilege-boundary drift, blast-radius growth, complexity growth, and newly reachable sensitive sinks. Use when reviewing a PR, branch, remediation commit, or release diff where graph-level security regressions should be checked before merge.
.claude/skills/trailofbits-trailmark-review-gate/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 231% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 235% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 1% | 0% |
Apply deterministic security gate rules to Trailmark structural diff evidence. This skill does not replace line-level review. It produces a compact structural packet reviewers can cite while they inspect the code.
complexity signals
trailmark or trailmark-structural.differential-review.trailmark-finding-triage.| Rationalization | Why It Is Wrong | Required Action | |---|---|---| | "The line diff is small, so no graph gate is needed" | Small changes can create new call paths | Compare before/after graphs | | "Graph gate passed, so the PR is secure" | The gate only checks structural regressions | Still perform line-level review | | "Trailmark failed, so pass the gate" | Tool failure is unknown risk, not success | Emit UNKNOWN | | "Tests pass, so removed validation is fine" | Tests may miss affected entrypoint paths | Review the removed path manually | | "Only new code matters" | Removed auth, validation, and callers can be higher risk than additions | Review removals and path changes |
Review Gate Progress:
- [ ] Step 1: Resolve before/after inputs
- [ ] Step 2: Build graph-evolution evidence
- [ ] Step 3: Normalize structural changes
- [ ] Step 4: Apply gate rules
- [ ] Step 5: Emit review packet and actionsAccept two refs, a branch name, a commit range, or before/after directories. Do not check out branches unnecessarily. Prefer git diff, git show, and git worktrees, following the graph-evolution snapshot workflow.
Run graph-evolution or equivalent Trailmark before/after graph analysis. Both snapshots must run engine.preanalysis() so taint, privilege-boundary, blast-radius, complexity, and entrypoint signals are available.
Record Trailmark version and any feature probes. If graph construction fails, emit UNKNOWN.
Normalize evidence into:
Apply the rules in references/gate-rules.md. Gate verdicts are:
| Verdict | Meaning | |---|---| | FAIL | A high-risk structural regression needs review before acceptance | | WARN | A meaningful graph change needs reviewer attention | | PASS | No configured structural gate fired | | UNKNOWN | Trailmark failed or evidence is too incomplete |
Write the packet using references/output-format.md, then hand it to the branch reviewer. Use references/review-integration.md when combining this packet with differential-review or another PR review process.
PASS when Trailmark failed.FAIL and WARN.uncertainty affects the verdict.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,705 | 12,758 | -24% | 1 | 1 | 0% | 970 | 3,212 | +231% | 0 | 0 | — |
case-02 | fail→pass | 6,031 | 14,357 | +138% | 1 | 1 | 0% | 1,017 | 3,404 | +235% | 0 | 0 | — |
case-03 | pass→pass | 13,299 | 9,436 | -29% | 1 | 1 | 0% | 1,435 | 2,041 | +42% | 0 | 0 | — |
case-04 | fail→fail | 2,526 | 3,016 | +19% | 1 | 1 | 0% | 379 | 1,422 | +275% | 0 | 0 | — |
case-05 | fail→fail | 8,887 | 10,065 | +13% | 1 | 1 | 0% | 882 | 2,106 | +139% | 0 | 0 | — |
case-06 | fail→pass | 7,555 | 4,741 | -37% | 1 | 1 | 0% | 1,320 | 1,728 | +31% | 0 | 0 | — |
case-07 | pass→pass | 10,239 | 5,184 | -49% | 1 | 1 | 0% | 1,657 | 1,742 | +5% | 0 | 0 | — |
case-08 | fail→pass | 8,514 | 3,398 | -60% | 1 | 1 | 0% | 1,382 | 1,505 | +9% | 0 | 0 | — |
case-09 | pass→pass | 9,008 | 4,952 | -45% | 1 | 1 | 0% | 1,447 | 1,729 | +19% | 0 | 0 | — |
case-10 | pass→pass | 10,146 | 6,061 | -40% | 1 | 1 | 0% | 1,564 | 1,857 | +19% | 0 | 0 | — |
case-11 | pass→pass | 10,827 | 5,910 | -45% | 1 | 1 | 0% | 2,217 | 1,929 | -13% | 0 | 0 | — |
case-12 | fail→pass | 22,701 | 2,102 | -91% | 1 | 1 | 0% | 1,226 | 1,238 | +1% | 0 | 0 | — |
case-13 | fail→pass | 14,201 | 3,871 | -73% | 1 | 1 | 0% | 2,291 | 1,595 | -30% | 0 | 0 | — |
case-14 | fail→pass | 9,678 | 2,352 | -76% | 1 | 1 | 0% | 1,822 | 1,234 | -32% | 0 | 0 | — |
case-15 | pass→pass | 9,551 | 3,374 | -65% | 1 | 1 | 0% | 1,590 | 1,444 | -9% | 0 | 0 | — |
case-16 | fail→pass | 10,557 | 3,743 | -65% | 1 | 1 | 0% | 1,739 | 1,562 | -10% | 0 | 0 | — |
case-21 | fail→pass | 12,596 | 2,539 | -80% | 1 | 1 | 0% | 2,253 | 1,332 | -41% | 0 | 0 | — |
case-17 | fail→pass | 11,117 | 4,516 | -59% | 1 | 1 | 0% | 2,027 | 1,711 | -16% | 0 | 0 | — |
case-18 | pass→pass | 12,156 | 5,603 | -54% | 1 | 1 | 0% | 2,114 | 1,774 | -16% | 0 | 0 | — |
case-19 | pass→pass | 10,854 | 2,690 | -75% | 1 | 1 | 0% | 1,876 | 1,354 | -28% | 0 | 0 | — |
case-20 | pass→pass | 14,152 | 17,567 | +24% | 1 | 1 | 0% | 2,445 | 3,081 | +26% | 0 | 0 | — |
case-22 | fail→pass | 5,242 | 2,518 | -52% | 1 | 1 | 0% | 905 | 1,289 | +42% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.