Skip to Content
Data · Input formats

Assessments, on the record and not yet measured.

An assessment is a document the organisation already holds, retyped into a short JSONJSONJavaScript Object Notation: a text format for data, using named fields, lists and values. Configuration files and service messages use it. file. Three kinds are accepted. The guide describes each as landing at the shownShownEvidence that a document supports a value. A recovery plan that states a target shows the target, but it does not show that the target was achieved. rungRungOne of three levels of support for a recorded value: told, shown or measured. The level appears beside the value.. The operational review’s scores are written at the shown rung. The finance class and regulation scopeScopeThe work, data, activity or access that a rule, statement or calculation covers. For access, it names the records an account can see. For team measures, “Own operations” covers the selected unit. “Including descendants” adds the units beneath it. are stored with their sourceSourceA document, interview statement, measurement or export that supports a value. Each source has a date and a stated scope. or author. An assessment is on the record, but it is not a measurement. A measuredMeasuredThe top evidence level: a connected source recorded the observation within a stated period. A measurement shows what was observed on that occasion, not that it always holds. value comes from a feed, not from an assessment.

Three terms are used on this page. C/A/RC/A/RThree separate scores for a team or service: Complexity, Agility and Recoverability. Each uses current evidence and the customer’s stated scoring rules. means Complexity, Agility and RecoverabilityRecoverabilityThe R in C/A/R: how well a team or service restores acceptable service after a failure. Recovery times and tested alternatives can supply evidence., the three scores each cellCellA box on the map that stands for a team, service, supplier or AI agent. It is a unit you can inspect, not necessarily a department or a person. carries. A cell is one unit of the organisation’s structure. The rung is the source class that a value carries: toldToldEvidence that somebody stated the value. It is the weakest level, and it is always attributed to its speaker., shown or measured.

The three kinds

KindCommandWhat it carriesWhere it lands
Operational reviewops-reportAn operational resilience review, one entry per cell, with up to three scores from 0 to 100The cell’s C/A/R, at the shown rung
Finance classificationfinanceCost centre or profit centre, per cellA finance claim on the cell
Regulation catalogue and scoperegulationWhich regulations exist and what each demands, and which cells each regulation reachesThe regulation tables in PostgresPostgresThe database software that stores the tables read by the NovusLens screens, along with document bodies, access records and protected personnel records.

Docker commands

For the Compose installation, run commands from the checkout that holds .novuslens.env and compose.yml. Prepare the input described below, then import it with ./lens, which uploads the file into the running reasoning containerContainerA running program with its own packaged software and isolated environment, managed by Docker on the host.:

./lens connectors ops-report --org harbour --fixture review.json

Use your organisation id and the chosen account wherever a command asks for them. For finance or regulation, use that subcommand and give its input file to --fixture.

Follow the complete Operations manual for accounts, configuration and command access.

Before you start

You need the installation running and the meshMeshA set of connected Mycelium services that exchange updates and keep the NovusLens log. node reachable. The three commands write through the mesh node, and they wait for it to report healthy. The node address defaults to 127.0.0.1 on port 8400.

None of the three commands uses a model. They read the file, check it, and write it. The local modelLanguage modelSoftware that produces text from instructions and supplied context. NovusLens checks its answers against the records retrieved for the question. runtimeRuntimeThe software that runs a model or agent. A model runtime answers model requests; an agent runtime carries out the customer's agent actions. is not needed.

Every command takes the global --org flag before the subcommand name. Run them from the installation directory.

Operational review

The review is one entry per cell. Each score is a number from 0 to 100, with any fraction truncated to a whole number, on Complexity, Agility and Recoverability. An unassessed score is left out, preserving any earlier value. It is never written as zero.

./lens connectors ops-report --org harbour --fixture review.json

Fields

FieldLevelRequiredWhat it is
cellsTopYesThe list of scored cells.
cell_idPer cellYesThe cell the score belongs to.
complexity, agility, recoverabilityPer cellAt least oneA number from 0 to 100; a fraction is truncated.
notePer cellNoA short note kept with the entry.
sourceTopNoA label for the report.
reportTopNoThe report’s title.
noteTopNoA note for the whole report.
as_of_msTopNoWhen the observation was made, in milliseconds since the epochEpochFor timestamps, the starting point is 1 January 1970 at midnight in the shared world time reference. For evidence policy, it is the recorded version number.. A missing value stays unknown.
periodTopNoThe period the scores cover, as an object.
calibrationTopNoCalibrationCalibrationThe customer's own rule that turns raw figures, such as a gauge, a workflow history or an incident log, into a C/A/R score. A score moves when the calibration moves, and the change is recorded. details. Stored as its own evidence artefactArtifactA stored source file or evidence body that a record can cite. Keeping the exact content lets a reader check what supported the record..

The parser reads cell_id, the three dimensions, note per cell, and as_of_ms, period and calibration at the top. The top-level source, report and note are not read by the parser. They travel only in the stored copy of the file.

Worked example (illustrative)

{ "source": "resilience-review-2026", "report": "Harbour Logistics operational resilience review", "cells": [ {"cell_id": "customs", "complexity": 55, "agility": 40, "recoverability": 35, "note": "filing gateway has no tested failover"}, {"cell_id": "bookings", "agility": 70} ] }

In this example bookings scores only agility. Its complexity and recoverability are not assessed, so they are not written.

What the command does

The command stores the file as an evidence artefact. It checks each cell against the mapMapThe view of teams, services and their dependencies for the selected part of the organisation. Details appear beside the map.. A cell the map holds gets its scores written on the asserted layer, and its scores are marked shown, citing the stored report. A cell the report names but the map does not hold opens an unknown-scored-cell findingFindingA difference in the records that needs a decision. It includes its sources and can describe a slow handoff, disputed fact or missing owner.. The command also satisfies any open request for an ops report.

