Ctrl K
ComunidadGuías…

CHANGELOG.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Changelog

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

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.1.0-beta.30] - 2026-10-24

> Microsoft Store maintenance candidate for `1.1.30.0`. Protected source build,
> native qualification, certification and publication remain separate gates.

### Fixed

- Recover native startup from a stale PWA Service Worker cache without clearing
  saved connection profiles or host-key trust; retain browser offline support.
- Update both Rust lockfiles to `crypto-bigint 0.7.6` for
  RUSTSEC-2026-0387's constant-time arithmetic fixes.
- Patch Happy DOM and Puppeteer/Zod v4 tooling dependencies; backport Zod's
  oversized-collection early rejection to Expo CLI's v3 API with pinned source,
  original-identity audits and separate exact advisory verification.
- Preserve terminal sizing and forwarding lifetimes across workspace changes,
  reject duplicate starts, and bound editable PTY input before dispatch.
- Validate release artifact paths, dependency audit reports and vendored source
  identity before accepting release evidence.
- Update the compatible Vite, Vitest, nanoid, ctutils and Tokio dependencies.
  Backport the public node-forge RSA verification fix for Node build tooling,
  retaining the original registry identity and strict checks for other findings.
- Close manually created E2E browser contexts on failure and retain failure
  traces without reducing assertions, timeouts or retry requirements.

### Changed

- Advance application metadata to `0.1.0-beta.30` / MSIX `1.1.30.0` for new
  immutable package bytes. Earlier candidate artifacts and evidence stay historical.

## [0.1.0-beta.29] - 2026-09-24

> Store reissue candidate for `1.1.29.0`. Microsoft Store rejects changed
> bytes under the already used `1.1.28.0` package full name, so this candidate
> advances the deterministic package version while preserving the beta.28
> behavior and verification boundaries.

### Changed

- Advance every application and runtime version surface to
  `0.1.0-beta.29`, mapped to MSIX `1.1.29.0`, so Submission 8 can accept the
  corrected package as a new immutable package identity.

## [0.1.0-beta.28] - 2026-09-16

> Corrective Microsoft Store maintenance candidate for `1.1.28.0`; Store submission and certification remain pending.

### Fixed

- Keep built-in sample hosts out of real connection onboarding and preserve a user's explicit Quick Connect target, including sample-address collisions.
- Discard late host-key probe results after Connect closes and preserve invalid explicit ports for validation.
- Serialize SFTP transfers per session, require a complete listing before overwrite checks, and keep file pickers bound to their original session and path.
- Preserve PTY exit status reported after SSH EOF and treat transport loss, signal termination, or missing status as failure.
- Keep inactive terminal transcripts scrollable and searchable without resetting their reading position.
- Add Store release E2E coverage and exact Store-surface hash protection for these onboarding boundaries.

## [0.1.0-beta.27] - 2026-09-11

> Microsoft Store maintenance candidate for `1.1.27.0`, following the verified
> published `1.1.26.0` package. Source preparation is not Store publication.

### Fixed

- Preserve live terminals, SFTP state, and forwards across tab switches and
  unrelated connections; bind prepared input and uploads to their original
  active connection, and retain the actual connected target after config edits.
- Bound SSH establishment with one deadline, isolate each PTY's input and
  cleanup, and handle early/late output events with consumption backpressure.
- Coordinate known-hosts writes and revocation across processes without changing
  the main JSON format; add an explicit, tested metadata recovery tool.
- Patch xmldom and js-yaml dependencies; replace yanked `der 0.8.0` and
  `wnaf 0.14.0` with `0.8.2` and `0.14.1`. Report failed audit details in CI.
- Update the Vitest test-tool packages to `4.1.11` to fix development-server
  redirect-mock file disclosure, and explicitly declare the root test runner.

### Changed

- Advance application version metadata to `0.1.0-beta.27` / MSIX `1.1.27.0`.
  No separate Web, Sync, or Mobile distribution is included.
- Add lifecycle and failure-path regression coverage while preserving the
  existing 95% coverage and strict online audit gates.

## [0.1.0-beta.26] - 2026-09-02

