# When Is the Advisory Matrix Used in Reverse-Skill Routing? Fallback Logic Explained

> Discover when the advisory matrix is used in reverse-skill routing. Learn about fallback logic and how it ensures clear skill paths when primary routing fails. Understand this crucial technical concept.

- Repository: [ZhaoXu/reverse-skill](https://github.com/zhaoxuya520/reverse-skill)
- Tags: deep-dive
- Published: 2026-08-31

---

**The advisory routing matrix in reverse-skill is used only when the primary JSON-based routing cannot resolve an unambiguous skill path for a given target type, user intent, and toolchain combination.**

The reverse-skill framework implements a two-tier routing system where [`config/routing.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/config/routing.json) serves as the authoritative source of truth. The advisory matrix at [`skills/routing.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/routing.md) acts strictly as a disambiguation aid—not an override mechanism.

## How Primary Routing Works

The **primary routing** step executes through `scripts/master-route.ps1`. This PowerShell script reads [`config/routing.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/config/routing.json) to determine which skill should run based on three input dimensions: target type, user intent, and toolchain.

```powershell

# Execute primary routing with a natural language hint

.\scripts\master-route.ps1 -Hint "reverse engineer Android APK"

```

When the JSON lookup yields exactly one matching skill, the routing decision is final. No further consultation occurs.

## When the Advisory Matrix Becomes Relevant

The **advisory routing matrix** is consulted **exclusively when primary routing returns ambiguous results**. This happens when multiple skills could plausibly match the input criteria, or when the JSON structure lacks sufficient granularity to isolate a single path.

According to [`skills/routing.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/routing.md) itself, the matrix is "**Advisory only**" and must be used "**only when PRIMARY is ambiguous**"【/cache/repos/github.com/zhaoxuya520/reverse-skill/main/skills/routing.md†L3-L4】.

The repository's [`RULES.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/RULES.md) codifies this explicitly: "**Ambiguous PRIMARY → [`skills/routing.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/routing.md) (advisory matrix only)**"【/cache/repos/github.com/zhaoxuya520/reverse-skill/main/RULES.md†L24-L25】.

## Advisory Matrix Structure and Usage

The matrix provides a **three-axis view** to help operators manually disambiguate routing decisions:

- **Target Type**: The object being analyzed (e.g., APK, ELF binary, firmware image)
- **User Intent**: The high-level goal (e.g., "decompile", "extract strings", "find vulnerabilities")
- **Toolchain**: The preferred tooling approach (e.g., "ida-reverse", "ghidra", "radare2")

```powershell

# Example: Primary routing reports ambiguity for APK + "decompile" + "ida-reverse"

# The advisory matrix guides you to the correct SKILL.md file

# Manual consultation workflow:

# 1. Open skills/routing.md

# 2. Locate the intersection row:

#    | Target Type | User Intent | Toolchain   | Recommended Skill |

#    |-------------|-------------|-------------|-------------------|

#    | APK         | decompile   | ida-reverse | SKILL_APK_IDA.md  |

# 3. Read the indicated skill file for execution instructions

```

## Priority Hierarchy: JSON Always Wins

A critical constraint governs the advisory matrix role: **if the matrix and JSON disagree, the JSON configuration prevails**. The matrix offers guidance—it does not override the authoritative [`config/routing.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/config/routing.json).

This design ensures:

1. **Deterministic automation**: Scripts can rely on JSON as the single source of truth
2. **Human-readable fallback**: Operators have structured guidance for edge cases
3. **No configuration drift**: The matrix cannot accidentally subvert intended routing logic

## Key Files in the Routing System

| File | Purpose | Authority Level |
|------|---------|---------------|
| [`config/routing.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/config/routing.json) | Machine-readable routing map | **Authoritative** |
| `scripts/master-route.ps1` | Primary routing execution engine | Implements JSON rules |
| [`skills/routing.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/routing.md) | Human-readable disambiguation matrix | **Advisory only** |
| [`RULES.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/RULES.md) | Repository-wide routing governance | Defines fallback conditions |

## Summary

- **Primary routing** via `scripts/master-route.ps1` and [`config/routing.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/config/routing.json) is always attempted first
- The **advisory matrix** at [`skills/routing.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/routing.md) activates **only for ambiguous primary results**
- The matrix provides a **three-axis decision view** (target type, user intent, toolchain)
- **JSON overrides the matrix** in any conflict—the matrix is strictly non-binding
- Consult [`RULES.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/RULES.md) for the formal routing hierarchy definition

## Frequently Asked Questions

### Can the advisory matrix override the JSON routing configuration?

No. The matrix is explicitly "**Advisory only**" per its own documentation【/cache/repos/github.com/zhaoxuya520/reverse-skill/main/skills/routing.md†L3-L4】. The JSON file at [`config/routing.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/config/routing.json) remains the authoritative source, and [`RULES.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/RULES.md) establishes that JSON decisions take precedence even when they contradict matrix suggestions.

### How do I know when to consult the advisory matrix?

The `scripts/master-route.ps1` script signals this condition explicitly. When primary routing cannot resolve a unique skill, it reports "**Ambiguous PRIMARY**" and directs you to [`skills/routing.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/routing.md). You can also proactively check the matrix when your input parameters (target type, user intent, toolchain) seem to match multiple documented skills.

### What three axes does the advisory matrix use for disambiguation?

The matrix organizes guidance by: **target type** (what you're analyzing), **user intent** (what you want to accomplish), and **toolchain** (which tool preference or approach applies). Each matrix row maps a unique combination of these three dimensions to a recommended skill file.

### Where is the routing priority formally defined?

The routing hierarchy is codified in [`RULES.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/RULES.md) at line 24-25, which states: "**Ambiguous PRIMARY → [`skills/routing.md`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/routing.md) (advisory matrix only)**"【/cache/repos/github.com/zhaoxuya520/reverse-skill/main/RULES.md†L24-L25】. This file governs all routing behavior in the repository.