Changelog - Dev - 07.14.2026 โ
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
[Unreleased] - 2026-07-14 โ
Added โ
- Lantern CLI and agent config restructure: Introduces a new
lanterndev CLI and restructures the.agents/config hierarchy with centralized rule management under.agents/rules/. Rules are now compiled into AGENTS.md vianpm run sync:agents, improving maintainability and consistency across agent instructions. (#655)enhancementdevops
Fixed โ
- Stage C safety code-review remediation: A local max-effort review of the block/report/appeal flow and the sealed-ban backend fixed a cluster of correctness issues. Backend (auth API): the appellant appeal cap is consumed only after a real restriction is confirmed (and the doc-upload cap only after validation), a closed appeal rejects new replies (409), appeal adjudication is transactional and claim-then-act so a concurrent reclaim/reinstate cannot diverge, the permanent-reinstate rationale is also gated on the linked account's ban duration, the recycled-number reclaim aging floor checks the freshest active ban, and
/unban-phoneclears every row in one pass. Client (web): the FCM service worker registers at its own scope instead of clobbering the PWA worker, anotificationclickhandler opens the app, report evidence is labeled with its real type and dropped attachments are counted, the block-to-report flow is guarded against a double-complete (backdrop/Escape ignored mid-submit), and the appeal Escape handling, file-input reset, and block-reason focus ring are fixed. Admin: the enforcement history now includes appeal reinstatements. Residual follow-ups filed as #664, #665, #666, #667, #668. Closes #662.bug
Security โ
- Sealed-login cross-account ban lift closed: In the sealed (Stage B)
POST /auth/phone/tokenpairing, the PIN proof was verified only against theauth_lookuprow for the token's phone number, never the bodyuserId's ownauthProofHash, so a valid proof for one sealed account could drive the reinstate and ban-axis logic against a different account whose PIN was never proven. The pairing now binds to the body account (the identical gate token issuance enforces to mint). The follow-on sealed-account PIN brute-force lockout is deferred to the sealing rollout (#663). Dormant on dev (sealing not enabled); recorded in SECURITY_REMEDIATION.md.security