> Replacement Microsoft Store maintenance candidate. The beta.25
> `1.1.25.0` qualification run ended with a required WACK Requirement 26,
> TEST 92 `DPIAwarenessValidation` warning. That package and its evidence are
> immutable, superseded, and ineligible for submission or reuse. This entry is
> not evidence that `1.1.26.0` has been built, certified, or published.

### Fixed

- Bypass `tauri-winres` inline-manifest serialization and let Windows Resource
  Compiler embed the reviewed UTF-8 application manifest bytes directly as the
  sole `RT_MANIFEST` resource at ID 1, removing the strict-parser risk created
  by beta.25's leading whitespace. A clean full WACK rerun is still required to
  confirm that the Sandbox warning is gone.
- Add a raw PE resource gate that requires exactly one `RT_MANIFEST/#1`
  en-US resource, rejects a BOM or leading byte, and proves byte-for-byte
  equality with the reviewed source manifest before and after the MSIX
  pack/unpack round trip.

### Changed

- Advance every application and runtime version surface to
  `0.1.0-beta.26`, mapped to MSIX `1.1.26.0`, without changing the historical
  beta.25 changelog or release notes.

## [0.1.0-beta.25] - 2026-08-31

> Replacement Microsoft Store maintenance candidate. The beta.23 and beta.24
> qualification evidence remains immutable, and neither package may be
> submitted or reused. This entry is not evidence that `1.1.25.0` has been
> built, certified, or published.

### Fixed

- Remove the unused Windows self-relaunch path from the Store desktop build
  through a checksum-bound Tauri compatibility patch, eliminating its process
  launch imports without changing normal startup or shutdown behavior.
- Give the embedded Windows application manifest a valid definition identity
  and validate both compiled and packaged manifests with the same Windows SDK
  manifest tool used by the build.
- Reject downloaded or decoded content piped into any remote program, while
  keeping unrelated commands outside the same pipeline valid.
- Replace Expo Router's vulnerable URI decoder with the official linear-time
  `0.5.0` implementation through a checksum-bound CommonJS compatibility
  entry, preserving deep-link and query-string behavior.

### Changed

- Advance every application and runtime version surface to
  `0.1.0-beta.25`, mapped to MSIX `1.1.25.0`, without changing historical
  beta.23 or beta.24 records.
- Bind the vendored Tauri source, exact upstream archive, compatibility patch,
  licenses, and advisory identity into the existing fail-closed supply-chain
  checks.

## [0.1.0-beta.24] - 2026-08-31

> Replacement Microsoft Store maintenance candidate. The rejected local
> `1.1.23.0` qualification attempt and its evidence remain immutable and must
> not be submitted or reused. This entry is not evidence that `1.1.24.0` has
> been built, certified, or published.

### Fixed

- Remove the obsolete Windows App Runtime package dependency from the MSIX
  manifest while retaining the app's actual WebView2 bootstrap contract.
- Preserve exact MSIX bytes across the source-build artifact transfer path and
  keep Rust tool diagnostics out of executable-path discovery.
- Embed a Windows application manifest that preserves Common Controls v6 and
  declares Per-Monitor V2 DPI awareness for WACK and high-DPI operation.

### Changed

- Advance application and runtime version metadata to `0.1.0-beta.24`, mapped
  to MSIX `1.1.24.0`, without changing historical beta.23 records.
- Bind the native build script and Windows application manifest into Store
  source provenance so either input changing during a build fails closed.

## [0.1.0-beta.23] - 2026-08-30

> Maintenance version prepared for a separate Microsoft Store update. This entry
> is not evidence that the new binary has been built, certified, or published.
> The intended GitHub prerelease remains source-only with zero uploaded assets.

### Fixed

- Stop active connections and pending dials when a local port forward closes.
- Preserve SSH exit status after output EOF, and reject command termination
  without a reported status or with an exit signal.
- Preserve leading and trailing spaces in valid remote SFTP entry names while
  continuing to reject blank paths and control characters.
- Remediate dependency findings, verify the official GLib backport by content,
  and require complete online RustSec and yanked checks for both Rust lockfiles
  and the vendored package's original registry identity.
- Isolate Windows Authenticode checks from inherited PowerShell modules and
  compare Git worktree identities correctly across Windows 8.3 path aliases.

### Changed

- Advance application and runtime version metadata to `0.1.0-beta.23`, mapped
  to MSIX `1.1.23.0`; keep beta.20, beta.21, and beta.22 release records intact.
- Put the free Microsoft Store install and first-connection guide near the
  beginning of the README.
- Enabled GitHub's Sponsor button with the repository-owned voluntary-support
  notice as its only custom destination. The link remains separate from product
  checkout and does not claim payment-recipient, small-payment, or payout
  verification; the public warning and both QR asset hashes are CI-locked.

## [0.1.0-beta.22] - 2026-08-11

> Microsoft Store package-language correction. The GitHub prerelease remains
> source-only with zero uploaded assets.

### Fixed

- Bound the MSIX manifest language list to the 15 complete application UI
  locales instead of allowing MSIX Packaging Tool's `en-us` default to reach
  Partner Center unchanged.
- Added a MakeAppx finalization step that proves every non-manifest payload file
  remains byte-identical and rejects a Store candidate with missing, duplicate,
  invalid, or unreviewed package languages.
- Changed unknown system-locale fallback to English while preserving all 15
  explicit language choices.

### Changed

- Advanced runtime and package version surfaces to `0.1.0-beta.22`, mapped to
  Store package version `1.1.22.0`.
- Kept the 80 localized Store listings separate from package UI support: all 80
  may remain discoverable, but only the 15 complete UI locales are declared by
  the package.

## [0.1.0-beta.21] - 2026-08-09

> Microsoft Store replacement candidate. The GitHub `0.1.0-beta.20`
> prerelease remains permanently source-only and unchanged.

### Changed

- Advanced every runtime and package version surface to a distinct Store
  candidate that maps to MSIX version `1.1.21.0`.
- Aligned Mobile Vitest and coverage tooling at `4.1.9` so a clean npm install
  no longer resolves an invalid mixed test-runner pair.
- Require the Store handoff to bind the final protected-main source revision,
  exact Partner Center package identity, and generated MSIX hash instead of
  reusing the older `1.1.12.0` submission as evidence for current code.

### Security

- Preserved the automated accessibility fixes and the explicit no-formal-
  conformance boundary; no paid service, EAA conformance, or manual device
  review claim is introduced by this candidate.

## [0.1.0-beta.20] - 2026-08-09

> Final source-only GitHub prerelease for the current maintenance closeout.
> Public Desktop installers remain blocked on external signing and notarization
> evidence.

### Fixed

- Made the horizontally scrollable Desktop inspector keyboard-focusable at the
  supported 900 × 480 minimum viewport.
- Changed Desktop and Web Admin Axe gates to reject every tested WCAG A/AA
  violation instead of filtering by severity, and locked the minimum viewport
  into the accessibility-readiness contract.
- Removed the Web build's extensionless config import before Vite switches its
  native config loader to the future default.

### Added

- Recorded a bounded agent-assisted accessibility review with explicit
  screen-reader, physical-device, and representative-user limitations.
- Made future paid releases fail closed until EU consumer-market and EAA/local
  accessibility applicability are explicitly reassessed.

## [0.1.0-beta.19] - 2026-08-09

> Source-only GitHub prerelease. Public Desktop installers remain blocked on
> external signing and notarization evidence.

### Fixed

- Normalized Markdown whitespace while validating source-release boundaries and
  bound the release contract test to the repository's actual versioned notes.

## [0.1.0-beta.18] - 2026-08-09

> Remote tag-only preflight checkpoint. Its dry run failed before any GitHub
> Release or release asset was created. The tag remains immutable and must not
> receive a Release page or be reused.

### Added

- An EAA-oriented accessibility assessment status, safe barrier-reporting
  form, and WCAG 2.2 target-size and focus-not-obscured release checks without
  making an unverified conformance claim.
- A production UI system across Desktop, Mobile, and Web Admin with responsive
  light/dark themes, accessibility coverage, Windows scaling checks, and
  visual-regression baselines.
