Skip to Content
OperatingThe customer profile
Operating · Customer profileDeployment profileA setting that selects customer or development behaviour. Customer mode refuses development credentials and uses the signed-in session as the identity.

The customer profile, refuses the development shortcuts.

One environment variable is read in three places. Each box sets the development behaviour against the customer behaviour.

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.profile holds the four application secrets and a minimum length. In the customer profile, require_customer_safe checks 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.connect has a development fallback address for the database. In the customer profile a missing DATABASE_URL is an error, not a quiet connection to a database nobody chose.

What changes between the two profiles

BehaviourDevelopmentCustomer
Entry point./lens ops starts and tests the services; it is for Novus engineers only./lens setup and the other ./lens installation commands
Session secreta development value is used, with a warningmust 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 warningmust 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 viewerthe session is the only identity; with no session the viewer is null and the request is refused
Reasoning service, reached through the web applicationopen 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. toolsregistered, so the development ask gate and external MCP clients can reach themnot 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 materialused 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 401 that says a named viewer is not trusted.
  • ./lens setup, ./lens start and every other ./lens command check .novuslens.env before Compose starts anything, so most refusals appear there first.
  • A development-only variable in .novuslens.env has 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.

Last updated