{
  "id": 14679733,
  "title": "Who Owns This Paragraph? An Ownership Manifest for AI-Drafted Docs",
  "url": "https://urgent.news/2026/10/15/who-owns-this-paragraph-an-ownership-manifest-for-ai-drafted-docs",
  "topic": "ai",
  "section": "AI",
  "published": "2026-10-15T11:16:47.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/datago_7777/who-owns-this-paragraph-an-ownership-manifest-for-ai-drafted-docs-ab6"
  },
  "original_language": "en",
  "account": "In many repositories that allow models to generate documentation, a pull request often adds a runbook section with steps like rotating an API credential and restarting the worker. The diff looks clean, the headings follow the style guide, and the reviewer approves it in just a few seconds. However, six weeks later, the steps become outdated. The procedure no longer exists, and nobody can identify who should have caught this error. The paragraph appears to have an author, but it lacks an owner. This gap between ownership and accountability is crucial.\n\nThe issue lies in the fact that while style can be easily automated, accountability cannot. The following workflow aims to keep generated prose draftable while ensuring human ownership, along with a check that enforces this boundary in the CI pipeline. Generated documentation rarely fails on prose; they fail on four smaller issues:\n\n1. Unverified claims: A plausible number, endpoint, or step in the draft may never be checked against the code.\n2. Missing ownership: No named person or team is responsible when a claim becomes stale.\n3. Silent drift: The source of truth moves, and the document fails to adapt.\n4. Unbounded scope: The model is permitted to write about customer impact, pricing, or compliance due to a lack of clear boundaries.\n\nSimply using better prompts does not resolve these issues. A contract next to the document is necessary.\n\nTo address these problems, treat a document as a set of addressable blocks instead of a whole file. Each block should be classified into one of three categories:\n\n1. Draftable: The model writes the first pass. Required evidence is a source_ref pointing to code, config, or schema.\n2. Attestable: The model drafts a skeleton, and a human confirms that each step actually ran. Required evidence is a human_attestation reference.\n3. Prohibited: The model emits nothing here. This includes legal, pricing, customer impact, incident postmortems, and anything with an external commitment.\n\nClassifying blocks in the source is done using HTML comments to keep them invisible when rendered. The manifest should list every block with its class, owner, and evidence. The manifest is a YAML file named ownership.yaml placed in the document's directory.\n\nThe ownership.yaml file contains the following structure:\n\n```yaml\nversion: 1\ndocuments:\n- path: docs/ops/rotate-api-credentials.md\nblocks:\n- id: overview\nclass: draftable\nowner: @ops-docs\nevidence:\nsource_ref:\nref: services/auth/src/rotate.ts#L40-L96\n- id: rotation-steps\nclass: attestable\nowner: @ops-oncall\nevidence:\nhuman_attestation:\nref: ops-review-log#R-2214\n- id: customer-impact\nclass: prohibited\nowner: @support-lead\nevidence:\nhuman_attestation:\nref: reachability-review#R-88\n```\n\nThe provided Python script, check_ownership.py, checks the manifest to ensure that each block has an owner and evidence. If a block lacks an owner or evidence, the script will fail. The script requires the following dependencies:\n\n- `pyyaml`\n\nThe script works as follows:\n\n1. It reads the manifest and checks if the version is 1. If not, it appends an error message.\n2. It iterates through each document in the manifest and checks if the document path exists. If not, it appends an error message.\n3. For each block in the document, it collects the block IDs from the markdown source using regular expressions.\n4. It then checks if the block is draftable, attestable, or prohibited, and verifies that it has the required owner and evidence.",
  "summary": "Here is a scenario that repeats in most repositories that let a model write documentation. A pull request adds a runbook section: rotate the API credential, then restart the worker. The diff is clean, the headings match the style guide, and the reviewer approves it in ninety seconds. Six weeks later the steps are wrong. Rotation moved behind a queue, and the text now describes a procedure that no…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}