# Quickstart — Secret Redaction Hardening & Snapshot Data Integrity (Spec 120)

## Prereqs
- Run the app with Sail.
- Use a workspace with at least one tenant that already has policy snapshots.

## Local setup
- Start containers: `vendor/bin/sail up -d`
- Run migrations: `vendor/bin/sail artisan migrate`

## How to exercise the feature (manual)

### 1) Capture a policy with safe configuration fields
- Capture or refresh a policy version whose payload contains safe keys such as:
  - `passwordMinimumLength`
  - `passwordRequired`
  - `certificateValidityPeriodScale`
  - `tokenType`
- Expected:
  - The persisted `PolicyVersion` keeps those configuration values intact.
  - `redaction_version = 1`.
  - `secret_fingerprints` is empty if no true protected fields are present.

### 2) Capture a policy with true protected fields
- Capture or refresh a policy version whose payload contains true secrets such as:
  - `password`
  - `clientSecret`
  - `privateKey`
- Expected:
  - The persisted payload stores `[REDACTED]` at the protected paths.
  - `secret_fingerprints` contains digests for those paths.
  - No raw secret appears in `snapshot`, `assignments`, `scope_tags`, audit metadata, verification output, or run failures.

### 3) Validate secret-only change detection
- Re-capture the same policy after changing only a true protected value.
- Expected:
  - A new `PolicyVersion` is created even if the visible protected payload is unchanged.
  - Compare/drift surfaces report a protected change without revealing the value.
  - Safe configuration fields remain readable.

### 4) Validate audit and output readability
- Review the existing tenant/admin and workspace/admin surfaces that show sanitized evidence:
  - finding detail view
  - verification report viewer/widget
  - operation run detail / monitoring surfaces
- Expected:
  - true secret values remain hidden
  - harmless phrases such as `passwordMinimumLength` remain readable
  - protected-value messaging is visible where the UI explains hidden values

## Tests (Pest)
- Run focused suites once implemented:
  - `vendor/bin/sail artisan test --compact tests/Feature/Intune/PolicySnapshotRedactionTest.php`
  - `vendor/bin/sail artisan test --compact tests/Unit/AuditContextSanitizerTest.php`
  - `vendor/bin/sail artisan test --compact --filter=VerificationReportSanitizer`
  - `vendor/bin/sail artisan test --compact --filter=RunFailureSanitizer`
- Format changed PHP files before final review:
  - `vendor/bin/sail bin pint --dirty --format agent`
