Skip to content

Record visibility

On this page you will learn:

  1. which visibility levels a record can have in an organization and who sees each;
  2. what visibility a new record gets;
  3. how to change visibility, and why an agent cannot get around the rule.
VisibilityIn the accountAPI valueWho sees it
Author only“only me”authorThe author alone. This is a draft: neither the head nor the admin sees it while the author works there
Unit“the unit”unitPeople in the record’s node and every node below it; heads and the admin whose subtree contains that node
Project“the project”projectActive members working in the record’s project, contractors included. A key bound to a different project does not find it
Whole organization“the whole organization”organizationEvery active member of the organization except contractors

Role exceptions:

  • a contractor sees only their own records and “project” records;
  • an auditor sees no records at all;
  • a person being offboarded or already gone, and a person whose access term has ended, sees nothing;
  • the recipient of a departed employee’s knowledge sees all of that person’s records, drafts included — see Offboarding.

The server sets visibility on remember; the agent does not choose it:

Who savesVisibility of the new record
Member, head, admin“the unit” — the node the author is attached to
Contractor“the project”

The author and node come from the key used for the call. That is why every person needs their own key: a shared team key mixes up authorship and breaks knowledge handover on offboarding.

The rule is turned into a condition of the SQL query and applied inside the query, not as a filter afterwards. This holds on every read path:

  • search and the graph relations in search results;
  • validate_memory;
  • forget — you cannot delete a record you cannot see;
  • the account: the organization’s Memory tab and Handed-over knowledge;
  • the archivist, which links a new record only to records its author can see.

A record you cannot see appears neither in results nor in graph relations. Asking the agent to “search harder” does not help: the server simply never returns someone else’s draft.

Ben's agent ── search("how do we deploy staging") ──► MMW
│
SQL: organization records where
(author = Ben)
OR visibility = organization
OR visibility = project
OR (visibility = unit AND node ∈ Backend, Engineering, Northwind)
│
◄──────────────── permitted records only ───────────────┘

Northwind has four records:

RecordAuthorVisibility
“Staging is deployed via the systemd unit app-staging”Annathe unit (Backend)
“Candidate to replace the queue: NATS, still comparing”Benauthor only
“Client X API: limit of 100 requests per minute”Verathe project
“Releases go out on Tuesdays”Davidthe whole organization

Who finds what:

PersonStagingNATSAPI limitReleases
Ben (member, Backend)yesyes, his ownyes, if in the projectyes
Anna (head of Backend)yes, her ownnoyes, if in the projectyes
David (admin, root)yesnoyes, if in the projectyes, his own
Vera (contractor)nonoyes, her ownno
Grace (auditor)nononono

Neither Anna nor David sees Ben’s NATS draft. If Ben is offboarded and his knowledge is handed to Anna, she will see that draft too.

A departed employee’s knowledge. The recipient opens Handed-over knowledge → “Open records” and, for each record, picks a value under “Visible to”: only me, the unit, the project or the whole organization. Each such change is written to the audit log.

Your own records. The server lets an author change the visibility of their own records through the account API; the account UI has no separate switch for your own records yet. The request is sent on behalf of the user signed in to the account, and the organization is selected with the X-MMW-Space header:

Turn your own record into a draft
PATCH /api/v1/org/memories/4d428a41-e7b0-4f81-a886-f40c6f6c766c
X-MMW-Space: <organization ID>
Content-Type: application/json
{ "visibility": "author" }

Response:

{ "id": "4d428a41-e7b0-4f81-a886-f40c6f6c766c", "visibility": "author", "org_node_id": "…" }

Allowed visibility values: author, unit, project, organization. With "to_my_unit": true the record moves to your current node, so “the unit” now means your new unit. You can change only your own records and records handed over to you; for anyone else’s record the server answers memory_not_found.