Skip to content

Changelog

0.3.43 — Four-platform release published

Section titled “0.3.43 — Four-platform release published”

Published Desktop and CLI/Core for macOS Apple Silicon, macOS Intel, Linux x64 and Windows x64. Exact-commit Quality, all four installed package qualifications, GKE deployment and promotion passed. Public verification matched hashes and sizes of all eight packages, checked updater reachability and verified every EN/IT architecture selection. CLI version labels are consistent and candidate validation rejects mismatches. Windows updater signatures pass; a trusted publisher certificate remains unconfigured.12

Windows CRLF parsing and fail-fast version validation passed. Exact-commit Quality, all four native package qualifications, GKE deployment and promotion succeeded. Public verification then exposed incorrect x64 CLI version labels; 0.3.43 repairs that metadata.32

0.3.41 — native platform gate repair (package release cancelled)

Section titled “0.3.41 — native platform gate repair (package release cancelled)”

Restricts macOS URL scheme definitions to macOS and their existing tests, fixing the unused-code errors exposed by Linux/Windows Clippy. Both targets compile the corrected module and test configurations with warnings denied; macOS tests and Clippy pass. Linux Clippy passed remotely. The package release was cancelled after 0.3.40 exposed a separate Windows CRLF version-detection failure; Quality subsequently passed and 0.3.42 includes both corrections.43

0.3.40 — four-platform release restoration (publication blocked)

Section titled “0.3.40 — four-platform release restoration (publication blocked)”

Restored native Quality, build, installed qualification and publication requirements for macOS Apple Silicon, macOS Intel, Linux x64 and Windows x64. Updated EN/IT downloads with explicit architecture selection and matching GUI/CLI packages. Targeted workflow, platform, manifest and candidate tests pass; Linux and Windows subsequently failed Clippy on macOS-only URL scheme definitions; general gates and Apple Silicon/Linux installed packages passed. Publication is blocked and the correction is prepared in 0.3.41.54

Enlarged macOS tray-menu wait icon with independent half tooltips, recent worked projects and active-timer project/work-item switching. Version manifests and locks are aligned; combined-source boundary and formatting checks were repaired before the authorized commit/push. Remote publication remains pending.6

0.3.38–0.3.39 — published and verified 2026-09-09

Section titled “0.3.38–0.3.39 — published and verified 2026-09-09”

Fixed macOS native quit routing and update preparation blocked by active MonStaff telemetry. The updater now gracefully pauses its telemetry sidecar, preserves the saved target and durable queue, and installs after safe Core shutdown. Exact-commit Quality, signed qualification and promotion passed. The installed .38 → .39 automatic startup download and Cmd+Q installation passed with capture active; the app stayed closed and reopened on .39 with capture and preferences restored. Earlier .36/.37 carried the native quit fix but still required an assisted telemetry pause.7

Patch-version bump with no application behavior changes. Exact-commit Quality, signed Apple Silicon package qualification, release and promotion passed on e2721ab. Both public update manifests report 0.3.33; downloaded DMG and CLI hashes and sizes match the manifest. This desktop-only bump did not trigger a GKE deployment.8

Carries the combined WIP from 0.3.31 and repairs timing-sensitive integration assertions for terminal disconnect audit persistence and screenshot staging cleanup. All 58 integration tests and database restore pass locally and in CI. Exact-commit Quality, signed release, promotion and GKE deployment succeeded on aba8004; public manifest versions and downloaded DMG/CLI hashes and sizes were verified. All application replicas are ready on the release commit. The user’s installed GUI was not changed during verification.910

Preserves pending idle duration after input resumes; consolidates backend worker/pagination cleanup and AGPL license/notice packaging with the current bilingual product website and session explorer. Includes the database and open-source release plans without implementing their proposed work. Version manifests/locks and the combined local quality, integration and restore checks pass; remote Quality then failed on an asynchronous terminal audit assertion. The tag remains immutable; 0.3.32 carries the correction.119

Desktop 0.3.27 is published from 3e53752: Quality, signed release, promotion and GKE deployment succeeded. Public manifests and downloaded DMG/CLI hashes and sizes were verified; signed Apple Silicon installed-package qualification passed. This delivers the agent live-response repair and supersedes its local-only release status. The new GUI has not been verified on the user’s installation.12

Prevents repeated notifications for the same unresolved idle period and opens the MonStaff dashboard on notification activation. Repairs the 0.3.25 renderer gate through readable light-theme select placeholders, a dialog-scoped idle assertion and inspected automatic-dashboard baselines. Quality, release, GKE deployment and promotion succeeded on 2b50f4c. Both public manifests and independently downloaded DMG/CLI hashes were verified; signed Apple Silicon package qualification passed. Actual notification-click behavior in the installed app remains unverified.1314