- A commit-bound Windows invite pipeline for private Stage A dogfood, including
  immutable handoff evidence and clean-VM promotion checks.
- Separate Microsoft Store NSIS EXE and external-MSIX candidate contracts that
  fail closed on signing, publisher identity, hashes, silent installation, and
  Store-certification claims.
- A built-product Microsoft Store runtime gate that exercises narrow-window,
  light/dark, shortcut, command-palette, hidden-surface, and overflow behavior
  with Playwright in CI and the formal hosted verifier.
- A resumable three-step Desktop first-use guide covering local profile
  creation, explicit host-key verification in Connect, and entry points for
  Terminal, SFTP, and loopback-only forwarding; Help can reopen it at any time.
- An 80-locale Microsoft Store discoverability draft backed by the 15 shipped
  application UI locales; Store listing locales that share a UI pack are kept
  distinct from the app's actual translation coverage.
- Support, privacy, refund, sale, trademark, third-party notice, pricing, and
  funding drafts that keep all unverified seller and checkout data blocked.
- A bilingual voluntary-support page with maintainer-supplied Weixin Pay and
  Alipay QR codes, explicit non-purchase/privacy safeguards, and a fail-closed
  GitHub Sponsor button pending live recipient, payment, platform-rules, and
  payout verification.
- A read-only remote release-control audit for repository visibility, protected
  `main`, vulnerability reporting, release environments, Actions artifacts,
  caches, and externally confirmed billing readiness.
- A redacted full-history Gitleaks gate with exact historical fixture
  fingerprints and tests that reject broader rule or ignore configuration.

### Fixed

- Sync now rejects future base cursors without mutation, records unique device
  registration audit IDs, keeps Mobile response-body reads under the request
  timeout, and reports malformed JSON without echoing response content.
- The dependency audit now limits the temporary `image-size` exception to the
  exact non-public Mobile Expo/Metro graph, while the `nanoid` override resolves
  its high-severity advisory.
- Cross-platform dependency-lock portability, Desktop async interaction races,
  SFTP path and transfer safety, PTY lifecycle behavior, forwarding cleanup,
  Mobile sync behavior, Web Admin localization, and responsive UI states.
- Public vulnerability disclosure links, workflow secret scope, dependency
  auto-merge boundaries, and high-privilege workflow permissions.
- Windows Store automation is now hosted-verification-only: externally produced
  EXE/MSIX bytes require a URL and SHA-256, while build signing, OIDC,
  self-hosted runners, local handoffs, and signing secrets stay outside the
  workflow.

### Changed

- Froze speculative feature development after this closeout; maintenance,
  security, compatibility, accessibility barriers, and bounded community
  contributions continue until documented external-demand thresholds are met.
- Rolled the candidate forward without moving the existing
  `v0.1.0-beta.9` tag.
- Made Windows Desktop the first adoption and revenue-validation lane while
  keeping Community functionality MIT-licensed and keeping paid, hosted, and
  unsupported-platform promises unavailable until their evidence gates pass.
- Prefer a time-boxed Microsoft Store MSIX feasibility spike for the free
  Community build, with public-CA-signed Tauri NSIS retained as the fallback.
- Pinned CI actions to reviewed commit SHAs and disabled persisted checkout
  credentials.

## [0.1.0-beta.9] - 2026-06-23

### Added

- Public Beta dogfood evidence template and verifier covering the top Desktop,
  Web Admin, Sync, rollback, and release-evidence review tasks without allowing
  open P0/P1 findings.
- Internal-only unsigned Desktop staging handoff report that records artifact
  path, SHA256, Git ref, and Windows Authenticode status while keeping unsigned
  builds out of `reports/release`.
- Repository release handoff playbook for moving reviewed work from a damaged
  `.git` planning workspace into a healthy checkout before Public Beta tagging,
  checksums, SBOM generation, or GitHub Release drafting.
- Web Admin proxy public-bind operator authentication guard so non-loopback
  proxy deployments fail closed unless a distinct inbound operator token is
  configured and verified before the upstream admin token is injected.

### Fixed

- Desktop host-key probing now ignores stale results when the connection form
  changes mid-probe.
