Skip to content

20261007 - cMeta v0.33.1: a command's output is decoded on any machine in any language - #51

Merged
gfursin merged 7 commits into
mainfrom
dev
Oct 7, 2026
Merged

gfursin merged 7 commits into
mainfrom
dev

Conversation

@gfursin

@gfursin gfursin commented Oct 7, 2026

Copy link
Copy Markdown
Member

0.33.1

  • A command's output is decoded on any machine in any language, and never fails. utils.sys.run captured output in the text mode of subprocess, which decodes with the locale's encoding and strictly: a byte that encoding does not define (UTF-8 from git or Python on a French Windows, Cyrillic, a CP850 letter from a cmd-line tool) raised inside run() and the command came back with exit code -1 and no output. The output is now captured as bytes and decoded by the new utils.sys.decode_output: UTF-8 first (a byte-order mark dropped), then the machine's own code pages (the console's OEM page and the ANSI page on Windows, the locale's encoding elsewhere), the whole output first and line by line when tools of different encodings share one output, and UTF-8 with replacement characters as the last resort. Line endings are normalised to \n as before; None stays None. The same decoding applies to the timeout paths and to pip's output in packages.py. decode_output(data, encoding=...) lets a caller name an encoding it knows.
  • Installation guide: installing on a Windows PC with Smart App Control on.

Tested: the engine suite (534) on Windows; CI on Linux, Windows and macOS with Python 3.9 and 3.14; the decoder tests under C, POSIX, C.UTF-8, fr_FR.ISO-8859-1, de_DE.ISO-8859-1, ja_JP.EUC-JP and ru_RU.KOI8-R in Python 3.9 and 3.14 containers, and on a Mac under its fr_FR.ISO8859-1 locale.

See CHANGELOG.md.

🤖 Generated with Claude Code

gfursin and others added 7 commits October 5, 2026 23:05
An AI session run through cMeta (task run-ai of cmeta-aops) keeps its
memory, skills, conversations and logs inside the artifact it works on,
in a folder named !AI. Those belong to whoever ran the session, not to
this repository: the folder is ignored (written \!AI/, since a leading
"!" negates a pattern), and "git add -f" still adds a file on purpose.

The note on session-provenance files no longer names one person's hook.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Grigori Fursin <gfursin@gmail.com>
The authorship badge and a paragraph: cMeta was architected and written from scratch by its author and is extended since 2025 together with AI agents that run through cMeta itself, every artifact recording who made it (the generator field).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Grigori Fursin <gfursin@gmail.com>
…AI, powered by cMeta and Agentic Ops

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Grigori Fursin <gfursin@gmail.com>
Troubleshooting: what App Control blocks (uv's Python, uv's shims, Git for
Windows' DLLs, every compiled program), that turning it off is the fix on a
development machine, and the signed-only route for a PC that keeps it on:
Python from the Microsoft Store with --python, repositories fetched as
archives with curl.exe and cx repo unzip.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Grigori Fursin <gfursin@gmail.com>
…nguage, never an error

The text mode of subprocess decoded with the locale's encoding, strictly: a
byte it does not define (UTF-8 from git on a French Windows, a CP850 letter
from a cmd-line tool) raised inside run() and the command came back with
exit code -1 and no output. Output is now captured as bytes and decoded by
decode_output(): UTF-8 first (a byte-order mark dropped), then the machine's
own code pages (the console's OEM page and the ANSI page on Windows, the
locale's encoding elsewhere), the whole output first and line by line when
tools of different encodings share one output, replacement characters as
the last resort. Line endings normalised as before. The same for the timeout
paths and for pip's output in packages.py. Tests for the decoder, stand-ins
for a French Windows and a Latin-1 Linux, and a child printing mixed bytes
through both paths of run().

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Grigori Fursin <gfursin@gmail.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Grigori Fursin <gfursin@gmail.com>
…-R locale, not as replacements

Seen in Debian containers with fr_FR.ISO-8859-1, de_DE.ISO-8859-1 and ru_RU.KOI8-R: the two bytes are
valid there, so the machine's own page decodes them. The test now asks for text of the right length in
every case, which is what the decoder promises.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Grigori Fursin <gfursin@gmail.com>
@gfursin
gfursin merged commit 9146249 into main Oct 7, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant