# Decision Log — Scanner Audit & Fix-to-Sellable

Date: 2026-05-28/29. See [SPEC.md](SPEC.md), [VERIFICATION-2026-05-28.md](VERIFICATION-2026-05-28.md), [CT100-VERIFY.md](CT100-VERIFY.md).

## Reconciliation evidence

Three diverged trees found:

| Tree | Last commit | Date | Branch | Remote | Scanners |
|---|---|---|---|---|---|
| `C:\Donjonsec` | bcccff3 | 2026-02-27 | develop | github.com/donjonsec | 17 |
| `donjon-platform-clean` | 469b475 | 2026-04-30 | main | Forgejo 192.0.2.116:3000 | 19 |
| `donjon-platform-dev` | 9d9f0a6 | 2026-02-18 | dev | github.com/saint1415 | 17 |

`clean` is 2 months newer, has 137 files the others lack (incl. all paid-tier modules: rbac/sso/multi_tenant/trial_license/license_guard, MSSP, mcp+quantum scanners, 6 frameworks). Only 5 files unique to `C:\Donjonsec` (2 GitHub workflows superseded by Forgejo; `DARK_FACTORY_BUILD_LOG.md`, `SESSION_HANDOFF.md` archive-only; `ERRORS_AND_FIXES.md` carried forward).

## Decisions

- **D1** Canonical = `clean` history at `C:\Donjonsec` path + Forgejo remote.
- **D2** Archive other two trees (`*-archive-20260528`), do not delete.
- **D3** Done = test suite green AND journey 16/16 AND claims reconciled.
- **D4** Scope = all 19 scanners validated against real targets.
- **D5** Issue ledger = in-repo markdown (truth) + Forgejo issues mirror.
- **D6** Blocked-infra scanners decided per-scanner at audit time.
- **D7** SP1 audit = multi-agent workflow (one auditor per scanner).
- **D8** Targeted hardening, NOT full refactor (architecture verified sound).
- **D9** License keys: locate originals before any keygen.
- **D10** Data/automation findings verified on CT100, not the Windows mirror.
- **D11** Sequence: clear P0 launch-blockers → sellable → then 19-scanner audit.
- **D12** Located original signing keys via reference_license_keys memory + repo.

## Verification outcomes (run, not read)

- **P0 #1 (license keys) RESOLVED:** Ed25519 public derived from `donjonsec-infrastructure/keys/donjon-private-classical.pem` matches the embedded key in `lib/licensing.py`. Keys real; "placeholder" comment stale. Backup intact on CT100.
- **P0 #4 (freshness) DOWNGRADED:** CT100 cron healthy (last success May 24, published to Forgejo); real bug is `--check` printing STALE but exiting 0, plus KEV weekly-vs-48h cadence and the dashboard staleness stub.
- **Remaining hard P0s:** #2 trial bypass (unsigned/renewable), #3 framework cap (3) unenforced.
