# Clean — Auto + Semi-Auto + Manual Remediation

---

## Header

| Field | Value |
|-------|-------|
| **Report type** | clean |
| **Target** | ~/repos/dft-marketplace |
| **Date** | 2026-05-05 |
| **Mode** | dry-run |
| **Version** | llm-security v7.4.0 |
| **Scope** | scan + remediation buckets |
| **Triggered by** | /security clean . --dry-run |

---

## Risk Dashboard

| Metric | Value |
|--------|-------|
| **Risk Score** | 45/100 |
| **Risk Band** | High |
| **Grade** | C |
| **Verdict** | WARNING |

| Severity | Count |
|----------|------:|
| Critical | 1 |
| High | 3 |
| Medium | 4 |
| Low | 2 |
| Info | 3 |
| **Total** | **13** |

**Verdict rationale:** 13 findings classified by remediation tier. 4 auto-fixable, 5 semi-auto (require user confirmation), 3 manual (architecture-level), 1 suppressed (waiver registered).

---

## Remediation Summary

| Bucket | Count | Action |
|--------|------:|--------|
| Auto | 4 | Apply deterministic fixes (no user input) |
| Semi-auto | 5 | Generate proposals, confirm with user |
| Manual | 3 | Architecture-level — human decision required |
| Suppressed | 1 | Waiver registered in `.llm-security-ignore` |
| **Total** | **13** | |

---

## Findings

### Critical

| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-001 | Secrets | agents/data-analyst.md | 47 | Hardcoded API key | LLM02 |

### High

| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-002 | Excessive Agency | agents/web-helper.md | 3 | Lethal trifecta tool combination | ASI01 |
| CLN-003 | Permissions | .claude/settings.json | 5 | Wildcard `Bash(*)` permission | ASI04 |
| CLN-004 | Injection | commands/research.md | 22 | Indirect-injection vector | LLM01 |

### Medium

| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-005 | MCP Trust | .mcp.json | 12 | Hidden imperative in MCP description | MCP05 |
| CLN-006 | Documentation | LICENSE | — | License file missing | — |
| CLN-007 | Documentation | SECURITY.md | — | Disclosure policy missing | — |
| CLN-008 | Output Handling | agents/notes.md | 89 | Markdown link-title injection sink | LLM01 |

### Low

| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-009 | Documentation | README.md | 88 | Suspicious URL in example | — |
| CLN-010 | Documentation | CHANGELOG.md | — | Missing changelog file | — |

### Info

| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-011 | Documentation | CONTRIBUTING.md | — | Missing contributing guidelines | — |
| CLN-012 | Documentation | .gitignore | — | Missing `.env*` exclusion | — |
| CLN-013 | Documentation | LICENSE | — | License header in source files | — |

---

## Auto

| ID | Action | Description |
|----|--------|-------------|
| CLN-001 | replace-with-env-var | Replace hardcoded `sk-prod-...` with `${API_KEY}`, log replacement to .llm-security-audit.jsonl |
| CLN-006 | create-file | Create `LICENSE` file (MIT, default) |
| CLN-012 | append-line | Append `.env*` to `.gitignore` |
| CLN-013 | add-license-header | Add MIT license header to top of source files |

---

## Semi-auto

| ID | Action | Description |
|----|--------|-------------|
| CLN-003 | propose-allowlist | Propose explicit Bash allow-list based on actual usage patterns |
| CLN-004 | propose-trust-bus | Propose Trust-Bus wrapper around indirect-injection vector |
| CLN-005 | propose-rewrite | Propose rewritten MCP description without imperative pattern |
| CLN-007 | scaffold-template | Generate SECURITY.md template; user confirms ownership/SLA terms |
| CLN-008 | propose-sanitizer | Propose sanitizer for Markdown link-title sink |

---

## Manual

| ID | Action | Description |
|----|--------|-------------|
| CLN-002 | architectural-review | Lethal trifecta requires architecture-level decision: split agent OR add hook policy |
| CLN-009 | manual-edit | Suspicious URL in README example — requires editorial judgment |
| CLN-010 | manual-write | CHANGELOG.md content requires reviewing git history |

---

## Suppressed

| ID | Reason | Waiver |
|----|--------|--------|
| CLN-011 | Repo policy: solo project, no external contributions | `.llm-security-ignore` rule `category:documentation/contributing` |

---

## Recommendations

1. **Immediate:** Run with `--apply` to execute the 4 auto-fixes.
2. **High:** Walk through 5 semi-auto proposals interactively (`--interactive`).
3. **Medium:** Schedule architecture review for the 3 manual items (CLN-002, CLN-009, CLN-010).
4. **Low:** Review the suppressed item (CLN-011) annually to confirm policy still applies.

---

*Clean dry-run complete. 13 findings: 4 auto, 5 semi-auto, 3 manual, 1 suppressed.*
