MultiListenerServer +
serve_multi, graceful shutdown, bounded audit logging, e2e
tests for listener-global sessions and limits — 1351 testsclone-session→clone, etc.), clone/close
schema mismatches, missing ls-sessions fields, no
interrupt-id, missing Revise.jl hook, MCP adapter
alignmentREPLy_jl-1vh) with 8 child
issues; ran /issue-review skill and fixed all HIGH/MEDIUM
findings (schema contracts, file paths, eval-id scheme, dep wiring, 2
new tickets for MCP audit and undocumented flags)awg: hybrid session identity — UUID as canonical key,
name→UUID alias index, ServerState identity resolutionxkg: canonical op names
close/clone with @warn
deprecation of old formsojy: clone schema — "session" source
field, "type" validation (rejects unknown/heavy),
"new-session" response keydb4: close schema — "session" field as
primary identifier (UUID or name)4ye: ls-sessions — added eval-count, ISO
8601 timestamps, type, module,
pid fields0hl: per-eval interrupt-id via monotonic
counter; "interrupted-id" in response4kf: Revise.jl pre-eval hook with
invokelatest, opt-out config key
revise_hook_enabledl4b: MCP adapter aligned to hybrid UUID identityREPLy_jl-3oc (undocumented status flags
session-already-exists / path-not-allowed)
remains open at P3REPLy_jl-3oc — document
or remove undocumented status flags; then check bd ready
for any new workadd-usage-audit-app from planning into implemented
foundations: pure summaries, usage-access gating, and the Android
usage/battery data layer.add-netdiag-app, cleaned leftover repo artifacts, and left
only the deferred July instrumentation follow-ups.android/app/src/main/kotlin/dev/charly/paranoid/apps/usageaudit/UsageAuditModels.kt
with TDD: daily aggregation, overnight audit summaries, incomplete-data
warnings, charging-transition handling, and minimal Room snapshot
persistence.UsageAuditActivity, UsageAccessGate.kt,
manifest/resources, plus unit + instrumentation coverage for
AppOps-based usage-access checks and the Settings handoff.UsageQueries.kt and
BatteryCollection.kt: UsageStatsManager
event-to-interval mapping, package filtering/label fallback, battery
signal mapping, Room-backed collector seams, and app-open / power-change
/ boot capture hooks.openspec/changes/add-usage-audit-app/tasks.md
through tickets PARANOID-bmm, PARANOID-4tb,
and PARANOID-7mh; validated with just test and
just _gradle compileDebugAndroidTestKotlin; committed
24e14ed, 40edf69, and
8ec0535.PARANOID-a45
(export/share), then PARANOID-c30 (Today + Last Night UI).
Manual device follow-up still needed for usage-access Settings handoff
and overnight snapshot behavior.Session identity: hybrid UUID + name alias (Option C) — UUID is canonical internal key, clients may use either form
Eval IDs: monotonic integer counter per session (not UUIDs) — simpler, sufficient for per-eval targeting
Revise.jl hook opt-out key:
revise_hook_enabled = true (server config)
Deprecation exit condition for old op names: remove aliases when MCP adapter is released and all integration tests use spec-compliant ops
UsageAudit uses UsageStatsManager.queryEvents(...)
normalized into intervals/slices, with package-name fallback labels and
noisy-package filtering at the Android boundary.
v1 battery reliability hooks remain lightweight: capture on app open, power-state changes, and boot; no periodic background worker was introduced.