- Desktop SFTP listing, download, and overwrite flows now pin the directory
  context so slow listings or pending overwrite confirmations cannot target the
  wrong folder.
- Tauri SFTP IPC now rejects unsafe remote paths with traversal, control
  characters, bidi controls, or backslashes before reaching the SFTP backend.
- Desktop port-forward runtime cleanup now stops active native forwards when
  the backend session changes and ignores stale start results.
- Invalid Desktop connection-import files now surface an error toast instead of
  silently reporting zero imported connections.

### Changed

- Release readiness now requires the dogfood verifier, native SFTP path guard,
  forward lifecycle cleanup evidence, and unsigned-staging handoff guard.
- Public release readiness now requires the repository handoff playbook and
  blocks stale fixed test-count or absolute coverage claims in the changelog.
- Desktop known-host Settings actions now require confirmation before removing
  one host key or clearing all stored host keys, and failed updates surface as
  errors instead of being silently treated as success.
- Desktop interactive PTY sessions now resize the existing remote PTY when the
  terminal container changes size, show open/closed/error state, retain exit
  codes, and offer reconnect without rebuilding the xterm instance.
- Pull request checklist wording now references the test gate without a fixed
  test count.

## [0.1.0-beta.8] - 2026-06-23

### Fixed

- Public Beta release notes now include the Sync Service and SHA256 evidence
  language required by the release readiness gate.

### Changed

- Rolled the Public Beta candidate forward from `0.1.0-beta.7` to
  `0.1.0-beta.8` without moving the already-published beta7 tag.

## [0.1.0-beta.7] - 2026-06-23

### Added

- Desktop formal evidence diagnostics for the Public Beta release handoff,
  including tag/HEAD state, remote ref publication, staged artifact coverage,
  signing secret names, workflow visibility, CI runs, and check-run annotations.
- Desktop formal evidence preflight now validates that the requested release
  ref resolves to the current healthy checkout `HEAD` and is published to the
  canonical remote before it can dispatch the formal evidence workflow.

### Changed

- Public Beta release docs now treat Desktop diagnostics and signing-secret
  templates as handoff-only local artifacts, separate from the final
  `reports/release/` upload tree.
- The beta7 candidate preserved `0.1.0-beta.5` as the last pushed candidate
  while local release evidence was refreshed.

## [0.1.0-beta.5] - 2026-06-22

### Added

- Fixture-backed Public Beta release gate wrapper so release machines can run
  the full `qa:release:public` command under a local OpenSSH dogfood fixture
  while still writing real Desktop SSH smoke evidence first.

## [0.1.0-beta.4] - 2026-06-22

### Added

- Public Beta release gate with release QA, Rust workspace checks, Tauri shell
  build check, production audit risk register validation, self-hosted Sync
  smoke, and visual QA.
- Desktop distribution guide covering Tauri bundle metadata, signing,
  notarization, Linux artifacts, checksums, and GitHub Release drafts.
- Web Admin static deployment guide for `_headers`, CSP, admin snapshot URL,
  bearer token configuration, cache behavior, and rollback.
- Sync Service self-hosting guide with Dockerfile, systemd example, required
  tokens, CORS, storage, rate limit, and JSON ledger single-process limits.
- Public Beta privacy note requiring opt-in telemetry and forbidding collection
  of SSH hosts, usernames, commands, paths, file names, keys, tokens, and
  terminal output.
- Dependency risk register for documented moderate production audit findings
  that do not block the Desktop + Web Admin + self-hosted Sync Public Beta.

### Added

- Service worker update notification with `sw-update-available` custom event and auto-reload on controller change
- Periodic service worker update checks (every 60 minutes) for both desktop and web apps
- Offline page `aria-live="polite"` region for screen reader announcements when connection restores
- Offline page `focus-visible` styles for keyboard navigation
- Offline page `prefers-reduced-motion` support to disable transitions
- RFC 9116 `security.txt` in `.well-known/` for responsible vulnerability disclosure
- `<meta name="color-scheme" content="dark light">` for native dark mode form controls and scrollbars
- `scrollbar-color` CSS custom properties for themed scrollbars in both desktop and web apps
- CSP directive `object-src 'none'` to block plugin content injection
- CSP directive `upgrade-insecure-requests` to auto-upgrade HTTP to HTTPS
- `setTag()` in error-monitor now accepts `string | number` values for numeric context (retry counts, latencies)
- Custom `404.html` error page for web app with consistent dark theme design
- `humans.txt` credits file in both desktop and web public directories
- Twitter Card meta tags (`twitter:card`, `twitter:title`, `twitter:description`) for social sharing
- PWA shortcuts for Team Access, Port Forwarding, and Settings in desktop manifest

