These are whole-model diagrams, past the size anyone can read.
- Threat Graph (high/critical) — 29 nodes / 70 edges, past the 12 / 16 legibility budget (29 nodes against 12, 70 edges against 16)
- Threat Graph (all severities) — 43 nodes / 150 edges, past the 12 / 16 legibility budget (43 nodes against 12, 150 edges against 16)
The budget is 12 nodes and 16 edges, measured against this panel at its label size — past it the drawing grows taller than the panel and "Fit" shrinks the labels below reading size rather than fitting. It still draws, and zoom and pan still work, so it is kept: on a small model it is the right picture. For a model this size, Explore answers one question at a time and every answer is sized to be read.
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary at process spawn"]
agent_launcher["GuardLink.Agent_Launcher [SECRETS, INTERNAL]"]
end
subgraph TZ1["Trust boundary at external API call"]
llm_client["GuardLink.LLM_Client [INTERNAL, SECRETS]"]
end
subgraph TZ3["Trust boundary at CLI argument parsing"]
cli["GuardLink.CLI [SECRETS, PII, INTERNAL]"]
end
subgraph TZ4["Trust boundary at git command execution"]
diff["GuardLink.Diff"]
end
subgraph TZ5["Trust boundary at MCP protocol"]
mcp["GuardLink.MCP [INTERNAL, PII]"]
end
subgraph TZ7["Trust boundary between parser and disk …"]
parser["GuardLink.Parser [INTERNAL]"]
end
subgraph TZ8["Trust boundary at interactive input"]
tui["GuardLink.TUI [SECRETS, PII]"]
end
dashboard["GuardLink.Dashboard [PII, INTERNAL]"]
init["GuardLink.Init [INTERNAL]"]
suggest["GuardLink.Suggest"]
blame["GuardLink.Blame [PII]"]
gate["GuardLink.Gate"]
report["GuardLink.Report [PII]"]
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
child_proc_injection{{"Child_Process_Injection (cwe:CWE-78)"}}:::sev_crit
prompt_injection{{"Prompt_Injection (cwe:CWE-77)"}}:::sev_high
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73, cwe:CWE-74)"}}:::sev_high
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
xss{{"Cross_Site_Scripting (cwe:CWE-79)"}}:::sev_high
key_redaction(["Key_Redaction"]):::control
path_validation(["Path_Validation"]):::control
param_commands(["Parameterized_Commands"]):::control
glob_filtering(["Glob_Pattern_Filtering"]):::control
output_encoding(["Output_Encoding"]):::control
input_sanitize(["Input_Sanitization"]):::control
config_validation(["Config_Validation"]):::control
resource_limits(["Resource_Limits"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
agent_launcher -. exposes .-> api_key_exposure
agent_launcher -. exposes .-> child_proc_injection
agent_launcher -. exposes .-> prompt_injection
llm_client -. exposes .-> api_key_exposure
cli -. exposes .-> path_traversal
cli -. exposes .-> arbitrary_write
cli -. exposes .-> api_key_exposure
cli -. exposes .-> cmd_injection
dashboard -. exposes .-> xss
diff -. exposes .-> cmd_injection
init -. exposes .-> arbitrary_write
mcp -. exposes .-> cmd_injection
mcp -. exposes .-> path_traversal
mcp -. exposes .-> arbitrary_write
suggest -. exposes .-> path_traversal
parser -. exposes .-> arbitrary_write
parser -. exposes .-> path_traversal
tui -. exposes .-> path_traversal
tui -. exposes .-> arbitrary_write
tui -. exposes .-> cmd_injection
tui -. exposes .-> api_key_exposure
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> agent_launcher
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> agent_launcher
path_validation -- mitigates --> arbitrary_write
param_commands -- mitigates --> child_proc_injection
param_commands -. protects .-> agent_launcher
param_commands -- mitigates --> cmd_injection
path_validation -. protects .-> llm_client
key_redaction -. protects .-> llm_client
glob_filtering -- mitigates --> path_traversal
glob_filtering -. protects .-> llm_client
path_validation -. protects .-> dashboard
path_validation -. protects .-> blame
param_commands -. protects .-> blame
path_validation -. protects .-> cli
key_redaction -. protects .-> cli
output_encoding -- mitigates --> xss
output_encoding -. protects .-> dashboard
param_commands -. protects .-> dashboard
input_sanitize -- mitigates --> cmd_injection
input_sanitize -. protects .-> diff
path_validation -. protects .-> diff
glob_filtering -. protects .-> diff
path_validation -. protects .-> gate
path_validation -. protects .-> init
config_validation -- mitigates --> arbitrary_write
config_validation -. protects .-> init
path_validation -. protects .-> mcp
key_redaction -. protects .-> mcp
path_validation -. protects .-> suggest
path_validation -. protects .-> parser
glob_filtering -. protects .-> parser
param_commands -. protects .-> cli
output_encoding -. protects .-> report
input_sanitize -- mitigates --> arbitrary_write
input_sanitize -. protects .-> cli
path_validation -. protects .-> tui
key_redaction -. protects .-> tui
resource_limits -. validates .-> mcp
regex_anchoring -. validates .-> parser
input_sanitize -. validates .-> parser
blame -- "formatBlameText" --> cli
blame -- "buildBlamePayload" --> cli
blame -- "summarise" --> dashboard
cli -- "runGate" --> gate
mcp -- "generateThreatReport" --> llm_client
tui -- "launchAgent" --> agent_launcher
tui -- "chatCompletion" --> llm_client
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary at process spawn"]
agent_launcher["GuardLink.Agent_Launcher [SECRETS, INTERNAL]"]
end
subgraph TZ1["Trust boundary at external API call"]
llm_client["GuardLink.LLM_Client [INTERNAL, SECRETS]"]
end
subgraph TZ3["Trust boundary at CLI argument parsing"]
cli["GuardLink.CLI [SECRETS, PII, INTERNAL]"]
end
subgraph TZ4["Trust boundary at git command execution"]
diff["GuardLink.Diff"]
end
subgraph TZ5["Trust boundary at MCP protocol"]
mcp["GuardLink.MCP [INTERNAL, PII]"]
end
subgraph TZ7["Trust boundary between parser and disk …"]
parser["GuardLink.Parser [INTERNAL]"]
end
subgraph TZ8["Trust boundary at interactive input"]
tui["GuardLink.TUI [SECRETS, PII]"]
end
sarif["GuardLink.SARIF"]
dashboard["GuardLink.Dashboard [PII, INTERNAL]"]
blame["GuardLink.Blame [PII]"]
gate["GuardLink.Gate"]
init["GuardLink.Init [INTERNAL]"]
suggest["GuardLink.Suggest"]
report["GuardLink.Report [PII]"]
merge_engine["Workspace.Merge"]
workspace_config["Workspace.Config"]
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73, cwe:CWE-74)"}}:::sev_high
child_proc_injection{{"Child_Process_Injection (cwe:CWE-78)"}}:::sev_crit
prompt_injection{{"Prompt_Injection (cwe:CWE-77)"}}:::sev_high
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
config_tamper{{"Config_Tampering (cwe:CWE-15)"}}:::sev_med
insecure_deser{{"Insecure_Deserialization (cwe:CWE-502, cwe:CWE-20)"}}:::sev_med
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
ssrf{{"Server_Side_Request_Forgery (cwe:CWE-918)"}}:::sev_med
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
xss{{"Cross_Site_Scripting (cwe:CWE-79)"}}:::sev_high
info_disclosure{{"Information_Disclosure (cwe:CWE-200)"}}:::sev_low
tag_collision{{"Tag_Collision"}}:::sev_med
key_redaction(["Key_Redaction"]):::control
path_validation(["Path_Validation"]):::control
param_commands(["Parameterized_Commands"]):::control
resource_limits(["Resource_Limits"]):::control
config_validation(["Config_Validation"]):::control
input_sanitize(["Input_Sanitization"]):::control
glob_filtering(["Glob_Pattern_Filtering"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
identity_redaction(["Identity_Redaction"]):::control
output_encoding(["Output_Encoding"]):::control
prefix_ownership(["Prefix_Ownership"]):::control
yaml_validation(["YAML_Validation"]):::control
agent_launcher -. exposes .-> api_key_exposure
agent_launcher -. exposes .-> path_traversal
agent_launcher -. exposes .-> arbitrary_write
agent_launcher -. exposes .-> child_proc_injection
agent_launcher -. exposes .-> prompt_injection
agent_launcher -. exposes .-> dos
agent_launcher -. exposes .-> config_tamper
llm_client -. exposes .-> insecure_deser
llm_client -. exposes .-> path_traversal
llm_client -. exposes .-> arbitrary_write
llm_client -. exposes .-> data_exposure
llm_client -. exposes .-> ssrf
llm_client -. exposes .-> api_key_exposure
llm_client -. exposes .-> prompt_injection
llm_client -. exposes .-> dos
sarif -. exposes .-> data_exposure
dashboard -. exposes .-> arbitrary_write
blame -. exposes .-> path_traversal
blame -. exposes .-> dos
blame -. exposes .-> redos
blame -. exposes .-> cmd_injection
blame -. exposes .-> data_exposure
cli -. exposes .-> path_traversal
cli -. exposes .-> arbitrary_write
cli -. exposes .-> api_key_exposure
cli -. exposes .-> cmd_injection
dashboard -. exposes .-> path_traversal
dashboard -. exposes .-> xss
dashboard -. exposes .-> data_exposure
dashboard -. exposes .-> dos
dashboard -. exposes .-> cmd_injection
diff -. exposes .-> cmd_injection
diff -. exposes .-> arbitrary_write
diff -. exposes .-> path_traversal
gate -. exposes .-> arbitrary_write
cli -. exposes .-> insecure_deser
init -. exposes .-> path_traversal
init -. exposes .-> arbitrary_write
init -. exposes .-> data_exposure
mcp -. exposes .-> path_traversal
mcp -. exposes .-> info_disclosure
mcp -. exposes .-> cmd_injection
mcp -. exposes .-> redos
mcp -. exposes .-> arbitrary_write
mcp -. exposes .-> prompt_injection
mcp -. exposes .-> api_key_exposure
mcp -. exposes .-> data_exposure
mcp -. exposes .-> dos
suggest -. exposes .-> path_traversal
suggest -. exposes .-> redos
suggest -. exposes .-> dos
parser -. exposes .-> config_tamper
parser -. exposes .-> insecure_deser
parser -. exposes .-> arbitrary_write
parser -. exposes .-> path_traversal
parser -. exposes .-> redos
parser -. exposes .-> dos
parser -. exposes .-> data_exposure
cli -. exposes .-> redos
tui -. exposes .-> path_traversal
tui -. exposes .-> arbitrary_write
tui -. exposes .-> cmd_injection
tui -. exposes .-> api_key_exposure
tui -. exposes .-> prompt_injection
tui -. exposes .-> dos
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> agent_launcher
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> agent_launcher
path_validation -- mitigates --> arbitrary_write
param_commands -- mitigates --> child_proc_injection
param_commands -. protects .-> agent_launcher
param_commands -- mitigates --> cmd_injection
resource_limits -- mitigates --> dos
resource_limits -. protects .-> agent_launcher
config_validation -- mitigates --> insecure_deser
config_validation -. protects .-> llm_client
path_validation -. protects .-> llm_client
config_validation -- mitigates --> ssrf
key_redaction -. protects .-> llm_client
input_sanitize -- mitigates --> ssrf
input_sanitize -. protects .-> llm_client
glob_filtering -- mitigates --> path_traversal
glob_filtering -. protects .-> llm_client
resource_limits -. protects .-> llm_client
path_validation -. protects .-> dashboard
path_validation -. protects .-> blame
resource_limits -. protects .-> blame
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> blame
param_commands -. protects .-> blame
identity_redaction -- mitigates --> data_exposure
identity_redaction -. protects .-> blame
path_validation -. protects .-> cli
key_redaction -. protects .-> cli
output_encoding -- mitigates --> xss
output_encoding -. protects .-> dashboard
output_encoding -- mitigates --> data_exposure
regex_anchoring -- mitigates --> dos
regex_anchoring -. protects .-> dashboard
param_commands -. protects .-> dashboard
input_sanitize -- mitigates --> cmd_injection
input_sanitize -. protects .-> diff
path_validation -. protects .-> diff
glob_filtering -. protects .-> diff
path_validation -. protects .-> gate
config_validation -. protects .-> cli
path_validation -. protects .-> init
config_validation -- mitigates --> arbitrary_write
config_validation -. protects .-> init
path_validation -. protects .-> mcp
regex_anchoring -. protects .-> mcp
key_redaction -. protects .-> mcp
resource_limits -. protects .-> mcp
resource_limits -- mitigates --> info_disclosure
path_validation -. protects .-> suggest
regex_anchoring -. protects .-> suggest
config_validation -- mitigates --> config_tamper
config_validation -. protects .-> parser
path_validation -. protects .-> parser
input_sanitize -- mitigates --> insecure_deser
input_sanitize -. protects .-> parser
regex_anchoring -. protects .-> parser
glob_filtering -. protects .-> parser
resource_limits -. protects .-> parser
prefix_ownership -- mitigates --> tag_collision
prefix_ownership -. protects .-> parser
param_commands -. protects .-> cli
regex_anchoring -. protects .-> cli
output_encoding -. protects .-> report
resource_limits -- mitigates --> insecure_deser
resource_limits -. protects .-> cli
input_sanitize -- mitigates --> arbitrary_write
input_sanitize -. protects .-> cli
path_validation -. protects .-> tui
key_redaction -. protects .-> tui
resource_limits -. protects .-> tui
prefix_ownership -. protects .-> merge_engine
yaml_validation -- mitigates --> config_tamper
yaml_validation -. protects .-> workspace_config
resource_limits -. validates .-> mcp
regex_anchoring -. validates .-> parser
input_sanitize -. validates .-> parser
blame -- "formatBlameText" --> cli
blame -- "buildBlamePayload" --> cli
blame -- "summarise" --> dashboard
cli -- "runGate" --> gate
mcp -- "generateThreatReport" --> llm_client
tui -- "launchAgent" --> agent_launcher
tui -- "chatCompletion" --> llm_client
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary at interactive input"]
tui["GuardLink.TUI [SECRETS, PII]"]
end
agent_launcher["GuardLink.Agent_Launcher [SECRETS, INTERNAL]"]
llm_client["GuardLink.LLM_Client [INTERNAL, SECRETS]"]
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73)"}}:::sev_high
child_proc_injection{{"Child_Process_Injection (cwe:CWE-78)"}}:::sev_crit
prompt_injection{{"Prompt_Injection (cwe:CWE-77)"}}:::sev_high
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
config_tamper{{"Config_Tampering (cwe:CWE-15)"}}:::sev_med
insecure_deser{{"Insecure_Deserialization (cwe:CWE-502)"}}:::sev_med
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
ssrf{{"Server_Side_Request_Forgery (cwe:CWE-918)"}}:::sev_med
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
key_redaction(["Key_Redaction"]):::control
path_validation(["Path_Validation"]):::control
param_commands(["Parameterized_Commands"]):::control
resource_limits(["Resource_Limits"]):::control
config_validation(["Config_Validation"]):::control
input_sanitize(["Input_Sanitization"]):::control
glob_filtering(["Glob_Pattern_Filtering"]):::control
agent_launcher -. exposes .-> api_key_exposure
agent_launcher -. exposes .-> path_traversal
agent_launcher -. exposes .-> arbitrary_write
agent_launcher -. exposes .-> child_proc_injection
agent_launcher -. exposes .-> prompt_injection
agent_launcher -. exposes .-> dos
agent_launcher -. exposes .-> config_tamper
llm_client -. exposes .-> insecure_deser
llm_client -. exposes .-> path_traversal
llm_client -. exposes .-> arbitrary_write
llm_client -. exposes .-> data_exposure
llm_client -. exposes .-> ssrf
llm_client -. exposes .-> api_key_exposure
llm_client -. exposes .-> prompt_injection
llm_client -. exposes .-> dos
tui -. exposes .-> path_traversal
tui -. exposes .-> arbitrary_write
tui -. exposes .-> cmd_injection
tui -. exposes .-> api_key_exposure
tui -. exposes .-> prompt_injection
tui -. exposes .-> dos
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> agent_launcher
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> agent_launcher
path_validation -- mitigates --> arbitrary_write
param_commands -- mitigates --> child_proc_injection
param_commands -. protects .-> agent_launcher
param_commands -- mitigates --> cmd_injection
resource_limits -- mitigates --> dos
resource_limits -. protects .-> agent_launcher
config_validation -- mitigates --> insecure_deser
config_validation -. protects .-> llm_client
path_validation -. protects .-> llm_client
config_validation -- mitigates --> ssrf
key_redaction -. protects .-> llm_client
input_sanitize -- mitigates --> ssrf
input_sanitize -. protects .-> llm_client
glob_filtering -- mitigates --> path_traversal
glob_filtering -. protects .-> llm_client
resource_limits -. protects .-> llm_client
path_validation -. protects .-> tui
key_redaction -. protects .-> tui
resource_limits -. protects .-> tui
tui -- "launchAgent" --> agent_launcher
tui -- "chatCompletion" --> llm_client
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary at MCP protocol"]
mcp["GuardLink.MCP [INTERNAL, PII]"]
end
llm_client["GuardLink.LLM_Client [INTERNAL, SECRETS]"]
insecure_deser{{"Insecure_Deserialization (cwe:CWE-502)"}}:::sev_med
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73)"}}:::sev_high
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
ssrf{{"Server_Side_Request_Forgery (cwe:CWE-918)"}}:::sev_med
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
prompt_injection{{"Prompt_Injection (cwe:CWE-77)"}}:::sev_med
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
info_disclosure{{"Information_Disclosure (cwe:CWE-200)"}}:::sev_low
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
config_validation(["Config_Validation"]):::control
path_validation(["Path_Validation"]):::control
key_redaction(["Key_Redaction"]):::control
input_sanitize(["Input_Sanitization"]):::control
glob_filtering(["Glob_Pattern_Filtering"]):::control
resource_limits(["Resource_Limits"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
llm_client -. exposes .-> insecure_deser
llm_client -. exposes .-> path_traversal
llm_client -. exposes .-> arbitrary_write
llm_client -. exposes .-> data_exposure
llm_client -. exposes .-> ssrf
llm_client -. exposes .-> api_key_exposure
llm_client -. exposes .-> prompt_injection
llm_client -. exposes .-> dos
mcp -. exposes .-> path_traversal
mcp -. exposes .-> info_disclosure
mcp -. exposes .-> cmd_injection
mcp -. exposes .-> redos
mcp -. exposes .-> arbitrary_write
mcp -. exposes .-> prompt_injection
mcp -. exposes .-> api_key_exposure
mcp -. exposes .-> data_exposure
mcp -. exposes .-> dos
config_validation -- mitigates --> insecure_deser
config_validation -. protects .-> llm_client
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> llm_client
path_validation -- mitigates --> arbitrary_write
config_validation -- mitigates --> ssrf
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> llm_client
input_sanitize -- mitigates --> ssrf
input_sanitize -. protects .-> llm_client
glob_filtering -- mitigates --> path_traversal
glob_filtering -. protects .-> llm_client
resource_limits -- mitigates --> dos
resource_limits -. protects .-> llm_client
path_validation -. protects .-> mcp
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> mcp
key_redaction -. protects .-> mcp
resource_limits -. protects .-> mcp
resource_limits -- mitigates --> info_disclosure
resource_limits -. validates .-> mcp
mcp -- "generateThreatReport" --> llm_client
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary at process spawn"]
agent_launcher["GuardLink.Agent_Launcher [SECRETS, INTERNAL]"]
end
tui["GuardLink.TUI [SECRETS, PII]"]
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73)"}}:::sev_high
child_proc_injection{{"Child_Process_Injection (cwe:CWE-78)"}}:::sev_crit
prompt_injection{{"Prompt_Injection (cwe:CWE-77)"}}:::sev_high
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
config_tamper{{"Config_Tampering (cwe:CWE-15)"}}:::sev_med
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
key_redaction(["Key_Redaction"]):::control
path_validation(["Path_Validation"]):::control
param_commands(["Parameterized_Commands"]):::control
resource_limits(["Resource_Limits"]):::control
agent_launcher -. exposes .-> api_key_exposure
agent_launcher -. exposes .-> path_traversal
agent_launcher -. exposes .-> arbitrary_write
agent_launcher -. exposes .-> child_proc_injection
agent_launcher -. exposes .-> prompt_injection
agent_launcher -. exposes .-> dos
agent_launcher -. exposes .-> config_tamper
tui -. exposes .-> path_traversal
tui -. exposes .-> arbitrary_write
tui -. exposes .-> cmd_injection
tui -. exposes .-> api_key_exposure
tui -. exposes .-> prompt_injection
tui -. exposes .-> dos
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> agent_launcher
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> agent_launcher
path_validation -- mitigates --> arbitrary_write
param_commands -- mitigates --> child_proc_injection
param_commands -. protects .-> agent_launcher
param_commands -- mitigates --> cmd_injection
resource_limits -- mitigates --> dos
resource_limits -. protects .-> agent_launcher
path_validation -. protects .-> tui
key_redaction -. protects .-> tui
resource_limits -. protects .-> tui
tui -- "launchAgent" --> agent_launcher
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary between parser and disk …"]
parser["GuardLink.Parser [INTERNAL]"]
end
config_tamper{{"Config_Tampering (cwe:CWE-15)"}}:::sev_med
insecure_deser{{"Insecure_Deserialization (cwe:CWE-502, cwe:CWE-20)"}}:::sev_med
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73)"}}:::sev_high
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
tag_collision{{"Tag_Collision"}}:::sev_med
config_validation(["Config_Validation"]):::control
path_validation(["Path_Validation"]):::control
input_sanitize(["Input_Sanitization"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
glob_filtering(["Glob_Pattern_Filtering"]):::control
resource_limits(["Resource_Limits"]):::control
prefix_ownership(["Prefix_Ownership"]):::control
parser -. exposes .-> config_tamper
parser -. exposes .-> insecure_deser
parser -. exposes .-> arbitrary_write
parser -. exposes .-> path_traversal
parser -. exposes .-> redos
parser -. exposes .-> dos
parser -. exposes .-> data_exposure
config_validation -- mitigates --> config_tamper
config_validation -. protects .-> parser
config_validation -- mitigates --> insecure_deser
path_validation -- mitigates --> arbitrary_write
path_validation -. protects .-> parser
input_sanitize -- mitigates --> insecure_deser
input_sanitize -. protects .-> parser
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> parser
glob_filtering -- mitigates --> path_traversal
glob_filtering -. protects .-> parser
resource_limits -- mitigates --> dos
resource_limits -. protects .-> parser
path_validation -- mitigates --> path_traversal
prefix_ownership -- mitigates --> tag_collision
prefix_ownership -. protects .-> parser
regex_anchoring -. validates .-> parser
input_sanitize -. validates .-> parser
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary at external API call"]
llm_client["GuardLink.LLM_Client [INTERNAL, SECRETS]"]
end
mcp["GuardLink.MCP [INTERNAL, PII]"]
tui["GuardLink.TUI [SECRETS, PII]"]
insecure_deser{{"Insecure_Deserialization (cwe:CWE-502)"}}:::sev_med
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73)"}}:::sev_high
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
ssrf{{"Server_Side_Request_Forgery (cwe:CWE-918)"}}:::sev_med
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
prompt_injection{{"Prompt_Injection (cwe:CWE-77)"}}:::sev_med
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
info_disclosure{{"Information_Disclosure (cwe:CWE-200)"}}:::sev_low
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
config_validation(["Config_Validation"]):::control
path_validation(["Path_Validation"]):::control
key_redaction(["Key_Redaction"]):::control
input_sanitize(["Input_Sanitization"]):::control
glob_filtering(["Glob_Pattern_Filtering"]):::control
resource_limits(["Resource_Limits"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
llm_client -. exposes .-> insecure_deser
llm_client -. exposes .-> path_traversal
llm_client -. exposes .-> arbitrary_write
llm_client -. exposes .-> data_exposure
llm_client -. exposes .-> ssrf
llm_client -. exposes .-> api_key_exposure
llm_client -. exposes .-> prompt_injection
llm_client -. exposes .-> dos
mcp -. exposes .-> path_traversal
mcp -. exposes .-> info_disclosure
mcp -. exposes .-> cmd_injection
mcp -. exposes .-> redos
mcp -. exposes .-> arbitrary_write
mcp -. exposes .-> prompt_injection
mcp -. exposes .-> api_key_exposure
mcp -. exposes .-> data_exposure
mcp -. exposes .-> dos
tui -. exposes .-> path_traversal
tui -. exposes .-> arbitrary_write
tui -. exposes .-> cmd_injection
tui -. exposes .-> api_key_exposure
tui -. exposes .-> prompt_injection
tui -. exposes .-> dos
config_validation -- mitigates --> insecure_deser
config_validation -. protects .-> llm_client
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> llm_client
path_validation -- mitigates --> arbitrary_write
config_validation -- mitigates --> ssrf
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> llm_client
input_sanitize -- mitigates --> ssrf
input_sanitize -. protects .-> llm_client
glob_filtering -- mitigates --> path_traversal
glob_filtering -. protects .-> llm_client
resource_limits -- mitigates --> dos
resource_limits -. protects .-> llm_client
path_validation -. protects .-> mcp
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> mcp
key_redaction -. protects .-> mcp
resource_limits -. protects .-> mcp
resource_limits -- mitigates --> info_disclosure
path_validation -. protects .-> tui
key_redaction -. protects .-> tui
resource_limits -. protects .-> tui
resource_limits -. validates .-> mcp
mcp -- "generateThreatReport" --> llm_client
tui -- "chatCompletion" --> llm_client
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
init["GuardLink.Init [INTERNAL]"]
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73)"}}:::sev_high
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
path_validation(["Path_Validation"]):::control
config_validation(["Config_Validation"]):::control
init -. exposes .-> path_traversal
init -. exposes .-> arbitrary_write
init -. exposes .-> data_exposure
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> init
path_validation -- mitigates --> arbitrary_write
config_validation -- mitigates --> arbitrary_write
config_validation -. protects .-> init
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary at git command execution"]
diff["GuardLink.Diff"]
end
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73)"}}:::sev_high
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
input_sanitize(["Input_Sanitization"]):::control
path_validation(["Path_Validation"]):::control
glob_filtering(["Glob_Pattern_Filtering"]):::control
diff -. exposes .-> cmd_injection
diff -. exposes .-> arbitrary_write
diff -. exposes .-> path_traversal
input_sanitize -- mitigates --> cmd_injection
input_sanitize -. protects .-> diff
path_validation -- mitigates --> arbitrary_write
path_validation -. protects .-> diff
glob_filtering -- mitigates --> path_traversal
glob_filtering -. protects .-> diff
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
sarif["GuardLink.SARIF"]
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
sarif -. exposes .-> data_exposure
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
suggest["GuardLink.Suggest"]
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
path_validation(["Path_Validation"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
suggest -. exposes .-> path_traversal
suggest -. exposes .-> redos
suggest -. exposes .-> dos
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> suggest
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> suggest
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
subgraph TZ0["Trust boundary at CLI argument parsing"]
cli["GuardLink.CLI [SECRETS, PII, INTERNAL]"]
end
blame["GuardLink.Blame [PII]"]
gate["GuardLink.Gate"]
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73, cwe:CWE-74)"}}:::sev_high
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
insecure_deser{{"Insecure_Deserialization (cwe:CWE-502)"}}:::sev_med
path_validation(["Path_Validation"]):::control
resource_limits(["Resource_Limits"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
param_commands(["Parameterized_Commands"]):::control
identity_redaction(["Identity_Redaction"]):::control
key_redaction(["Key_Redaction"]):::control
config_validation(["Config_Validation"]):::control
input_sanitize(["Input_Sanitization"]):::control
blame -. exposes .-> path_traversal
blame -. exposes .-> dos
blame -. exposes .-> redos
blame -. exposes .-> cmd_injection
blame -. exposes .-> data_exposure
cli -. exposes .-> path_traversal
cli -. exposes .-> arbitrary_write
cli -. exposes .-> api_key_exposure
cli -. exposes .-> cmd_injection
gate -. exposes .-> arbitrary_write
cli -. exposes .-> insecure_deser
cli -. exposes .-> redos
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> blame
resource_limits -- mitigates --> dos
resource_limits -. protects .-> blame
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> blame
param_commands -- mitigates --> cmd_injection
param_commands -. protects .-> blame
identity_redaction -- mitigates --> data_exposure
identity_redaction -. protects .-> blame
path_validation -. protects .-> cli
path_validation -- mitigates --> arbitrary_write
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> cli
path_validation -. protects .-> gate
config_validation -- mitigates --> insecure_deser
config_validation -. protects .-> cli
param_commands -. protects .-> cli
regex_anchoring -. protects .-> cli
resource_limits -- mitigates --> insecure_deser
resource_limits -. protects .-> cli
input_sanitize -- mitigates --> arbitrary_write
input_sanitize -. protects .-> cli
blame -- "formatBlameText" --> cli
blame -- "buildBlamePayload" --> cli
cli -- "runGate" --> gate
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
dashboard["GuardLink.Dashboard [PII, INTERNAL]"]
blame["GuardLink.Blame [PII]"]
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73)"}}:::sev_high
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
xss{{"Cross_Site_Scripting (cwe:CWE-79)"}}:::sev_high
path_validation(["Path_Validation"]):::control
resource_limits(["Resource_Limits"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
param_commands(["Parameterized_Commands"]):::control
identity_redaction(["Identity_Redaction"]):::control
output_encoding(["Output_Encoding"]):::control
dashboard -. exposes .-> arbitrary_write
blame -. exposes .-> path_traversal
blame -. exposes .-> dos
blame -. exposes .-> redos
blame -. exposes .-> cmd_injection
blame -. exposes .-> data_exposure
dashboard -. exposes .-> path_traversal
dashboard -. exposes .-> xss
dashboard -. exposes .-> data_exposure
dashboard -. exposes .-> dos
dashboard -. exposes .-> cmd_injection
path_validation -- mitigates --> arbitrary_write
path_validation -. protects .-> dashboard
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> blame
resource_limits -- mitigates --> dos
resource_limits -. protects .-> blame
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> blame
param_commands -- mitigates --> cmd_injection
param_commands -. protects .-> blame
identity_redaction -- mitigates --> data_exposure
identity_redaction -. protects .-> blame
output_encoding -- mitigates --> xss
output_encoding -. protects .-> dashboard
output_encoding -- mitigates --> data_exposure
regex_anchoring -- mitigates --> dos
regex_anchoring -. protects .-> dashboard
param_commands -. protects .-> dashboard
blame -- "summarise" --> dashboard
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
dashboard["GuardLink.Dashboard [PII, INTERNAL]"]
blame["GuardLink.Blame [PII]"]
cli["GuardLink.CLI [SECRETS, PII, INTERNAL]"]
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73, cwe:CWE-74)"}}:::sev_high
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
dos{{"Denial_of_Service (cwe:CWE-400)"}}:::sev_med
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
data_exposure{{"Sensitive_Data_Exposure (cwe:CWE-200)"}}:::sev_med
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
xss{{"Cross_Site_Scripting (cwe:CWE-79)"}}:::sev_high
insecure_deser{{"Insecure_Deserialization (cwe:CWE-502)"}}:::sev_med
path_validation(["Path_Validation"]):::control
resource_limits(["Resource_Limits"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
param_commands(["Parameterized_Commands"]):::control
identity_redaction(["Identity_Redaction"]):::control
key_redaction(["Key_Redaction"]):::control
output_encoding(["Output_Encoding"]):::control
config_validation(["Config_Validation"]):::control
input_sanitize(["Input_Sanitization"]):::control
dashboard -. exposes .-> arbitrary_write
blame -. exposes .-> path_traversal
blame -. exposes .-> dos
blame -. exposes .-> redos
blame -. exposes .-> cmd_injection
blame -. exposes .-> data_exposure
cli -. exposes .-> path_traversal
cli -. exposes .-> arbitrary_write
cli -. exposes .-> api_key_exposure
cli -. exposes .-> cmd_injection
dashboard -. exposes .-> path_traversal
dashboard -. exposes .-> xss
dashboard -. exposes .-> data_exposure
dashboard -. exposes .-> dos
dashboard -. exposes .-> cmd_injection
cli -. exposes .-> insecure_deser
cli -. exposes .-> redos
path_validation -- mitigates --> arbitrary_write
path_validation -. protects .-> dashboard
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> blame
resource_limits -- mitigates --> dos
resource_limits -. protects .-> blame
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> blame
param_commands -- mitigates --> cmd_injection
param_commands -. protects .-> blame
identity_redaction -- mitigates --> data_exposure
identity_redaction -. protects .-> blame
path_validation -. protects .-> cli
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> cli
output_encoding -- mitigates --> xss
output_encoding -. protects .-> dashboard
output_encoding -- mitigates --> data_exposure
regex_anchoring -- mitigates --> dos
regex_anchoring -. protects .-> dashboard
param_commands -. protects .-> dashboard
config_validation -- mitigates --> insecure_deser
config_validation -. protects .-> cli
param_commands -. protects .-> cli
regex_anchoring -. protects .-> cli
resource_limits -- mitigates --> insecure_deser
resource_limits -. protects .-> cli
input_sanitize -- mitigates --> arbitrary_write
input_sanitize -. protects .-> cli
blame -- "formatBlameText" --> cli
blame -- "buildBlamePayload" --> cli
blame -- "summarise" --> dashboard
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 150, "curve": "monotoneX", "htmlLabels": false, "padding": 24}}}%%
graph LR
cli["GuardLink.CLI [SECRETS, PII, INTERNAL]"]
gate["GuardLink.Gate"]
path_traversal{{"Path_Traversal (cwe:CWE-22)"}}:::sev_high
arbitrary_write{{"Arbitrary_File_Write (cwe:CWE-73, cwe:CWE-74)"}}:::sev_high
api_key_exposure{{"API_Key_Exposure (cwe:CWE-798)"}}:::sev_high
cmd_injection{{"Command_Injection (cwe:CWE-78)"}}:::sev_crit
insecure_deser{{"Insecure_Deserialization (cwe:CWE-502)"}}:::sev_med
redos{{"ReDoS (cwe:CWE-1333)"}}:::sev_med
path_validation(["Path_Validation"]):::control
key_redaction(["Key_Redaction"]):::control
config_validation(["Config_Validation"]):::control
param_commands(["Parameterized_Commands"]):::control
regex_anchoring(["Regex_Anchoring"]):::control
resource_limits(["Resource_Limits"]):::control
input_sanitize(["Input_Sanitization"]):::control
cli -. exposes .-> path_traversal
cli -. exposes .-> arbitrary_write
cli -. exposes .-> api_key_exposure
cli -. exposes .-> cmd_injection
gate -. exposes .-> arbitrary_write
cli -. exposes .-> insecure_deser
cli -. exposes .-> redos
path_validation -- mitigates --> path_traversal
path_validation -. protects .-> cli
path_validation -- mitigates --> arbitrary_write
key_redaction -- mitigates --> api_key_exposure
key_redaction -. protects .-> cli
path_validation -. protects .-> gate
config_validation -- mitigates --> insecure_deser
config_validation -. protects .-> cli
param_commands -- mitigates --> cmd_injection
param_commands -. protects .-> cli
regex_anchoring -- mitigates --> redos
regex_anchoring -. protects .-> cli
resource_limits -- mitigates --> insecure_deser
resource_limits -. protects .-> cli
input_sanitize -- mitigates --> arbitrary_write
input_sanitize -. protects .-> cli
cli -- "runGate" --> gate
classDef threat fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.3px
classDef control fill:#102a24,stroke:#33d49d,color:#f0f0f0,stroke-width:1.3px
classDef sev_crit fill:#3a1010,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.4px
classDef sev_high fill:#402019,stroke:#ea1d1d,color:#f0f0f0,stroke-width:1.2px
classDef sev_med fill:#1f3943,stroke:#55899e,color:#f0f0f0
classDef sev_low fill:#10263b,stroke:#0360a2,color:#f0f0f0
classDef sev_unset fill:#223942,stroke:#3b6779,color:#f0f0f0