Skip to Content
Data · Input formats

The org chart, the teams before their dependencies.

An org chart export records the teams and reporting lines in the twinTwinNovusLens’s model of one organisation, built from records about its teams, services and how they rely on one another. It is only as current as those records.. Each unit in the chart becomes a team 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., and the accountable head is recorded on the cell where the chart names one. The chart records reporting lines, rather than dependenciesDependencyA link where one unit needs something from another. A dependency is not a reporting line: it shows where work relies on something else. in the work. It produces no dependencies, so the twin has no 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. until an interview or telemetryTelemetryMeasurements and activity records sent by a running system, such as ticket timings, network traffic or workflow results. adds one. A critical path is the dependency chain with the greatest total coordination weight. It identifies a structural constraint rather than elapsed time.

Everything the chart establishes lands 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., which means a document backs the record on the evidence ladder. A chart is the first input to bring in. A later interview that disagrees with the chart leaves the chart in place and records the difference as a findingFindingA difference in the records that needs a decision. It includes its sources and can describe a slow handoff, disputed fact or missing owner..

Illustrative chart. Units become team cells, nested by parent; an external vendor is marked, and no dependency edges appear.

What the chart carries

A chart carries units at team or function level. Individuals never become cells. The only names a chart contributes are the accountable heads, which sit in the same register as owners named in an interview. Person-level data belongs in the people export, described on the people format.

Docker commands

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

./lens connectors orgchart --org harbour --fixture org_chart.json

Use your organisation id and the chosen account wherever a command asks for them.

Give host paths for automatically uploaded inputs; use /tmp/ paths for files already inside the container. Follow the complete Operations manual for accounts, configuration and command access.

Before you start

  • Export the org chart from the HRHRHuman resources: the organisation's people records and the team that maintains them. system into the shape below, and save it as a .json file.
  • Run the command from the installation directory. ./lens runs it in the installation’s reasoning service, with the installation’s configuration. It first copies any local file named by --fixture, --file, --mapping or --enrolment into the service.
  • Import the chart before the estate inventories, the people export and the domain taxonomyDomain taxonomyThe list of business areas, their owners and the teams or services that do the work in each area.. The team cells the chart creates are what those inputs refer to.
  • Choose the organisation id once and use it in every command. The --org option decides which organisation the data belongs to.

The JSON shape

Top level

FieldRequiredWhat it does
unitsYesA non-empty list of units. A file without one is refused.
orgListed as required by the guideThe 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. does not read this field. The organisation is set by the --org option.
org_nameNoThe organisation’s display name. It is recorded on the log with the chart.
descriptionNoOne sentence about the organisation, recorded with org_name.

Each unit

FieldRequiredWhat it does
unit_idYesThe stable id of the unit, in lower case with no spaces. The connector converts it to lower case with hyphens. Grid Ops and grid-ops become the same id, so including both is refused.
nameNoThe display name. Defaults to the unit id.
parentNoThe unit_id of the containing unit. Absent means top level. A parent that is not in the file is refused.
headNoThe accountable head, as a name or a role. The accountability mapMapThe view of teams, services and their dependencies for the selected part of the organisation. Details appear beside the map. shows it.
responsibilityNoWhat the unit is answerable for, in one sentence.
granted_authorityNoWhat the unit may decide, in one sentence.
externalNotrue for a vendor or partner unit. Absent means not stated.

Worked example

{ "org": "harbour", "units": [ {"unit_id": "operations", "name": "Operations", "head": "Chief Operating Officer"}, {"unit_id": "bookings", "name": "Bookings desk", "parent": "operations", "head": "Head of Bookings"}, {"unit_id": "customs", "name": "Customs filing", "parent": "operations", "head": "Head of Customs", "granted_authority": "files with the border agency without further sign-off"}, {"unit_id": "freightsoft", "name": "FreightSoft (vendor)", "external": true} ] }

The repository includes a fictional Meridian Grid chart at apps/mesh/fixtures/meridian_org_chart.json. The fixturesFixtureA prepared set of records used for a test or demonstration. A fixture is sample data, not a live customer's records. in apps/connectors/fixtures cover the other inputs. Use reviewed customer records for a real import.