### Fixed

- Removed stale `/sitemap.xml` reference from web `robots.txt` (no sitemap existed)
- i18n check script (`scripts/check-i18n.cjs`) now reads from separate locale files instead of the monolithic `index.ts`

### Changed

- ARCHITECTURE.md with system design, data flow, security layers, sync protocol, and testing strategy
- Documentation section in README linking all project docs
- Cross-reference from CONTRIBUTING.md to ARCHITECTURE.md
- Automated accessibility E2E tests with @axe-core/playwright (WCAG 2.0/2.1 AA)
- Comprehensive CONTRIBUTING.md with development workflow, code style, and commit conventions
- Enhanced SECURITY.md with security headers verification details
- CHANGELOG.md for tracking changes
- i18n manual chunk splitting in both desktop and web vite configs
- Security headers verification script (scripts/check-security-headers.mjs)
- Security headers check in CI pipeline
- Build artifact upload in CI for debugging
- PWA shortcuts for quick actions (Quick Connect, SFTP, Team, Devices, Audit)
- PWA manifest `id` field for stable app identification
- Breadcrumb support in error monitor for debugging context
- `visibilitychange` listener in error monitor to flush on tab hide
- Dependabot auto-merge workflow for minor/patch updates
- Service worker cache size limits (100 entries max) to prevent unbounded growth
- Stale-while-revalidate strategy for static assets in service workers
- Keyboard shortcuts overlay now has proper dialog ARIA role, modal, and label
- Error monitor health report API (`getHealthReport()`) for monitoring dashboards
- Error monitor web vitals API (`getWebVitals()`) for performance dashboards
- SFTP panel file list `role="list"`, `aria-label`, and per-file `aria-label` for screen readers across all 15 locales
- Sync service rate limiting via `tower::limit::RateLimitLayer` (configurable with `ATLASTERM_SYNC_RATE_LIMIT`, default 100 req/s)
- E2E accessibility tests for settings panel and team access panel
- Exported `HealthReport`, `WebVitalsReport`, `ErrorGroup`, and `WebVitalEntry` types for consumer dashboards
- CI Rust job with `cargo fmt --check`, `cargo clippy -- -D warnings`, `cargo test`
- CI i18n release gate (`qa:i18n-release`) in build job
- CI sync API docs contract check (`qa:sync-api-docs`) in build job
- `aria-label` on icon-only buttons in GroupManagerModal (4 new i18n keys across 15 locales)
- `aria-current` on current group item in ContextMenu
- `aria-label` and `role="search"` on TerminalPane search bar
- `aria-hidden="true"` on decorative icons in StatusBar, Sidebar, CommandPalette
- `role="contentinfo"` on StatusBar footer
- Sidebar `<section>` changed to `<nav>` with `aria-label`
- `aria-label` on CommandPalette search input
- `accessibilityRole` and `accessibilityLabel` on mobile InfoTile
- `aria-atomic="true"` on ToastContainer for complete screen reader announcements
- `aria-label` on Sidebar `<aside>` landmark
- `aria-hidden` on decorative ChevronRight/ChevronDown/Folder/Lock icons in Sidebar
- `aria-hidden` on keyboard shortcut hints in Sidebar
- `aria-label` on mobile LanguageOption combining label and sublabel
- `aria-label` on Sidebar search input
- `aria-hidden` on decorative icons in ContextMenu (TerminalSquare, Settings, Copy, ClipboardCheck, Folder, ChevronRight, Trash2)
- `role="tablist"` and `role="tab"` with `aria-selected` on terminal tabbar
- `aria-hidden` on terminal tab icons (TerminalSquare, X)
- `aria-hidden` on decorative icons in panels.tsx (Gauge, Braces, Network, Play, Zap, FileUp, DownloadCloud, Folder, FileDown)
- `aria-label` on GroupManagerModal new group name and editing group name inputs
- `aria-hidden` on decorative icons in GroupManagerModal (Boxes, Plus, Folder, Settings, Trash2, ClipboardCheck, X)
- `aria-hidden` on decorative icons in ShortcutsOverlay (Command)
- `aria-hidden` on decorative icons in TerminalPane (Monitor, Search)
- `aria-hidden` on decorative icons in ToastContainer (Play, ShieldCheck, Bell)
- `aria-hidden` on command palette item icons in main.tsx (TerminalSquare, SplitSquareHorizontal, FileUp, ShieldCheck, Copy, X, Video, HardDrive, Network, Command)
- Updated README with the current QA gate summary, consolidated Security section, added CI Rust/i18n-release/sync-api-docs
- Updated ARCHITECTURE.md CI section with Rust job, i18n release gate, sync API docs check