Desktop telemetry adds a persistent “Solo attivi” / “Only active” session filter with a dedicated empty state. The release also includes the previously committed automatic timer start correction. Version manifests and Cargo locks are aligned. Quality renderer qualification failed and blocked publication; 0.3.26 repairs that gate.151613

  • Quality, tagging, release, GKE deployment and promotion all succeeded for 91a508c. The public updater/download manifests serve 0.3.24; independently downloaded DMG and CLI hashes match. Signed Apple Silicon installed qualification passed. This publishes the dual-gradient wait tray and projectless automatic tracking; installation on the user’s computer and extended feature soak remain separate.17

  • Binds standalone CLI package qualification to the canonical Core protocol version instead of an obsolete literal. Quality and backend/Admin deployment succeeded for 0.3.23, but its desktop publication was blocked when the packaged Core correctly returned protocol 4. The corrective desktop release preserves strict validation and the existing features.18

  • Corrects two fixed-size RGBA iterator warnings rejected by the newer Clippy in the 0.3.22 macOS Quality job. The old candidate was blocked before deploy/promotion; the patch preserves rendering behavior and all 0.3.22 features. A new immutable release tag and explicit backend/Admin deploy are required; publication remains pending.19
  • Combines the split-M gradient tray indicator with independently configurable current/day maxima and projectless automatic tracking with unattributed accounting and project corrections. Backend migrations, Admin settings, Core/CLI/GUI contracts and translations are included. Version and lockfiles are aligned; the native presentation boundary and CLI result formatter were corrected during combined verification. Commit/push and CI/CD publication are the requested next steps, not yet publication evidence.20

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

  • Desktop agent telemetry now persists its bounded live facts locally in encrypted storage, preserving the closed daily inter-turn wait total through Core/bridge restart and routine grant renewal. Local process-restart and metric regression tests pass; prepared as 0.3.1721, then corrected to 0.3.18 after CI rejected an unnecessary borrow in the restart test. Full workspace Clippy now passes locally; remote publication remains pending.2223
  • The Admin Operations → Agent governance tab shows the organization’s repository bindings used for agent attribution: registered bindings and bindings derived from a project’s linked repository, each with its project, declared fingerprints (worktree, remote URL, repository root), priority and creation time. Administrators delete a registered binding from the card; derived bindings carry no delete action because unlinking the repository from the project is the way to remove them. Only SHA-256 fingerprints are shown.24
  • Agent sessions in a repository that a project already declares through its external links resolve to that project automatically: the backend derives a remote-URL binding from every repository link of an active project (below any registered binding for the same remote), serves it to the Core with the registered bindings and applies it in the projector, so no “Bind repository to project” click is needed when the GitHub import already linked the repository. The remote identity is lower-cased in full before hashing on both sides, so clones that differ only in path case fingerprint identically; the repository label keeps its case.25
  • Agent sessions are attributed to the project bound to the repository they work in. The native hook fingerprints the working directory from Git on disk (worktree root, main repository root and canonical origin URL as SHA-256 hashes; paths and URLs never leave the machine), the Core keeps a private snapshot of the organization’s repository bindings next to the bridge runtime, and the sidecar resolves explicit lock → worktree binding → remote binding → repository-root binding → running timer → unresolved. The projector re-resolves timer or unresolved contexts through the same shared matcher. On the desktop Agent Telemetry page each session shows its repository, says “from the repository” when a binding resolved it, and offers “Bind <repository> to <project>” for sessions still attributed to the timer or unresolved; members may create bindings for active projects of their organization (audited), administrators or the creator may delete them.26
  • The desktop Agent Telemetry page shows live agent statistics: the project each agent session is attributed to (explicit lock, else the running timer’s project), agent effort today per project labelled as agent effort and never developer time, the open inter-turn wait timer that resets on the next prompt on any session or client, and provider-observed token counts without cost. The Core serves facts only (GetAgentLiveStatus, monstaff agent live); the wait, effort and token derivation is one shared function in @monstaff/shared that the backend analytics use as well, so the desktop debug view and Admin share a single definition. Claude Code hooks now emit provider-observed usage facts from the session transcript; SubagentStop no longer closes the parent turn.27
  • The desktop inter-turn wait tile also shows the day’s closed total: the sum of the same-day closed waits above the sixty-second threshold, computed by the shared reducer as closedWaitMilliseconds and shown next to the closed count. The open wait keeps resetting on the next prompt and is never added to the total, so the desktop figure and the Admin inter-turn wait metric share one definition.28
  • The desktop agent bridge card (per-client status, context lock, “Detect & repair”, “Lock project”, “Disable”) moved from the Agent Telemetry page to the Setup page, directly under the agent hook rows, as the product owner directed on 2026-09-06; the hook rows no longer carry their own “Detect & repair” copies. The Agent Telemetry page shows the live agent view only and now displays the bind-repository confirmation itself.29
  • The Core and CLI crates inherit their version from [workspace.package] in the root Cargo.toml (version.workspace = true), so a desktop version bump touches four files instead of five: apps/desktop/package.json, src-tauri/tauri.conf.json, src-tauri/Cargo.toml (excluded from the workspace) and the workspace table. verify-desktop-version.mjs reads the workspace version, refuses a Core or CLI manifest that declares a literal version again, and the release build takes the Core version from that verified line instead of parsing the crate manifest.
  • Quitting the desktop application (tray “Quit MonStaff”, Cmd+Q, Dock “Quit”) now stops the running timer and asks the per-user Core to shut down, as the product owner directed on 2026-09-05; hiding the window still leaves the Core and its timer running behind the tray. The sequence runs in the Tauri exit handler, never starts a Core, gives up after 8 seconds so quitting cannot hang, and respects the Core safe-stop rule: with agent capture, remote actions or a remote terminal active, or with the backend unreachable, the GUI exits and the Core stays alive.30
  • Delivery workflows wait for the exact-SHA Quality run instead of failing fast and being re-run by the “Resume Quality consumers” workflow, which is removed together with its script: require-quality-run.mjs --wait polls up to 45 minutes and the prerequisite job carries a 50-minute timeout, so a release or deploy is one honest run.
  • The desktop release builds its native lane in parallel with the Quality wait; only candidate assembly depends on the Quality gate. The required Quality jobs are derived from the lanes quality.yml declares, so the two matrices cannot drift apart.
  • A desktop release is now a version bump on main: the “Tag desktop release” workflow creates desktop-v<version> on the exact commit when apps/desktop/package.json changes version and dispatches “Release MonStaff” on the tag. A version already tagged on another commit is refused; tags are never moved. It is the only desktop workflow with contents: write, used solely to create the tag ref.
  • pnpm release:promote [--run-id <id>] [--reason <text>] [--watch] resolves the latest successful tagged release run, reads its commit-bound candidate manifest and dispatches the promotion with the four derived inputs; the protected-environment approval is unchanged.
  • Promotion is automatic, as the product owner directed on 2026-09-05: the last job of “Release MonStaff” dispatches “Promote qualified MonStaff candidate” for its own run id, tag and commit with the repository token, and the promotion preflight waits for that run to complete before the same run, tag, commit and manifest verification as a manual dispatch (ADR-026). The first version of this path (ADR-025) relied on a workflow_run trigger that never fired, because GitHub emits no such event for a release the tagging workflow created with GITHUB_TOKEN; desktop-v0.3.10 was promoted by hand before the repair; desktop-v0.3.11 was the first release promoted automatically by the new path, about 15 minutes after the push. pnpm release:promote stays as the manual path for re-promotion or an older candidate. The desktop-production environment has no protection rules, so a release cycle has no human step after the version-bump push.3132
  • Desktop releases build, qualify and ship Apple Silicon only while the client is in development: the native matrices in quality.yml and release-desktop.yml keep the other entries commented and DESKTOP_RELEASE_PLATFORMS=macos-arm64 narrows the qualification, supply-chain and candidate gates (empty restores every platform). Measured on the 0.3.0/0.3.1 runs, the Windows legs set the critical path at 20 minutes in Quality and 32 minutes in Release against 3 and 8 minutes for macOS arm64.
  • Restarting the Core no longer signs the developer out when the persisted access token has expired: session restore refreshes the token pair once if the installation challenge answers 401 and registers again, and only a rejected refresh token ends the session. Seen on 2026-09-07 right after installing 0.3.19, when session restore answered “401 Invalid or expired token” although the keychain still held a valid refresh token, leaving agent capture off until a manual sign-in; the Core error now carries the backend HTTP status. Prepared as 0.3.20, whose Quality run failed on the midnight-dependent live-card test below; released and promoted as 0.3.21 on 2026-09-07 and verified on the product owner’s Mac, where the session that 0.3.19 could not restore signed itself in after the upgrade.33343536

  • The desktop live-card unit test pins its clock to midday: its fixture built every turn relative to the real time, so for about forty minutes after midnight in the runner’s time zone the early turns fell on the previous reporting day and the expected effort was short by seven minutes, which blocked the 0.3.20 release in CI. Vitest fakes Date only, so intervals and waitFor keep real timers. Released and promoted as 0.3.21 on 2026-09-07.353736

  • The desktop inter-turn wait no longer counts a closed wait between two sessions while another agent’s turn is still open: the shared reducer bounds open counted turns at the current time for the closed waits, as it already did for effort, so a long-running agent covers the gaps and the desktop total matches what Admin computes once the turn closes. Found by the 2026-09-07 field test with real Claude Code and Codex sessions over four repositories, which otherwise confirmed attribution, parallel effort, the sixty-second threshold and the token facts; prepared as 0.3.19.383940

  • The Setup page reveals an older codex command on the terminal PATH: the hook report now carries the version of a different executable of the same client that PATH resolves first and flags it as outdated when it predates Codex 0.148.0, the first release that runs asynchronous command hooks. The card shows the terminal version and an amber hint with the update command, the CLI prints a shell_client line. Sessions started from such a command reached the bridge with no turn while the page reported Codex as fine.3839

  • The Admin Agent Sessions turn timeline labels each attribution source (explicit lock, work-item reference, worktree, remote-URL, repository-configuration and repository-root bindings, branch hint, running timer, unresolved) in both locales. It previously compared the source with a value outside the shared enum and read every turn as unresolved, hiding the repository-bound attribution.24

  • Codex sessions produced no telemetry after the ChatGPT app updated its bundled Codex: the Core embedded the detected client version in the native hook command, Codex trusts hooks by content hash, and the rewritten command was silently skipped as “modified”. The hook command now carries only the client kind; the Core writes clientVersions into bridge-runtime.json and the hook reads its version there, accepting a trailing version argument only for hooks written by older Cores. One final /hooks re-trust in Codex is needed after the fixed Core is installed.41

  • Agent telemetry “Detect & repair” no longer fails with “Agent bridge did not become healthy”: monstaff-core dispatched its sidecar modes from inside the #[tokio::main] runtime, so --monstaff-agent-serve panicked on a nested runtime before it could listen; the entry point now runs the sidecars before building the core runtime.

  • The core’s bridge launcher was still on the pre-SDC4 contract (fixed port, MONSTAFF_AGENT_AUTHORITIES, legacy bridge-runtime.json); it now passes the tenant scope, queue-key account, launch nonce, expiry and authority fingerprints, waits for the nonce-bound readiness file, writes the descriptor the native hooks decode through the shared RuntimeFile type, and reports the child’s stderr when startup fails.

  • The agent queue key is stored under the sidecar’s keyring service and tenant-scoped account (v2:<user>:<installation>:<organization>) so the offline hook fallback and revocation purges operate on the same key as the bridge.

  • Agent telemetry reconcile (“Detect & repair”) now retires Claude Code hooks left behind by the removed Electron agent-cli; after the MonStaff bundle replaces Electron at the same path those hooks failed on every turn and reconcile only cleaned up its own --monstaff-agent-hook entries.

Published from tag desktop-v0.3.0 at commit bd55fa5 through the qualified release and protected promotion runs; the four platform artifacts, the CLI/Core archives and both channel manifests are live on the download page.42

  • Single desktop client (ADR-024). The Electron client and the TypeScript agent bridge were removed; the Rust Core with its Tauri GUI and monstaff CLI is the only MonStaff desktop application. Their last Electron release stays at tag v0.2.43.
  • The desktop identity is now plain MonStaff: bundle identifier com.monstaff.desktop, deep-link scheme monstaff://, updater channel desktop-latest.json, download manifest desktop-downloads.json, artifacts MonStaff_<version>_* and MonStaff-CLI_<version>_*. Existing Preview installations do not auto-update across the identity change and must be reinstalled.
  • Core, CLI and GUI share one version line starting at 0.3.0; release tags are desktop-v<version> and releases are no longer marked pre-release.
  • Desktop admission is fenced only by the inclusive DESKTOP_MIN_VERSION/DESKTOP_MAX_VERSION backend bounds; the per-cohort TAURI_PREVIEW_*/MONSTAFF_CORE_* flag families were removed and the DesktopClientFamily enum now has the single value MONSTAFF_CORE.
  • Installed qualification evidence moved to schema v3 (one client, no Stable comparison) and the release pipeline no longer downloads or compares an Electron package.
  • Desktop hardening (SDC4). TypeScript protocol bindings are generated from the Rust protocol crate with ts-rs; the desktop catalog moved into @monstaff/i18n; the GUI was decomposed into feature hooks and pages; monstaff-core split its session, RPC and largest modules; the Quality workflow runs static gates and tests as parallel lanes with cargo caching.
  • The desktop GUI compared protocol enumerations in PascalCase against the SCREAMING_SNAKE_CASE wire spellings, so capture, permission and idle states could never match; the generated bindings now type those comparisons.
  • The release pipeline was repaired on its first end-to-end exercise after the lane split and identity change: the test lane builds workspace packages before vitest, the secret scan ignores restored build outputs, deferred release runs stay resumable, the desktop bundle builds @monstaff/i18n, the SBOM resolves the monstaff-desktop crate, Windows CLI archives avoid GNU tar drive-letter parsing, and installed qualification records the monitoring-v1 state directory and the monstaff URL scheme.
  • Added rule-level Device Compliance status to the Preview, including disclosure scope, user-session assurance, policy/evaluator version, findings and bounded expected/observed summaries.
  • Added the proposed side-by-side Rust/Tauri and React/shadcn Desktop Preview program without granting Electron replacement authority.
  • Completed bilingual en-US/it-IT coverage across every supported Admin route, Desktop renderer route and Electron native surface, with rollout configuration and bounded localization metrics.
  • Added direct normalized ClickHouse projection and typed tenant-scoped analytical queries for Agent Sessions lifecycle and usage facts, with bounded PostgreSQL degradation.
  • Expanded shared English/Italian Admin coverage across overview, customers, monitoring, application usage, screenshots and Agent Sessions machine labels.
  • Added a governed Delivery Sessions explorer with provider/project/user filters, safe session detail, role-aware content access and audited administrative reads.
  • Added provider-neutral P0 lifecycle, duration, dual-time and attribution analytics, P1 same-day overlap-aware inter-turn waiting, and typed P2 model/token/cache/cost facts with price provenance.
  • Added shared en-US/it-IT localization infrastructure, persisted locale preference, Admin and Electron synchronization, native surface translations, localized error codes and pseudo-locale/source checks.
  • Captured redacted, finalized visible user prompts and main-assistant responses from current Claude Code and Codex hooks, with organization OFF, METADATA_ONLY and CONTENT enforcement at the local bridge.
  • Added one-click SSH access to eligible online devices in the Admin Devices inventory.
  • Added project detail with customer associations, relation-aware deletion blockers and race-safe permanent deletion restricted to archived projects without retained relations.
  • Added the proposed Italian application-localization program for the Admin, Desktop renderer and Electron native surfaces.
  • Published Preview 0.1.0-preview.16 beside Electron after the clean-runner quality gate and deployed-backend rollout passed on macOS arm64, Linux x86_64 and Windows x86_64.
  • Bound Preview and Electron compliance collection to tenant inventory enablement, maximum software items and minimum check interval; added truthful screen-lock collection across the supported operating systems.
  • Bumped the Desktop source release boundary to 0.2.38 for the updater-first recovery bootstrap and the consolidated current worktree.
  • Split the Electron main process into an updater-first recovery bootstrap and a lazy application chunk, with automatic update installation when application startup fails.
  • Bumped the Desktop source release boundary to 0.2.37 for the completed Italian localization scope and Electron main-process packaging repair.
  • Bumped the Desktop source release boundary to 0.2.36 for the ClickHouse Agent Analytics path and expanded Admin localization slices.
  • Bumped the Desktop source release boundary to 0.2.32 for Agent Sessions analytics and the first complete Italian-localization vertical slice.
  • Renamed the Desktop Agent Capture surface to OpenTelemetry and replaced manual Enable/Disable controls with automatic detected-client state: operational, provisioning/repair, error or not installed.
  • Removed password/TOTP reauthentication, operational reason and desktop-user approval from direct user-level terminal create/attach; the backend now derives the allowlisted shell, unattended user policy and bounded lifetime.
  • Removed the dedicated Terminal tab from Remote access while retaining terminal-session history, audit and explicit termination.
  • Consolidated the Admin sidebar into ten task-oriented destinations and combined related views through URL-backed workspace tabs with compatibility redirects.
  • Replaced customer-detail single-project linking with searchable multi-project assignment, suggested editable customer codes and partial-failure recovery.
  • Reclassified completed implementation plans as implemented while preserving their named external verification evidence.
  • Bumped the preceding Desktop source release boundary to 0.2.31 for the consolidated Admin navigation and customer/project work.
  • Prevented disabled software inventory from being collected by updated clients or persisted/evaluated when submitted by older clients; server-side limits now derive from the submitted arrays rather than trusting a declared count.
  • Distinguished running report entries from stopped zero-duration entries using stoppedAt, preserving 0 in the table and CSV export instead of labeling the entry as running.
  • Bundled @monstaff/i18n into the Electron main process so the CommonJS runtime no longer attempts to load an ESM-only package export at startup.
  • Removed missing Admin catalog keys, fragment-based spacing/plural defects, untranslated machine labels and Italian report/operations copy defects found during the delegated Chrome editorial review; also prevented the mobile menu from overlapping page tabs.
  • Prevented orphaned local telemetry bridges on Desktop shutdown, added authenticated health checks and selected a free loopback port when the preferred port is already occupied.
  • Added merge-safe automatic Codex and Claude Code hook installation and repair while preserving unrelated client configuration.
  • Made terminal Stop hooks synchronous and bounded so Claude Code and Codex cannot cancel assistant-message export while exiting.
  • Added bootstrap ordering/recovery tests and a production-build invariant that rejects early application loading or application dependencies in the recovery entry.
  • Passed the full pnpm check gate plus OTLP/latest-revision isolation and a 100,000-row ClickHouse query/backup/delete/restore drill.
  • Verified the Developer-ID-signed bundle at /Applications/monstaff.app, authenticated bridge health, graceful child shutdown, real Codex/Claude Code lifecycle canaries and a fully drained export queue.
  • Verified exact USER and ASSISTANT canary rows through the authenticated production Admin API for both Claude Code 2.1.251 and Codex 0.151.0-alpha.7.2.
  • Passed 60 Backend, 8 Desktop and 21 Admin unit tests, 39 isolated integration tests with PostgreSQL restore equality, targeted lint/typechecks, Admin/Desktop production builds and knowledge lint across the consolidated worktree.
  • Published the normalized ClickHouse Agent Analytics path and expanded Admin localization boundary as the current public Desktop release, superseding v0.2.35.
  • Passed the complete v0.2.36 release workflow across macOS arm64, Windows and Linux x86_64, including GitHub Release creation and MinIO publication.
  • Verified version 0.2.36 in every production updater manifest and HTTP 206 from the exact Windows installer object declared by latest.yml.
  • Published the accumulated Desktop 0.2.32 source boundary as v0.2.35, advancing installed clients from the previous public v0.2.29 release.
  • Built @monstaff/i18n before every platform release and draft Desktop build so clean checkouts can resolve the shared localization package.
  • Standardized the Windows NSIS artifact as MonStaff-Setup-${version}.exe, keeping the generic updater manifest, GitHub asset and MinIO object name aligned.
  • Passed the complete v0.2.35 release workflow across macOS arm64, Windows and Linux x86_64, including Developer ID signing, successful Apple notarization, GitHub Release creation and MinIO update publication.
  • Verified that all three production update manifests return 0.2.35 and that the exact Windows installer URL declared by latest.yml returns HTTP 206 instead of 404.
  • Added an Electron-owned automatic monstaff-agent lifecycle with persistent per-installation client enablement, bounded recovery and grant renewal.
  • Added concurrent Codex, Claude Code and Pi capture through one local encrypted bridge, with a distinct backend grant and isolated export batch for every client kind.
  • Added proposed governance plans for developer-monitoring disclosure/lawful use and idle-aware exact-byte screenshot deduplication without claiming those programs implemented.
  • Bundled the standalone agent CLI in every Desktop artifact instead of assuming monstaff-agent exists on the user’s PATH.
  • Changed Agent Capture controls from one manually started client to independent per-client automatic enablement.
  • Changed the deployed Admin sidebar to show the numeric MonStaff x.x.x release version instead of the short commit image tag, while retaining the full commit and build time in the tooltip.
  • Allowed the configured public screenshot origin in the Admin image CSP and added a deployment regression check.
  • Made release and draft workflows build the bundled agent CLI before Electron packaging.
  • Passed Agent CLI/Desktop unit tests, shared and CLI builds, Desktop typecheck/build, knowledge lint and a local Developer-ID-signed macOS arm64 packaged-CLI health canary; remote platform publication remains the release-workflow gate.
  • Added Electron screenshot date presets, custom intervals, page-scoped selection and confirmed bulk deletion with partial-failure reporting.
  • Added the proposed DMO0–DMO9 desktop-monitoring OpenTelemetry projection plan while retaining REST, PostgreSQL and object storage as canonical authorities.
  • Added the proposed SC0–SC10 attended screen-sharing and separately consented graphical-control plan, explicitly excluding every calling capability.
  • Added Admin sidebar deployment identity backed by the image tag, full commit and UTC build time.
  • Consolidated the previously untagged 0.2.26 source and the complete current worktree into the 0.2.27 release boundary.
  • Replaced vulnerable Report Renderer xlsx@0.18.5 with official SheetJS CE 0.20.3, clearing the production dependency audit while retaining spreadsheet-rendering coverage.
  • Passed the complete local and remote quality gates. GitHub Actions built and published macOS arm64, Windows x64 and Linux x86_64 artifacts, created the public GitHub Release, synchronized the MinIO update bucket and completed the same-commit deployment; the macOS artifact is Developer-ID signed and notarized.
  • Added durable agent telemetry/accounting, customer engagements and custom report-model delivery workstreams.
  • Added standardized remote-query tables, Admin/Desktop operational surfaces, report rendering and telemetry recovery tooling.
  • Added managed AI Pack pause/resume/revoke/retire controls and fail-closed desktop removal.
  • Advanced every repository-local active-plan workstream to its maximum verified state and synchronized the canonical knowledge bundle.
  • Bumped the desktop release candidate to 0.2.26; signed publication and production canaries remain separate external gates.
  • Passed all workspace checks/builds, 83 unit tests with one intentional skip, 39 integration tests, representative capacity fixtures and PostgreSQL restore verification.
  • Passed dead-code, configuration, OpenTofu, knowledge and diff-consistency gates plus real local renderer and ClickHouse recovery canaries.
  • Aligned Electron project work-item selection with the Admin task population by exposing assigned-open and project-open scopes, including unassigned open tasks in the timer selector.
  • Added canonical lifecycle-state filtering to project work-item queries and protected paginated desktop loads from stale responses and mixed-version rollout behavior.
  • Reloaded the Admin Tasks table immediately when its project changes instead of retaining rows from the previous project until manual refresh.
  • Made the Electron dashboard project selector search-first, keyboard navigable and accessible, with fixed search, scrollable results and explicit current-project state.
  • Passed workspace typechecks, ESLint, 38 backend unit tests, 5 desktop unit tests, knowledge lint and production builds for Electron and Admin.
  • Added provider-independent local authentication, grant-backed tenancy, native projects/work items and optional first-class GitHub integration boundaries.
  • Added the shared signed desktop-installation platform for Device Compliance, managed Local AI packs and Remote Actions with a Redis-backed terminal relay.
  • Added durable Hubstaff detailed/daily history import with incremental reconciliation and checksum-addressed CSV fallback.
  • Replaced the accumulated migration chain with the coordinated pre-production greenfield schema baseline.
  • Corrected CTO delivery metrics for inclusive UTC ranges, project-local workflows, complete-week rates, explicit quality populations, flow percentiles and honest forecast withholding.
  • Passed clean migration/seed, 34 unit tests, 23 integration tests, all workspace checks and builds, knowledge/dead-code/configuration/infrastructure gates, and local macOS arm64 packaging.
  • Made the root development environment file optional for database seeding so clean CI runners use their exported integration environment without requiring a repository-local .env.
  • Retained explicit external gates for authorized provider canaries, signed platform artifacts, independent review, representative load/restore evidence and staged deployment.
  • Added centralized tenant/resource authorization, current-session role checks, PKCE login with one-time callback exchange, refresh-token rotation/reuse detection and transactional membership reconciliation.
  • Hardened screenshot/object ownership, desktop navigation/custom protocol handling, privacy defaults and security headers.
  • Added durable import/synchronization jobs, idempotent retriable writes, single-running-timer database enforcement, encrypted desktop retry and bounded outbound/upload operations.
  • Added liveness/readiness, structured metrics, graceful shutdown, backup/restore automation, hardened Kubernetes resources and dedicated migration deployment.
  • Added unit/integration/security tests, real lint/typecheck/build/audit/dead-code/configuration/OpenTofu/knowledge gates and blocking release/deploy quality workflows.
  • Upgraded supported runtime/tooling dependencies and removed duplicate/dead source paths.
  • Provisioned the Linux X11 development libraries required to rebuild the desktop native input module in clean CI and release runners.
  • Made Prisma Client generation explicit in the clean-checkout quality gate.
  • Made GKE manifest validation hermetic by rendering against temporary placeholder secrets instead of a developer-local ignored overlay.
  • Added signed OpenTofu provider checksums for macOS ARM, Linux AMD64 and Windows AMD64, and allowed the documentation renderer to preserve non-empty OKF lifecycle states.
  • Set a filesystem-safe desktop executable name for AppImage and native packaging instead of deriving it from the scoped npm package name.

