Skip to content
Back to skills

Docs

ASecurity

The procedure for every doc change in common-docs or a repo's CLAUDE.md, FEATURE.md or SKILL.md. Use when creating, editing, moving or deleting a doc, finding duplicate or disagreeing docs, planting a repo pointer, consolidating a node, or on /docs and the daily docs-steward run.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 3, 2026
documentationpythongonodegitfrontenddocumentation

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 3, 2026

npx -y skills add armanisadeghi/ai-matrx --skill docs --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Docs?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Docs
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/armanisadeghi-docs/badge)](https://www.skillsdirectory.com/skills/armanisadeghi-docs)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: docs
type: Skill
title: "docs — place, edit, dedupe, verify and delete documentation"
description: "The procedure for every doc change in common-docs or a repo's CLAUDE.md, FEATURE.md or SKILL.md. Use when creating, editing, moving or deleting a doc, finding duplicate or disagreeing docs, planting a repo pointer, consolidating a node, or on /docs and the daily docs-steward run."
tags: [meta, docs-system]
timestamp: 2026-10-02T00:00:00Z
---

<!-- SYNCED COPY — do not edit here.
     Canonical: common-docs/skills/docs/SKILL.md
     This file is distributed to every consuming repo by
     common-docs/meta/scripts/sync_skills.py. Edit the canonical, run the
     sync, and commit each repo. Edits made here are overwritten and lost. -->

# docs — the procedure

The rules are [the rules of this bundle](/policies/document-types.md) and the
[domain tree](/policies/domain-tree.md). Read both once; this skill is only how to apply them.

## 1. Place it

1. Find the subject's node in the [domain tree](/policies/domain-tree.md) (Domain → Feature →
   Sub-feature). The doc goes in that node's folder under `systems/`, or in a temporary
   `projects/` folder only while work is tangled across two or more homes.
2. No node fits: add a feature where its domain clearly holds it (same commit, tell Arman), or
   propose the change in chat. Never invent a domain.
3. Something already covers the subject? Edit that file. Never create a parallel doc.
4. A repo keeps only rules tied to a code path in that directory (a trap, an import ban, a file
   map). Everything with meaning (what, why, status, plans, contracts, vision) lives in the node.

Done when: the target path is a node folder and no other file covers the subject.

## 2. Edit = whole-document review

1. Read the whole doc, not the section you came for.
2. Verify every claim you keep or add against live code, the DB, or git. A doc's own "verified"
   is not evidence. What cannot be checked here is marked `UNVERIFIABLE — <what would prove it>`.
3. Put the change where it belongs and merge in place: no addenda, no "Update:" blocks, no
   history, no changelog. Two lines saying one thing become one.
4. Cut what a frontier model already knows and what a command or file read reveals.
5. Never lose a rule: tightening keeps every invariant, path and pointer. Removing a rule is
   something you say out loud in your report.

Done when: the doc reads as one voice and every claim in it is currently true.

## 3. Dedupe and verify (one subject)

1. **Census.** Grep the subject's terms across common-docs and every repo it touches; follow
   one ring of links. List every file that makes claims about it.
2. **Elect the survivor**: the node's file from step 1.
3. **Classify each disagreement:** fact vs fact → reality decides, fix the loser; doc vs
   Arman's words → his words win, and code that drifted from them is a finding, not a doc fix;
   his words vs his words, or a disagreement about meaning → step 6, never resolved by you.
4. **Move, never copy.** One source file at a time: merge its unique truth into the survivor,
   `git rm` the source, repoint every inbound reference in every repo, commit all of it in one
   command. A file never exists in two places across a commit.
5. **Prove it.** For every deleted path, grep all repos plus common-docs: it comes back empty.

Never touch: generated files, a `.md` that code reads (grep `.py`/`.ts` for its name first),
a published package README, `inbox/`, a repo's `.arman/`. A spotted duplicate that is not
blocking you is still yours: run this section or dispatch it, never just report it.

## 4. Delete what is finished

Finished work shrinks to a status phrase on the node ("Gmail: live"). Finished projects, closed
handoff items, stale plans and bannered "superseded" docs are deleted, never archived. Git
holds history.

## 5. Arman's words

Any verbatim quote of Arman found outside a `VISION.md` moves, verbatim and dated, into the
closest node's `VISION.md` (create it with `type: Vision`, `authority: owner` if missing), and
the source line is cut. An agent's paraphrase attributed to him is deleted. Never rewrite,
trim or "fix" existing VISION content. You never set `authority: owner` on your own writing.

