Privacy and configuration contract
Story: Connect an installation without publishing it
As an installation operator, I supply the locations and credentials needed to read my factory and see exactly what the dashboard can access, so I can run the public project without exposing my workers or sensitive material.
The system boundaries define product ownership and permitted capabilities. The protocol contracts define what a compatible factory must supply.
This page defines required behavior for the first milestone. The runtime and its configuration schema are not implemented yet. These requirements must become enforced checks; this document alone does not make an installation safe.
What is public and what is private
| Category | Public project may contain | Private installation retains |
|---|---|---|
| Work vocabulary | GitHub entity types and relationship meanings | Selected repositories and any non-public work records |
| Factory vocabulary | Role definitions, protocol versions, state and message semantics | Bindings from role instances to concrete workers |
| Communication | Supported file formats, reference rules, acknowledgements and examples | Real message contents and runtime journals |
| Deployment | Configuration schema and synthetic examples | Hostnames, ports, paths, users and access policy |
| Intelligence | No dependency on a particular worker implementation | Providers, model choices, prompts, launcher commands and credentials |
The graph presents roles and approved work information. It does not display provider identities, model choices, launch commands, prompt contents, secret locations or raw runtime records. Role identifiers exposed to the client must not encode those private details.
Public source code is not a public dashboard instance. A real installation requires authenticated, authorised access to its own data. The public demo is a separate, synthetic-data mode and must not inherit a real installation's credentials, files or repositories.
Required configuration categories
The configuration ticket must define one versioned schema, a synthetic example, validation rules, and a field-by-field disclosure classification. Runtime settings are configuration rather than installation-specific constants.
| Category | Required choices | Default boundary |
|---|---|---|
| Mode | Synthetic demo or real installation | Demo has no real sources or credentials. |
| GitHub | Approved API origin, repository allowlist, credential reference | No unconfigured repository reads; no mutations. |
| Local input | Explicit read roots, permitted files, supported protocol version, bounded sizes | No home-directory or machine discovery; reject path escape and symlink escape. |
| Graph projection | Approved role fields, relationships, statuses and source references | Omit raw journal text and worker internals. Unknown fields do not pass through. |
| Serving and access | Bind address, port, authenticated origin and viewer access scope | Loopback by default; wider exposure requires a complete explicit access configuration. |
| Secrets | Server-side references to externally supplied secret values | Never embed values in source, configuration examples, URLs, browser bundles or client storage. |
| Runtime storage | Dashboard-owned cache and diagnostic locations, retention | Never write to source files. Support output is redacted and excludes raw records. |
The first milestone does not need a secret manager, worker installer, remote agent, or setup wizard. A clear configuration validator and minimal operator instructions are sufficient. Credential availability is reported without printing its value or private location.
Network and filesystem boundaries
At runtime the server's only external application traffic is read access to configured GitHub resources. It must not follow a redirect to an unapproved origin or accept an arbitrary URL from a graph item. A broad token must not make a write operation available through the dashboard.
Browser assets are served locally with the application. No analytics, remote fonts, telemetry, error-reporting service, external script CDN, automatic update check, or model-provider connection belongs in the runtime. An explicitly opened GitHub source link is operator navigation, not an automatic background fetch. Build and package acquisition are a separate, documented installation concern.
Local integration reads only explicitly configured communication inputs. The first release never writes questions, answers, acknowledgements, control files or source journals. It never launches a process described by an input file. Dashboard-owned state must be separately configured; it cannot reuse a source directory as a cache.
%%{init: {'flowchart': {'nodeSpacing': 20, 'rankSpacing': 35, 'padding': 12}, 'themeVariables': {'fontSize': '15px'}}}%%
flowchart TD
subgraph private[Private runtime]
settings[Private settings] -->|Configure| service[Read service]
end
service -->|Approved fields| browser[Browser]
The diagram separates private configuration from the browser-visible projection. The two configured sources feed the read service as shown in the roadmap. The browser never receives the server's configuration object. The service must enforce the boundary before serialisation, rather than hiding sensitive fields in the UI.
Failure behavior and release proof
Unsafe, incomplete or unsupported configuration refuses source activation and gives a redacted explanation. A source that becomes unavailable remains visibly unavailable; old data carries its last successful read time rather than appearing current. Untrusted record text is data, not an instruction, executable command, URL to fetch or HTML to render.
The release checks include deliberate negative controls: secret sentinels in denied fields, path traversal and symlink attempts, an unapproved repository or network destination, attempted GitHub mutation, malformed or oversized local records, and an installation with missing access configuration. Each must be refused or omitted at its defined boundary. Secret sentinels must be absent from browser payloads, generated assets, errors and support output. Input files are hashed before and after operation to prove read-only behavior.
Findings and user-copied problem prompts use the same approved-field projection. They include no raw source dump, private path, credential or concrete worker implementation. Prompt text is generated locally from a deterministic template; copying never sends a message or writes a mailbox.
A second synthetic installation uses different host settings, repository identities, directory roots and role bindings without changing application source. This demonstrates portability without publishing a real machine's details.
No project can promise perfect safety against every environment or operator decision. Release evidence must state the supported deployment, the checks performed and remaining limits. The operator reviews that evidence and configuration contract before a release proceeds.
Decisions and limits
| Decision | Chosen approach | Alternative excluded from the first release |
|---|---|---|
| Worker integration | Read configured communication files | Call providers, install workers or launch processes |
| Private values | Resolve references only on the server | Put secrets or worker bindings in browser configuration |
| Disclosure | Explicit permitted fields | Send full records and conceal them visually |
| Local authority | Read source files | Write mailbox or control messages |
| Installation help | Validate and explain required inputs | Discover or repair the operator's machine automatically |
The roadmap carries future communication and control goals. The ticket drafts make these boundaries acceptance work rather than optional polish.