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.
65 lines
3.1 KiB
Markdown
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.
|