## 6. Conflicts

A disagreement about intent or a ruling: one or two sentences in
[/operations/conflicts.md](/operations/conflicts.md), then ask Arman in chat. When he answers:
delete the entry, apply the answer, tell him how many remain.

## 7. Repo pointer lines

Every repo that touches the node gets ONE line, in that feature's `FEATURE.md` or else the repo
`CLAUDE.md`, never a stub file and never restated content:
`Cross-repo system-of-record: /Users/armanisadeghi/code/common-docs/<path> — read it before touching this feature in ANY repo.`
A renamed or deleted doc orphans its pointers: grep every repo for the old path in the same
session.

Repo checks after a doc change: aidream `python3 scripts/check_doc_links.py` (`--all` for
package CLAUDE.md, PRINCIPLES.md, FOUND_DEFECTS.md, skills) and
`python3 scripts/check_docs_guards.py`; matrx-frontend `pnpm check:docs-guards` and
`pnpm check:doc-claims`. `FOUND_DEFECTS.md` IDs: [defect ownership § Entry IDs](/policies/reality-is-the-referee.md).

## 8. Finish

1. Frontmatter with a non-empty `type` on every new `.md`; bundle-relative links; the folder's
   `index.md` updated.
2. `python3 meta/scripts/okf_lint.py` exits 0. Editing a SKILL.md → also the
   [skill-authoring](/skills/skill-authoring/SKILL.md) rules and
   `python3 meta/scripts/skill_descriptions.py lint`.
3. **Fresh-reader review** for guidance you wrote (CLAUDE.md, SKILL.md, STATE, FEATURE, memory):
   dispatch one fresh `standard` agent with only the file paths and
   [reviewer-brief.md](/skills/docs/reviewer-brief.md) sent verbatim. Apply each `CUT`,
   `REWRITE`, `MOVE`; reject one only with a factual reason; answer each `ASK` from live
   evidence; turn a `GUARD` into code or a `feedback` item.
4. Commit by pathspec, `git pull --rebase`, push. Unpushed docs do not exist.

## Daily sweep (the docs-steward schedule)

Run in order; the commit message carries the scorecard (no log file).

- [ ] `okf_lint.py` to zero; `skill_descriptions.py lint --workspace`; `sync_skills.py --check`.
  In a detached worktree pass `MATRX_CODE_ROOT=/Users/armanisadeghi/code` or they find no repos.
- [ ] **Inbox:** each unprocessed item in `inbox/` is dispositioned per
  [/inbox/README.md](/inbox/README.md) and moved to `inbox/processed/<YYYY-MM>/`. Nothing in
  `inbox/` is ever deleted.
- [ ] **Tree drift:** every `platform.taxonomy_node.docs_path` exists; a new `systems/` folder the
  tree lacks gets added (clear domain) or a conflicts line plus a chat proposal.
- [ ] **Rotation health:** the separate dedupe-and-verify schedule runs §3 daily on the two nodes
  with the oldest `platform.taxonomy_node.last_reviewed_at` (nulls first) and stamps it. Report
  reviewed / never reviewed / oldest; a node past 45 days is an alarm in chat.
- [ ] **Delete finished:** §4 across new and touched docs.
- [ ] **Conflicts:** every entry in [/operations/conflicts.md](/operations/conflicts.md) is still
  open (a settled one is deleted) and phrased so he can answer it in seconds.
- [ ] **DDL guard log:** every row in `platform.ddl_guard_unacked` is acknowledged with live
  evidence through `platform.ddl_guard_ack(...)` or filed as a defect (run
  `select audit.refresh();` before reading certification).
- [ ] **Pointers:** repo guards from §7 run; pointer lines into this bundle resolve.
- [ ] **Expired facts:** grep `re-check after (\d{4}-\d{2}-\d{2})`; each past date becomes one
  `feedback` item ([declared vs observed state](/policies/declared-vs-observed-state.md)).
- [ ] Commit, push. Never create or change a schedule.

## Old skill names

| Old | Now |
|---|---|
| `docs-steward` | Daily sweep |
| `cross-repo-docs`, `context-docs` | §1, §2, §7, §8 |
| `dedupe-and-verify`, `doc-convergence`, `consolidate` | §3–§5 |
| `future-reader-review` | §8.3 |

Files in this skill

  • SKILL.md7.9 KB
  • reviewer-brief.md4.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…