docir — design documents Graph

Documents / Reference / ref-301bcc84b75c

Actor catalog — who and what drives docir

The eight actors that drive docir, their goals and their authority (there is no permission model).

ref-301bcc84b75creferenceactive#agents#docs
View as Markdown◉ View in graph

Reconstructed from the code and tests. observed means read off code or executed; inferred means reasoned from the design.

ACT-001 — AI coding agent

Type: system · Frequency: every coding session; the primary caller Flows: arch-3e305bc76ff0, arch-f220a644d654, arch-ccfcceeb35eb

Goal. Before writing code, obtain the design decisions/issues/architecture notes relevant to the current task, cheaply enough to afford doing it every session.

Authority. Full write authority — may add, update, archive, delete any document and mutate the tag registry. No permission model exists (adr-90e994d931cc), so it can do anything a human can.

Evidence: README.md:8, src/docir/entry_points/cli/rendering.py:1-9, src/docir/modules/agents/infra/templates/skill.md, src/docir/modules/documents/application/dto.py:86-91

Confidence: observed

Notes: The token-trimming, the skeleton read contract and the JSON --help all exist only for this actor. It is the design centre of the product.

ACT-002 — repository maintainer / developer

Type: human · Frequency: at decision points; bursty, low volume Flows: arch-3e305bc76ff0, arch-f220a644d654, arch-0a3c2d6d54a6, arch-90c90751344f, arch-ccfcceeb35eb, FLOW-006

Goal. Capture a decision once, in the repo, and have it resurface when it becomes relevant — without maintaining a wiki.

Authority. Unrestricted. Also the only actor who can edit markdown files directly.

Evidence: README.md:50-68, src/docir/entry_points/cli/rendering.py:21

Confidence: observed

ACT-003 — CI job

Type: scheduler · Frequency: per pull request Flows: arch-0a3c2d6d54a6

Goal. Block a merge that would corrupt the document graph (duplicate ids, dangling refs).

Authority. Read-only; signals via exit code only.

Evidence: src/docir/entry_points/cli/app.py:419-440, CLAUDE.md

Confidence: observed

Notes: This actor is asserted by the docs but has NO fixture, example workflow, or template anywhere in the repo — .github/workflows/ runs the project's own tests, not docir check. Its requirements are therefore inferred, and they are not met (issue-9cb85759076d).

ACT-004 — embedding scheduler

Type: scheduler · Frequency: debounced 2s after any content write (daemon); inline otherwise Flows: arch-3e305bc76ff0, arch-f220a644d654

Goal. Bring semantic vectors up to date after content changes, off the write path.

Authority. May recompute or drop any embedding row. Cannot alter documents.

Evidence: src/docir/modules/indexing/infra/scheduler.py:27-44, src/docir/modules/indexing/infra/scheduler.py:105-115

Confidence: observed

ACT-005 — docir daemon

Type: system · Frequency: continuous while in use; exits after 900s idle Flows: arch-3e305bc76ff0, arch-f220a644d654, arch-90c90751344f

Goal. Keep the embedding model warm and serialize writes into the store.

Authority. Executes every command on behalf of a client; self-terminates when idle.

Evidence: src/docir/platform/transport/server.py:20-49, src/docir/config/settings.py:29

Confidence: observed

Notes: Load-bearing far beyond its stated role: it is the only thing that makes concurrent id allocation safe (PROBE-10 vs PROBE-11). The docs attribute that safety to the SequenceRow counter instead. See issue-389dc5dac58a.

ACT-006 — git / branch merge

Type: external_partner · Frequency: per merge Flows: arch-0a3c2d6d54a6

Goal. Integrate two developers' documents into one history.

Authority. Can create any file state, including two files with the same id.

Evidence: src/docir/modules/documents/application/services/maintenance_service.py:84-124, tests/modules/documents/test_merge_safety.py

Confidence: observed

Notes: A genuine non-human actor: the duplicate-id file scan exists solely because git can produce a state no docir command would.

ACT-007 — document owner / steward

Type: human · Frequency: per review cadence (365d for decision/architecture, 180d for qa/ops) Flows: arch-0a3c2d6d54a6

Goal. Re-verify that a document is still true when its review cadence elapses.

Authority. None modelled — owner is a free-form string with no behaviour attached.

Evidence: src/docir/modules/documents/domain/entities/document.py:37, src/docir/modules/documents/domain/services/graph_checks.py:100-102

Confidence: observed

Notes: The staleness feature names this actor but never reaches them: owner is only ever interpolated into a check message. No notification, no queue, no "my documents" filter. The actor exists in the data model and nowhere in the flows. See issue-b4f441c7210f.

ACT-008 — support / operator recovering a broken store

Type: human · Frequency: unknown — no data Flows: arch-0a3c2d6d54a6

Goal. Diagnose and repair a store that has duplicate ids, dangling refs, or a lost doc.

Authority. Unmodelled.

Confidence: assumed

Notes: This actor was NOT served at the time of the 2026-07-26 pass: docir check reported duplicate-id and dangling findings and no command could act on them. It is served now. docir check --fix re-issues duplicate ids (the oldest file keeps the id, so existing edges stay valid) and drops dangling edges, reporting every change; docir check --strict is the pre-merge gate that catches both. malformed and unknown-type are still returned unrepaired in RepairResult.remaining — deliberately, because each needs somebody to read something and decide what the file or the schema should say. The written procedures are run-22e0a6ce6ae1 (AI code-check checklist) and run-f4a756206fe0 (upgrading docir in a project). See issue-476b4e188fab for the argument.

Still unmodelled: this actor has no authority concept and no usage data. docir has no actors or permissions at all (adr-90e994d931cc), so "operator" remains a role a person plays, not something the system knows about.

To amend: Re-verify: