The customer profile, refuses the development shortcuts.
What you will achieve
The customer profile removes development shortcuts and requires customer secrets. This page explains those rules and helps you understand sign-in and configuration refusals. The settings are on Configuration and Secrets.
What it is for
The platform has two deployment profiles. The development profile keeps the conveniences that Novus engineers need to build and test the product. The customer profile is the one a customer’s operators run. It removes every convenience that could let someone act as another person, or that would run on a value nobody chose for the customer. Sign-in, the identity of every action in the audit trail, and the secrets that protect them all depend on this switch.
How it works
The profile is one environment variableEnvironment variableA named setting made available to a running program. The customer launcher reads these settings from the installation environment file., CONWAY_PROFILE. Its value customer selects the customer profile; any other value, or no value, is development. Every installation runs the customer profile: Compose sets CONWAY_PROFILE=customer for each application service, and .novuslens.env cannot change it.
The platform reads the switch in three ways:
- Secrets.
common_py.profileholds the four application secrets and a minimum length. In the customer profile,require_customer_safechecks secrets at start-up. A missing secret, public development value or short secret stops the process. The reasoning service, the personnel ingestIngestRead supplied records or documents and add their information to NovusLens, after the required checks. and the web application each call it for the secrets they use. See Secrets. - Identity. The web application resolves the viewer from the signed-in session only. The development convenience of a
?viewer=parameter is not available, and nothing is defaulted. See the table below. - Database.
conway_graph.db.connecthas a development fallback address for the database. In the customer profile a missingDATABASE_URLis an error, not a quiet connection to a database nobody chose.
What changes between the two profiles
| Behaviour | Development | Customer |
|---|---|---|
| Entry point | ./lens ops starts and tests the services; it is for Novus engineers only | ./lens setup and the other ./lens installation commands |
| Session secret | a development value is used, with a warning | must be set, not the public value, at least 24 characters, or the web application refuses to sign sessions |
| Identity saltIdentity saltA secret value added before employee identifiers are turned into fingerprints. Keep the same value so later imports can still match existing people. | a public development saltSaltExtra data mixed into a value before its fingerprint is calculated. It makes matching or guessing the original value harder. is used, with a warning | must be set; the personnel ingest never hashesHashA fixed-length fingerprint calculated from content. Comparing fingerprints helps detect changes and match records. with the development salt |
| Viewer | ?viewer= or the cxo-<org> convention can name the viewer | the session is the only identity; with no session the viewer is null and the request is refused |
| Reasoning service, reached through the web application | open on loopbackLoopbackA network address that refers to the same host, such as 127.0.0.1. Other hosts cannot reach a service through that address. | every request except /health and /ready must carry the service tokenService tokenA secret value sent with requests between NovusLens services. The receiving service refuses requests with a missing or wrong value.; otherwise 401 |
| SubstrateSubstrateThe shared Mycelium software beneath NovusLens. It stores records and lets NovusLens components exchange them. gatewayGatewayA service that accepts requests and passes them into another system. The Mycelium gateway gives NovusLens access to the mesh. MCPMCPModel Context Protocol: a standard way for an AI application to discover and call named tools supplied by another program. tools | registered, so the development ask gate and external MCP clients can reach them | not registered, unless setup saved NOVUSLENS_MCP_EXPOSE=1; then they reach clients on the installation’s Docker network only |
| ConnectorConnectorSoftware that reads records from a source system, such as an incident tool. A customer-written file connects those records to teams or services in NovusLens. demonstration material | used by the simulated estateSimulated estateA set of example agents supplied for testing and demonstrations. Their findings carry the label “(simulated estate)”. Real customer reports do not carry that label. | the demonstration enrolmentEnrolmentThe operator's recorded permission for a source to send specified record types about named agents, using an identified signing key. and the public fixtureFixtureA prepared set of records used for a test or demonstration. A fixture is sample data, not a live customer's records. key are refused |
The identity salt matters because of the headcount floor. Personnel records are sealed with it, and a group of fewer than five people is never shown as a count. See the privacy floor.
Interfaces
Compose sets the customer profile. The secrets it checks come from .novuslens.env; Configuration lists that file’s settings. The sign-in and identity path a user sees is the web application’s login, described in Troubleshooting.
Invariants and failure behaviour
- The platform never invents a customer secret. A missing secret is a refusal, and the message says where to set it.
- A caller-supplied viewer never outranks a login. In the customer profile a request with no session is refused with a
401that says a named viewer is not trusted. ./lens setup,./lens startand every other./lenscommand check.novuslens.envbefore Compose starts anything, so most refusals appear there first.- A development-only variable in
.novuslens.envhas no effect, because Compose does not pass it to the services.
When something goes wrong
The most common refusals are a missing secret, a short secret and a public development secret. Secrets lists each with the text the platform prints. For anything else, start with Troubleshooting.