How to send it

In the browser

Sign in, then open /import. Choose the file. A file whose top-level units key is a list is read as an org chart. The page shows a proposal to check, and nothing is recorded until a person confirms it on screen. Only an operator can confirm an import. Other roles see the page read-only.

On the command line

./lens connectors orgchart --org harbour --fixture org_chart.json
  • --org is a top-level option, so it comes before the subcommand name orgchart.
  • --fixture is the path to the chart file.
  • --host and --port default to the meshMeshA set of connected Mycelium services that exchange updates and keep the NovusLens log. address in the environment: NOVUSLENS_MESH_HTTP_ADDR (default 127.0.0.1) and NOVUSLENS_MESH_HTTP_BASE (default 8400). Change them only if the mesh runs somewhere else.

What you will see

On success the command exits without error and prints one summary line. The shape of the line is:

org chart: 4 units seeded at rung shown (3 with accountable heads, 2 nested; artifact 3f9a1c0b2d4e…) — no edges: a chart declares boxes, not flow

The figures above belong to the illustrative example, not to a real run. The map shows the result after the projectionProjectionThe regular pass that brings the read model up to date with the canonical log. It runs every 30 seconds by default. service’s next pass, about 30 seconds by default.

On the map:

  • Each unit appears as a team cell, nested under its parent.
  • Each named head appears as the accountable ownerAccountable ownerThe person recorded as answerable for a team, service or agent. NovusLens does not assume that this person is also the one who runs it day to day. of its cell, marked as shown.
  • External units are marked as external. A unit with no external value is recorded as not stated.
  • There are no dependency edges, so the map has no critical path yet.

The chart body is stored as an 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.. Its identity is the hashHashA fixed-length fingerprint calculated from content. Comparing fingerprints helps detect changes and match records. of its bytes, so sending the same file again refers to the same artefact.

What a re-run does

The table below is the guide’s description of a re-run.

SituationWhat happens
Stable identityThe unit id. The file itself is known by its bytes, so the same file is one artefact.
The same file twiceEvery unit written again at shown with the same values. No change on the map.
A changed name, parent, head, responsibility or authorityAuthorityWhat a team or agent is allowed to decide or do. For an agent, this comes from a named person or system that grants permission.The latest chart wins; a moved unit moves under its new parent.
A head, responsibility or authority omitted from a unitKept as it was. An omission is “not stated”, never a removal.
external omittedKept as it was.
A renamed unit idA new cell. The old one stays, with its children, unless each child’s parent is changed too.
A unit omitted from the fileUntouched, still on the map at shown, citing the older chart. There is no snapshot mode and no removal.
A parent not in the file, a reporting loop, a duplicate idThe whole file is refused before anything is written.
A later interview that contradicts the chartThe chart wins. The difference becomes a finding, never an edit.
RetentionEvery commit stays on the log. The chart body stays as evidence unless a steward purgesPurgeRemoving a stored document’s contents while keeping a record that it was removed and why. Conclusions that used it must be checked again. it, which drops every rung it backed to toldToldEvidence that somebody stated the value. It is the weakest level, and it is always attributed to its speaker..

Two cases the table does not spell out, as the code behaves:

  • Omitting name on a later run resets the display name to the unit id. Keep the name in every file that should keep it.
  • The parent is set from each file. A unit whose parent is left out on a later run moves to the top level of the map.

When something goes wrong

A refusal stops the command before anything is written. The command prints a Python traceback and exits with a non-zero status. The reason is the last line of the traceback. The next line names a file with the full traceback. That file can hold secrets: see Configuration. These are the refusals:

MessageCause
an org chart needs a non-empty 'units' listunits is missing, empty or not a list.
every unit needs a unit_idA unit has no unit_id.
duplicate unit '<id>'Two units become the same id after conversion to lower case with hyphens.
unit '<id>' reports to undeclared '<parent>'A parent names no unit in the file.
reporting cycle among: [...]Units report to each other in a loop.

Fix the file and send it again. A refused file leaves the map as it was.

Last updated