Files
Tim Krampitz 01046b01e4 Neue Skills, Referenzen & OpenWiki-Doku integriert
Umfangreiche Erweiterung der Skill-Bibliothek: Neue Skills für Humanisierung (Englisch/PT-BR), Design-Validierung, AI-SEO und Coolify-Deployment inkl. Regelwerke, Presets, Pattern-Referenzen, Testfälle und Automatisierungsskripte. Zusätzliche Skills für Revenue-Centric Design, Pier Cloud, OKF, Lebenslauf- und LinkedIn-Optimierung sowie zahlreiche Referenzdateien, Checklisten und YAML/JSON/Markdown-Templates. Einführung einer vollständigen OpenWiki-Dokumentation mit Architektur-, Domain- und Workflow-Beschreibungen, zentralem Index und automatisierten Updates. Modularer Aufbau, restriktive Lizenzen und umfassende Qualitäts- und Evaluationsmechanismen für alle neuen Inhalte.
2026-07-26 14:00:58 +02:00

165 lines
5.6 KiB
Markdown

# Scan Artifacts Specification
This document describes the file layout and purpose of each artifact produced by a completed security scan.
---
## Directory Structure
All scan artifacts live in a `.security/` directory at the repository root:
```
.security/
├── scan.db # SQLite database (source of truth)
├── findings.json # Exported findings — simple format (generated by finalize.py)
├── report.md # Human-readable report (generated by finalize.py)
├── integrity.sha256 # SHA-256 of findings.json (tamper detection)
├── threat-model.md # Repository threat model (if generated)
└── scans/
└── <timestamp>/
├── architecture.md # Phase 1 output (full-scan only)
├── findings.json # Structured format — validated against report-schema.json
├── security-report.html # Self-contained HTML report
├── report.json # Machine-readable summary
└── manifest.json # File hashes + completion timestamp
```
---
## Artifact Descriptions
### scan.db — Source of Truth
A SQLite database containing the complete scan state. This is the authoritative data store that all other artifacts are derived from.
**Tables:**
- `scans` — Scan metadata (id, repo, branch, started_at, completed_at, config)
- `findings` — All findings conforming to the schema in `finding-format.md`
- `triage_log` — Status change history (who changed what, when, and why)
**Rules:**
- All mutations happen here first. Never edit `findings.json` or `report.md` directly.
- The database is append-only during a scan. Findings are inserted, never deleted (status changes use the `status` field).
- Triage actions (marking false-positive, accepted-risk, etc.) are recorded with a timestamp and reason in `triage_log`.
**Typical operations:**
```sql
-- Count open findings by severity
SELECT severity, COUNT(*) FROM findings
WHERE scan_id = ? AND status = 'open'
GROUP BY severity ORDER BY
CASE severity
WHEN 'critical' THEN 1
WHEN 'high' THEN 2
WHEN 'medium' THEN 3
WHEN 'low' THEN 4
WHEN 'info' THEN 5
END;
```
---
### findings.json — Sealed Export
A JSON array of all findings from the scan, exported from `scan.db` at finalization time.
**Properties:**
- Generated by `finalize.py` — never written by hand
- Represents a point-in-time snapshot of findings at scan completion
- Immutable after generation. If findings change (triage, fixes), re-run finalization to produce a new export
- Each entry conforms exactly to the schema in `finding-format.md`
**Structure:**
```json
{
"scan_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef",
"repository": "myorg/myapp",
"branch": "main",
"finalized_at": "2026-06-24T03:30:00Z",
"findings": [
{ /* finding object per finding-format.md */ }
]
}
```
---
### report.md — Human-Readable Report
The markdown report formatted according to `report-format.md`. Intended for human review, pull request comments, or export to documentation systems.
**Properties:**
- Generated from the same data as `findings.json` at finalization time
- Read-only artifact — regenerate rather than edit
- Self-contained: readers should not need to consult `scan.db` or `findings.json`
---
### integrity.sha256 — Tamper Detection
A SHA-256 hash of `findings.json`, computed at finalization time.
**Format:**
```
<hex-encoded sha256> findings.json
```
Example:
```
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 findings.json
```
**Purpose:**
- Allows downstream tools (CI gates, compliance checks, dashboards) to verify that `findings.json` has not been modified since finalization
- If the hash does not match, the findings export must be considered untrusted and regenerated from `scan.db`
**Verification:**
```bash
cd .security/
sha256sum -c integrity.sha256
```
Expected output on success: `findings.json: OK`
---
### threat-model.md — Repository Threat Model (Optional)
A structured threat model for the repository, generated on first scan or when explicitly requested. Not regenerated on every scan.
**Contains:**
- Trust boundaries (what's inside vs. outside the security perimeter)
- Data flows (what sensitive data moves where)
- Entry points (APIs, file uploads, webhooks, CLI inputs)
- Assets (databases, credentials, user data, secrets)
- Threat actors (who might attack and what they'd target)
**Rules:**
- Only created when explicitly triggered or on first scan of a new repository
- Updated manually or on request — not overwritten by routine scans
- Informs severity decisions: a finding that crosses a trust boundary is more severe than one contained within a trusted zone
---
## Lifecycle
1. **Scan starts**`scan.db` is created (or a new scan row is inserted into an existing database)
2. **Analysis runs** → Findings are inserted into `scan.db` as they are discovered
3. **Triage (optional)** → Agent or human reviews findings, updates statuses in `scan.db`
4. **Finalization**`finalize.py` exports `findings.json`, generates `report.md`, computes `integrity.sha256`
5. **Post-seal** → Artifacts are committed, pushed, or attached to a PR. No further modifications without re-finalization.
---
## Gitignore Considerations
The `.security/` directory should generally be committed so findings are tracked alongside code. However:
- `scan.db` may be gitignored in repositories where only the sealed artifacts matter (reduces churn from SQLite binary diffs)
- If `scan.db` is gitignored, `findings.json` + `integrity.sha256` become the durable record
Recommended `.gitignore` entry when excluding the database:
```gitignore
.security/scan.db
```