Decision Guardian Mermaid Diagrams

February 16, 2026 ยท View on GitHub

Use the following Mermaid code to generate images for your documentation. You can use the Mermaid Live Editor to render them.

1. System Architecture

---
config:
  layout: elk
---
flowchart LR
 subgraph subGraph0["Entry Points"]
        Main["main.ts (Action)"]
        CLI["src/cli/index.ts (CLI)"]
  end
 subgraph subGraph1["Core Engine"]
        Parser["src/core/parser.ts"]
        Matcher["src/core/matcher.ts"]
        RuleEval["src/core/rule-evaluator.ts"]
        Metrics["src/core/metrics.ts"]
        Trie["src/core/trie.ts"]
        Logger["src/core/logger.ts"]
        Health["src/core/health.ts"]
  end
 subgraph Adapters["Adapters"]
        GH_Adapter["GitHub Adapter"]
        Local_Adapter["Local Adapter"]
  end
 subgraph Modules["Modules"]
        Telemetry["Telemetry Module"]
  end
    Main --> Telemetry &  GH_Adapter
    CLI --> Telemetry & Local_Adapter
    subGraph0 --> subGraph1
    Metrics --> Telemetry

2. Data Flow (GitHub Action)

sequenceDiagram
    participant GH as GitHub (PR Event)
    participant Main as main.ts
    participant Config as detailedConfig
    participant Parser as DecisionParser
    participant Provider as GitHubProvider
    participant Matcher as FileMatcher
    participant Metrics as Metrics
    participant Telemetry as Telemetry

    GH->>Main: Trigger Workflow
    Main->>Config: loadConfig()
    Main->>Main: checkDecisionFileExists()
    Main->>Parser: parseFile(decisionFile)
    Parser-->>Main: decisions[]
    Main->>Provider: getFileDiffs(pr_number)
    Provider-->>Main: changedFiles[]
    Main->>Matcher: findMatchesWithDiffs(decisions, changedFiles)
    Matcher-->>Main: matches[]
    Main->>Provider: postComment(matches)
    Main->>Metrics: reportMetrics()
    Main->>Telemetry: sendTelemetry()

3. CLI Action Flow

sequenceDiagram
    participant User
    participant CLI as CLI (check)
    participant Parser as DecisionParser
    participant Git as LocalGitProvider
    participant Matcher as FileMatcher
    participant Formatter as TableFormatter
    participant Telemetry

    User->>CLI: decision-guardian check
    CLI->>Parser: parseFile()
    Parser-->>CLI: decisions[]
    CLI->>Git: getFileDiffs()
    Git-->>CLI: changedFiles[]
    CLI->>Matcher: findMatchesWithDiffs()
    Matcher-->>CLI: matches[]
    CLI->>Formatter: formatMatchesTable(matches)
    Formatter-->>User: Console Output
    CLI->>Telemetry: sendTelemetry()
    CLI->>User: Exit Process

4. High-Level Logic Flow

flowchart TD
    Start["Start"] --> LoadConfig["Load Configuration"]
    LoadConfig --> ValidateConfig{Valid Config?}
    ValidateConfig -- No --> Error["Exit with Error"]
    ValidateConfig -- Yes --> ParseDecisions["Parse Decisions File"]
    ParseDecisions --> GetDiffs["Get Git Diffs"]
    GetDiffs --> BuildTrie["Build Pattern Trie"]
    BuildTrie --> LoopFiles{For Each File}
    LoopFiles -- Done --> GenerateComment["Generate Comment/Output"]
    LoopFiles -- Next File --> CheckMatch{Match Trie?}
    CheckMatch -- No --> LoopFiles
    CheckMatch -- Yes --> CheckRules{Advanced Rules?}
    CheckRules -- No --> AddMatch["Add to Matches"]
    CheckRules -- Yes --> EvalRules["Evaluate Rules"]
    EvalRules -- Fail --> LoopFiles
    EvalRules -- Pass --> AddMatch
    AddMatch --> LoopFiles
    GenerateComment --> CheckSeverity{Critical Violation?}
    CheckSeverity -- Yes --> FailBuild["Fail Build (if configured)"]
    CheckSeverity -- No --> Success["Pass Build"]