The command prints how many cells were scored, which were documented, and which were unknown.

Finance classification

The finance and regulation commands look cells up in the read modelRead modelThe database tables used by the map, Ask and Find. NovusLens rebuilds these tables from its history of recorded changes. in Postgres, not in the mesh. A cell committed within the last projectionProjectionThe regular pass that brings the read model up to date with the canonical log. It runs every 30 seconds by default. pass, about 30 seconds by default, is reported as not applied. Send the org chart, and wait one projection pass, before sending these.

Each cell is either a cost centre or a profit centre. Any other value is refused.

./lens connectors finance --org harbour --fixture finance.json

Fields

FieldLevelRequiredWhat it is
cellsTopYesThe list of classified cells.
cell_idPer cellYesThe cell the class belongs to.
classPer cellYescost_centre or profit_centre.
notePer cellNoA note kept with the entry.
sourceTopNoThe label for the classification. When absent, the label is finance: followed by the file name.

Worked example (illustrative)

{ "source": "finance-classification-2026", "cells": [ {"cell_id": "bookings", "class": "profit_centre"}, {"cell_id": "customs", "class": "cost_centre", "note": "statutory"} ] }

What the command does

The command stores the file as an evidence artefact, then writes each known cell’s class as a finance commit that cites the artefact. A cell the map does not hold is printed as not applied. It does not open a finding.

The command then checks whether any cost centre sits on the measured critical pathCritical pathThe dependency chain with the greatest total coordination weight in the map. It identifies a structural constraint. It does not state elapsed time.. If one does, it opens a structurally-starved finding. The finding asks for a review of funding and decision rights. It does not assess funding adequacy, and it does not recommend a reorganisation.

Regulation catalogue and scope

The regulation input has two lists. The catalogue is reference data. It says which regulations exist and what each one demands. The scope rows are the compliance function’s own claims. Each row says which cell a regulation reaches, and who made that claim and why.

./lens connectors regulation --org harbour --fixture regulations.json

Fields

FieldListRequiredWhat it is
reg_idcatalogueYesThe regulation’s stable id.
labelcatalogueYesThe regulation’s name.
regimecatalogueYesThe regime the regulation belongs to.
obligationcatalogueYesWhat the regulation requires, in one sentence.
requirescatalogueYesThe C/A/R dimension the obligation bears on, usually recoverability.
cell_idscopeYesThe cell the claim covers.
reg_idscopeYesThe regulation the claim names.
mapped_byscopeYesWho made the claim.
rationalescopeYesWhy the cell falls under the regulation.

Worked example (illustrative)

{ "catalogue": [ {"reg_id": "ucc-art-15", "label": "UCC Art. 15 — accuracy of customs declarations", "regime": "UCC", "obligation": "declarations must be accurate and the filing capability recoverable", "requires": "recoverability"} ], "scope": [ {"cell_id": "customs", "reg_id": "ucc-art-15", "mapped_by": "Head of Customs", "rationale": "the filing gateway is the declaration channel"} ] }

What the command does

The catalogue is written to the regulations table. Each scope row is written to the cell-regulations table, with its mapped_by and rationale. A scope row for a cell the map does not hold is printed as not applied.

The command then checks which recoverability obligations lack measured evidence. A cell in scope of an obligation that requires recoverability, and which has no measured recoverability, opens a regulatory-posture-gap finding. The finding says that no measured evidence exists yet. It does not say that anything is non-compliant. NovusLens computes posture only for recoverability obligations. Reporting and accountability obligations are recorded as scope, and the command says so in its output.

What a re-run does

The guide sets out these rules. The table below quotes the guide’s account for each input. Each column is one input. The code paths were not traced row by row.

SituationOperational reviewFinanceRegulation
Stable identityThe cell, on the reported layerThe cellThe regulation id; the pair of cell and regulation
The same file twiceNo changeNo changeNo change
A changed score, class or rationaleThe latest winsThe latest winsThe latest wins
A dimension omittedLeft out: the earlier value for that dimension is keptn/an/a
A cell omitted from the fileUntouchedUntouchedUntouched
A cell the map lacksAn unknown-scored-cell findingPrinted as not applied; no findingPrinted as not applied; no finding
An older report sent after a newer oneOverwrites, in the order receivedOverwritesOverwrites
A measured score already on the cellThe reported value lands on its own layer; the measured one standsn/aA posture gap closes only when the measured rung is reached
RemovalNoneNoneNone: a mapping or a regulation cannot be retired
Where it livesThe logThe logThe database only: a rebuild from the log does not restore regulation rows, so restore them from a backup. The catalogue of regulations is shared reference data, not per organisation
Findings raisedDo not close by themselves when the condition clearsSameSame

Refusals and failures

  • Finance, wrong class. Any class other than cost_centre or profit_centre stops the command. The error names the cell and the value it received. The command prints the error as a Python traceback, not as a short message.
  • Operational review, invalid scores. A score that is not numeric, or a boolean, is dropped, and a fractional score is truncated to a whole number. A cell with no valid score left is dropped too. Neither case opens a finding. The parser keeps only valid dimensions and skips a cell with no cell_id.
  • Regulation, missing field. A catalogue or scope row without a required field stops the command with a Python error, KeyError. The message names only the missing field.
  • Mesh node down. The operational review and finance commands wait for a healthy mesh node before writing. If the node remains unavailable, neither writes anything. The regulation command writes the catalogue and the scope rows to Postgres before it contacts the node. If the node is down, those rows are kept, and the command fails before it opens any finding.
Last updated