### Changed

- Desktop service worker navigation fallback now includes root page fallback (matches web SW behavior)
- Raised coverage thresholds to the checked-in release gates across all metrics
- Raised Lighthouse thresholds: performance 0.95, accessibility 1.0, best-practices 1.0, SEO 0.95
- Promoted all ESLint rules to error level for production code
- Updated README with a coverage-gate badge, security section, and contributing guidelines
- Moved check_i18n.js to scripts/check-i18n.cjs for consistent project structure
- Expanded Permissions-Policy from 4 to 8 directives (camera, microphone, geolocation, payment, usb, magnetometer, gyroscope, accelerometer)
- CI workflow now uses `permissions: contents: read` for least-privilege security
- Service workers use stale-while-revalidate for better UX (serve cache immediately, update in background)
- Updated ARCHITECTURE.md CI section to include Rust job, i18n release gate, and sync API docs check
- Updated ARCHITECTURE.md testing summary to reference the current QA gates

### Fixed

- i18n check script (`scripts/check-i18n.cjs`) now reads from separate locale files instead of the monolithic `index.ts`
- CONTRIBUTING.md referenced `en.json` instead of `en.ts` for locale file path
- Removed unused imports in test files (panels.test.tsx, assertCompleteTranslations.test.ts, index.test.ts)
- Fixed non-null assertions in test files with optional chaining
- Enabled releaseReadiness.test.ts unconditionally (was gated behind release mode)
- Added `/* v8 ignore next */` annotation for adminData.ts default parameter ternary
- Fixed SegmentedControl generic type inference with explicit type parameter in desktop main.tsx
- Added `@ts-expect-error` for Vite `sri` option missing from BuildOptions types
- Fixed web vite.config.ts URL type compatibility with `toString()` conversion
- Fixed ErrorGroup type mismatch (expanded internal storage to include message, stack, firstSeen)
- Removed dead code `message ?? ''` in error monitor to restore the branch coverage gate
- Fixed duplicate "### Changed" section in CHANGELOG.md

### Security

- Added X-Content-Type-Options meta tag verification
- Added Referrer-Policy meta tag verification
- Added Permissions-Policy header verification
- Added Content-Security-Policy header verification
- All security headers verified in CI pipeline

## Pre-release prototype baseline - 2025-01-01

> This was a repository scaffold, not a tagged `v0.1.0` production release.
> Team collaboration, shared vault, Mobile, and Web Admin entries below
> described prototype surfaces rather than a hosted or commercially supported
> product.

### Added

- Initial repository prototype
- Desktop workbench shell (React + TypeScript + Vite)
- Web Admin snapshot prototype
- Mobile companion preview (React Native + Expo)
- SSH terminal, SFTP, and connection-forwarding prototypes
- Team collaboration and shared-vault demo surfaces
- Sync service prototype (Rust Axum)
- 15 locale internationalization
- Playwright E2E tests
- Lighthouse CI integration
- Bundle size monitoring
- Subresource Integrity
- Service worker with offline support
- Error monitoring package