You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hands-on use of M5Authenticator v0.1.0 identified several Device and Web usability issues plus a new configurable automatic-lock requirement.
This Spec records the requested behavior and provides traceability to domain-specific implementation Tasks. It does not itself authorize cross-domain implementation.
Owner
ACTIVE_ROLE: specification
Implementation domains: device, web
Current status snapshot — 2026-09-19
Final closeout main: d575e70fd7e07e9f2774762b5636cb74e94ed42d.
Open PRs at final closeout: none.
All child Decisions / Tasks / Defects for Requirements 1–57 are closed as completed.
While OTP code is visible, a single click hides the code immediately.
Add vertical margin above the OTP code.
Add at least minimal line spacing throughout the Device UI so adjacent lines do not visually touch.
Reduce or remove the on-screen click-operation legend if space is insufficient. If retained, prefer a compact form such as 1x next / 2x prev / hold OTP.
Add character spacing to the OTP code, including approximately half-character additional separation between the first 3 digits and last 3 digits.
Text that is horizontally clipped should begin horizontal scrolling after approximately 2 seconds so the full text can be read.
Automatic Lock
Add an optional automatic LOCK based on a fixed maximum continuous UNLOCKED lifetime.
Unset/disabled means no automatic maximum lifetime; this preserves existing v0.1.0 behavior.
When enabled, configure the lifetime in whole days from 1 through 31 inclusive.
The Web enable-time selector starts at 1 day when no prior enabled value exists, but 1 day is not persisted until the user explicitly enables/saves it.
User activity, OTP use, account navigation, Web/USB activity, or trusted-time sync never resets or extends the lifetime.
Automatic expiry uses the same security boundary as explicit Lock.
Add Japanese UI and allow the user to switch language.
Add a usage/help page.
Replace the current Flash-page link treatment with normal tab/navigation treatment consistent with the rest of the application.
Normalize product branding to M5Authenticator without a space between 5 and A wherever the product name appears.
Correct the Flash screen layout so its content is not visibly left-aligned compared with the rest of the application.
Web UI — follow-up shell/layout/build identification
Increase the visual prominence/size of the top M5Authenticator title.
The title itself is not a navigation link; navigation is owned by the tab controls.
User-facing product-name casing is exactly M5Authenticator across the Web UI.
Center the three top-level tabs as a group.
Make the Firmware page primary content width consistent with Provisioning / Usage.
Increase vertical spacing before Provisioning section headings so section boundaries are clear.
Provisioning shows the deployed Web/Provisioning release baseline plus build identity.
Firmware shows the actual Flash-target firmware release baseline plus firmware artifact build identity.
Exact release builds are recognizable as vX.Y.Z; post-release builds retain the release baseline and add a short build-commit identifier, e.g. v0.1.0 + abc1234.
Web and firmware build identities must remain independently sourced when their provenance differs; Firmware must not simply display the current Web commit.
Version/build identity is injected/derived at build/package time and must not require runtime GitHub/network lookup solely for version rendering.
Device UI — TOTP validity / semantic status colors
While OTP is revealed, show remaining validity for the current RFC 6238 30-second TOTP period. Prefer a compact circular progress/countdown indicator similar in concept to authenticator applications; a numeric seconds fallback is acceptable if the circle materially harms readability or causes flicker.
The TOTP-validity indicator is distinct from the existing maximum 10-second reveal timeout; the reveal timeout remains unchanged.
If the 30-second TOTP period rolls over while OTP is still revealed, refresh the visible OTP and validity indicator together without extending the original reveal deadline.
State/Time status values use semantic colors while retaining readable text so color is never the only status signal.
UNLOCKED / READY use green; LOCKED / UNPROVISIONED / NOT SYNCED use amber/yellow; REPROVISION / SECURITY ERROR / TIME STALE / TIME ERROR use red.
Render the Device M5Authenticator product heading in a readable blue accent while preserving the current 240x135 information hierarchy.
Make the physical-confirmation instruction equivalent to Press A to confirm visibly prominent using a high-contrast action accent distinct from the blue title and red/amber/green status semantics; explicit text remains required so color is never the sole cue.
Preserve the existing production StickS3 audio-disable contract (internal_spk=false, internal_mic=false, explicit speaker end). [Defect] Production First Install candidate再Flash後にStickS3の可聴/高周波ノイズが再発 #92 already investigated intermittent noise with this mitigation active; do not make speculative audio/PMIC changes without a newly reproducible current-main defect.
Web UI — post-provisioning and layout-stability follow-up
In normal already-provisioned management/import state, do not show an editable Recovery Passphrase field when the current operation cannot consume it. Passphrase input remains available where legitimately required for initial provisioning, recovery/new-Browser replacement, and explicit Passphrase change.
The Firmware route establishes its final primary content container geometry on first render. Asynchronous firmware/build/device metadata resolution must not cause visible horizontal container/header/tab shift.
Render the Device product title on a black background with a brighter blue M5Authenticator text accent. The revised blue must be visibly brighter than the prior [Task][Device] Refine title and physical-confirmation visual emphasis #176 blue (RGB565 0x1c9f) while remaining clearly distinct from the cyan confirmation accent (0x07ff). Use 4 px title-top padding, 4 px title-bottom padding, and retain 1 px title-left padding, followed by the existing 1 px blank black spacing row; do not restore the rejected white title band.
All left-aligned non-title Device UI content starts at x = 4 px. Centered content such as the six-digit OTP remains geometrically centered; account-label scrolling must respect the 4 px inset without creating new secret persistence.
Preserve the existing StickS3 audio-disable contract (internal_spk=false, internal_mic=false, M5.Speaker.end()) and treat residual audible/high-frequency noise as evidence-gated. A faint intermittent/residual noise observation by itself is nonblocking when it is not accompanied by heat, reboot, display corruption/flicker, USB protocol instability, or visible power instability and no new audio/PMIC mitigation is proposed. Record the observation and track further characterization separately. If noise becomes sustained at normal handling distance and/or any stop-condition anomaly appears, or if additional speaker/PMIC mitigation is proposed, require causal amplifier-state/before-after evidence before changing firmware. Do not make speculative broad PMIC/power/USB changes.
Web UI — 2026-09-18 follow-up
Present Web/Firmware build provenance at the bottom of each page as a dedicated, localized, visually secondary Build information / ビルド情報 semantic section inside the normal page shell, preserving independent Web-vs-Firmware provenance and stable responsive geometry.
Every major Provisioning peer section below the page-level introduction has one visible horizontal divider immediately before its section heading. Reuse the shared section/panel boundary, avoid double rules, and preserve the danger-tinted Factory Reset boundary.
Web Usage / Help — diagram follow-up
The Usage / Help page must use diagrams where they materially improve understanding of multi-step workflows, trust/storage relationships, or destructive/recovery distinctions. Diagrams supplement the prose; they do not replace the complete textual operating guide.
At minimum, provide localized EN/JA diagrams for: (a) normal setup and daily Unlock/OTP flow, (b) the M5StickS3 / active Trusted Browser / Recovery Package relationship, and (c) the distinction among normal firmware Update, First install/erase, healthy Factory Reset, and Recovery Factory Reset.
Help diagrams must remain local-only, responsive, accessible, and synthetic/generic. They must not include real credentials, QR payloads, Recovery Passphrases/Packages, key material, Device IDs, or runtime external diagram/image services. Color must not be the sole carrier of meaning.
Web lifecycle / automatic PC-time sync
Closing/reloading the Web page, browser lifecycle termination, Web Serial transport teardown, or USB data disconnect must not implicitly Lock a still-running Device. Explicit Lock & Disconnect, Device automatic-lock expiry, reboot/actual power loss, and existing security boundaries remain the Lock mechanisms.
The official Web app may automatically synchronize PC time after a normal Connect or successful Trusted Browser Unlock only when active Trusted Browser ownership and exact binding are valid, the Device is freshly confirmed UNLOCKED, and current time readiness is not_synced or stale. Automatic sync must be skipped when time is already ready.
Automatic PC-time sync is best-effort: failure must not roll back a successful Connect/Unlock, implicitly Lock the Device, or trigger unbounded retries. Manual Sync PC time remains available, and PC time remains labeled as local-host asserted rather than cryptographically authenticated.
Web shell / divider follow-up
Keep the shared Web header visible at the top of the viewport during vertical scrolling on Provisioner, Firmware Flash, and Help. The fixed/sticky header includes the product title, top-level tabs, and language switcher; responsive navigation, localization, keyboard access, overlay priority, and page geometry must remain correct.
Within Provisioning's Security & Recovery panel, render exactly one visible subsection divider immediately above both Recovery Package and Change Recovery Passphrase, while preserving all recovery/passphrase security behavior and the existing major-section divider contract.
On Firmware Flash, render exactly one visible divider before First install — erase device rather than the current duplicated boundary, while retaining one clear boundary before Update and preserving First install vs state-preserving Update semantics.
Add visibly larger whitespace above the divider before Provisioning's Change Recovery Passphrase subsection. At normal desktop width use at least 40px-equivalent top separation, while preserving exactly one divider, existing divider-to-heading spacing, responsive EN/JA layout, and all Recovery/Passphrase security behavior.
Non-functional constraints
Existing secret-handling, Trusted Browser, Protocol v2, Vault, and LOCKED/UNLOCKED security invariants must not be weakened.
Device layout changes must remain usable on the M5StickS3 240x135 display.
Horizontal scrolling must not cause OTP, secret, or credential data to persist or leak beyond existing UI behavior.
TOTP countdown must use the same trusted time basis as TOTP generation and must not create a second independent time truth.
Automatic-lock enforcement must use monotonic runtime elapsed time rather than mutable wall-clock/NTP time.
Web localization/build display must not introduce runtime CDN/remote-resource/GitHub API dependencies.
Supported production browser remains latest stable Desktop Chrome unless separately changed by a Decision.
Recovery Passphrase presentation changes must never create persistence/prefill/logging of the Passphrase and must not suppress legitimate recovery/change flows.
Firmware-page layout stability should be achieved through stable container geometry/reserved async-content space rather than a viewport-specific hard-coded page width.
Existing speaker/microphone disable behavior must remain unchanged unless a separately evidenced Device defect justifies a new specification decision.
Acceptance
Each Requirement 1–57 is covered by a linked implementation Task, Defect, or Decision and the owning child is closed/completed.
Domain ownership is explicit for every implementation Task/Defect.
Context
Hands-on use of M5Authenticator v0.1.0 identified several Device and Web usability issues plus a new configurable automatic-lock requirement.
This Spec records the requested behavior and provides traceability to domain-specific implementation Tasks. It does not itself authorize cross-domain implementation.
Owner
specificationdevice,webCurrent status snapshot — 2026-09-19
d575e70fd7e07e9f2774762b5636cb74e94ed42d.Requirements
Device UI
1x next / 2x prev / hold OTP.Automatic Lock
Web UI — localization/navigation baseline
M5Authenticatorwithout a space between5andAwherever the product name appears.Web UI — follow-up shell/layout/build identification
M5Authenticatortitle.M5Authenticatoracross the Web UI.vX.Y.Z; post-release builds retain the release baseline and add a short build-commit identifier, e.g.v0.1.0 + abc1234.Device UI — TOTP validity / semantic status colors
UNLOCKED/READYuse green;LOCKED/UNPROVISIONED/NOT SYNCEDuse amber/yellow;REPROVISION/SECURITY ERROR/TIME STALE/TIME ERRORuse red.Device UI — visual hierarchy follow-up
M5Authenticatorproduct heading in a readable blue accent while preserving the current 240x135 information hierarchy.Press A to confirmvisibly prominent using a high-contrast action accent distinct from the blue title and red/amber/green status semantics; explicit text remains required so color is never the sole cue.internal_spk=false,internal_mic=false, explicit speaker end). [Defect] Production First Install candidate再Flash後にStickS3の可聴/高周波ノイズが再発 #92 already investigated intermittent noise with this mitigation active; do not make speculative audio/PMIC changes without a newly reproducible current-main defect.Web UI — post-provisioning and layout-stability follow-up
2rem/ 32px-equivalent separation while avoiding the same large leading margin on the first section.Device UI / hardware — 2026-09-18 follow-up
M5Authenticatortext accent. The revised blue must be visibly brighter than the prior [Task][Device] Refine title and physical-confirmation visual emphasis #176 blue (RGB565 0x1c9f) while remaining clearly distinct from the cyan confirmation accent (0x07ff). Use 4 px title-top padding, 4 px title-bottom padding, and retain 1 px title-left padding, followed by the existing 1 px blank black spacing row; do not restore the rejected white title band.internal_spk=false,internal_mic=false,M5.Speaker.end()) and treat residual audible/high-frequency noise as evidence-gated. A faint intermittent/residual noise observation by itself is nonblocking when it is not accompanied by heat, reboot, display corruption/flicker, USB protocol instability, or visible power instability and no new audio/PMIC mitigation is proposed. Record the observation and track further characterization separately. If noise becomes sustained at normal handling distance and/or any stop-condition anomaly appears, or if additional speaker/PMIC mitigation is proposed, require causal amplifier-state/before-after evidence before changing firmware. Do not make speculative broad PMIC/power/USB changes.Web UI — 2026-09-18 follow-up
Build information / ビルド情報semantic section inside the normal page shell, preserving independent Web-vs-Firmware provenance and stable responsive geometry.Web Usage / Help — diagram follow-up
Web lifecycle / automatic PC-time sync
Lock & Disconnect, Device automatic-lock expiry, reboot/actual power loss, and existing security boundaries remain the Lock mechanisms.UNLOCKED, and current time readiness isnot_syncedorstale. Automatic sync must be skipped when time is alreadyready.Sync PC timeremains available, and PC time remains labeled as local-host asserted rather than cryptographically authenticated.Web shell / divider follow-up
Security & Recoverypanel, render exactly one visible subsection divider immediately above bothRecovery PackageandChange Recovery Passphrase, while preserving all recovery/passphrase security behavior and the existing major-section divider contract.First install — erase devicerather than the current duplicated boundary, while retaining one clear boundary before Update and preserving First install vs state-preserving Update semantics.Change Recovery Passphrasesubsection. At normal desktop width use at least 40px-equivalent top separation, while preserving exactly one divider, existing divider-to-heading spacing, responsive EN/JA layout, and all Recovery/Passphrase security behavior.Non-functional constraints
Acceptance
References
docs/V1_REQUIREMENTS.mddocs/ARCHITECTURE.mddocs/DISTRIBUTION.mdSECURITY.mdChild work
[Decision]— RESOLVED / COMPLETED: configurable automatic-lock semantics and Vault Format 2 compatibility contract.[Task][Device]/ PR feat(device): refine StickS3 OTP UI interactions (#139) #143 — INTEGRATED / COMPLETED: Device UI readability/interactions; exact-head physical Human Gate completed 16/16 PASS.[Task][Device]/ PR feat(device): add configurable automatic lock and Vault Format 2 (#140) #152 — INTEGRATED / COMPLETED: Device automatic LOCK / Vault Format 2 support.[Task][Web]/ PR feat(web): add automatic LOCK setting and Vault Format 2 #150 — INTEGRATED / COMPLETED: Web automatic LOCK / Vault Format 2 migration and setting UI.[Task][Web]— COMPLETED: Japanese localization, Usage/Help, navigation/layout/branding baseline.[Task][Web]/ PR feat(web): expose web and firmware build identities #147 — INTEGRATED / COMPLETED: header/layout refinement and release/build identity.[Task][Device]/ PR feat(device): add TOTP validity countdown and semantic status colors (#148) #166 — INTEGRATED / COMPLETED: TOTP validity countdown/rollover and semantic State/Time colors.[Task][Device]/ PR feat(device): refine visual emphasis (#176) #184 — INTEGRATED / COMPLETED: title/confirmation visual-emphasis baseline; final title geometry/color is refined by [Task][Device] Refine title framing, content padding, and residual-noise validation #187.[Task][Web]/ PR feat(web): refine post-provisioning controls and layout stability (#177) #178 — INTEGRATED / COMPLETED: post-provisioning Passphrase visibility, Firmware layout stability, build-info placement, Provisioning spacing.[Task][Device]/ PR feat(device): refine title frame and content inset (#187) #190 — INTEGRATED / COMPLETED: final black/bright-blue title, 4/4/1 title geometry, x=4 content inset, centered OTP preservation, evidence-gated residual-noise handling; Human Gate PASS.[Task][Web]/ PR feat(web): add build information sections and dividers (#188) #191 — INTEGRATED / COMPLETED: semantic Build information sections and consistent Provisioning major-section dividers.[Task][Web]/ PR feat(web): add explanatory diagrams to Usage help (#189) #194 — INTEGRATED / COMPLETED: localized explanatory Usage diagrams.[Decision][Web/Time]— RESOLVED / COMPLETED: browser/transport teardown does not imply Lock; gated opportunistic PC-time synchronization policy.[Task][Web]/ PR feat(web): preserve unlock and auto-sync PC time (#196) #197 — INTEGRATED / COMPLETED: non-locking page lifecycle and authorized automatic PC-time sync.[Task][Web]/ PR style(web): keep header visible and normalize section dividers (#203) #205 — INTEGRATED / COMPLETED: sticky shared header plus Recovery/Passphrase subsection dividers and Firmware double-divider correction.[Defect][Device→Web]/ PR fix(web): prevent USB Serial teardown reset (#204) #206 — INTEGRATED / COMPLETED: Web Serial control-line teardown reset fixed; exact-head Human Gate PASS for reload/tab-close/navigation-away UNLOCKED preservation.[Task][Web]/ PR style(web): add space before passphrase divider (#208) #210 — INTEGRATED / COMPLETED: additional top spacing above Change Recovery Passphrase divider while retaining the single-divider/security contract.