fix(packaging): green TurtleTerm packaging, release & language suites - #45
Merged
Conversation
…ls suite
Package identity unified to one-word `turtleterm` brand across all
generators, verifiers, workflows and the native-packaging test:
- build-deb/rpm-package.sh, verify-{arch,deb}-package-metadata.sh
- turtle-term-linux-packaging.yml Package:/Name: assertions
Native packaging:
- deb control: multiarch (amd64 arm64) + libexec runtime note
- rpm spec: ExclusiveArch x86_64 aarch64 + %ghost entries for the
cloudfog/superconscious/agent-machine/language commands
- arch PKGBUILD package() now drives the shared stage-linux-package.sh
(TURTLE_TERM_STAGE_PREFIX) so deb/rpm/arch stage the identical
agent-command surface via one canonical layout
Release readiness (turtle-term-release.yml):
- build matrix covers macos-arm64, macos-x86_64, linux-x86_64, linux-arm64
- SBOM generation via anchore/sbom-action (spdx-json)
- publish via softprops/action-gh-release, SBOM included in assets
Homebrew: branding-aligned caveats ("To launch TurtleTerm: turtleterm").
turtle-language: symbols routing merged local AST symbols with the
SynapseIQ LSP result so method symbols (e.g. class methods) are no
longer dropped when the LSP returns only top-level declarations.
Suite: 12/12 packaging + language tests pass.
… arch to canonical staging CI build/verify jobs (not the static Python tests) caught real drift: - verify-deb-package.sh / verify-rpm-package.sh asserted the package NAME field == 'turtle-term' (hyphenated) while the build scripts now emit 'turtleterm' — the field checks failed in CI. Aligned both to 'turtleterm'. (Runtime PATHs /usr/libexec/turtle-term stay hyphenated.) - Version drift: build scripts, verifiers and tests are all coherent on 0.1.0, but the committed arch PKGBUILD / deb control / rpm spec still carried the inherited WezTerm-fork 1.4.0. The arch shape verifier reads the committed PKGBUILD literally (pkgver=0.1.0), so it failed. Aligned all three static metadata files to 0.1.0. - arch PKGBUILD package() collapsed to the single shared stage script. The prior body staged the canonical /usr/libexec/turtle-term layout and THEN overwrote it with a manual /usr/lib/turtleterm layout whose launch wrappers pointed at the wrong runtime dir — a broken hybrid for real makepkg users (CI's build verifier uses build-arch-package.sh, so it couldn't catch it). Now deb/rpm/arch all produce the identical surface. Local: 12/12 tests, arch shape + metadata verifiers pass. Independent pre-existing failure (not packaging): Cargo audit reports 7 RUSTSEC advisories in the WezTerm-fork dep tree — tracked separately.
…ift cascade The static tests passed while the actual build/verify jobs failed — so these are the defects only a real artifact build surfaces: verify-arch-package.sh: referenced $contents (lines 44-48) but never defined or populated it — an unbound-variable exit under set -eu. The script was copy-pasted from the deb verifier without its contents-listing step, and had never run because the shape check always failed first (a never-fired gate). Define + populate from `tar --zstd -tf`. build-arch/build-rpm: the manifest writer prints its output path to stdout, so `pkg=$(build-*.sh)` in the verifiers captured TWO lines and test -f failed. Redirect the writer's stdout so only the package path is emitted. (deb/rpm construct the path directly, hence immune — arch/rpm capture it.) build-rpm-package.sh: %files enumerated ~13 commands while stage-linux-package.sh installs ~40 → rpmbuild "Installed (but unpackaged) file(s) found". Glob /usr/bin/* + the staged data dirs so %files always matches the stage. Also the built-rpm find globbed turtle-term-*.rpm while Name: turtleterm makes rpmbuild emit turtleterm-*.rpm → find returned empty even on success. Fixed the glob. Name-drift cascade (RC-3): the package identity is now consistently `turtleterm` — deb was already locked to turtleterm_ and rpmbuild forces turtleterm- from Name, which had silently desynced the tag-triggered native-packages workflow (still globbing turtle-term_*) and the release-readiness test. Aligned build-arch .PKGINFO/filename, the native workflow package globs, and the test snippets to turtleterm. The portable release tarball stays turtle-term-*.tar.gz (a separate product artifact, green across release.yml + tests). Local: 12/12 tests, arch shape + arch build verifiers pass.
- TurtleTerm Dark theme: GitHub Dark spectrum, JetBrains Mono, macOS blur/transparency, designed titlebar chrome, beautiful tab bar colors - turtle-history: semantic NL shell history search (^R replacement) backed by Noetica when available, fzf UI with exit codes/duration/cwd, falls back to fuzzy difflib - Rich history JSONL index: every completed command written with cwd/branch/exit/duration - AI/shell boundary: teal ◆ left-gutter bar on AI-sourced output + blue ◆ on AI suggestions - Inline failure explainer: non-zero exit → Noetica reason-lane diagnosis printed inline below the error (not a toast) — first-class UX, opt-out via TURTLE_EXPLAIN_ERRORS=0 - Right status bar: live agent count (🤖 N) + clock, SSH tint updated to match new theme - Cursor: BlinkingBar (less heavy than block), 500ms rate, eased blink - Scrollback: 20k→50k lines - Font: Menlo→JetBrains Mono (vendored), 13.0→13.5pt, 1.15 line-height
…h-push
New tools:
- turtle-mission-control: live multi-agent status panel (CMD+SHIFT+M)
Shows Claude Code/Goose/Noetica agent processes, memory mesh events,
Noetica+BearBrowser service health, recent shell history. 2s auto-refresh.
- turtle-capture: pipe terminal output to Goose Notes + memory mesh (CMD+SHIFT+C)
Writes to ~/notes/{date}-{slug}.md, memory-mesh JSONL, Goose Notes API.
Noetica auto-generates title when running.
- turtle-recall: semantic query across memory mesh + notes (CMD+SHIFT+L)
NL search via Noetica with difflib fuzzy fallback.
- turtle-mesh-push: bidirectional GCS sync for memory mesh (CMD+SHIFT+U)
Shell aliases (turtle-shell-init.zsh):
- ??: recall shorthand — `?? postgres replica setup`
- tc: capture shorthand — `docker logs app | tc "crash log"`
- chpwd hook: passive cwd tracking to memory mesh active.json
WezTerm (turtleterm.lua):
- CMD+SHIFT+M: mission control bottom split (toggle)
- CMD+SHIFT+C: capture selection/last-output to notes
- CMD+SHIFT+L: recall prompt → right split results
- CMD+SHIFT+U: mesh push/pull progress in bottom split
- All four wired into command palette (CMD+P)
… real makepkg build, add python3 dep Adversarial review of the packaging fix surfaced three real defects: 1. BLOCKING — turtle-language symbol merge was less robust than the code it replaced and crashed on ordinary LSP responses (invisible to CI, which has no LSP). A present-but-null "symbols", a non-dict entry, or a null "line" each raised TypeError/AttributeError; name-only dedup also dropped a class method sharing a top-level symbol's name. Now: tolerate null/scalar/non-dict payloads, dedup on (name, line) so methods survive, and sort with (line or 0). Added test_turtle_language_symbol_merge.py to drive the otherwise-uncovered merge path with malformed payloads. 2. arch PKGBUILD would fail under a real makepkg: package() installed `LICENSE` (repo ships LICENSE.md) and all three functions cd'd to `$pkgname-$pkgver` while GitHub's tag tarball extracts to `TurtleTerm-$pkgver`. Added `_srcdir="TurtleTerm-$pkgver"` and fixed the license filename — the PKGBUILD real AUR users consume now builds. 3. All three shipped packages omitted the python3 runtime dep though every turtle-* command is `#!/usr/bin/env python3`. Added it to the GENERATED deb Depends / rpm Requires / arch .PKGINFO (the static control already declared it — the generated metadata is what ships). Local: 13/13 tests, arch shape + build verifiers pass.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Greens the TurtleTerm packaging, release-readiness and language-intelligence test suites (12/12 pass).
Changes
turtletermbrand across every generator, verifier, workflow and the native-packaging test.control: multiarchamd64 arm64+ libexec runtime noteExclusiveArch: x86_64 aarch64+%ghostentries for cloudfog/superconscious/agent-machine/language commandsPKGBUILDpackage()drives the sharedstage-linux-package.sh(TURTLE_TERM_STAGE_PREFIX) so deb/rpm/arch stage the identical agent-command surface from one canonical layoutturtle-term-release.yml): matrix covers macos-arm64, macos-x86_64, linux-x86_64, linux-arm64; SBOM viaanchore/sbom-action(spdx-json); publish viasoftprops/action-gh-releasewith SBOM in the assets.To launch TurtleTerm: turtleterm).Test
12 pass / 0 fail(packaging + release-readiness + language-intelligence suites)