| name | list-gaps |
| description | List pathfinding-labs scenarios that don't have pathrunner modules yet |
| context | fork |
| argument-hint | [service] (optional filter, e.g., lambda, ecs, iam) |
| allowed-tools | Bash, Read, Glob, Grep |
List Coverage Gaps
Cross-reference pathfinding-labs scenarios against pathrunner's module registry to find gaps.
Steps
Step 1: Get All Pathfinding-Labs Scenarios
List all scenario.yaml files and extract their pathfinding-cloud-id:
Paths are relative to the pathrunner repo root (siblings ../pathfinding.cloud/ and ../pathfinding-labs/ under a shared pathfinding/ parent).
find ../pathfinding-labs/modules/scenarios/ -name "scenario.yaml" | while read -r f; do
ID=$(grep 'pathfinding-cloud-id' "$f" 2>/dev/null | head -1 | sed 's/.*: *//' | tr -d '"' | tr -d "'")
GOAL=$(basename "$(dirname "$(dirname "$f")")")
if [ -n "$ID" ]; then
echo "$ID|${ID}-${GOAL}"
fi
done | sort
Step 2: Get All Pathrunner Modules
List registered module IDs:
grep -r 'modules.Register(' pkg/exploits/*/module.go | sed 's/.*Register("\([^"]*\)".*/\1/' | sort
Or read pkg/exploits/register.go directly — it's the auto-generated fan-out of every registered module directory.
Step 3: Cross-Reference
For each scenario ID, check if a pathrunner module exists.
Step 4: Check Deployment Status
For scenarios without modules, check if they're deployed (useful for prioritizing):
(cd ../pathfinding-labs && ./plabs scenarios list) 2>&1
Step 5: Apply Service Filter
If the user provided a service filter argument ($ARGUMENTS), only show gaps for that service.
Step 6: Output Table
Format as a markdown table:
| Path ID | Scenario | Module Exists | Category | Services |
|---|
| ecs-001 | ecs-001-to-admin | No | new-passrole | iam, ecs |
| ecs-002 | ecs-002-to-admin | No | new-passrole | iam, ecs |
| ... | ... | ... | ... | ... |
Also show summary stats:
- Total paths with scenarios: X
- Paths with pathrunner modules: Y
- Gaps: Z
- Coverage: Y/X (percentage)
If filtered by service, show service-specific stats.