personal memory agent

fix(setup): collapse setup-complete onto one numeric predicate master

Two predicates disagreed on "setup complete": the secure listener used journal_is_active (numeric ms marker) while the Convey access gate and /init redirect used a truthiness-only _is_setup_complete. A hand-seeded or imported ISO-8601 string in config/journal.json setup.completed_at unlocked the web UI/APIs while leaving the secure listener stopped. - journal_is_active now excludes booleans (isinstance(True, int) is True), making the positive-number contract explicit. - Delete _is_setup_complete; route the require_access gate and /init redirect through journal_is_active(get_journal()). No alias, no shim. - Convert app-test config/journal.json string setup markers to the canonical numeric marker (1700000000000). - Add boolean cases to the journal_is_active unit table and a shared regression test asserting an ISO-string marker reads incomplete through BOTH the real access gate and secure-listener startup. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>