# afony10/cadence-workflow-linter architecture

> Architecture diagram of the GitHub repository afony10/cadence-workflow-linter, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/afony10/cadence-workflow-linter
- Repository: https://github.com/afony10/cadence-workflow-linter

## Overview

Cadence Workflow Linter scans Go and Java projects for workflow patterns that can break deterministic replay, then emits machine-readable findings or editor diagnostics. The main path is project selection → rule loading and language dispatch → analysis and workflow-reachability filtering → issue normalization and output. The Go analyzer builds a workflow registry before running detectors; Java analysis is a separate adapter. The README also documents a VS Code client. Some extension and output wiring is represented from documented capabilities and visible entry points; unsampled internals are not expanded.

Main entry points: [`cmd/cadence-linter/main.go`](https://github.com/afony10/cadence-workflow-linter/blob/main/cmd/cadence-linter/main.go) (Linter CLI), [`adapters/go/analyzer/scanner.go`](https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/go/analyzer/scanner.go) (Go Scanner), [`vscode-extension/src/extension.ts`](https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/extension.ts) (Extension), [`adapters/go/analyzer/detectors`](https://github.com/afony10/cadence-workflow-linter/tree/main/adapters/go/analyzer/detectors) (Go Detectors)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI and Dispatch"]
  node_cli_entry["Linter CLI<br/>[main.go]"]
end

subgraph group_analysis["Language Analysis"]
  node_go_scanner["Go Scanner<br/>[scanner.go]"]
  node_go_modules["Module Resolver<br/>[module_parser.go]"]
  node_workflow_registry["Workflow Registry"]
  node_go_detectors["Go Detectors"]
  node_java_scanner["Java Scanner<br/>[scanner.go]"]
end

subgraph group_results["Rules and Results"]
  node_rule_file["Rule YAML<br/>[rules.yaml]"]
  node_rule_loader["Rule Loader<br/>[loader.go]"]
  node_issues["Issue Model<br/>[issue.go]"]
  node_overrides["Rule Overrides<br/>[rules.go]"]
  node_emitters["JSON YAML Emitters<br/>[emit.go]"]
  node_sarif["SARIF Emitter<br/>[sarif.go]"]
end

subgraph group_editor["VS Code Client"]
  node_extension["Extension<br/>[extension.ts]"]
  node_extension_cli["CLI Integration<br/>[cli.ts]"]
  node_extension_context["Extension Context<br/>[context.ts]"]
  node_diagnostics["Editor Diagnostics<br/>[diagnostics.ts]"]
end

node_developer(("Engineer"))
node_project["Target Project"]
node_output["Lint Findings"]
node_vscode_user(("VS Code User"))

node_developer -->|"runs"| node_cli_entry
node_project -->|"scans"| node_cli_entry
node_cli_entry -->|"loads rules"| node_rule_loader
node_rule_file -->|"read rules"| node_rule_loader
node_cli_entry -->|"dispatches Go"| node_go_scanner
node_cli_entry -->|"dispatches Java"| node_java_scanner
node_go_scanner -->|"resolves modules"| node_go_modules
node_go_scanner -->|"builds reachability"| node_workflow_registry
node_go_scanner -->|"runs visitors"| node_go_detectors
node_go_scanner -->|"returns findings"| node_issues
node_java_scanner -->|"returns findings"| node_issues
node_rule_loader -->|"provides rules"| node_go_detectors
node_rule_loader -->|"provides rules"| node_java_scanner
node_go_detectors -->|"checks reachability"| node_workflow_registry
node_go_detectors -->|"creates findings"| node_issues
node_cli_entry -->|"applies overrides"| node_overrides
node_issues -->|"normalizes findings"| node_overrides
node_cli_entry -->|"emits JSON YAML"| node_emitters
node_cli_entry -->|"emits SARIF"| node_sarif
node_emitters -->|"serializes"| node_output
node_sarif -->|"serializes"| node_output
node_vscode_user -->|"uses"| node_extension
node_extension -->|"invokes"| node_extension_cli
node_extension_cli -->|"runs CLI"| node_cli_entry
node_extension -->|"initializes"| node_extension_context
node_extension -->|"publishes findings"| node_diagnostics
node_output -.->|"consumes SARIF"| node_diagnostics

click node_cli_entry "https://github.com/afony10/cadence-workflow-linter/blob/main/cmd/cadence-linter/main.go"
click node_rule_file "https://github.com/afony10/cadence-workflow-linter/blob/main/config/rules.yaml"
click node_rule_loader "https://github.com/afony10/cadence-workflow-linter/blob/main/config/loader.go"
click node_go_scanner "https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/go/analyzer/scanner.go"
click node_go_modules "https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/go/analyzer/modutils/module_parser.go"
click node_workflow_registry "https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/go/analyzer/registry/workflow_registry.go"
click node_go_detectors "https://github.com/afony10/cadence-workflow-linter/tree/main/adapters/go/analyzer/detectors"
click node_java_scanner "https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/java/analyzer/scanner.go"
click node_issues "https://github.com/afony10/cadence-workflow-linter/blob/main/core/issue.go"
click node_overrides "https://github.com/afony10/cadence-workflow-linter/blob/main/core/rules.go"
click node_emitters "https://github.com/afony10/cadence-workflow-linter/blob/main/core/emit.go"
click node_sarif "https://github.com/afony10/cadence-workflow-linter/blob/main/core/sarif.go"
click node_extension "https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/extension.ts"
click node_extension_cli "https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/cli.ts"
click node_extension_context "https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/context.ts"
click node_diagnostics "https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/diagnostics.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli_entry,node_vscode_user toneBlue
class node_go_scanner,node_go_modules,node_workflow_registry,node_go_detectors,node_java_scanner toneAmber
class node_rule_file,node_rule_loader,node_issues,node_overrides,node_emitters,node_sarif toneMint
class node_extension,node_extension_cli,node_extension_context,node_diagnostics toneRose
class node_developer,node_project,node_output toneIndigo
```

## Components

### CLI and Dispatch

- [Linter CLI](https://github.com/afony10/cadence-workflow-linter/blob/main/cmd/cadence-linter/main.go): `cmd/cadence-linter/main.go`

### Language Analysis

- [Go Scanner](https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/go/analyzer/scanner.go): `adapters/go/analyzer/scanner.go`
- [Module Resolver](https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/go/analyzer/modutils/module_parser.go): `adapters/go/analyzer/modutils/module_parser.go`
- [Workflow Registry](https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/go/analyzer/registry/workflow_registry.go): `adapters/go/analyzer/registry/workflow_registry.go`
- [Go Detectors](https://github.com/afony10/cadence-workflow-linter/tree/main/adapters/go/analyzer/detectors): `adapters/go/analyzer/detectors`
- [Java Scanner](https://github.com/afony10/cadence-workflow-linter/blob/main/adapters/java/analyzer/scanner.go): `adapters/java/analyzer/scanner.go`

### Rules and Results

- [Rule YAML](https://github.com/afony10/cadence-workflow-linter/blob/main/config/rules.yaml): `config/rules.yaml`
- [Rule Loader](https://github.com/afony10/cadence-workflow-linter/blob/main/config/loader.go): `config/loader.go`
- [Issue Model](https://github.com/afony10/cadence-workflow-linter/blob/main/core/issue.go): `core/issue.go`
- [Rule Overrides](https://github.com/afony10/cadence-workflow-linter/blob/main/core/rules.go): `core/rules.go`
- [JSON YAML Emitters](https://github.com/afony10/cadence-workflow-linter/blob/main/core/emit.go): `core/emit.go`
- [SARIF Emitter](https://github.com/afony10/cadence-workflow-linter/blob/main/core/sarif.go): `core/sarif.go`

### VS Code Client

- [Extension](https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/extension.ts): `vscode-extension/src/extension.ts`
- [CLI Integration](https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/cli.ts): `vscode-extension/src/cli.ts`
- [Extension Context](https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/context.ts): `vscode-extension/src/context.ts`
- [Editor Diagnostics](https://github.com/afony10/cadence-workflow-linter/blob/main/vscode-extension/src/diagnostics.ts): `vscode-extension/src/diagnostics.ts`

### Other components

- **Engineer**
- **Target Project**
- **Lint Findings**
- **VS Code User**

## Connections

- Engineer → Linter CLI: runs
- Target Project → Linter CLI: scans
- Linter CLI → Rule Loader: loads rules
- Rule YAML → Rule Loader: read rules
- Linter CLI → Go Scanner: dispatches Go
- Linter CLI → Java Scanner: dispatches Java
- Go Scanner → Module Resolver: resolves modules
- Go Scanner → Workflow Registry: builds reachability
- Go Scanner → Go Detectors: runs visitors
- Go Scanner → Issue Model: returns findings
- Java Scanner → Issue Model: returns findings
- Rule Loader → Go Detectors: provides rules
- Rule Loader → Java Scanner: provides rules
- Go Detectors → Workflow Registry: checks reachability
- Go Detectors → Issue Model: creates findings
- Linter CLI → Rule Overrides: applies overrides
- Issue Model → Rule Overrides: normalizes findings
- Linter CLI → JSON YAML Emitters: emits JSON YAML
- Linter CLI → SARIF Emitter: emits SARIF
- JSON YAML Emitters → Lint Findings: serializes
- SARIF Emitter → Lint Findings: serializes
- VS Code User → Extension: uses
- Extension → CLI Integration: invokes
- CLI Integration → Linter CLI: runs CLI
- Extension → Extension Context: initializes
- Extension → Editor Diagnostics: publishes findings
- Lint Findings → Editor Diagnostics: consumes SARIF
