Releases: ChrnX0/Tandem
Release list
Tandem 4.81
- Native RPM packaging for the rpm families - Fedora (COPR) and openSUSE
(OBS) - the equivalent of the Arch/AUR recipe (4.62) for the other side of
the packaging world. packaging/rpm/tandem.spec installs from the same
distribution-agnostic generic tarball as the .deb and the AUR package,
running its install.sh with DESTDIR, so what it packages cannot drift from
the .deb; its %files list is generated from the tarball's MANIFEST so the
list cannot rot as files are added or removed. %post/%postun refresh the
shared caches and show the install notice READ from the catalogue in the
machine's language, never sourced, exactly as the .deb postinst and the
pacman scriptlet do. build.py --check guards the spec's Version against
debian/control (the spec is committed, because COPR builds it straight
from the repository), and a new suite section asserts the spec's shape and
proves that guard fires on a version mismatch. The .xapk/.apks/.apkm
handler's unzip dependency is declared and guarded. Built and installed
end to end on a real Fedora 41, where tandem doctor reads "package
family: dnf". packaging/rpm/README.md documents publishing on COPR and OBS.
Install
sudo apt install ./tandem_4.81_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.81_generic.tar.gz && cd tandem-4.81
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: e952e47d6c647e6d96e5440ad720801c61fa8a510740e5f792d1710c5a0ca968
generic SHA-256: 087dc87ec0ac910cc564b39d2d25da4b08f06a5ec7d8934423879cfdfa02863b
Tandem 4.80
- The program library gains a per-program Remove action - the one thing the
main screen was missing: every row showed Open but no way to uninstall.
Each of the six worlds a program can come from uninstalls its own way - a
Flatpak per-user, a snap as root, a Waydroid app through Android, an
AppImage by removing its menu entry, a Windows program through Wine's own
uninstaller - and Tandem asks before removing anything and confirms it
actually went, never a silent failure. A system program (one that came
with the distribution) is not one-click-removed from here: Tandem says so
and points at the system's software manager, because apt-removing a system
package from a shop counter by a stray click is worse than not automating
it. The decision of how each source uninstalls is a pure function with a
proof-by-injection test; the click travels back through the same temp-file
token contract the Open and Update buttons use.
Install
sudo apt install ./tandem_4.80_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.80_generic.tar.gz && cd tandem-4.80
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: 9e06f4874269337a6e9e340f02ef15d50dc8b16ce7bc0854a7b17fc864e977b1
generic SHA-256: eca2f6956e888e306567cd1c3e20b276c47b1c817db7cf83cd922f5e125e73dd
Tandem 4.79
- A guard for the one thing the tools menu could still drift on: which tools
each face offers. The two faces share their dispatch (acao_painel_executa),
so what a tool DOES can never diverge - but the modern face reads the
shared acao_painel_itens while the zenity fallback keeps its own two-level
row list, so the SET of tools each face offers was kept in step only by
hand. A new test asserts the modern menu (acao_painel_itens) and the zenity
menu (acao_painel_zenity's rows, minus its "more"/"back" controls) offer
the same set of tokens; adding a tool to one face and not the other now
fails the suite instead of silently leaving the zenity user without it.
Found by Codex reviewing the 4.78 record, which had overstated the
guarantee as "both faces read one shared list" when only the dispatch is
shared.
Install
sudo apt install ./tandem_4.79_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.79_generic.tar.gz && cd tandem-4.79
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: 1f53e7bef067ba940ec8f666b95c3814fa6154ea77daedd3accc6eaaab31adb8
generic SHA-256: 258031ca7f9fe5b56dec966483de34dd80c67beea4153192ae73bddc4d1b2dd0
Tandem 4.78
- The Tools menu wears the One UI face now, the last shared surface still
drawn as a plain 1990s list. The library main screen, the health panel,
the wizard, the history, the error, the question and the progress bar all
moved to the modern GTK4 look across the redesign; the "Tools" button on
the library still opened a zenity list of doctor, backup, ports and the
rest - the one screen a coherent product should not have left behind. It
is a rounded-card One UI window now, one tap per tool, grouped into
sections (Programs, Diagnosis, Your data, Community and help) instead of
the two-level "more"/"back" list zenity forced because only eight rows
fit its window. Every tool the old menu offered is still there, and no
word changed in any of the seven languages. - Safe by construction, the same way every other modern window is: gui.py
grew a "menu" mode that draws the cards, and acao_painel_moderno falls back
to the zenity two-level list, then to the help text, on any machine
without libadwaita, without a display, or with TANDEM_GUI=zenity. Both
faces dispatch through one shared acao_painel_executa, so the modern look
and the fallback can never drift on what a tool does. A drawing failure
becomes exit 2, never a traceback.
Install
sudo apt install ./tandem_4.78_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.78_generic.tar.gz && cd tandem-4.78
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: 11aec37695fe79ff6b2d623e6cf7aa2eeac034f4e7d8fbf3d26442ea57443483
generic SHA-256: 7eef6c6b1667a011586df4fc4332566ac62bf5686d669755e136099276c11041
Tandem 4.77
- The last Portuguese word on the library screen is gone. Each program's row
shows where it came from - Wine, AppImage, Flatpak, snap, Waydroid - and
those are proper nouns that stay as they are in any language; but a program
from the system's own catalogue read "sistema", a plain Portuguese word,
to a shop owner running the machine in English or another language. It is
shown translated now - System, Sistema, Systeme and so on - while the
record on disk keeps the token "sistema" - the same split the memory screen
uses, on-disk value untouched, only the shown label mapped. The decision is
a pure function (_display_fonte in gui.py: only "sistema" is mapped, every
other source is returned as-is), pinned both ways, and t_bib_sistema still
records the untranslated token. One new message (fonte_sistema), translated
in all seven languages; rendered under real GTK4.
Install
sudo apt install ./tandem_4.77_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.77_generic.tar.gz && cd tandem-4.77
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: 58c210f37428ff223e90bf130c7816ce13f5c6298edaafd91ee5545dbb213d37
generic SHA-256: 78aad861a46e62b581a2168d7c097660a68fe8cca25018fc7bbc5b176335a96c
Tandem 4.76
- An "Update all" button on the program library, the way a phone's app store
has one. It sits above the install action and appears ONLY when at least
one program actually has an update waiting (t_bib_ha_updates); one press
updates them all behind the progress window - flatpak updates its own apps,
and snap goes through t_como_root because it needs a password. It touches
ONLY the managers the cache says have an update (t_bib_atualiza_tudo), so it
never asks for a root password to refresh snaps when only a flatpak needs
updating. When it is done it refreshes the update cache and reopens the
library, so the amber dots turn green in front of the owner; and a failed
update is NOT silent - it says so with a plain sentence, the project's
first rule. The decision of which manager to run is pure and pinned with
stubs that log every call (flatpak alone does not trigger snap, a snap
update goes through root), and the button's visibility is gated on a real
update in every direction. Three new messages (bib_atualizar_tudo,
atualizando_tudo, atualizacao_falhou), translated in all seven languages.
Rendered under real GTK4 - an amber button matching the update dots.
Install
sudo apt install ./tandem_4.76_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.76_generic.tar.gz && cd tandem-4.76
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: 0d10990db322b7f83940c3784d1c316134ab3594e30acdbda89eefdc4e6b5777
generic SHA-256: 2ab9b63b53e0e41d7bd97a0525baae68575f228c19b7ac0dd91f8dee9af82bb9
Tandem 4.75
- The program library gets a view control, the way a file manager does. A
small "organize" selector sits to the right of the system filters, with
three modes: by name (A-Z, the default), by system (grouped, with a header
per system - Windows / Android / Linux, the grouping a file manager shows),
and by update (what needs acting on first: an update waiting, then not
checked, then up to date, then the programs Tandem does not manage). The
order is a PURE function (_order_items in gui.py), imported headless and
pinned in every direction - by-name sorts across every system, by-system
groups under a header per system with apps by name within, by-update ranks
amber first, and an unknown mode falls back to by-name. The list is rebuilt
on search, chip and sort together, so a grouped view can insert its headers.
Rendered under real GTK4 in the grouped and by-update views. Three new
messages (ordem_nome, ordem_sistema, ordem_update), translated in all seven
languages. Deliberately NOT a "by size" or "by date" sort: those are not
uniformly available across the six program sources (only flatpak exposes an
installed size; most expose no install date), and a sort that is blank for
half the list would be worse than none - the no-false-data rule. - A test-isolation fix rides along, found by the suite hanging on this
machine: the boff_run helper (added in 4.74) exercises t_biblioteca but
stubbed only flatpak, so t_bib_snap ran the realsnap list, which hangs on
snapd on a machine that has snap installed (intermittent - it passed CI and
an earlier local run, where snap errors fast). It stubs snap now, the way
bib_run and bup_run already do; a helper that drives the library must
isolate every tool the library calls.
Install
sudo apt install ./tandem_4.75_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.75_generic.tar.gz && cd tandem-4.75
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: a2e8b4612e1d8806f3240fc2181f0210c4e727271237e4cbd371c96dbd57c5fc
generic SHA-256: 437c80d166b74ac5222779a87015baf8098a58f2a93f87044ddb31d760d335e2
Tandem 4.74
- Coherence pass, part 3 (the visible enrichment): the program library now
SHOWS which of its programs have an update. 4.73 built the engine (a daily,
cached, network-free check writing a sixth field, tem_update); this draws
it. Each program's icon carries a small status dot pinned to its corner,
FOUR states: amber = an update is waiting, green = checked and up to date,
a hollow ring = updatable but not checked yet, gray = Tandem does not manage
this program's updates (a Windows or Android program, an AppImage, a distro
package). A row with an update also gains an amber "Update available" note
beside its source, so the fact is not hidden in a tooltip nobody hovers; the
dot itself carries a tooltip naming its meaning in the machine's language. - A green "up to date" is only ever shown behind a REAL check - the project's
own rule that a check it could not run reports unknown, never healthy (the
health command's lesson). The update worker marks a source "checked" only
when that source's own command exits 0, so on a first launch or offline the
source is not marked and its apps read the hollow "not checked yet" dot
instead of a green the machine cannot back up. The gray tooltip was reworded
from "updates with the system" (which misdescribed Wine/AppImage/Android) to
"Tandem doesn't manage its updates". - The dot's state is a PURE function (_update_dot in gui.py), imported
headless and pinned in every direction - amber only when an update waits,
green only when checked and current, the hollow ring when updatable but
unproven, gray for anything Tandem does not update. It reuses the palette
the health panel already uses, so it reads as one product. Safe by
construction, like every gui.py window: the dot falls back to the bare icon
on any error, never a traceback, and the whole screen still falls back to
the old menu with no GTK4. Rendered under real GTK4 in all four states. Four
new messages (dot_atualizar, dot_atual, dot_gerido, dot_checando),
translated in all seven languages. The one-click Update button that acts on
an amber row comes next (v4.75).
Install
sudo apt install ./tandem_4.74_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.74_generic.tar.gz && cd tandem-4.74
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: 2a3fc6fc7f658625a7fc0de3dea5c6da93d5b66974201baa7818e9c3c41dddc4
generic SHA-256: 380a2ebf5a76b35132c41de2573744b32829bc0e3f3148586f2d2b72b0657909
Tandem 4.73
- Coherence pass, part 3 (the enrichment): the program library learns which
of its programs have an update waiting. flatpak and snap each know, per
app, whether a newer version is out - but asking costs a network round
trip, and the library is the main screen, opened all the time. So the
answer is CACHED: the check runs at most once a day, in the background,
stamped before the attempt (the self-update check's shape), and writes the
updatable ids to a file; the screen reads only that file, so it opens
instantly and never blocks on the network. t_biblioteca carries the answer
as a sixth field, tem_update (sim/nao) - only an updatable source can hold
one, and only if the cache lists it, so it never invents an update. The
field is a pure read (the refresh is triggered separately by the command
path), so it stays safe to call from a test. On-disk cache values are
English and lowercase like the memory tokens, never translated. - This is the invisible-but-testable engine; the visible green/amber dot and
the Update button on each row come next, reading exactly this. Pinned with
stubbed flatpak/snap: an app the check found reports an update, one the
cache does not list reports none, an updatable app with nothing waiting is
marked nao and one with an update is marked sim, and the daily throttle
fires once then the day's stamp skips it. No new message, no behaviour
change on the apt path or anywhere a program opens.
Install
sudo apt install ./tandem_4.73_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.73_generic.tar.gz && cd tandem-4.73
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: ad46d824de6956949ac47a614163bb9e2022973750acefbec031aa1114060d2c
generic SHA-256: 7ef6869166d00a6941b2ceb682aa21faab97f2bf6f78f61aa851ff55768deba3
Tandem 4.72
- Coherence pass, part 3: the main screen IS the library now. The old zenity
menu of commands - the one screen a shop owner who never opens a terminal
saw, and the one the owner said he detested - is replaced by a One UI window
that shows every installed program: the system's own mark on each row (the
Windows window, the Android robot, the Linux Tux penguin - drawn fresh, no
trademark art copied), a search, per-system filter chips, an Open button per
program, and a bar to install a new file. It reads the 4.71 enumeration
engine (t_biblioteca), so it needs no new source of truth. - A click comes back through a temp file, the exact contract the health
panel already uses: "abrirfontelancador", "instalar", or
"ferramentas". The shell reads it and does the rest; gui.py never launches
or installs anything itself. t_bib_lancador decides how each program opens
(gio launch for a .desktop, flatpak run, snap run, waydroid app launch) -
pure, so the decision is pinned by a test - and t_bib_abrir runs it
detached with the target as ONE quoted argument, never concatenated into a
command. - Nothing is lost. A "Ferramentas" button opens the old menu, so doctor,
backup, ports and the rest are one tap away; and with no GTK4 the whole
screen falls back to that menu, which itself falls back to the help text -
the fallback the error/question/text/progress windows all share. - The system names on the chips (Windows/Android/Linux) live in gui.py, a
descriptive category label that is the same in every language; only the
labels that translate (All, Open, Install, Search, Tools, the count) go
through the catalogue - 6 new messages, translated in all seven languages. - Rendered under Xvfb and checked against the approved mockup: the window,
the three system marks through librsvg, the chips, the search. gui.py home
with no display refuses fast (never hangs behind an invisible window).
Install
sudo apt install ./tandem_4.72_all.debThen, to install whatever is missing (Wine, winetricks, Android):
tandem prepararNot on Debian or Ubuntu? Fedora, Arch, openSUSE and the rest
have no apt to take a .deb. Use the generic bundle instead:
tar xzf tandem_4.72_generic.tar.gz && cd tandem-4.72
sudo ./install.sh # sudo ./uninstall.sh removes itOn Arch? A PKGBUILD is attached (with tandem.install):
makepkg -si from a directory holding both, or install tandem
with your AUR helper once it is published there.
.deb SHA-256: 1a8fac111b6f4ead4974f7c4ac87939a1b0c45eae34138fbe23d3be86a11ee9d
generic SHA-256: 52f40959639be3dc559b82e7e02ad8294a4108534df405f444532c2f8bac3795