fitResult() measures the result's natural single-line width and scales the font down
(to an 11px floor) so a long password fits on one line on iPhone instead of wrapping;
wraps only if even the floor can't fit. Re-fits on resize/rotate. Masking doesn't
change width, so reveal is unaffected.
Hint cut ~35% to two sentences. About 'Console' now notes form<->console share the
same catalog/session and that pb copies to the clipboard; About note mentions
home-screen install.
Store saves the full entry spec (name, length, mode, seq, date, parent), never the
password; the old wording said 'just the entry name', which contradicts the recall-
full-spec behaviour. Fixed the quick-gen hint and the About blurb.
Instead of erroring, the wasm `pb` branch now writes the inner command's data to the
host page's clipboard via navigator.clipboard (new hel_clipboard_write host hook).
Runs inside the Enter-keypress handler, so the clipboard user-gesture requirement is
met. Native pbcopy/xclip path unchanged.
The two buttons encoded different facts (catalog membership vs verified hash) but
looked alike. Combine into a single button that walks the states, each a real engine
command: Store (add) -> Correct (correct) -> Correct ✓ (uncorrect), and Stored ✓
(disabled) when filed but no master is typed. Shorter label: "Correct", not
"Mark correct". Help texts updated.
- is-stored now uses the same filled-ocean look as is-correct, so both confirmed
states read identically
- closing the pass overlay (Set or Cancel) returns focus to the command line
- new read-only export hel_entry(name): the entry's canonical stored form, or ""
- Mark correct now also stores the name (keeps the entry); unmark keeps the stored
name and just drops the hash (wraps add/rm for an ephemeral entry so the right
hash is removed)
- Store button shows "Stored ✓" (disabled, ocean outline) when the name is already
in the catalog, "Store" otherwise
- when a typed name already exists, the field adopts the full stored spec on blur
(real mode/seq/date/parent) instead of a default-extended parse
Mark correct now stores/checks the leaf's own SHA1(name||password) (correct <name>),
read from the leaf warning in the enc output. Changing the name (or mistyping the
master) drops back to black until that exact name+master is marked. Mark/unmark wraps
add/rm for an ephemeral (not Stored) entry.
Quick form now drives the one shared engine through commands only, so it and the
console give identical results (form == console).
- password hook answers only the "/" prompt, so read_master climbs and computes
every ^parent from a single root master (Req 4)
- new master in the field is authoritative via `unpass`; empty field reuses the
stored session master, so later names generate without re-typing it (Req 1/2)
- `unpass` with no name now clears ALL cached masters (real command, not a private
hook) so the form stays reproducible in the console
- result colour = root master marked correct (correct / / uncorrect /), derived
live from the engine; black otherwise (Req 3)
- Mark-correct toggle button; click the master to reveal it; honest memory-only hint
- master stays in memory only, never written to storage; only the one-way correct
hash is saved on the device
parser: bare-name forms now keep a trailing comment, and a ^-led token is never a
name, so `name ^parent` / `name MODE ^parent` link the parent instead of qpname
reading it as prefix+name (was silently mis-stored).
The brand only reloaded the tool and the byline was hidden on mobile, so there
was no easy way back. Add a pill back link (href='../') as the first header item,
shown on every width; drop the wordmark below 540px so it still fits on phones.
- App icon = the official Kaizenkodo ensō (logo/current/exports/tight) with a key
inside: cream bg for the home-screen/app icon, transparent for the header +
favicons. Source: assets/enso-base.png + icon-source.svg / enso-mark.svg.
- Attribution: a 'by Kaizenkodo' header link and a footer line, both to kaizenkodo.no.
- PWA install: manifest (standalone, start_url/scope '../', maskable icons) + iOS
metas (apple-mobile-web-app-capable/title/status-bar) so it adds to the iPhone
home screen and runs as a standalone app.
The master and pass-overlay inputs are now type=text with a CSS visual mask
(-webkit-text-security) instead of type=password, so the browser never treats
them as password fields — no autofill, no save prompt, no 'suggest strong
password'. Added autocomplete=off + autocapitalize/autocorrect off and
data-1p-ignore / data-lpignore / data-bwignore on the name + master + pass.
- Make the privacy promise true: bundle the fonts (Poppins/Inter/JetBrains Mono
latin subsets + the text-security mask font) under helwasm/assets/fonts/ and
drop the Google Fonts + jsDelivr links. The page now makes zero external
requests once loaded — it talks to no third party.
- Say it plainly throughout the UI: a "Private by design" callout in the About
panel, the meta description, the quick-gen and console hints, and the footer —
nothing you type leaves the browser, no server, no account, no tracking.
- About panel (collapsible, closed by default with a pulsing "Help" badge)
explaining the tool; the `help` command now prints a full command reference
instead of "HELP" (benefits the CLI too).
- Live generation as you type; Store button; masked output that stays mono-width
(gen masks only the password column, never the header); command history with
Up/Down (persisted); console auto-scroll; Export fixed (uses `dump`); Import.
- Name field normalizes to its canonical parsed form on blur; quick-gen and Store
resolve the real entry name, so a leading prefix like `*P0 test1` is handled
correctly (new hel_parse / hel_parse_name wasm helpers).
- Parser: prefix-only forms now parse with defaults - `*P0 test1` ->
`*P0 test1 R 99 <today>`, `*P0 test1 R`, `*P0 test1 20R` - via new qpname/npname
rules mirroring qname/nname; the fully-qualified form is unchanged.
- Favicons + web app manifest + enso asset; pkg rebuilt.
Run the real hel core in the browser via WebAssembly, replacing the plain-JS
ooke.github.io/sk reimplementation so the web and the CLI share one generator.
- hel core: new storage module (native fs / wasm localStorage) backs
init/source/dump/correct; the pipe and pb branches are gated out of wasm;
the wasm editor is completed (EditorRef) and its password prompt no longer
blocks the single JS thread (synchronous hel_get_password instead of a
thread::sleep poll).
- helwasm: hel_load_script for bulk import, a panic hook in hel_init, dropped
the ok_add / web-sys leftovers; build.sh runs wasm-bindgen into a committed
pkg/ so GitHub Pages can serve the static dir with no CI.
- UI: rewritten index.html + style.css in the kaizenkodo.org style — responsive,
masked-but-copyable passwords with click-to-reveal, a quick-generate card plus
a full command console, localStorage persistence, and paste import/export.