theseus/PENDING.md
Local Dev 93e54ca348 translate 0.1.6 -> 0.1.7: translate as you type, and say what was detected
Typing never triggered a translation. The input handler was wired only to the
language detector, so nothing happened until Enter, the Translate button or a
language change -- the panel looked broken to anyone who simply typed and
waited. Translation now runs 500 ms after the text settles.

Each request carries a sequence number. Typing outruns the network, and
without that guard a slower earlier response paints its stale text over a
newer one.

Detection already worked, but wrote its answer only into the text of the
collapsed "Auto-detect" option, which a closed select hides -- so it read as
"detection is broken" when it had in fact succeeded. Name the language in a
row under the selects, and lower the 12-character floor to 5, since short
phrases never cleared it. With translate-as-you-type on, skip the standalone
detect call: the translation response already carries the detected language,
so asking twice only doubled the load on a public mirror.

Two of the three fallback mirrors were dead, checked by posting to both
endpoints: translate.plausibility.cloud answers 405, and lingva.ml serves an
HTML page because it is not a LibreTranslate API at all, so it could only ever
produce the "HTML instead of JSON" failure. Drop both and add
silentmode.st/libre, which stays a fallback rather than the default because it
covers six languages against disroot's fifty.

Auto-translate sends text to a translation server as it is typed, so it is a
visible toggle rather than silent behaviour. Default on.
2026-10-22 15:59:09 +03:00

65 lines
3.1 KiB
Markdown

# Pending — uncommitted Theseus changes
Working-tree state that hasn't been committed or shipped. Read this before
touching the same files. Update when you land or add work.
Format: each group has a `session:` label so parallel sessions can see
what belongs to whom and coordinate. Naming convention:
`YYYY-MM-DD:short-slug` for date-bounded work, or `parallel:<theme>` for
work owned by a session that isn't the current one.
Last updated: 2026-10-04.
---
Releases are no longer recorded here: the live version and hashes are in
`../site/releases-manifest.json` and `https://dl.silentmode.st/releases-manifest.json`,
and each release commit is `Theseus 0.3.x: ...` in git history.
## session: `2026-10-22:translate-auto`
translate 0.1.6 → **0.1.7**. **PUBLISHED 2026-10-22** to the extension OTA
channel (`bns/theseus/extensions/translate/`), no Theseus release needed —
but the source is **still uncommitted**, so git does not yet contain the code
that is live. Commit before anyone rebuilds from this tree.
- [bundled-addons/translate/panel.html](bundled-addons/translate/panel.html) —
translate-as-you-type (500 ms debounce, sequence-guarded so a slow earlier
request cannot paint over a newer one), a visible "Detected: German" row
under the selects, `DETECT_MIN_CHARS` 12 → 5, a "Translate as I type" toggle
(default on, persisted in `ui`).
- [bundled-addons/translate/index.js](bundled-addons/translate/index.js) —
fallback mirrors corrected: dropped `translate.plausibility.cloud` (405) and
`lingva.ml` (serves HTML; it is not a LibreTranslate API), added
`silentmode.st/libre`.
**Why:** typing never triggered a translation at all — only Enter, the button
or a language change did. Detection *did* work, but was written only into the
text of the collapsed `<option>`, where nothing shows it.
Verified against a real Theseus, 6/6 checks (`scratchpad/tr-verify.mjs`), and
the published artifact was pulled back over the network and staged by a real
Theseus (`scratchpad/tr-ota2.mjs`).
Noticed while publishing, **not fixed**: `consent` and `blocker` both carry an
`updateURL` with no channel behind it, so every update check spends two
requests on a guaranteed 404:
`https://navigate.st/bns/theseus.x/extensions/{consent,blocker}/updates.json`.
## session: `parallel:collision-policy`
Owner's focus: BCNR ↔ ICANN name collision handling. Not mine — leave for
that session to land or bundle by explicit ask.
- Android / mobile: [../AriadneResolver/mobile/app/AndroidManifest.xml](../AriadneResolver/mobile/app/AndroidManifest.xml),
[BchFetcher.java](../AriadneResolver/mobile/app/src/com/silentmode/ariadne/BchFetcher.java),
[Bns.java](../AriadneResolver/mobile/app/src/com/silentmode/ariadne/Bns.java),
[build.ps1](../AriadneResolver/mobile/build.ps1) — mobile-side collision changes.
- Repo-wide: `.gitignore` gained a `/.keys/` line (harmless).
## Live state
Shipped hashes live at `../site/releases-manifest.json` and
`https://dl.silentmode.st/releases-manifest.json`. On-chain pointer at
`releases.silentmode.bch`. See [GOTCHAS.md](GOTCHAS.md) for the release
gotchas.