Baseline: guacamole-angular-port-2026-09-21-preview.zip
SHA-256: b6d8f7b309e225a4d2e764103695c3f1d4e0d8ed5b221fba6630d0388a84693f
This document states exactly which capabilities this release claims as stable, and which are explicitly out of scope. The release verdict applies only to the scope declared here.
| Component | Version / configuration |
|---|---|
| Guacamole server (backend) | Apache Guacamole 1.6.0, pinned by digest |
| guacd | Apache Guacamole 1.6.0, pinned by digest |
| Database | PostgreSQL 16, stock 1.6.0 schema (initdb.sh --postgresql) |
| Authentication | Stock PostgreSQL database authentication |
| TOTP | Stock guacamole-auth-totp 1.6.0 extension: first-time enrollment through the candidate UI (server QR code + manual key + instructions) and code login |
| Frontend | This project's production build (ng build), served as static files |
| Proxy | nginx: origin root and /guacamole/ subpath, REST/WebSocket/HTTP tunnel routing, TLS termination, no-WebSocket listener |
| Browser | Installed Chrome (153 at acceptance) for functional gates; isolated container Chromium (153) with its own trust store for the TLS gate; 1280×800 declared viewport |
| Remote targets | Disposable Linux SSH/SFTP, VNC and xrdp fixtures |
Deployment requirement: the reverse proxy must allow the file-upload request
size used by the client (the staging proxy configures
client_max_body_size; the upstream manual documents this caveat). Uploads
above a configured limit must be surfaced as errors — the frontend does not
truncate silently.
TLS acceptance is performed with normal certificate validation: the test CA is trusted only inside an isolated browser container's trust store (no host or machine trust changes), and no certificate-error suppression flags are used.
- Login/logout with the stock PostgreSQL data source, including first-time TOTP enrollment through the UI, MFA/TOTP continuations, invalid-credential handling, token revocation and session invalidation on logout.
- Connection browsing, launching connections over SSH, VNC and RDP through real guacd, multiple concurrent sessions with tiling and focus management, closing/disconnecting sessions without orphan state.
- In-session features: keyboard/mouse input, terminal resize, clipboard (VNC, both directions), file transfer (SFTP), Ctrl+Alt+End → remote Delete, advertised on-screen keyboard and text-input modes, saved timezone/input method/mouse preferences.
- Administration through the candidate UI against the real REST API: connection create/edit/delete, user attributes, permission grant/revoke transitions, user-group membership, CSV bulk import — each with backend re-reads.
- Active-connection sharing links (read-only profile), including live verification that the recipient reaches the intended session, tampered links rejected at the authentication boundary, and host-disconnect behavior.
- Deployment shapes: origin root,
/guacamole/subpath (with redirect from the bare path), TLS termination validated with a normally trusted test certificate in an isolated trust store, and operation with WebSockets unavailable (HTTP tunnel fallback). - Stability: 25 connect/disconnect cycles with no orphan sessions or page errors; a strict 30-minute two-session soak with periodic real input.
These exclusions existed in the preview and remain; no supported feature was
moved here to make results green. The owner approved this exclusion list on
2026-09-21 (recorded in evidence/delivery-record.json).
- Databases other than PostgreSQL; other auth extensions (LDAP, OpenID/SSO, SAML, CAS, Duo, RADIUS, header auth) — only PostgreSQL auth and TOTP were exercised.
- Protocols/targets beyond the tested fixtures: the Linux xrdp fixture is not evidence about a specific Windows RDP server; RDP feature coverage beyond keyboard input is not claimed; audio, printing, session recording and transfer features beyond SFTP upload/download/cancel are not claimed.
- Browsers other than the tested Chrome version; touch/gesture input and real mobile devices.
- Guacamole versions other than 1.6.0.
- Upgrade-in-place from the legacy frontend with warm/stale caches.
- Accessibility conformance (no WCAG audit).
- Login form inputs carry
id="login-field-<name>"but not anameattribute: Angular'sNgModeldeclares anameinput which consumes the binding. Fields are fully functional; external tools should use the id. - The sharing link carries the credential in the profile's query parameter
(
key=...), exactly as the server'ssharingCredentialsresponse specifies. - The upload size limit is a deployment/proxy configuration, not an application constant; the application surfaces the rejection.
A release-blocking defect is any failure in the gates listed in
docs/STABLE-ACCEPTANCE.md (groups A–H plus the strict soak) that reproduces
against the final candidate with the real backend, or any unresolved required
case reported as BLOCKED. All required gates passed for this scope.