|
| 1 | +# Changelog — Creeper Sweeper |
| 2 | + |
| 3 | +> **Complete commit history with feature descriptions.** |
| 4 | +> |
| 5 | +> 36 commits from initial scaffold to HEAD (`7228c8e`). |
| 6 | +> All work spans February 7–8, 2026. |
| 7 | +
|
| 8 | +--- |
| 9 | + |
| 10 | +## Summary Statistics |
| 11 | + |
| 12 | +| Metric | Value | |
| 13 | +|--------|-------| |
| 14 | +| Total commits | 36 | |
| 15 | +| Features | 21 | |
| 16 | +| Fixes | 11 | |
| 17 | +| Docs | 2 | |
| 18 | +| Refactors | 1 | |
| 19 | +| Performance | 1 | |
| 20 | +| Total source lines | ~11,968 (9 webapp files) | |
| 21 | +| Backend (`app.py`) | 3,986 lines | |
| 22 | +| Frontend JS | 3,421 lines (app.js + reference.js) | |
| 23 | +| Frontend CSS | 2,046 lines | |
| 24 | +| Supporting modules | 1,953 lines (bt_scanner + pnl_engine + gps_reader + triangulation) | |
| 25 | + |
| 26 | +--- |
| 27 | + |
| 28 | +## Commit Log (Chronological — Oldest First) |
| 29 | + |
| 30 | +### Phase 1 — Foundation (Feb 7, 03:00–04:41) |
| 31 | + |
| 32 | +| Hash | Type | Description | |
| 33 | +|------|------|-------------| |
| 34 | +| `77f1243` | feat | **Initial scaffold** — HTML structure, CSS dark theme, basic dashboard layout | |
| 35 | +| `b949228` | feat(sensors) | **GPS, BT LE, triangulation modules** — `gps_reader.py` (gpsd integration), `bt_scanner.py` (btmgmt wrapper), `triangulation.py` (multi-node RSSI positioning) | |
| 36 | + |
| 37 | +### Phase 2 — Core Features (Feb 7, 21:15–22:27) |
| 38 | + |
| 39 | +| Hash | Type | Description | |
| 40 | +|------|------|-------------| |
| 41 | +| `cea28c9` | feat | **Surveillance database** — OUI-based surveillance vendor matching, unit tests | |
| 42 | +| `0cd98c2` | feat(webapp) | **Single dashboard layout** — Alert sidebar (right column), instant tier alerts, device name removal, 2-column grid | |
| 43 | +| `4fd7122` | feat(time) | **NTP + timezone** — `timedatectl` in deploy.sh, Eastern timezone, timezone-aware timestamps throughout | |
| 44 | +| `d94d59b` | feat(reference) | **SIGINT reference module** — `reference.js` with ~16 surveillance vendors, 9 sub-tabs of educational content | |
| 45 | +| `a790e77` | feat(webapp) | **Live analyzer sidebar** — MAC parser + BT decoder + RSSI distance calculator, dual-panel device modal, expanded vendor DB | |
| 46 | +| `1234464` | fix(webapp) | **Layout restoration** — 2-column layout fix, floating analyzer positioning, Reference tab rendering | |
| 47 | + |
| 48 | +### Phase 3 — Correlation & Hardware (Feb 7, 23:02–23:33) |
| 49 | + |
| 50 | +| Hash | Type | Description | |
| 51 | +|------|------|-------------| |
| 52 | +| `e0d0f93` | feat(correlation) | **Signal correlation system** — Probe request tracking, initial weighted scoring algorithm | |
| 53 | +| `eb326a0` | feat(hardware) | **gpsd integration** — `/etc/default/gpsd` config, udev rules for U-blox7 (`/dev/gps0`), hardware docs | |
| 54 | +| `7abf4bc` | fix(systemd) | **Template unit fix** — `%i` instead of `%I` to prevent dash-to-slash unescaping in usernames | |
| 55 | +| `f8c2559` | fix(systemd) | **Path fix** — Replace `%h` with `/home/%i` for system service WorkingDirectory | |
| 56 | +| `660c227` | fix(systemd) | **Capabilities fix** — Remove `NoNewPrivileges`, use `AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW` for btmgmt | |
| 57 | +| `1e6f9bc` | fix(systemd) | **Config dir fix** — Pre-create `~/.local/share/creeper-sweeper/` to prevent `NAMESPACE` startup failure | |
| 58 | +| `b56bf11` | feat(hardware) | **Hardware auto-detection** — `hardware.py` module, USB VID:PID scanning for GPS/BT/WiFi adapters | |
| 59 | + |
| 60 | +### Phase 4 — Detection Tuning & BT Pipeline (Feb 7 23:33–Feb 8 01:41) |
| 61 | + |
| 62 | +| Hash | Type | Description | |
| 63 | +|------|------|-------------| |
| 64 | +| `b529187` | feat(correlation) | **Identification workflow** — Cluster identify + rename, bulk ignore (all MACs + SSIDs in cluster) | |
| 65 | +| `e581756` | fix(detection) | **Drive-by tuning** — Adjust persist threshold and alert cooldowns for vehicle-speed targets | |
| 66 | +| `abc3ff5` | fix(bluetooth) | **BT pipeline fix** — Parse both stdout+stderr from btmgmt, feed BT devices into detection/alert pipeline | |
| 67 | +| `8896287` | fix(bluetooth) | **PTY wrapper** — `script -qc "btmgmt find -l" /dev/null` to solve systemd PTY buffering | |
| 68 | +| `435ae1a` | docs(signals,llms) | **Documentation** — Comprehensive BT/WiFi scanning documentation in `.signals/` | |
| 69 | + |
| 70 | +### Phase 5 — Dashboard Evolution (Feb 8, 01:57–04:26) |
| 71 | + |
| 72 | +| Hash | Type | Description | |
| 73 | +|------|------|-------------| |
| 74 | +| `cc70816` | fix(webapp) | **Alert UX** — Auto-dismiss tier 1/2/4 alerts after 5s, recompute confirmation dialog | |
| 75 | +| `c5e1601` | feat(webapp) | **GPS-tagged detections** — Attach lat/lon to every detection from live GPS fix | |
| 76 | +| `6183e48` | feat(webapp) | **Location fallback** — Use SSID's last-known location when GPS unavailable, boost RSSI correlation | |
| 77 | +| `53236d1` | feat(webapp) | **Settings upgrades** — Sound toggle, unconstrained RSSI default (-127 = no limit) | |
| 78 | +| `6bdd77d` | feat(correlator) | **RSSI convergence** — Damped oscillatory tolerance convergence (later replaced by pure exponential) | |
| 79 | +| `5164384` | feat(webapp) | **Scrollable correlation** — Scrollable cluster cards with `max-height` constraints | |
| 80 | +| `155f8f1` | fix(webapp) | **Viewport constraint** — Enforce scrollable layout for all tabs, prevent page overflow | |
| 81 | +| `ac0c099` | fix(webapp) | **Dashboard restore** — Scrollable correlation only (not all tabs), popup toggle setting | |
| 82 | +| `2576ed6` | fix(webapp) | **Layout fix** — Remove flex from correlation tab, fix clipped cluster cards | |
| 83 | +| `9622411` | feat(webapp) | **RSSI setting UX** — Positive dBm scale display in settings, default 127 | |
| 84 | + |
| 85 | +### Phase 6 — Advanced Features (Feb 8, 04:55–06:10) |
| 86 | + |
| 87 | +| Hash | Type | Description | |
| 88 | +|------|------|-------------| |
| 89 | +| `8b2b753` | feat(detection) | **PNL fingerprinting** — `pnl_engine.py`, BLE address type classification (LE Public/Random/BR-EDR), directed probe extraction, PNL hash computation | |
| 90 | +| `09d1f06` | feat(webapp) | **CSV export/import** — 34-column CSV export merging WiFi+BT+fingerprints, CSV import with `action` field (ignore/name/both) | |
| 91 | +| `d247af4` | feat(webapp) | **Watch alerts** — WatchList system (7 match types, cooldown, enable/disable), settings persistence (7 fields to JSON), fix min RSSI handling | |
| 92 | +| `ce7b49d` | docs(signals) | **Knowledge base update** — Comprehensive `.signals/` documentation refresh | |
| 93 | +| `9082ecd` | refactor(correlation) | **Multi-dimensional clustering** — Replace union-find + 7-signal weighted scoring with 6-phase pipeline, 9 cluster types, pure exponential RSSI convergence | |
| 94 | +| `7228c8e` | perf(correlator) | **RSSI gap tightening** — `RSSI_GAP_TARGET` 8→1 dBm, deployed to Pi, recomputed 315 clusters | |
| 95 | + |
| 96 | +--- |
| 97 | + |
| 98 | +## Key Architectural Milestones |
| 99 | + |
| 100 | +| Commit | Milestone | |
| 101 | +|--------|-----------| |
| 102 | +| `77f1243` | First HTML/CSS scaffold | |
| 103 | +| `b949228` | Sensor modules (GPS, BT, triangulation) | |
| 104 | +| `0cd98c2` | Single-page dashboard with alert sidebar | |
| 105 | +| `e0d0f93` | First correlation engine | |
| 106 | +| `8896287` | BT scanning working under systemd (PTY fix) | |
| 107 | +| `6bdd77d` | RSSI convergence algorithm | |
| 108 | +| `8b2b753` | PNL fingerprinting engine | |
| 109 | +| `9082ecd` | Multi-dimensional clustering (final algorithm) | |
| 110 | +| `7228c8e` | Production-tuned RSSI gap (1 dBm) — 315 clusters | |
| 111 | + |
| 112 | +--- |
| 113 | + |
| 114 | +## File Evolution |
| 115 | + |
| 116 | +| File | Current Lines | First Commit | Major Changes | |
| 117 | +|------|--------------|--------------|---------------| |
| 118 | +| `app.py` | 3,986 | `0cd98c2` | Every phase added features; correlation engine is largest section | |
| 119 | +| `app.js` | 2,464 | `77f1243` | Started ~200 lines → 92 functions across 6 phases | |
| 120 | +| `style.css` | 2,046 | `77f1243` | Dark theme, modals, scrollable layouts, analyzer styles | |
| 121 | +| `reference.js` | 957 | `d94d59b` | 16 vendors → 30 vendors (14 added in `a790e77`) | |
| 122 | +| `index.html` | 562 | `77f1243` | 9 tabs, 4 modals, CDN imports, cache-busting `?v=6` | |
| 123 | +| `pnl_engine.py` | 613 | `8b2b753` | PNL profiling, Jaccard similarity, hash computation | |
| 124 | +| `triangulation.py` | 590 | `b949228` | Multi-node RSSI positioning, weighted centroid | |
| 125 | +| `bt_scanner.py` | 401 | `b949228` | btmgmt wrapper → PTY fix (`8896287`) → regex parser | |
| 126 | +| `gps_reader.py` | 349 | `b949228` | gpsd socket client, fix quality parsing | |
| 127 | +| `deploy.sh` | 168 | `4fd7122` | 9-step deploy with timezone, gpsd, udev, systemd | |
| 128 | + |
| 129 | +--- |
| 130 | + |
| 131 | +## Deployment History |
| 132 | + |
| 133 | +| Date | Target | Action | Result | |
| 134 | +|------|--------|--------|--------| |
| 135 | +| 2026-02-07 | Pi `192.168.1.243` | Initial deploy | Dashboard running, WiFi scanning | |
| 136 | +| 2026-02-08 | Pi `192.168.1.243` | BT pipeline fix | BT devices appearing in dashboard | |
| 137 | +| 2026-02-08 | Pi `192.168.1.243` | Multi-dim clustering + RSSI gap 1 dBm | 315 clusters computed | |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +*signals-changelog v1.0 | 2026-02-08 | Creeper Sweeper* |
0 commit comments