v0.9.9 - nself-org/cli GitHub Wiki

nself v0.9.9 - Stability & Plugin Ecosystem

Release Date: March 15, 2026 Type: Bug Fix & Stability Release Status: Release Candidate โœ…


Overview

v0.9.9 is the final stabilization release before v1.0 LTS. It ships with no new features โ€” only targeted bug fixes across the CLI, the Pro plugin ecosystem, and the nclaw showcase apps.


Bug Fixes

CLI

nself status โ€” service detail lookup failure

show_service_detail built container names with hyphens (e.g. nself_node-exporter) but Docker Compose converts hyphens to underscores when naming containers (nself_node_exporter). The lookup always failed for hyphenated service names. Fixed by converting hyphens with ${service_name//-/_}.

nself logs โ€” crash when PROJECT_NAME is not set

format_service_name used bare ${PROJECT_NAME} in prefix-strip patterns. With set -u active, referencing this variable before export caused an immediate crash. Fixed with ${PROJECT_NAME:-nself} defaults.

nself status โ€” shows 0/N running for non-default project names

When a project was started with a custom COMPOSE_PROJECT_NAME, the status command reported all services as stopped because the container name prefix didn't match. Both issues above contributed to this symptom.

nself ssl delegation โ€” nself ssl now correctly delegates to nself auth ssl.


Pro Plugins

All nine nclaw Rust plugins (notify, cron, google, mux, ai, claw, voice, browser, livekit) compile clean under SQLX_OFFLINE=true with zero errors.

nself-ai โ€” sqlx::query! macros in usage.rs had stale .sqlx/ cache hashes that diverged after query updates. Converted both record_fallback and monthly_spend to runtime sqlx::query() to remove the CI dependency on regenerated cache files.

nself-google โ€” AccountInfo struct was missing #[derive(serde::Serialize)], causing an into_response() compile error in the account info endpoint. Derive added.

nself-mux โ€” CalendarSync and DonorAction variants were added to RuleAction in rules.rs but the match arm in gmail_history.rs was not updated, producing a non-exhaustive match compile error. Both arms added.

nself-voice โ€” Claw health check now has a 3-second timeout to prevent indefinite blocking at startup. Session and recording data is now written to the database on call completion. Migration adds call_sid UNIQUE, from_number, and status columns.

nself-browser โ€” Session records are written to np_browser_sessions after each screenshot, scrape, and pdf operation. Columns: url, operation, status, error, duration_ms, source_account_id.

nself-cron โ€” Schedule validation runs before INSERT (invalid cron expressions return HTTP 400 instead of writing a broken job). list_jobs_for_account returns only jobs owned by the requesting account. source_account_id stored on all job records.


CI

Coverage workflow schema mismatch โ€” the psql schema setup step in coverage.yml was creating tables with outdated column definitions. Updated to match live migration output:

  • np_jobs: added source_account_id TEXT NOT NULL DEFAULT 'default'
  • np_voice_sessions: added call_sid TEXT UNIQUE, from_number TEXT, status TEXT NOT NULL DEFAULT 'active'
  • np_browser_sessions: columns replaced to match new migration schema

nclaw Showcase App

Calendar recurrence โ€” day-of-week timezone bug โ€” check.getDay() returns the day of week in the local timezone. ISO date strings parsed with new Date('YYYY-MM-DD') are UTC midnight, which shifts to the prior calendar day in UTCโˆ’4/โˆ’5. Fixed with getUTCDay() throughout the weekly recurrence check.

Key rotation โ€” DST boundary โ€” US Daylight Saving Time (March 8, 2026) caused a 30-day key age check to return false on day 30 because the raw millisecond difference was ~29.96 days. Fixed by truncating both timestamps to UTC midnight before computing the day delta.


Upgrading

nself update
# or reinstall from scratch:
curl -fsSL https://install.nself.org | bash

If the plugin registry returns an empty list after updating, clear the local cache:

rm -f ~/.nself/cache/plugin-registry.json
nself plugin refresh
nself plugin list

Pro plugins use short IDs, not the Rust crate names:

nself license set <your-license-key>
nself plugin install notify cron google mux ai claw
# Max tier only:
nself plugin install voice browser

What's Next โ€” v1.0.0 LTS

v1.0.0 is the stable, long-term-support release. It follows v0.9.9 once the release candidate has been validated in production for at least two weeks with no critical issues.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