The .env.example finding is explicitly excluded from this remediation and remains open.

  • Configure S3 public endpoint to https://s3.monstaff.io (by Fulvio Cazzanti, 2026-02-17 09:14, 0f7e52b)
  • Enable CORS on MinIO for browser uploads (by Fulvio Cazzanti, 2026-02-17 09:14, 0f7e52b)
  • Enable AI debug panel in release builds (by Fulvio Cazzanti, 2026-02-17 12:43, f73e247)
  • Add missing K8s patches for S3 public endpoint and MinIO CORS configuration to fix deployment issues (by Fulvio Cazzanti, 2026-02-17 09:14, 0f7e52b)
  • Server-side stale timer cleanup with heartbeat tracking and auto-stop for abandoned entries (by Claude, 2026-02-16 16:28, 358fd32)
  • Idle detection with keep/discard/stop dialog when user goes idle (by Fulvio Cazzanti, 2026-02-16 14:38, 2ba9fc5)
  • Test capture button on Screenshots page for manual screenshot capture and permission diagnostics (by Fulvio Cazzanti, 2026-02-16 12:29, 731b395; Fulvio Cazzanti, 2026-02-16 12:26, 2ba9fc5)
  • Time entry duration adjustment endpoint for idle time subtraction (by Fulvio Cazzanti, 2026-02-16 14:38, 2ba9fc5)
  • Desktop UI redesign with dark mode support and theme system (by Fulvio Cazzanti, 2026-02-16 09:21, dfbf223)
  • Issue sidebar and improved project/repo/issue selectors (by Fulvio Cazzanti, 2026-02-16 09:21, dfbf223)
  • Issues endpoint to backend (by Fulvio Cazzanti, 2026-02-16 09:21, dfbf223)
  • MinIO S3 endpoint exposed on s3.monstaff.io for direct uploads bypassing Cloudflare 100MB limit (by Fulvio Cazzanti, 2026-02-16 15:16, 4f8995f; Fulvio Cazzanti, 2026-02-16 14:49, 7e90c21)
  • Migrate infrastructure to OpenTofu with Cloudflare provider v4→v5 and Google provider v5→v7 (by Fulvio Cazzanti, 2026-02-16 15:16, 4f8995f)
  • Migrate DNS state from cloudflare_record to cloudflare_dns_record (by Fulvio Cazzanti, 2026-02-16 15:16, 4f8995f)
  • Upload release artifacts directly to MinIO instead of through Cloudflare (by Fulvio Cazzanti, 2026-02-16 12:42, 33f5428)
  • Update dashboard, settings, time entries, and screenshots pages with new design (by Fulvio Cazzanti, 2026-02-16 09:21, dfbf223)
  • Load .env from monorepo root for Prisma CLI scripts using dotenv-cli (by Fulvio Cazzanti, 2026-02-16 18:16, db0d87c)
  • Use HTTP for MinIO S3 endpoint instead of HTTPS (by Fulvio Cazzanti, 2026-02-16 16:13, 956a2ff)
  • Remove GCP managed certificate as TLS is handled by Cloudflare proxy (by Fulvio Cazzanti, 2026-02-16 16:12, e92af45)
  • Include managed-cert in kustomization and link to ingress (by Fulvio Cazzanti, 2026-02-16 15:30, d4cf4f1)
  • Skip MinIO upload step when S3 secrets are not configured (by Fulvio Cazzanti, 2026-02-16 14:46, 734581f)
  • Light mode colors across all UI components with dark: prefix support (by Fulvio Cazzanti, 2026-02-16 14:38, 2ba9fc5)
  • Redirect to dashboard after login instead of staying on /login page (by Fulvio Cazzanti, 2026-02-16 12:26, 2949ba8)
  • Trust OS-level screen recording status and remove unreliable capture test to prevent infinite restart loop (by Fulvio Cazzanti, 2026-02-16 12:16, 8bbf5b9)
  • Show correct Screen Recording status when permission granted but restart needed (by Fulvio Cazzanti, 2026-02-16 12:03, 324e765)
  • Add api.monstaff.io to CSP connect-src for production builds (by Fulvio Cazzanti, 2026-02-16 11:44, 440cdef)
  • Remove unused imports in admin.controller.ts after split (by Fulvio Cazzanti, 2026-02-16 06:35, 803ee08)
  • Add Content Security Policy to Electron app to restrict script, style, image, and connection origins (by Fulvio Cazzanti, 2026-02-15 09:35, ae9b174; Fulvio Cazzanti, 2026-02-15 09:36, 41df6dc)
  • Add rate limiting on sensitive endpoints: 20 req/min on /auth/, 10 req/min on /ai/, 100 req/min global default (by Fulvio Cazzanti, 2026-02-15 09:36, 2e87bb3)
  • Add access control checks to issues and projects controllers (by fulviocazzanti, 2026-02-15 10:26, 544e1bb; fulviocazzanti, 2026-02-15 10:26, c375d67)
  • Add missing database indexes for IssueTransition, TimeEntry, and Issue tables to optimize queries (by Fulvio Cazzanti, 2026-02-15 09:40, 7048782)
  • Add missing tray IPC listeners (sign-out, navigate) and align ElectronAPI types (by Fulvio Cazzanti, 2026-02-15 10:03, 64eceb4)
  • Add global crash recovery handlers for uncaughtException and unhandledRejection (by Fulvio Cazzanti, 2026-02-15 09:48, bc4e4ea)
  • Add idle:resumed event and debounce idle notifications to prevent spam (by Fulvio Cazzanti, 2026-02-15 09:46, 14362df)
  • Add shared utility modules: date-utils, pagination, and github-types to eliminate code duplication (by Fulvio Cazzanti, 2026-02-15 10:05, e17b980)
  • Add TypeScript project references from backend and admin to shared package (by Fulvio Cazzanti, 2026-02-15 10:12, c9f4538)
  • Replace silent error swallowing with structured logging in sync.service.ts and ai.service.ts (by Fulvio Cazzanti, 2026-02-15 09:54, 8f0c76f)
  • Replace chart.js/auto with selective imports via centralized chart-setup.ts (by Fulvio Cazzanti, 2026-02-15 10:10, cf2fa90)
  • Replace manual 404 responses with NotFoundError and standardize API response format to { data } (by Fulvio Cazzanti, 2026-02-15 10:16, ec8962a)
  • Replace duplicated utility functions with shared lib imports across 8 files (by Fulvio Cazzanti, 2026-02-15 10:12, e8c6322)
  • Replace magic numbers with shared constants: PRESIGNED_URL_EXPIRY_SEC, DEFAULT_DATE_RANGE_DAYS, DEFAULT_DELIVERY_RANGE_DAYS, DEFAULT_AI_INFERENCE_INTERVAL_SEC (by Fulvio Cazzanti, 2026-02-15 10:05, aa547a0)
  • Replace all untyped window.electronAPI usages with typed ElectronAPI wrapper (by Fulvio Cazzanti, 2026-02-15 09:52, a3f71a9)
  • Replace direct BrowserWindow references with getMainWindow() getter to prevent stale references (by Fulvio Cazzanti, 2026-02-15 09:41, da7c868)
  • Replace admin local types with @monstaff/shared imports (392 lines moved to shared package) (by Fulvio Cazzanti, 2026-02-15 09:36, 056a584; Fulvio Cazzanti, 2026-02-15 09:36, 96e2860)
  • Replace JavaScript reduce loops with Prisma aggregate/groupBy to fix N+1 queries (by Fulvio Cazzanti, 2026-02-15 09:37, be422eb)
  • Replace process.exit(1) in loadEnv() with thrown Error for better error propagation (by Fulvio Cazzanti, 2026-02-15 10:18, 88b7680)
  • Restrict CORS origin to configured ADMIN_URL in production (by Fulvio Cazzanti, 2026-02-15 09:34, 65c437d)
  • Enable Electron sandbox and explicit security webPreferences (by fulviocazzanti, 2026-02-15 10:26, ff80001)
  • Centralize admin auth error handling in API client with global onAuthError interceptor (by Fulvio Cazzanti, 2026-02-15 09:41, bd5a31e)
  • Update screenshot delete order: DB first, S3 second to prevent orphan records (by Fulvio Cazzanti, 2026-02-15 10:16, ec8962a)
  • Tighten shared types with literal unions for AiAutoSwitchMode and AiProvider (by Fulvio Cazzanti, 2026-02-15 10:12, c9f4538)
  • Update CLAUDE.md to reflect admin is React, not Svelte, and add Admin Structure section (by Fulvio Cazzanti, 2026-02-15 10:14, baeedf9)
  • Split activity-tracker.ts (863 lines) into focused modules: input-tracker, app-usage-poller, browser-tab-collector, dev-process-detector, ai-project-suggester (by Fulvio Cazzanti, 2026-02-15 09:44, dc2b55a)
  • Split AdminService (935 lines) into OrgUsersService, OrgAnalyticsService, StoryPointsService, and reduced AdminService (by Fulvio Cazzanti, 2026-02-15 09:44, 99a4c1c)
  • Split admin controller (477 lines) into admin-analytics, admin-ai, admin-sync, and admin controllers (by Fulvio Cazzanti, 2026-02-15 09:47, 1672ef2; Fulvio Cazzanti, 2026-02-15 09:47, cc6430e)
  • Split Settings.tsx (1317 lines) into 5 focused components: MonitoringSettings, AiSettings, WorkflowSettings, OrganizationsSettings, GitHubSyncSettings (by Fulvio Cazzanti, 2026-02-15 09:49, 4a6b11f)
  • Split timerStore (625 lines) into screenshot-manager, tray-data-manager, ai-suggestion modules (by Fulvio Cazzanti, 2026-02-15 09:59, fc4d021)
  • Extract OrganizationService from organizations controller (218 lines to ~50 lines) (by Fulvio Cazzanti, 2026-02-15 09:51, a1f6cda)
  • Extract duplicated UI components: LoadingSpinner, ErrorBanner, and formatDuration utility (by Fulvio Cazzanti, 2026-02-15 09:55, 0ead259; Fulvio Cazzanti, 2026-02-15 09:55, b3f5166)
  • Inline S3 client creation into s3.plugin.ts, removing redundant config/s3.ts singleton (by Fulvio Cazzanti, 2026-02-15 10:18, 88b7680)
  • Optimize screenshot IPC to use temp files instead of base64 encoding (~33% less memory) (by Fulvio Cazzanti, 2026-02-15 09:59, fc4d021)
  • Add React.lazy() code splitting for admin pages with Suspense fallback (by Fulvio Cazzanti, 2026-02-15 10:08, 5f11a8f)
  • Use parallel Promise.all for independent queries in admin service (by Fulvio Cazzanti, 2026-02-15 09:37, be422eb)
  • Fix screenshot delete order to prevent orphan records if S3 fails (by Fulvio Cazzanti, 2026-02-15 10:16, ec8962a)
  • Fix loginWithGitHub signature and CaptureResult.buffer type in ElectronAPI (by Fulvio Cazzanti, 2026-02-15 10:03, 64eceb4)
  • Fix electron-store error handling with clearInvalidConfig:true for corrupted config files (by Fulvio Cazzanti, 2026-02-15 09:48, bc4e4ea)
  • Validate URL protocol before shell.openExternal to prevent dangerous schemes (by Fulvio Cazzanti, 2026-02-15 09:37, 3941272)
  • Use AppError(502) instead of generic Error for GitHub token exchange failures (by Fulvio Cazzanti, 2026-02-15 09:54, 8f0c76f)
  • Throw NotFoundError instead of returning 200 with error body for missing user on GET /me (by Fulvio Cazzanti, 2026-02-15 09:54, 8f0c76f)
  • Enforce MAX_PAGE_SIZE on pagination query params in admin and github controllers (by Fulvio Cazzanti, 2026-02-15 10:16, ec8962a)
  • Add Content Security Policy to restrict script, style, image, and connection origins (by Fulvio Cazzanti, 2026-02-15 09:35, ae9b174; Fulvio Cazzanti, 2026-02-15 09:36, 41df6dc)
  • Add rate limiting on sensitive auth and AI endpoints (by Fulvio Cazzanti, 2026-02-15 09:36, 2e87bb3)
  • Add access control checks to issues and projects controllers (by fulviocazzanti, 2026-02-15 10:26, 544e1bb; fulviocazzanti, 2026-02-15 10:26, c375d67)
  • Validate URL protocol before shell.openExternal to prevent file:// and javascript: schemes (by Fulvio Cazzanti, 2026-02-15 09:37, 3941272)
  • Restrict CORS origin to configured ADMIN_URL in production (by Fulvio Cazzanti, 2026-02-15 09:34, 65c437d)
  • Enable Electron sandbox and explicit security webPreferences (by fulviocazzanti, 2026-02-15 10:26, ff80001)
  • Configure S3 public endpoint to https://s3.monstaff.io (by Fulvio Cazzanti, 2026-02-17 09:14, 0f7e52b)
  • Enable CORS on MinIO for browser uploads (by Fulvio Cazzanti, 2026-02-17 09:14, 0f7e52b)
  • Enable AI debug panel in release builds (by Fulvio Cazzanti, 2026-02-17 12:43, f73e247)
  • Add missing K8s patches for S3 public endpoint and MinIO CORS configuration (by Fulvio Cazzanti, 2026-02-17 09:14, 0f7e52b)
  1. Desktop 0.3.43 four-platform publication and public verification. ↩

  2. Four-platform publication and CLI manifest version repair. ↩ ↩2

  3. Windows CRLF version detection and release fail-fast repair. ↩ ↩2

  4. Four-platform native gate repair for desktop 0.3.41. ↩ ↩2

  5. Four-platform desktop release restoration. ↩

  6. Desktop 0.3.28 combined WIP release preparation ↩

  7. Signed macOS automatic update verified end to end. ↩

  8. Desktop 0.3.33 publication. ↩

  9. Desktop 0.3.31 integration races and 0.3.32 correction. ↩ ↩2

  10. Desktop 0.3.32 publication and GKE deployment. ↩

  11. MonStaff 0.3.31 release preparation. ↩

  12. Desktop 0.3.27 publication and GKE deployment. ↩

  13. Desktop 0.3.26 release preparation ↩ ↩2

  14. Desktop 0.3.26 publication and GKE deployment ↩

  15. Desktop 0.3.25 release preparation. ↩

  16. Desktop agent telemetry active-session filter. ↩

  17. Desktop 0.3.24 publication and GKE deployment. ↩

  18. Desktop 0.3.23 packaged protocol qualification and 0.3.24 correction. ↩

  19. Desktop 0.3.22 Clippy failure and 0.3.23 correction. ↩

  20. Desktop 0.3.22 combined WIP release preparation. ↩

  21. Agent live persistence 0.3.17 release preparation ↩

  22. Agent live statistics restart persistence ↩

  23. Desktop 0.3.17 CI lint failure and 0.3.18 correction ↩

  24. Admin repository bindings card and attribution source labels implementation. ↩ ↩2

  25. Agent repository binding resolution implementation. ↩

  26. Agent telemetry desktop live statistics implementation. ↩

  27. Agent telemetry desktop inter-turn wait day sum implementation. ↩

  28. Desktop agent bridge card moved to the Setup page ↩

  29. Desktop quit stops the timer and shuts the Core down ↩

  30. Automatic desktop promotion after a successful tagged release ↩

  31. Release-dispatched desktop promotion. ↩

  32. Desktop 0.3.19 local install and session restore failure ↩

  33. Session restore refresh 0.3.20 release preparation ↩

  34. Desktop 0.3.20 Quality failure on the midnight-dependent live-card test ↩ ↩2

  35. Desktop 0.3.21 publication and session restore verification ↩ ↩2

  36. Live-card test clock 0.3.21 release preparation ↩

  37. Desktop live agent card field test with real Claude Code and Codex sessions ↩ ↩2

  38. Open turns bound closed waits and Codex shell client detection ↩ ↩2

  39. Agent live anomalies 0.3.19 release preparation ↩

  40. Codex hook trust-hash audit and version-free hook command. ↩

  41. MonStaff desktop 0.3.0 publication evidence ↩