d036ef79a1
The file manager gains a client-side decoded editor. EF_ENCODERS pairs each editable EF with a pure encoder and a form schema (fields / list / items); the file is read raw, the decoder fills the form, the browser re-encodes it and the existing update path writes it. Shapes: SPN (display-condition bits + Annex A text), PLMNwAcT/ OPLMNwAcT/HPLMNwAcT (rows with PLMN + ACT, add/remove), ADN/FDN/SDN/MSISDN/LND/BDN (one form per record with a checkbox that auto-checks on change; BCD, length and EXT handling; BDN's own X+15 layout) and PNN (per-record TLV items 43/45/80, add/remove, unknown TLVs preserved). Unchanged fields are copied verbatim (SSC/extended-BCD numbers, PLMN rows including unmodelled satellite ACT bits, PNN codings/AddCI bits, all-FF files, the BDN comparison-method byte), every checked record is validated and encoded before anything is written, and edits that would break a reference are refused. Also: docs/decoded-editing.md (the spec survey behind the design and the release waves), the efPlmnAct EC-GSM-IoT-only 0x88 fix, the PNN spare-bit decode fix, and the /api/write|read cmd2-exception false-success fix. 1022 Python + 1013 frontend green; simple-v466.
8.7 KiB
8.7 KiB
Changelog
All notable changes to SIMple (the PWA and pysim-simple-server).
The format follows Keep a Changelog;
versions use MAJOR.MINOR.PATCH (see the README).
History before the first packaged release (v3.31.1) lives in the git log — every change carries a descriptive commit message.
[Unreleased]
[3.33.0] — 2026-10-23
Added
- Edit decoded in the file manager: a file is read raw, decoded into its own editable form, re-encoded in the browser and written through the normal update path. The first wave covers EF.SPN, EF.PLMNwAcT / EF.OPLMNwAcT / EF.HPLMNwAcT, the dialling-number files EF.ADN / EF.FDN / EF.SDN / EF.MSISDN / EF.LND / EF.BDN and EF.PNN. Shapes: a flat transparent form (SPN), a transparent list editor with add/remove rows (PLMN+ACT), per-record forms with a selection checkbox that is auto-checked when a field changes (dialling numbers, PNN) and per-record TLV item rows with add/remove/edit (PNN's full and short names plus the PLMN additional information). All checked records are encoded and validated before anything is written; unchanged fields, record lengths, extension pointers (EF.EXT1–EXT5), the BDN comparison-method byte and unknown PNN TLVs are preserved, and an edit that would break a reference (a number continued in an extension file, a dropped mandatory PNN full name) is refused.
docs/decoded-editing.md: the file-format survey behind the design (every known EF classified by structure/coding into the editor's shapes S0–S10, with the release waves).
Fixed
- EF.BDN decodes and encodes with its own
X+15layout (the trailing Comparison Method Pointer); the shared ADN codec had treated it asX+14. efPlmnActdecoded the EC-GSM-IoT-only ACT (b8=1,b4=1,b3=0,0x0088) as nothing while checking the impossible0x0086(TS 31.102 Table 4.2.5.2).- PNN network names: the decoder now trusts a non-zero spare-bit count before the "all bytes < 0x80 → uncompressed" heuristic, so a valid packed name can no longer be misread (and later written back wrong).
/api/writeand/api/readreport a cmd2 exception in the captured output as a failure instead ofsuccess: truewithSW: 9000.
[3.32.7] — 2026-10-23
Removed
- The file manager's decoded view no longer carries the collapsed pySim JSON
(server) disclosure — the view is the client-side EF decoder's table only. The
disclosure was an unrelated second decode: opening it issued another
/api/readwithmode: 'decoded'to run pySim'sread_binary_decoded/read_records_decoded, and it was reachable only when our decoder covered the file (Read decodedis decoder-gated), so the one case where a second opinion would matter — a file our decoders do not cover — never offered it./api/readkeepsmode: 'decoded'for API callers; the help, READMEs and project notes now say the decoded table is built in the browser from the same raw bytes.ef_decode.test.jspins the view's output and the absence of the lookup.
[3.32.6] — 2026-10-23
Fixed
- The empty amber preset-mismatch banner no longer flashes on the SCP80/RAM view.
ramOpChanged()(v3.28.0) un-hid#ram-preset-warningby the operation kind, but the banner's text and visibility belong tospPresetWarningRender()(which also handles the batch suppression): with no warning text the empty bordered box stayed visible until the next status poll re-hid it — on every RAM view and operation switch. The visibility is content-driven again;frontend/tests/ram.test.jspins it (the pre-fix code fails the test).
[3.32.5] — 2026-10-21
Fixed
- A card removed during the startup initialization no longer leaves the server
reporting a phantom equipped card. The init caught the PC/SC error (and printed a
traceback) but kept the card object it had already built, so
card_presentand_CARD_CONNECTEDstayed True — and the auto-equip then skipped every later insertion (its_CARD_CONNECTEDearly return), leaving only a manual Equip or a restart. A PC/SC error now prints one line (INIT: card removed during initialization …), drops the half-initialized session and lets the presence monitor equip the next card.
[3.32.4] — 2026-10-21
Fixed
- The auto-equip's captured traceback now always includes the exception line: cmd2
renders a rich-box traceback longer than the logged head, so the actual error was cut
off. The tail is appended after a
...marker; the "releasing the old link failed" message now says it continues with a fresh link (a removed card's dead PC/SC handle always fails to disconnect). - A card insertion now marks the PC/SC link for a rebuild, so the first auto-equip
attempt already uses a fresh link. On Windows the old link cannot connect after a
swap — v3.32.2 recovered it, but only on the second attempt, after a failed init, a
2–4 s delay and a traceback in the log. A link created at a cardless startup has
never connected either, which the same mark covers. The rebuild still runs in the
equip worker (never in the pyscard monitor thread) and
_ensure_transportreleases the old link first.
[3.32.2] — 2026-10-21
Fixed
- The auto-equip loop after a card swap on Windows. A failed initialization with
the card still present was reported as "card gone during initialization" and treated
as a no-op success — so the three retries never ran and the watchdog re-armed every
few seconds forever. It is a failure now, and every failed attempt marks the
PC/SC transport for a rebuild, so the retry starts from a fresh link (the release
of the old link happens first, so it cannot inherit a stale card handle). The error
pySim swallowed is printed as
AUTO-EQUIP: init output:with its traceback.
[3.32.1] — 2026-10-21
Added
- "Start counter value" in the outfile import: the counter every created keyset
starts from. It defaults to the store's value (
1); raise it for cards whose counters are already past it. The API takesstart_counter(1–10 hex digits; a bad value is a 400), and the preview carries the value.
[3.32.0] — 2026-10-21
Added
- Updating a packaged install —
update.sh/update.bat(andtools/update.pybeneath them): downloads the latest release package, replaces the application files in place and re-installs the app into the existing.venv. pysim and its prerequisites (the slow part: pyscard builds from source on Linux) are kept, so an update takes seconds.--checkreports the current and latest versions,--versionpicks a specific release,--zipupdates from a local package (offline),--no-piprefreshes the files only,--forcere-applies the same version. - The release workflow now takes the release notes from this file's matching version section (falling back to generated notes when it is missing).
Changed
- Installs made from the v3.31.x packages have no updater yet: copy
update.sh,update.batandtools/update.pyfrom this package once (or re-runsetupfrom it). Later updates useupdate.sh/update.bat— orgit pullfor a clone.
[3.31.2] — 2026-10-20
Changed
- The SCP81 TLS-PSK listener states its Python requirement: it needs Python 3.13+
(
ssl's PSK callbacks exist only since 3.13). Below that it raises a clear error instead ofAttributeError, and the PSK tests are skipped (they run on 3.13+). - The READMEs and the setup scripts: Windows strongly recommends Python 3.13 (pyscard has wheels up to 3.13; on 3.14 pyscard and some pysim dependency wheels are unavailable and build from source with MSVC).
[3.31.1] — 2026-10-20
The first packaged release (simple-3.31.1.zip).
Added
- EF_PBR (phonebook reference) support — the PBR is decoded in the decoded file
views (the
A8/A9/AAcontainers, theC0–CCkinds, the master EF), and the phonebook files it references (they are not in pySim's model) are added to the file tree server-side, selectable and readable. - In-app dialogs — the native alert/confirm/prompt dialogs are replaced by a shared modal (queued, keyboard-aware, focus-trapped, ARIA-labelled).
- Windows console encoding guard — the
start.batPowerShell pipe can no longer kill the server on a character the ANSI code page lacks. - GPL-2.0-or-later licensing (
LICENSE,THIRD-PARTY-NOTICES), matching pysim. - The curated release package (
tools/build_release.py) and the tag-triggered.github/workflows/release.yml.
Changed
setup.sh/setup.batand the READMEs: on Linuxpyscardbuilds from source and needs the PC/SC headers (libpcsclite-dev).