From 2acf535e916e3e3ead176d3aeae7be2a9b390881 Mon Sep 17 00:00:00 2001 From: JustVugg Date: Wed, 22 Jul 2026 09:11:25 +0200 Subject: [PATCH 1/2] =?UTF-8?q?release:=20the=20verify=20grep=20must=20sur?= =?UTF-8?q?vive=20the=20accent=20=E2=80=94=20the=20banner=20says=20colibr?= =?UTF-8?q?=C3=AC,=20not=20colibri?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The behavioral check unpacks the archive and asserts 'coli info' output contains "colibri" — but the banner spells the project name "colibrì", with U+00EC, and no plain-ASCII "colibri" appears anywhere in the output. Every other assertion passed (engine found, ready): the second v1.1.0 tag build died purely on the accent. grep for the ASCII prefix "colibr". Reproduced and verified locally by simulating the full package+verify step (tar, clean-dir extract, coli info): old grep FAIL, new grep PASS. Co-Authored-By: Claude Fable 5 --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 638dc7f0..7fdcf905 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -96,7 +96,9 @@ jobs: case "$out" in *"engine is not built"*) echo "FAIL: coli cannot find the packaged engine"; exit 1 ;; esac - echo "$out" | grep -q "colibri" || { echo "FAIL: coli did not run"; exit 1; } + # "colibr", not "colibri": the banner spells the name "colibrì" (accented ì), + # so the ASCII-only grep matched nothing and failed the v1.1.0 tag build. + echo "$out" | grep -q "colibr" || { echo "FAIL: coli did not run"; exit 1; } echo "OK: coli locates the engine in the published archive" # Only the archives -- never the loose files. `dist/colibri-*.*` used to work by accident From 7bb7efa86f495d58a93b66fa82a176f2a8eb9e0f Mon Sep 17 00:00:00 2001 From: JustVugg Date: Wed, 22 Jul 2026 09:25:11 +0200 Subject: [PATCH 2/2] =?UTF-8?q?name:=20the=20program=20is=20'colibri',=20p?= =?UTF-8?q?lain=20ASCII=20=E2=80=94=20banner,=20--version,=20release=20tit?= =?UTF-8?q?le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The launcher printed the name with an accent ('colibri' with a grave i) while the binary, the package, the commands and the archives are all plain ASCII 'colibri'. That inconsistency is what broke the v1.1.0 tag build: the release verify step greps the 'coli info' output for 'colibri' and the accented banner never contained it. Fix the name, not the check: the banner, --version, the argparse description and the section headers now print 'colibri', and the release verify keeps its exact 'colibri' match (reverting the looser prefix grep from #516). The GitHub Release title is ASCII too, matching the archives it ships. Verified by replaying the CI package+verify sequence locally (tar, clean-dir extract, coli info): banner reads 'colibri v1.1.0', exact grep PASS. test-python green (135). Co-Authored-By: Claude Fable 5 --- .github/workflows/release.yml | 8 ++++---- c/coli | 14 +++++++------- c/version.py | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7fdcf905..b45d4f0c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -96,9 +96,9 @@ jobs: case "$out" in *"engine is not built"*) echo "FAIL: coli cannot find the packaged engine"; exit 1 ;; esac - # "colibr", not "colibri": the banner spells the name "colibrì" (accented ì), - # so the ASCII-only grep matched nothing and failed the v1.1.0 tag build. - echo "$out" | grep -q "colibr" || { echo "FAIL: coli did not run"; exit 1; } + # The program name is plain ASCII "colibri" -- exactly what the banner prints. + # (The v1.1.0 tag build failed here when the banner still said "colibrì".) + echo "$out" | grep -q "colibri" || { echo "FAIL: coli did not run"; exit 1; } echo "OK: coli locates the engine in the published archive" # Only the archives -- never the loose files. `dist/colibri-*.*` used to work by accident @@ -133,5 +133,5 @@ jobs: NOTES="Release ${TAG}" fi gh release create "$TAG" artifacts/* \ - --title "colibrì ${TAG}" \ + --title "colibri ${TAG}" \ --notes "$NOTES" diff --git a/c/coli b/c/coli index 08190f21..5864e689 100755 --- a/c/coli +++ b/c/coli @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """ -colibrì — tiny engine, immense model. +colibri — tiny engine, immense model. Run GLM-5.2 (744B) locally on CPU with roughly 15-26 GB of RAM. coli chat interactive chat (loads the model once) @@ -90,7 +90,7 @@ class C: TTY = sys.stdout.isatty() or os.environ.get("COLI_COLOR")=="1" if not TTY: C.off() -# ---------- colibrì 8-bit (pixel art, 2 pixel verticali per carattere) ---------- +# ---------- colibri 8-bit (pixel art, 2 pixel verticali per carattere) ---------- SPRITE = [ "....MMM.........", "...MMMMM..w.....", @@ -124,7 +124,7 @@ def sprite_lines(): def banner(sub=""): sp=sprite_lines() txt=[ - f"{C.teal}{C.b}colibrì{C.r} {C.dim}v{_version}{C.r}", + f"{C.teal}{C.b}colibri{C.r} {C.dim}v{_version}{C.r}", f"{C.dim}tiny engine, immense model{C.r}", f"{C.gray}GLM-5.2 · 744B MoE · int4 · streaming CPU{C.r}", f"{C.dgray}{sub}{C.r}" if sub else "", @@ -608,7 +608,7 @@ def chat_attached(a, base, model_id): req=urllib.request.Request(base.rstrip("/")+"/v1/chat/completions", data=body, headers={"Content-Type":"application/json"}) if a.api_key: req.add_header("Authorization", f"Bearer {a.api_key}") - print(f"\n {C.teal}◆ colibrì{C.r}") + print(f"\n {C.teal}◆ colibri{C.r}") sp=Spinner("thinking…"); sp.start() md=MDStream(" "); reply=[]; first=True; t0=time.time(); interrupted=False try: @@ -772,7 +772,7 @@ def cmd_chat(a): p.stdin.write(b"\x02MORE\n"); p.stdin.flush() else: p.stdin.write((msg.replace("\n"," ")+"\n").encode()); p.stdin.flush() - print(f"\n {C.teal}◆ colibrì{C.r}") + print(f"\n {C.teal}◆ colibri{C.r}") dec=codecs.getincrementaldecoder("utf-8")("replace") state={"first":True} def prefill_tick(path=errlog.name): @@ -963,8 +963,8 @@ def main(): common.add_argument("--cap", type=int, default=8); common.add_argument("--ngen", type=int, default=1024) # rete di sicurezza: la fine vera la decidono gli stop token common.add_argument("--topp", type=float, default=0); common.add_argument("--topk", type=int, default=0) common.add_argument("--temp", type=float, default=None) # temperatura token (0=greedy, default 1.0+nucleus .95) - ap=argparse.ArgumentParser(prog="coli", parents=[common], description="colibrì — run GLM-5.2 locally") - ap.add_argument("--version", action="version", version=f"colibrì {_version}") + ap=argparse.ArgumentParser(prog="coli", parents=[common], description="colibri — run GLM-5.2 locally") + ap.add_argument("--version", action="version", version=f"colibri {_version}") sub=ap.add_subparsers(dest="cmd") sub.add_parser("build", parents=[common]); sub.add_parser("info", parents=[common]) pp=sub.add_parser("plan",parents=[common]) diff --git a/c/version.py b/c/version.py index ce018d8e..2f6ec75a 100644 --- a/c/version.py +++ b/c/version.py @@ -1,3 +1,3 @@ -"""Single source of truth for the colibrì version number.""" +"""Single source of truth for the colibri version number.""" __version__ = "1.1.0"