lis186

flow

Extract business logic flow from code, trace execution path from entry point

lis186 39 3 Updated 4mo ago
GitHub

Install

npx skillscat add lis186/sourceatlas/flow

Install via the SkillsCat registry.

SKILL.md

SourceAtlas: Flow Analysis

Target: $ARGUMENTS


STEP 0: Mode Detection (EXECUTE IMMEDIATELY)

IMPORTANT: Check these patterns FIRST before doing anything else.

Check for Tier 2-3 Keywords (External Mode Required)

Scan $ARGUMENTS for these keywords. If ANY match, load external file and STOP reading this document:

If arguments contain... Then execute this action
"dead code" OR "unreachable" OR "unused" Read scripts/atlas/flow-modes/mode-13-dead-code.md then follow its instructions
"async" OR "thread" OR "concurrent" OR "race" Read scripts/atlas/flow-modes/mode-14-concurrency.md then follow its instructions
"taint" OR "injection" OR "untrusted" Read scripts/atlas/flow-modes/mode-12-taint-analysis.md then follow its instructions
"state" OR "status" OR "lifecycle" Read scripts/atlas/flow-modes/mode-04-state-machine.md then follow its instructions
"transaction" OR "rollback" OR "commit" Read scripts/atlas/flow-modes/mode-09-transaction.md then follow its instructions
"log" OR "logging" OR "from logs" Read scripts/atlas/flow-modes/mode-06-log-discovery.md then follow its instructions
"compare" OR "diff" OR "vs" Read scripts/atlas/flow-modes/mode-05-flow-comparison.md then follow its instructions
"feature toggle" OR "feature flag" Read scripts/atlas/flow-modes/mode-07-feature-toggle.md then follow its instructions
"cache" OR "redis" OR "TTL" Read scripts/atlas/flow-modes/mode-11-cache-flow.md then follow its instructions

If a keyword matched above: Load the file NOW, then execute ONLY that mode's instructions. Do NOT continue reading this document.

Check for Tier 1 Keywords (Built-in Modes)

If none of the above matched, check for these Tier 1 patterns:

If arguments contain... Mode to use
"who calls" OR "callers" OR "called by" Mode 1: Reverse Tracing (see below)
"error" OR "failure" OR "exception" OR "fail" Mode 2: Error Path (see below)
"data flow" OR "how is X calculated" OR "trace variable" Mode 3: Data Flow (see below)
"event" OR "message" OR "pub/sub" OR "listener" Mode 8: Event Tracing (see below)
"permission" OR "role" OR "auth" OR "access control" Mode 10: Permission Flow (see below)
(none of the above) Standard Flow Tracing (default)

STEP 1: Cache Check

If --force NOT in arguments:

  1. Convert flow name to filename: lowercase, spacesโ†’hyphens, max 50 chars
  2. Check: ls .sourceatlas/flows/{name}.md 2>/dev/null
  3. If exists: Load and output cache, then STOP
  4. If not exists: Continue

STEP 2: Find Entry Point

If explicit path given (e.g., "from OrderService.create()"):
โ†’ Start tracing immediately

If flow description only (e.g., "checkout flow"):
โ†’ Search for entry points:

grep -rn "{keyword}" --include="*.ts" --include="*.js" --include="*.py" src/ app/ lib/ 2>/dev/null | head -15

โ†’ Present options if multiple matches


STEP 3: Trace Flow

From entry point, trace each step:

  1. Read the function
  2. Identify what it calls
  3. Follow the chain (depth: 5 levels default)
  4. Stop at boundaries (DB, external API, third-party)

For each step capture:

  • Function name
  • File:line location
  • Business meaning
  • Notable patterns (๐Ÿ”’ security, ๐Ÿ’พ DB, ๐ŸŒ API, โšก async, โš ๏ธ risk)

STEP 4: Output Format

{Flow Name}
===========

Entry Point: {file}:{line}

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Step โ”‚ Operation                    โ”‚ Location              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  1   โ”‚ {description}                โ”‚ {file}:{line}         โ”‚
โ”‚  2   โ”‚ {description}                โ”‚ {file}:{line}         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Flow Diagram:
{entry}() โ†’ {step1}() โ†’ {step2}() โ†’ {step3}()

Notable Patterns:
โ”œโ”€โ”€ ๐Ÿ”’ {pattern1}
โ”œโ”€โ”€ ๐Ÿ’พ {pattern2}
โ””โ”€โ”€ โš ๏ธ {pattern3}

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐Ÿ“Š Mode: Standard | Confidence: ~85% | Depth: 5
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

Tier 1 Mode: Reverse Tracing

Trigger: "who calls", "callers", "called by"

Find all callers of target function:

Who calls {function}?
=====================

Callers (N found):
โ”œโ”€โ”€ {Caller1}()  โ†’ {description}
โ”‚   ๐Ÿ“ {file}:{line}
โ”œโ”€โ”€ {Caller2}()  โ†’ {description}
โ”‚   ๐Ÿ“ {file}:{line}
โ””โ”€โ”€ {Caller3}()  โ†’ {description}
    ๐Ÿ“ {file}:{line}

๐Ÿ’ก Modifying {function} affects these {N} callers

Tier 1 Mode: Error Path

Trigger: "error", "failure", "exception", "fail"

Trace failure scenarios:

{Flow} Error Paths
==================

1. {Step}
   ๐Ÿ“ {file}:{line}
   โš ๏ธ Failure โ†’ {ErrorType}
      โ””โ”€โ”€ {what happens}

๐Ÿ“Œ Risk: {identified risk}

Tier 1 Mode: Data Flow

Trigger: "data flow", "how is X calculated", "trace variable"

Track data transformations:

Data Flow: {variable}
=====================

[Input] {source}
   โ†“
1. {Transform}  โ†’ {result}
   ๐Ÿ“ {file}:{line}
   โ†“
[Output] {final}

Tier 1 Mode: Event Tracing

Trigger: "event", "message", "pub/sub", "listener"

{EVENT} Tracing
===============

๐Ÿ“ค Emission: {Publisher}() โ†’ emit("{EVENT}")
   ๐Ÿ“ {file}:{line}

๐Ÿ“ฅ Listeners:
โ”œโ”€โ”€ {Listener1}()  โ†’ {action}
โ”‚   ๐Ÿ“ {file}:{line}
โ””โ”€โ”€ {Listener2}()  โ†’ {action}
    ๐Ÿ“ {file}:{line}

Tier 1 Mode: Permission Flow

Trigger: "permission", "role", "auth", "access control"

{Operation} by Role
===================

[ADMIN] โ†’ Full access
โ”œโ”€โ”€ {check}  ๐Ÿ” @RequireRole("ADMIN")
โ””โ”€โ”€ ๐Ÿ“ {file}:{line}

[USER] โ†’ Limited access
โ”œโ”€โ”€ {check}  ๐Ÿ” @CheckOwnership
โ””โ”€โ”€ ๐Ÿ“ {file}:{line}

Self-Verification

Before output, verify:

  1. File paths exist: test -f {path}
  2. Methods exist: grep -q "{method}" {file}

Add to footer: โœ… Verified: [N] paths, [M] methods


Auto-Save (Default Behavior)

After analysis completes, automatically:

  1. mkdir -p .sourceatlas/flows
  2. Save to .sourceatlas/flows/{name}.md
  3. Append: ๐Ÿ’พ Saved to .sourceatlas/flows/{name}.md

Deprecated: --save flag

If --save is in arguments:

  • Show: โš ๏ธ --save is deprecated, auto-save is now default
  • Remove --save from arguments
  • Continue normal execution (still auto-saves)

๐Ÿ—บ๏ธ SourceAtlas v3.0 โ”‚ Tiered Architecture