FrameBridge 0.3.1 community source release

This commit is contained in:
FrameBridge Development committed 2026-10-26 22:09:18 -04:00
commit b23819fff1
1354 files changed
+343716

No files matched your search

+25
View File
@@ -0,0 +1,25 @@
# Architecture at a glance
FrameBridge connects a hosted ChatGPT conversation to tools on computers controlled by the owner. A manual connection links the configured standalone or central instance to the owner's ChatGPT account.
## One computer
A standalone installation provides execution, persistent terminal and screen interaction on its computer. FBEXEC carries out a selected task. FBTERM keeps a terminal session available so work can be resumed with its existing shell state. CUA and CUA-TTY expose the actual graphical or text console supported by that installation.
## Central and nodes
A central instance provides the fleet entry point. Approved worker nodes supply execution on their own computers; the operator selects the intended node for each task. The node workflow is described in the [private evaluation guide](PRIVATE-EVALUATION.md) and [Debian tutorial](../source/docs/DEBIAN-TUTORIAL.md).
A worker does not need a separate ChatGPT tunnel. ChatGPT remains hosted while tools run on the selected owner-controlled machines.
## Sessions and shared resources
A persistent terminal is useful for returning to an existing shell. It does not make simultaneous edits to the same files safe. Separate conversations have been used for non-overlapping FBEXEC work; isolation between those conversations has not been certified.
Graphical control shares the desktop's focus, keyboard and mouse. Use one controlling instance per desktop at a time. This is a recommendation for operation, not a certified automatic exclusion mechanism.
## Evidence and presentation
Show the complete, authentic screen when presenting a CUA capture. Label a conceptual animation as an illustration. A conceptual promotional video is separate from a real execution recording.
The recorded RC7 acceptance evidence and the current runtime state answer different questions. After a reboot, inspect the current connection and session before claiming that a live demonstration is ready.
+63
View File
@@ -0,0 +1,63 @@
# Automatic startup: service, credentials and recovery
The normal `fb connect chatgpt` wizard configures Linux startup and reconnection as part of the connection workflow. No separate `autostart enable` command or startup opt-in is needed. See [connection setup and status](CONNECTION-STATUS.md) for the three-field workflow. This page describes the underlying service, advanced maintenance and reversal.
## Requirements and setup
Run the wizard as the Unix user who owns the profile, not as root. Use the same `--state-dir` selection for every command on a custom profile. This implementation requires systemd 256 or later; Debian 13 provides a suitable version. A missing normal profile is created as standalone with automatic desktop detection when setup commits. An existing central profile can use the same connection wizard. Nodes use their central's tunnel rather than connecting ChatGPT separately.
A first unmanaged connection asks for the visible account/email label, the hidden tunnel input and the hidden MCP server access key, in that order. A valid managed profile can be checked or resumed with the same command without reentering the fields. The label is not browser authentication; the access key is not an OpenAI API key. Administrator authentication stays in the normal terminal. The saved access key is encrypted on this machine.
Setup enables the managed service immediately, then reports current connection readiness separately from configuration. No routine reboot is required. Inspect the detailed service result with:
```sh
fb autostart status
```
A successful configuration is not proof that ChatGPT has linked the intended account. Complete browser consent and verify a small, safe real tool call.
## Service and desktop behavior
FrameBridge installs one profile-specific systemd user service and enables the owner's user manager at boot using systemd linger. This permits startup without a monitor or graphical login. It does not enable operating-system autologin or turn a user service into an unrestricted root service.
The default adaptive desktop setting detects a usable physical X11 session. If none is available, the local runtime starts FBEXEC, FBTERM and CUA-TTY in text mode. Graphical CUA requests re-check the physical session when it becomes available later, without restarting persistent FBTERM sessions. The selected display is checked around each operation to reject a session change during that operation.
For a legacy profile that strictly requires a physical desktop (`headless=no`), managed connection setup saves the original configuration and changes that setting to `headless=auto`. This lets boot-time text tools start before graphical login. If the profile explicitly requests a private desktop (`headless=yes`), that remains separate from the physical console: the display is reported as `virtual-x11` with `physical=false`. Adaptive mode does not create a private virtual desktop automatically.
Network failures use retry/backoff. A revoked or expired connection key needs manual replacement. Explicit `framebridge disconnect chatgpt` and `fb stop` leave automatic startup enabled for the next boot; they do not mean it has been disabled permanently.
## Encrypted connection credential
The durable runtime-key copy is a host-bound encrypted systemd credential associated with this machine's host encryption key and the owner UID. The worker supplies the encrypted credential to `systemd-creds decrypt --user` through a pipe and receives the decrypted key through another pipe in process memory. It does not write a plaintext credential file. The pinned tunnel client consumes the key from its own temporary process environment.
This protects the saved profile copy from plaintext exposure. Root access or a complete machine image that includes the host encryption key can recover it. The encrypted credential is not a portable backup for another machine. Do not publish a live profile, credential file or machine image as a project source archive.
To change the saved account label, tunnel or access key, explicitly reopen the three-field wizard:
```sh
fb connect chatgpt --replace
```
The update is transactional and does not require disabling startup first. Enter the replacement only at `MCP server access key (hidden):`.
The advanced `fb autostart enable` command remains available for maintenance and node-local runtime startup. Its own confirmation and hidden-key prompts are separate from the normal connection wizard and are not additional normal setup steps.
## Disable, reverse or remove
Run as the profile owner:
```sh
fb autostart disable
```
Disable stops the managed service, connection and local runtime. It removes only the matching FrameBridge-owned unit and encrypted credential. A desktop setting changed by setup is restored only if the profile has not subsequently changed. Linger is restored only when FrameBridge originally enabled it and the recorded enabled-unit set still permits that reversal; otherwise the shared user-manager setting remains in place. If owned files have changed externally, removal is refused for review.
The package can be removed normally without first running manual FrameBridge stop/disable commands:
```sh
sudo apt remove framebridge-original-expanded
```
The package-removal hook stops and disables only recognized FrameBridge-managed user services belonging to this package. It preserves the user's profile, encrypted credential files and linger setting. It does not perform this cleanup during a package upgrade. Purging the package likewise does not erase those user-owned profile and credential files.
If you also want to remove the matching managed unit and encrypted credential, the explicit `fb autostart disable` command above remains available while FrameBridge is installed. Its guarded cleanup is optional, not a prerequisite for normal package removal. If a matching managed service cannot be stopped or disabled safely, package removal pauses for review rather than deleting unrelated user configuration.
+23
View File
@@ -0,0 +1,23 @@
# Claims and evidence boundaries
The current version is `0.3.1~community.20261026.2`, a separate candidate from RC7 and Preview 1.
| Statement | Evidence and boundary |
| --- | --- |
| Preview 2 unit suite | 376 tests passed in 22.351 seconds; focused peer regression also passed. |
| Preview 2 package and VM | Pending at documentation freeze; no new VM acceptance or artifact hash is invented here. |
| Preview 1 | Historical record: 368 tests and a reproducible package build. |
| RC7 | Historical record: 361 tests, reproducible package, Debian 13 VM lifecycle and real ChatGPT/console acceptance. |
| ChatGPT connection | Manual owner account consent; the model remains hosted while tools run on selected owner-controlled computers. |
| Persistent console | Session continuity is not a promise that every process survives reboot. |
| Independent FBEXEC tasks | Repeated maintainer experience with non-overlapping work; no certified isolation or simultaneous execution of every command. |
| Graphical control | One controller per shared desktop is a recommendation, not an automatic lock. |
| sudo | Actual privileges depend on the Unix account and normal authentication; an authorization flag does not grant root. |
| Real images and demo | Use complete authentic captures. A fresh Preview 2 real recording is pending; conceptual animation is illustration. |
| Dependency terms/source | Scoped technical terms review and exact source availability recorded with delivery conditions; component terms remain in force. |
## Retained control components
The retained development broker defaults to its existing 127.0.0.1 peer only. Repeatable --control-peer IP_LITERAL arguments add explicit peers. Invalid entries fail before Store creation/binding; checks use the real client address, not proxy headers. Retained RPC UID, host, client/socket and administrator identity guards remain unchanged. Normal Expanded handling uses the generic terminal entrypoint; FRAMEBRIDGE_ENABLE_GERAMEG_CUA_TTY=0 is not an effective guard.
The classic lab-target map is empty, while the compatibility route remains available for explicit integrator configuration. Do not describe retained code as entirely inactive. Further executable edits require identifiable source and candidate-specific validation.
+404
View File
@@ -0,0 +1,404 @@
# FrameBridge — command guide
Version: 0.3.1 | Guide schema: 1
This reference is generated from the shared CLI/MCP guide. Use the matching installed version.
## Contents
1. [Start with FrameBridge](#1-start)
2. [Command reference](#2-commands)
3. [Connect and disconnect ChatGPT](#3-connection)
4. [Services, connection intent and boot policy](#4-lifecycle)
5. [Central and node operation](#5-nodes)
6. [Persistent Bash terminals](#6-terminals)
7. [Authentic screen observation and input](#7-screens)
8. [Status and diagnosis](#8-diagnostics)
9. [Authorization, distribution and safe operation](#9-security)
10. [Compatibility with earlier commands](#10-compatibility)
<a id="1-start"></a>
## 1. Start with FrameBridge
### One interface for people and agents
FrameBridge provides tools and a shared command-line interface for human operators and authorized agents. fb is the short name for framebridge; both run the same program. The tools run on your Linux computers. The ChatGPT model remains hosted. Read this guide for the installed version before operating; confirm the receiver, target and available capabilities. Use the installed CLI and tools for normal work. Edit software only when the owner explicitly requests development, using a separate source clone and reviewable changes rather than rewriting the installed program.
~~~sh
fb help
fb status
fb --json status
~~~
### Install and connect
On a supported Debian system, install the downloaded package with the package manager. Normal first connection does not require a separate setup, doctor or start sequence. Run connect in a normal interactive terminal. Advanced setup is optional for selecting central/node roles and public settings.
~~~sh
sudo apt install ./FrameBridge-0.3.1.deb
fb connect
~~~
### Updating and removal
Install an official update through the normal package manager. Normal package removal stops package-owned managed processes and retains the profile and saved encrypted connection material for deliberate reuse; it is not a credential-forgetting operation. Use the separately documented explicit forget action first if that is your intended outcome. Do not assume purge erases user-profile data.
~~~sh
sudo dpkg --remove framebridge-original-expanded
~~~
### Human authentication
The normal connection asks for an optional account label, a hidden tunnel ID and a hidden MCP server access key. The label is metadata, not proof of ChatGPT login. Browser login/consent and normal operating-system authentication remain human actions in the normal interface. Never put credentials in chat, command arguments, documentation or example files. A successful managed connection returns to the prompt and can run independently of that terminal. Reboot only when an actual system change requires it.
### Choose the right guide
Use commands for the reference, connection and lifecycle for state changes, nodes for central/node work, terminals for persistent Bash, and screens for authentic CUA evidence. Query success alone does not mean the connection is ready. The guide describes registered operations; use status/doctor to investigate current state.
~~~sh
fb help commands
fb help connection
fb help lifecycle
~~~
<a id="2-commands"></a>
## 2. Command reference
### Everyday commands
connect establishes or resumes the managed ChatGPT connection. disconnect pauses that connection until an explicit connect, including across recovery and reboot. status reports runtime, connection, intended connection state and boot policy. doctor diagnoses prerequisites/problems. setup edits advanced stopped-profile settings. console opens the text work view. help reads this versioned reference.
~~~sh
fb connect
fb disconnect
fb status
fb status connection
fb status runtime
fb status boot
fb status console
fb doctor
fb setup
fb console
fb help
~~~
### Services and boot
For an already configured managed profile, service start/stop control the current stack symmetrically. Boot enable/disable changes future startup policy without stopping current work or forgetting the saved credential. First node provisioning is an explicit exception described in lifecycle. Without managed setup, non-node service start starts local tools only; normal first connection should use connect. Read status before and after changes. The separate credentials forget action is destructive and requires explicit confirmation.
~~~sh
fb service start
fb service stop
fb service boot enable
fb service boot disable
~~~
### Console and specialized operations
console login manages optional work-view opening after an authenticated tty1 login; it does not enable automatic login. tty service manages the terminal daemon; tty list lists sessions. nodes, certificates and screen-access retain their domain-specific subcommands. Use --help at the relevant command for its exact arguments. Avoid compatibility aliases in new automation.
~~~sh
fb console login status
fb tty service status
fb tty list
fb nodes --help
fb certificates --help
fb screen-access --help
~~~
### Human and structured output
Use explicit commands in automation rather than the interactive no-argument menu. --json selects structured output for an agent; examine operation success, readiness and state separately. Read errors and the exit status. If human interaction is required, complete it in the normal terminal/interface rather than attempting to supply a secret through the agent. CLI JSON uses an envelope with schema_version, product, version, command, ok and result. Read runtime, connection and boot truth inside result; envelope ok denotes request success. Exit 0 means successful query/operation, not necessarily a connected transport; exit 1 reports operation/diagnostic failure, exit 2 invalid arguments or required human interaction/confirmation, and exit 130 cancellation.
~~~sh
framebridge --json status
fb --json status connection
~~~
<a id="3-connection"></a>
## 3. Connect and disconnect ChatGPT
### Normal managed connection
connect creates the default standalone profile when absent and establishes managed startup. It asks for initial human input in the terminal, checks progress, reports readiness or an actionable failure, and returns to the prompt. Valid saved setup can be resumed without repeating the initial fields. The MCP access key is not an OpenAI API key. Keep the browser's ChatGPT account login and consent separate from the optional local account label.
~~~sh
fb connect
fb status connection
~~~
### Saved credentials and next boot
Managed startup uses protected, host-bound encrypted connection material. The normal terminal does not have to remain open. This is a persistence feature, not a promise that an account, network or tunnel service can never fail. Connection intent and boot policy are separate: enabled startup runs the stack at boot, while an intentional disconnected state remains disconnected until connect.
~~~sh
fb status boot
fb status
~~~
### Intentional disconnect
disconnect keeps local tools and saved material, but records the intention to stay disconnected across worker recovery and reboot. Explicit connect clears that pause. Check the returned state rather than interpreting a successful query as an active transport.
~~~sh
fb disconnect
fb status connection
~~~
### Replacement and temporary foreground mode
Use connect --replace only when deliberately replacing the account label/tunnel/access configuration. The advanced --foreground mode is temporary, needs a ready local runtime and occupies its terminal until interrupted; it is not the normal managed workflow. Do not use advanced mode merely to recover a normal saved connection.
<a id="4-lifecycle"></a>
## 4. Services, connection intent and boot policy
### Separate states
FrameBridge distinguishes actual local runtime, desired connection, verified transport, boot enablement and saved credential presence. A healthy runtime can be intentionally disconnected; a service can be active while disabled for the next boot. Read the labelled status fields together.
~~~sh
fb status
fb --json status
~~~
### Current managed stack
For an already configured managed profile, service start and service stop use the same current-stack boundary without changing boot enablement. Stop ends current managed work and transport but keeps profile, boot policy and saved material. Startup on the next boot follows the retained policy and intended connection state. A non-node profile without managed setup starts only local tools. Stopping a terminal service or session can interrupt its running work.
~~~sh
fb service start
fb service stop
~~~
### Future boot policy
Once managed setup exists, service boot enable/disable changes unit enablement only. It does not immediately stop or start current work and does not delete saved connection material. Initial node provisioning is described separately below. Explicitly forgetting saved material is a separate destructive operation. Legacy autostart disable has its old broader destructive behavior; use the canonical service boot commands for new workflows.
~~~sh
fb service boot enable
fb service boot disable
fb status boot
~~~
### First managed startup for a node
After advanced node setup and the required enrollment/approval, a node without a managed installation can run service start in a normal terminal. This first call creates managed startup, enables future boot and starts the node now; the result explicitly reports initial_configuration and boot_policy_changed. Alternatively, first service boot enable prepares and enables the node unit without starting current work. Initial preparation can require normal owner authentication and is not silently performed by an unattended JSON request. Once configured, the ordinary start/stop and boot-policy-only contracts apply. A node does not need its own ChatGPT tunnel.
~~~sh
fb service start
fb service boot enable
fb status boot
~~~
### Console opening
Opening console is a view operation, separate from Linux service startup. Optional console login enable/disable changes the owned startup hook after an authenticated tty1 Bash login. This hook does not bypass normal login. Review the command's scope before changing it.
~~~sh
fb console login status
~~~
<a id="5-nodes"></a>
## 5. Central and node operation
### Roles
Standalone provides local tools. Central adds the broker for enrolled nodes. A node joins one selected central instance and uses its ChatGPT connection; it does not need another ChatGPT tunnel or phone pairing. Advanced setup selects the role. Preserve explicit authenticated node transport and real identity approval.
~~~sh
fb setup
fb nodes --help
~~~
### Enrollment is not availability
Enrollment submission, central approval, node receipt of authorization and a running node agent are separate stages. status reports what it actually knows; an unchecked agent is not evidence that the node is online. Central list/pending/approve and node enroll/poll/status/run have role-specific purposes. poll can complete saved authorization; it is not a purely observational operation. After enrollment, consult the lifecycle topic for first managed node startup and its explicit initial boot-policy effect.
~~~sh
fb nodes list
fb nodes pending
fb nodes status
~~~
### Targets
LOCAL means the actual receiving machine. Use enrolled, confirmed aliases or IDs and inspect the selected target before work. Do not guess SSH identities or use historical lab hostnames as defaults. CLI tty --node can use the authenticated node transport. The interactive console command is local; run it at the destination or use an explicitly configured SSH destination.
### Transport trust
certificates create manages a private central/node transport CA, not a public website certificate or ChatGPT account authentication. Private keys stay protected on the central host; distribute only the required public trust material. Off-loopback broker use requires correctly configured verified TLS. Do not recreate trust merely to work around a connection symptom.
~~~sh
fb certificates --help
~~~
<a id="6-terminals"></a>
## 6. Persistent Bash terminals
### Service and sessions
tty service controls the profile's terminal daemon. tty open creates a real Bash session and returns its identifier. Use that identifier for subsequent observations and input. The same Bash preserves directory, variables and work between requests while the session/service remains alive. It does not preserve running processes across an operating-system reboot. Tool jobs use a profile-specific HOME; a job's home directory can therefore differ from the human login home. Commands retain the connecting account's normal operating-system permissions.
~~~sh
fb tty service status
fb tty list
fb tty open
~~~
### Observe, type and keys
tty observe returns terminal transcript text, cursor, dimensions and process state; it is not an authentic full-screen image. tty type sends text without automatically adding Enter, though supplied newlines can affect execution. tty key accepts exact uppercase names such as ENTER and CTRL_C. Replace session arguments with an identifier returned by open/list; never guess one.
~~~sh
fb tty key --help
fb tty type --help
fb tty observe --help
~~~
### Lifetime and closing
Default real idle expiry is disabled, but a profile can configure a timeout. Global status/list does not refresh each session's per-session activity. close destroys a session rather than merely separating a viewer. Graceful service stop attempts to close its sessions; elevated or unverifiable process state can prevent cleanup. Inspect the outcome instead of assuming that all child processes disappeared.
~~~sh
fb tty close --help
fb tty resize --help
~~~
### Sudo mode
A session's sudo on/off controls normal privilege eligibility; it does not log in as root or bypass operating-system authentication. Changing the mode recreates Bash, preserving directory and dimensions but not shell variables or internal state. Authentication stays in the normal human terminal/interface. Never send a password through type or chat.
~~~sh
fb tty sudo --help
~~~
### Work console panels
console combines an ordinary Bash pane with a read-only FBTERM activity dashboard. The dashboard is not a second interactive shell. The tmux prefix is Ctrl+B: release both keys, then press lowercase z to enlarge/restore a pane, or lowercase o to switch panes. The release accepts common zoom-key variants within its dedicated console. Closing a viewer normally leaves its tmux session alive; leaving Bash, killing its server or rebooting is different. In a desktop terminal the shared work view is horizontal with FBTERM on the left and Bash on the right. Explicit TTY mode is vertical with a short FBTERM monitor above Bash. The layout belongs to the shared tmux window and follows the last requested view mode; it is not isolated per viewer.
~~~sh
fb console
fb status console
~~~
<a id="7-screens"></a>
## 7. Authentic screen observation and input
### Text transcripts and pixels
A CLI tty transcript describes a terminal and explicitly does not claim authentic pixels. MCP real-screen CUA-TTY and graphical screen tools operate through the real screen client and capture-linked interaction. Use those supported observation tools when authentic complete screen evidence is required. Never present a reconstructed terminal, animation or partial invented view as a real screenshot.
### Automatic graphical discovery
The installer and control console stay text interfaces in both TTY and a desktop terminal. Compatible graphical CUA is discovered automatically; availability depends on the actual display/session and permissions. A loaded module is not proof that real pixel capture or input succeeded. New profiles use adaptive auto mode: without a verified active X11 session the runtime provides FBEXEC, FBTERM and CUA-TTY in text mode, without requiring a graphical login or automatically creating a private desktop. Explicit virtual-desktop settings remain advanced options and are labelled separately from physical-screen evidence.
~~~sh
fb status
fb doctor
~~~
### Frame-buffer read access
screen-access is a narrow, explicit administrative permission for reading the real frame buffer. It does not by itself enable graphical CUA, keyboard/mouse control or arbitrary VT switching. Persistent read access can remain effective after logout or a VT switch; review the command's displayed scope and use normal local administrator authentication.
~~~sh
fb screen-access status
~~~
### Shared desktop
A graphical desktop shares focus, keyboard and mouse. Use one controlling agent per desktop at a time and avoid overlapping work. This is an operating recommendation, not a claim of certified automatic isolation. Independent non-overlapping execution jobs may be possible; do not infer isolation or physical parallel execution from that alone.
<a id="8-diagnostics"></a>
## 8. Status and diagnosis
### Inspect before acting
status summarizes current runtime, connection, desired state and boot policy. A query completing successfully is distinct from the components being ready. Connection verification has a freshness boundary; retrying or unknown must not be treated as connected. Focused status uses the same underlying state model.
~~~sh
fb status
fb status connection
fb status runtime
fb status boot
~~~
### Doctor
doctor diagnoses prerequisites and reports findings with suggested next steps. It is not an implicit repair, and it is not a substitute for checking actual live connection state. Inspect the diagnosis and relevant private application logs before considering configuration changes.
~~~sh
fb doctor
~~~
### Logs and progress
Normal connection presents concise progress and a final result, then returns to the prompt. Detailed diagnostics belong in protected application logs. Share only the minimum relevant redacted result; never expose credentials, private keys, browser session data or unrelated personal paths. Avoid rerunning setup, enrollment or broad lifecycle tests merely because a view is confusing.
~~~sh
fb help connection
fb help lifecycle
~~~
<a id="9-security"></a>
## 9. Authorization, distribution and safe operation
### Authorized scope
An agent can use the documented CLI and MCP tools within the user's authorized scope. Reading this guide does not grant permission. Verify the receiver and selected target. Normal human terminal/browser authentication remains separate; do not request credentials in chat or invent phone/Owner-TTY enrollment requirements. Normal use should operate through the installed CLI and tools, not edit or rebuild installed FrameBridge program files. If the owner explicitly requests development, use a separate source clone, make reviewable changes, and do not present a modified build as an official release. This operating guidance does not restrict GNU GPL freedoms or require private forks to submit changes upstream.
### Official releases
The source is distributed under GNU GPLv3-only terms and the applicable third-party notices. Verify official release checksums and published signatures/repository metadata before installing. Signature verification identifies the publisher and detects alteration; it does not prohibit lawful modified versions. Official releases are reviewed through the project's release process.
### Side effects
Read status before service stop, credential forgetting, node approval, startup-hook changes or administrative screen permission changes. Explain material scope and consequences and follow the user's authorization. A sensitive operation must report the actual result, not just that a query succeeded. Keep real captures complete and distinguish observations from hypotheses.
<a id="10-compatibility"></a>
## 10. Compatibility with earlier commands
### Preferred spelling
Use the short canonical interface in new documentation and automation. fb and framebridge remain equivalent. Older connect chatgpt, disconnect chatgpt and connection status spellings are compatibility routes. New status scopes replace the need to learn an extra connection noun.
~~~sh
fb connect
fb disconnect
fb status connection
~~~
### Legacy lifecycle behavior
Older root start/stop and autostart commands are retained for compatibility where documented, but their historical scopes can differ from the canonical service controls. In particular, legacy autostart disable removes managed setup and saved encrypted material; it is not an alias for boot-policy-only disable. Read the command's help before using a legacy script.
~~~sh
fb help lifecycle
~~~
### Versioned help
This guide describes the installed product and guide schema. Read the matching release notes for any semantic migration. The CLI help, MCP guide and static web documentation are generated from the same reviewed guide data; a cached manual from an earlier build can describe a different workflow.
~~~sh
fb help compatibility
~~~
+97
View File
@@ -0,0 +1,97 @@
# Connection setup, status and private logs
## Connect in three steps
Run as the Unix user who will own this FrameBridge profile:
```sh
fb connect chatgpt
```
For a first unmanaged connection, the text wizard asks for these fields in order:
| Step | Input | Meaning |
| --- | --- | --- |
| 1 | ChatGPT account/email label | A local label for the intended account. It does not sign in or authenticate that account. |
| 2 | Tunnel ID, entered at a hidden prompt | The raw ID of the tunnel selected in your own ChatGPT account. The normal wizard accepts IDs only. |
| 3 | MCP server access key | Entered at `MCP server access key (hidden):`. This is the connection's access key, not an OpenAI API key. |
No earlier `fb setup`, `fb start` or separate automatic-startup command is required for a normal first standalone connection. If the profile does not exist, the successful setup creates one with local standalone defaults and automatic desktop detection. Existing central profiles use the same connection command. Nodes use their approved central connection and do not open a separate ChatGPT tunnel.
Sign in and complete consent through your own ChatGPT browser session. A local account label, configured service or online tunnel does not prove that the browser account has been linked. Finish the browser workflow and verify a small, safe real tool call.
## Setup progress and the result
The same workflow configures the profile's Linux services, encrypts the saved access key and enables automatic startup and reconnection. Administrator authentication takes place in the normal terminal when required. There is no separate automatic-startup opt-in in this normal workflow.
The command shows concise progress, checks current readiness and returns the shell prompt. It waits for up to 95 seconds for startup verification. `[OK] Connected.` is reported only for a verified current connection. A failure reports an error; if verification remains pending at the limit, the command reports the pending/retrying state and returns exit status 1 while the service continues in the background. Inspect current state with:
```sh
fb connection status
```
On a valid managed profile, repeating `fb connect chatgpt` checks or resumes the saved encrypted settings without asking for those fields again. A damaged or unowned managed setup produces an error, not a connected result.
After setup finishes, the terminal can be closed. The service starts immediately; a routine reboot is not part of this workflow. Later Linux boots do not repeat the connection prompts. Temporary failures use retry/backoff. An expired or revoked key requires replacement; retrying cannot make it valid.
Monitoring can take a polling interval to detect a loss. A running process or an earlier success message does not guarantee current availability. Configuration success, current local/tunnel readiness and a successful real ChatGPT tool call are separate results.
## Automatic tool selection
The installer and control console remain text interfaces in a Linux TTY or a terminal emulator. FrameBridge queries Linux for the available environment automatically.
| Available environment | Tools |
| --- | --- |
| Text console | FBEXEC, persistent FBTERM and CUA-TTY. |
| Usable physical X11 desktop | The text tools plus graphical CUA on that actual desktop. |
| Explicit private-desktop mode | The text tools plus CUA on a separate virtual X11 desktop, reported as `virtual-x11` with `physical=false`. |
A graphical CUA request re-checks a physical X11 desktop that becomes available later, without restarting persistent FBTERM sessions. Checks around the operation reject a desktop change during it. The default adaptive mode does not create a private desktop or enable operating-system autologin.
## Stop, replace a key or remove startup
To stop only this profile's managed ChatGPT connection and retain its local tools:
```sh
fb disconnect chatgpt
```
To stop its connection and local runtime now:
```sh
fb stop
```
Both leave automatic startup enabled for the next boot. To stop it and disable later startup:
```sh
fb autostart disable
```
To change the saved account label, tunnel or access key, run `fb connect chatgpt --replace` and complete the three fields. The update is transactional and does not require a prior disable. See [automatic startup details](AUTOMATIC-STARTUP.md) for service scope, encrypted-credential limits, guarded reversal and package removal.
Normal package removal is available through `sudo apt remove framebridge-original-expanded`; no manual stop/disable sequence is required first. The package hook stops and disables only its recognized managed user services and preserves profile data, encrypted credentials and linger. See the technical startup page for the separate optional cleanup.
## Advanced manual controls
Use the same global `--state-dir` selection for all commands on a custom profile. `fb setup` remains available for central/node roles and nondefault settings. `fb autostart status` exposes the service, worker, runtime and connection details. The explicit `fb autostart enable` maintenance command remains available; it is not a prerequisite for the normal connection wizard.
An attached diagnostic connection is an advanced nonpersistent workflow:
```sh
fb connect chatgpt --foreground
```
It is mutually exclusive with `--replace`, requires an already-running local runtime and does not configure encrypted automatic startup. It asks for its connection inputs separately. Keep that terminal open; Ctrl+C or closing it ends that foreground connection. Stop an existing connection before starting a diagnostic attempt on the same profile.
The normal tunnel prompt hides input and accepts only a raw ID. If a complete command is pasted accidentally, it is rejected without echoing it. The advanced foreground workflow retains support for a complete compatible tunnel-client command through its hidden prompt. That command is parsed as data and is never executed by a shell. FrameBridge uses its bundled client and rebuilds the MCP endpoint from the selected profile, so a pasted endpoint cannot redirect the connection to another server.
## Credential handling and private diagnostics
The normal wizard persists the access key only as a host-bound encrypted systemd credential. Its worker decrypts through pipes in process memory. The advanced foreground workflow keeps its key in process memory without creating a saved credential. In both cases the pinned tunnel client consumes the key through its own temporary process environment. Keys are not put in command arguments, plaintext profile files or the progress display. The complete pasted command is not saved or echoed. Public tunnel/account-label metadata may be saved.
Technical startup messages and client diagnostics go to the selected profile's private connection log. The default is `~/.local/share/framebridge-expanded/logs/chatgpt/connection.log`; a custom profile uses its own `logs/chatgpt/connection.log`. Known key values and recognized credential patterns are redacted before writing. Directories use mode `0700`; log files use `0600`. Retention is bounded to the current file plus `connection.log.1` and `connection.log.2`, with a 2 MiB limit per file.
When reporting a problem, include the FrameBridge version, current state and short error message. Review excerpts before sharing; omit keys, account passwords, cookies and complete credential-bearing commands. Do not publish a live profile or VM image.
See the [Debian tutorial](../source/docs/DEBIAN-TUTORIAL.md) for package installation and advanced fleet setup.
+41
View File
@@ -0,0 +1,41 @@
# Real demonstration script — review draft
Target duration: 90 seconds, plus the existing animated introduction if desired. This document is a shot plan; it is not a claim that the recording has already been made.
## Readiness
Use the existing isolated Debian test VMs. Verify their current boot and node identities, normal user session, exact intended package and its verified identity, runtime readiness, owner-approved manual ChatGPT connection and selected node. Keep the foreground tunnel terminal out of the task workspace. A community-candidate demonstration requires that candidate's own checked installer and release evidence; historical RC7 acceptance is not a substitute. No new community recording or VM acceptance is claimed by this shot plan.
A host reboot can leave the VMs stopped and requires a new manual tunnel connection. Restore the documented VM lifecycle first. Do not reset login credentials, approve a different account, or record secret-entry screens.
Use a new nonce in every demo path. The data must be synthetic and the chosen paths must not already exist.
## 0–15 seconds: the instruction starts in ChatGPT
Show the selected test node label. In ChatGPT, request: "On the selected test node, create a new demo directory under my home with a unique suffix. Write a short installation checklist in notes.txt. Report its path, byte count and SHA-256. Use only new demo files."
Show the actual tool call and backend result. Record the original timing; label any editing or speed changes in the finished video.
## 15–35 seconds: the instruction becomes visible in the console
Show the official FrameBridge console with FBTERM activity and its Bash pane. Display the newly created file and its checksum from that same selected node. Keep the complete native frame available and preserve the connection between the request, job identity, file and visible result.
Do not render a transcript as if it were a screen capture.
## 35–55 seconds: independent work
Use a second ChatGPT conversation for a separate task in another new directory: create and summarize a tiny synthetic CSV. Keep the first conversation's checklist task independent.
If both conversations are genuinely active at the same time, record that overlap. If execution is queued, show the queue honestly. Do not imply certified isolation or fake simultaneous actions with an edited split-screen.
## 55–80 seconds: another request, a graphical result
From ChatGPT, request a graphical action in the same test environment. A single conversation controls the shared desktop. Show a full authentic screen image, the action and its actual result.
Open or attach the same persistent terminal session from the graphical desktop and display the checklist created at the beginning. Verify that the session/profile is the same rather than presenting a newly created terminal as continuity.
## 80–90 seconds: evidence
Show the installer filename, verified SHA-256, supported Debian version and a brief invitation to review the project. Keep installation details and account entry in the separate tutorial.
The current music draft can accompany the edited presentation after its ownership and use are checked separately from the blog-text license. Record application and console evidence separately, then combine them with the clearly labeled animation.
+35
View File
@@ -0,0 +1,35 @@
# FrameBridge launch copy — drafts
Use the pre-release wording while the community candidate is being prepared. Recheck the release state, links and evidence before publication. These drafts do not authorize publication.
## Project description
FrameBridge connects ChatGPT to tools running on Linux computers you control. Execute tasks, return to persistent terminals, inspect the real desktop and select approved worker nodes through a central connection. ChatGPT remains hosted; tool execution stays on your machines.
## Pre-release announcement
FrameBridge is preparing a community release for people who want to work with their own Linux computers through ChatGPT. Its recorded RC7 baseline demonstrates command execution, persistent terminals, real console interaction and selected nodes. Preview 2 has passed 376 unit tests; package and VM checks, verified downloads and a fresh real demonstration remain in progress. Pinned dependency terms and actual source-delivery conditions are documented. The project's original code uses GPL-3.0-only within its stated licensing scope.
## Short social draft
Your Linux computers. A persistent terminal. The node you choose. FrameBridge connects those tools to your ChatGPT conversations. Community release preparation is underway; follow the project for verified builds, real demonstrations and ways to contribute.
## README hero
**Bring your ChatGPT conversations to Linux computers you control.**
Execute a task, return to the same terminal, inspect the real desktop and direct work to a selected node.
## Use with a verified real demonstration
This caption is reserved for a completed, checked real recording:
> One request, an observable result on the selected Linux computer, and the same persistent terminal ready for the next step.
Identify the exact build and node shown. Use complete authentic captures, remove credentials and unrelated personal information, and verify the actions before publishing. Label a conceptual animation as an illustration instead.
## Editorial focus and legal attribution
Lead with the capability, the workflow and its observed result. Keep founder biography and personal branding out of the promotional copy. Preserve legal attribution in COPYRIGHT.md, component notices and article attribution metadata.
Avoid claims of automatic isolation, unrestricted autonomy, universal compatibility, one-click setup or guaranteed safety. Explain the actual connection steps and the shared focus, keyboard and mouse of graphical control where relevant.
+9
View File
@@ -0,0 +1,9 @@
# Licensing decision and proposal history
The owner approved GNU GPL version 3 for original FrameBridge material after considering a community-oriented release. This preparation records the exact choice as **GPL-3.0-only**. Future FSF license versions are not selected automatically.
The earlier Apache-2.0 recommendation favored permissive reuse and commercial integration. It was a proposal, never a first-party license applied by the private preparation. It is superseded by the recorded GPL choice. Dependencies that use Apache or another license retain their applicable terms.
Read the active [LICENSE](../LICENSE), [licensing scope](../LICENSING.md) and [license status](../LICENSE-STATUS.md). Original blog article text explicitly identified for that purpose uses CC-BY-SA-4.0, with separate treatment of code and other media.
The remaining provenance, third-party and privacy review items are recorded in the [publication checklist](PUBLICATION-CHECKLIST.md). Choosing a project license does not close them or publish the project.
+22
View File
@@ -0,0 +1,22 @@
# FrameBridge — private technical evaluation brief
FrameBridge connects hosted ChatGPT conversations to execution, persistent-terminal and real-screen tools on Linux computers controlled by their owner. A central instance provides access to approved worker nodes so the operator can select where a task runs.
The core workflow is to request a small task, inspect its result on the selected computer and continue in the same terminal. Separate conversations have been used for independent FBEXEC tasks when objectives and changes did not overlap. That observed use does not establish isolation or simultaneous execution of every command. A graphical desktop shares focus, keyboard and mouse; one controlling instance per desktop is an operating recommendation.
## Recorded baseline and current candidate
Original Expanded RC7 targets Debian 13 amd64 with manual account consent and connection. Its historical acceptance record includes 361 unit tests, a byte-identical package rebuild, Debian VM installation/lifecycle checks, worker enrollment and authentic console images.
The current candidate is `0.3.1~community.20261026.2`. It changes implementation and packaging files and adds a regression test. Preview 2 passed 376 unit tests in 22.351 seconds. Package and VM validation and a fresh real demonstration remain pending at documentation freeze. Historical RC7 results do not certify this build.
A dependency source and notice supplement has been collected. [Source availability](../licensing/third-party/SOURCE-AVAILABILITY.md) and [third-party review](THIRD-PARTY-RELEASE-REVIEW.md) record reviewed permissive terms, the technically accepted unchanged Certifi source route, R2 supplements and actual source-delivery conditions.
## Useful evaluation questions
- Can a tester follow the correct build's installation and connection instructions?
- Can a reviewer trace a request to the selected node, persistent console and visible result?
- Are account consent, node identity, desktop coordination and recovery behavior clear?
- What would improve the documentation and maintainability of this workflow?
Original FrameBridge material uses GPL-3.0-only within its stated scope. The project is independent. This brief remains private, has not been sent to OpenAI and claims no affiliation or endorsement.
+13
View File
@@ -0,0 +1,13 @@
# Privacy review status — FrameBridge 0.3.1 preparation
This review describes the separate 0.3.1 source preparation. Historical RC7 and Community Preview inventories remain provenance records; final source manifests must describe the actual assembled release.
A bounded tracked-text scan examined 1,259 UTF-8 files for private-key banners and common credential-token shapes. Two candidates were reviewed as examples: a synthetic rejection-test input and the public PyJWT package metadata encode/decode example. Neither was validated as a secret. No matched credential values are retained in review reports. This is not a guarantee that every possible secret is absent.
A separate non-vendor path scan found no matches for the owner's known home-path and email patterns. Remaining laboratory names occur in retained source/provenance labels and implementation messages, not owner credentials. Matched private-network strings were generic RFC1918 network policy ranges or unit-test fixture addresses, not validated owner access endpoints. Keep public interface help generic and preserve legitimate third-party copyright/author notices.
CLASSIC_NODE_TARGETS is currently initialized to an empty dictionary. The compatibility routing function is conditionally reachable; this review does not dismiss it as wholly dead code. An empty implicit target map must not become an excuse to infer or restore personal infrastructure routes.
The normal Expanded implementation uses account-relative state and generic transport. Review final staged source and approved promotional content for unrelated personal information. Do not publish runtime profiles, SSH material, passwords, tokens, cookies, logs containing hidden inputs or unrelated owner data. Source filenames preserving historical origin are not a claim that a matching machine is an available public node.
No production services, profiles or owner credentials were accessed or changed by this text review. The final package, source archive and download delivery checks are separate release evidence. Subsequent implementation changes require a final artifact scan before public exposure.
+58
View File
@@ -0,0 +1,58 @@
# Community Preview 2 evaluation guide
Current package: `FrameBridge-0.3.1-Community-Preview2.deb`, version `0.3.1~community.20261026.2`. Preview 2 passed 376 unit tests; package/VM checks remain pending at this documentation freeze. This guide is the intended workflow, not a completed VM acceptance record.
## Supported starting point
Use an isolated Debian 13 amd64 VM or test computer and keep normal owner/admin credentials under the owner's control. Preserve production profiles.
Obtain the Preview 2 installer and its release checksum record. Follow the [Debian tutorial](../source/docs/DEBIAN-TUTORIAL.md) to verify the selected file before installing. RC7 and Preview 1 installer hashes do not apply to Preview 2. Source delivery uses the matching Preview 2 source archive, shared immutable Preview 1-named dependency asset and R2 supplements.
## One computer
Run setup, select standalone, review the node label and profile, run doctor, and start the runtime. Connect manually with `fb connect chatgpt`. The foreground connection needs the owner-supplied tunnel and runtime key each time it is established. Keep it open; a second local terminal can inspect `fb status`.
In the intended ChatGPT account, enable the intended app/tunnel, complete consent, make a small tool call, and inspect the backend result. An online tunnel or a remembered account label alone is not successful end-to-end acceptance.
## Central first, workers later
Configure and start a central, then connect ChatGPT manually. Workers can be added afterward without reconnecting that central. Follow the complete certificate and identity instructions in the Debian tutorial.
On a new worker, install the same verified package, choose node during setup, run doctor, and enroll before starting the node runtime:
```sh
fb setup
fb doctor
fb nodes enroll --central https://CENTRAL_ADDRESS:20878 --name worker-1
```
Use the actual verified HTTPS URL printed by the central, with the public CA checked through a trusted channel. CENTRAL_ADDRESS and worker-1 above are placeholders.
On the central, inspect the pending request and compare the node identity and public fingerprint:
```sh
fb nodes pending
fb nodes approve REQUEST_ID --node-id NODE_UUID
```
On the worker, poll for confirmation and start only after approval and pairing complete:
```sh
fb nodes poll
fb start
fb status
```
On the central, use `fb nodes list` to check current operational transport readiness. Registration alone does not establish that a worker is currently reachable.
## Suggested small evaluation
Use new demo-only files under the selected node user's home. Ask ChatGPT to create a short checklist, compute its SHA-256, and display the same file from the persistent console. For concurrent work, use a separate directory and an independent task in each conversation. Compare results and record interference if it occurs.
During graphical work, give one conversation control of the shared desktop. Use a full authentic screen capture, inspect it before input, and verify the visible outcome. Reopen the same terminal session when demonstrating continuity.
Do not include passwords, tokens, private keys, cookies, real account pages or unrelated personal files in recordings. Public test labels and synthetic documents are sufficient.
## End of evaluation
Stop the foreground tunnel with Ctrl+C when finished, then use the normal runtime stop command as appropriate for the test profile. Keep the owner's production installations and unrelated tasks outside the evaluation.
+23
View File
@@ -0,0 +1,23 @@
# Community Preview 2 publication checklist
Status: private validation of `0.3.1~community.20261026.2`; no public release or blog publication is performed by this preparation.
| Item | Current position |
| --- | --- |
| Candidate identity | Preview 2 installer/source names and current inventories; RC7 and Preview 1 remain separate historical artifacts. |
| Unit tests | Preview 2 full suite: 376 PASS in 22.351 seconds. Focused peer regression: 20 PASS, including 8 new peer tests; not an additional full-suite count. |
| Package and VM | Pending at documentation freeze. Use the external QA record for later outcomes and exact hashes. |
| Control peers | Existing loopback peer by default; explicit repeatable IP-literal CLI additions; malformed configuration fails before Store/bind. |
| Retained guards | RPC and administrator identity guards preserved; normal Expanded terminal entrypoint remains separate. |
| Original code/docs | GPL-3.0-only with scope and attribution preserved. |
| Original blog text | Explicit CC-BY-SA-4.0 draft; images, recordings and code retain separate treatment. |
| Native terms | Pinned set reconciled through documented permissive routes; original alternatives and combined notices retained. |
| Legal records | 137 text files, including full MPL and the separate R2 wit-bindgen-rt MIT notice. |
| Source delivery | Matching Preview 2 source plus immutable 82,606,998-byte Preview 1-named dependency asset and R2 supplements, with clear recipient access. |
| Certifi | Unchanged exact upstream sources and notices technically accepted with actual source-access conditions. |
| Provenance limits | Original Mozilla certdata revision unidentified; native wheels not independently rebuilt. Recorded limits, not generic automatic blockers. |
| Privacy/media | Inspect final export and approved demo; real captures complete, conceptual animations labeled. |
| Downloads and public hosting | Verify final accessible files/hashes and actual endpoint when publication is authorized. |
| Real demonstration | Fresh checked Preview 2 recording remains pending. |
The legal/source records describe scoped review and concrete delivery obligations, not a universal legal certification. The project's license does not relabel dependencies. Preserve legal attribution and current artifact identities.
+47
View File
@@ -0,0 +1,47 @@
# Python distribution inventory and Preview 2 source delivery
The following table records the 29 distributions and 33 legal files inventoried in RC7. Their component versions and original notices remain retained in the 930-file vendor subset unchanged between Community Preview 1 and Preview 2. The table is not a complete native-dependency or current legal-text count.
| Distribution | Version | Declared license | Historical legal-file count |
| --- | --- | --- | --- |
| annotated-types | 0.8.0 | MIT | 1 |
| anyio | 4.15.1 | MIT | 1 |
| attrs | 26.1.0 | MIT | 1 |
| certifi | 2026.7.22 | MPL-2.0 | 1 |
| cffi | 2.1.1 | MIT-0 | 1 |
| click | 8.5.0 | BSD-3-Clause | 1 |
| cryptography | 50.0.1 | Apache-2.0 OR BSD-3-Clause | 3 |
| h11 | 0.16.0 | MIT | 1 |
| httpcore | 1.0.9 | BSD-3-Clause | 1 |
| httpx | 0.28.1 | BSD-3-Clause | 1 |
| httpx-sse | 0.4.3 | MIT | 1 |
| idna | 3.20 | BSD-3-Clause | 1 |
| jsonschema | 4.26.0 | MIT | 1 |
| jsonschema-specifications | 2025.9.1 | MIT | 1 |
| mcp | 1.26.0 | MIT | 1 |
| pycparser | 3.0 | BSD-3-Clause | 1 |
| pydantic | 2.13.5 | MIT | 1 |
| pydantic_core | 2.46.5 | MIT | 1 |
| pydantic-settings | 2.15.0 | MIT | 1 |
| PyJWT | 2.14.0 | MIT | 2 |
| python-dotenv | 1.2.3 | BSD-3-Clause | 1 |
| python-multipart | 0.0.32 | Apache-2.0 | 1 |
| referencing | 0.37.0 | MIT | 1 |
| rpds-py | 2026.6.3 | MIT | 1 |
| sse-starlette | 3.4.11 | BSD-3-Clause | 2 |
| starlette | 1.7.0 | BSD-3-Clause | 1 |
| typing_extensions | 4.16.0 | PSF-2.0 | 1 |
| typing-inspection | 0.4.4 | MIT | 1 |
| uvicorn | 0.53.0 | BSD-3-Clause | 1 |
## Shared source asset and R2 supplements
The immutable `FrameBridge-0.3.1-Community-Preview1-dependency-sources.tar.gz` is 82,606,998 bytes, SHA-256 `64540a85bd65eac3f394d8c0a967cacbc00e112676d57d644dcd1bb691c1926a`. Its Preview 1 name is retained intentionally. It includes five Python source distributions, 143 lock-verified crate archives, OpenSSL/libffi source evidence, pinned Git sources, the exact Certifi bundle and identified Rust source supplements.
Its 135 legal texts are accompanied by full MPL-2.0 and the R2 MIT notice for wit-bindgen-rt 0.39.0, for 137 legal text files. Keep R2-SUPPLEMENTS.json and its referenced notice with the complete source delivery. This supplement does not silently change the sealed shared asset or original index.
Read [source availability](../licensing/third-party/SOURCE-AVAILABILITY.md), the [native terms matrix](../licensing/third-party/NATIVE-DEPENDENCY-TERMS.md) and [release review](THIRD-PARTY-RELEASE-REVIEW.md). The pinned terms were reconciled through documented permissive routes while preserving original alternatives, combined obligations and attribution.
Unchanged Certifi source availability is technically accepted with exact source assets, original notices, full MPL and clear recipient access. The original Mozilla revision remains unidentified; that is a provenance limit, not an automatic blocker. Four native objects match official wheels; independent rebuilding was not performed and is not imposed as a generic source-availability requirement.
At distribution, supply the matching Preview 2 installer and source, shared dependency asset, R2 supplements and notices, and verify access and download hashes. A project GPL choice does not relabel component terms or convert a private cache into public delivery.
+27
View File
@@ -0,0 +1,27 @@
# Third-party terms and source delivery — FrameBridge 0.3.1
This scoped release record combines the retained Python/Rust review with the 0.3.1 OpenAI tunnel-client notice supplement. It does not relabel incorporated components as FrameBridge-owned GPL material.
## Immutable Python/Rust source asset
FrameBridge-0.3.1-Community-Preview1-dependency-sources.tar.gz is 82,606,998 bytes, SHA-256 64540a85bd65eac3f394d8c0a967cacbc00e112676d57d644dcd1bb691c1926a. Its historical filename is retained intentionally.
The asset supplies five Python source distributions, 143 lockfile-verified crate archives, pinned OpenSSL/libffi source evidence, upstream Git sources, exact Certifi CA bundle and identified Rust supplements. The retained Python vendor/native set has its applicable original notices. [Native terms](../licensing/third-party/NATIVE-DEPENDENCY-TERMS.md) records selected permissive routes, original alternatives and combined obligations.
The immutable asset's original 135 legal texts are supplemented by the full MPL-2.0 text and R2 wit-bindgen-rt MIT notice, for the documented 137-text set. Retain R2-SUPPLEMENTS.json and its referenced notice; do not rewrite the shared asset.
## OpenAI executable and Go supplement
The OpenAI tunnel-client executable is separately licensed Apache-2.0. [Its notice record](../licensing/third-party/tunnel-client/README.md) supplies the upstream license/notice and Go toolchain terms, identifies the 47 embedded Go modules, and preserves 61 module legal files. All 47 exact module source archives were verified against embedded h1 checksums.
FrameBridge-0.3.1-tunnel-client-dependency-sources.tar.gz is 26,941,745 bytes, SHA-256 6445d4f0e773aba833fe5c610fbae54102b92de2ce636438f769f21e890c2bd9. Keep it with the matching release and source.
The executable's own module is marked (devel) and has no embedded VCS revision. Its original source commit and an independent rebuild are not established. The official upstream notice source is pinned separately and is not misrepresented as that build commit.
## Delivery conditions and limits
Provide FrameBridge-0.3.1.deb, its exact corresponding FrameBridge source archive, both dependency-source assets, R2 supplement and retained notices through actual working download paths. Verify file hashes at staging and public delivery. Private collection or a future URL is not public availability.
The unchanged Certifi arrangement retains its exact source assets, original notice, full MPL-2.0 text and recipient access instructions. The original historical Mozilla certdata revision remains unidentified. No independent native-wheel rebuild is claimed. These provenance/reproducibility limits remain explicit.
Read [SOURCE-AVAILABILITY.md](../licensing/third-party/SOURCE-AVAILABILITY.md), [LICENSING.md](../LICENSING.md) and [COPYRIGHT.md](../COPYRIGHT.md). First-party GPL-3.0-only scope remains distinct from third-party terms. This is a technical release record, not a blanket legal or security certification.