Skip to content

Content Registration SOP

Standard Operating Procedure | Version 1.0 | 2026-03-22 Owner: Project Manager | Applies to: ALL 21 agents


Purpose

Every deliverable file produced by any agent MUST be registered in the Airtable Content Registry. This SOP defines when, how, and what to register.


1. When to Register

Register a file in the Content Registry whenever you produce:

  • HTML reports, dashboards, or portals
  • PDF documents
  • Markdown deliverables (frameworks, specs, playbooks, SOPs, briefs)
  • Python/Shell scripts that are deliverables (not throwaway debug scripts)
  • Excel/Word/PowerPoint documents
  • Design assets (brand files, diagrams, templates)
  • Configuration files that are part of a shipped product
  • Research outputs (synthesized briefs, competitive intel)

Do NOT register: - Temporary/scratch files - node_modules/, .git/, __pycache__/ contents - Chat history exports (these are auto-cataloged separately) - Agent-local TASKS.md files (auto-generated by sync script)


2. Required Fields

Every record in the Content_Files table requires these fields:

Field API Name Where to Find the Value
Title flde1dNkgPGGC13Hq Human-readable name (derived from filename or content heading)
File Type fldRYiEvc1hmlzCpT One of: Markdown, HTML, Python, Shell, JSON, CSV, PDF, Excel, Word, PowerPoint, Image, Google, YAML, SQL, Other
Content Category fldRMIXZPwWvJOK3X One of: IP, Sales, Marketing, Research, Operations, Legal, Design, Product, Platform, Integration, Context, Brand, Knowledge, Content
Owner Agent fldRBJguUbrHZIaP4 The agent that created/owns the file (e.g., Revenue.OS, Code.Platform)
Local Path fldw6c7gKhexOqvwB Relative path from Project Manager root (e.g., Revenue.OS/frameworks/eri-v2.md)
Absolute Path fldlsqJ1wcowilwjC Full macOS path (e.g., /Users/rhartley/ecomonetize/Project.Manager/Revenue.OS/frameworks/eri-v2.md)
Status fldG6Gp630wYvDl5b One of: Published, Draft, Active, Archived, Deprecated
Visibility fldYyM5xw4UPIUXAG internal (agent/Rick only) or external (client-facing)
Content Hash fldiFnZDx6jQnYXe9 MD5 hash of file contents. Generate with: md5 -q <filepath> (macOS) or md5sum <filepath> (Linux)
Field API Name Notes
Summary fldcCk3vPnajlMsHp 1-2 sentence description
Version fldyI53hvKf5lUqNt Follows v[major].[minor] convention (e.g., v1.0)
Product Module flddklVYjfudSl7uZ One of: Scorecard, Meeting Intelligence, Intelligence Engine, Heatmap, Account Intelligence, Revenue Play Engine, EcoTask, CRM Activation, Signal Fabric, Revenue OS, General
Tags fldJQs36pkECwB5CM Array of: framework, deliverable, script, config, template, report, diagram, playbook, spec, sop
File Size Bytes fldF2RxbHIxSCXN7u Output of wc -c < <filepath> or stat -f%z <filepath>
Last Updated fldLDyigLGdR8PfoQ ISO 8601 datetime (e.g., 2026-03-22T14:30:00.000Z)

3. Airtable Base and Table IDs

Resource ID
Base (Operations Intelligence Hub) app4gfvpLI5EKQqES
Content_Files table tbligPMgI47zw4Tq3
Content_Collections table tbl2E8vzg6bZuFalI
Content_Versions table tbl7UHNcp0XUGXRD6
Content_Tags table tblSekfRgcL1vWvYk

Full schema reference: _Shared/Operations/content-registry-schema.md


4. How to Register Manually via Airtable MCP

Use the Airtable MCP tool mcp__claude_ai_Airtable__create_records_for_table with:

base_id: app4gfvpLI5EKQqES
table_id_or_name: tbligPMgI47zw4Tq3
records: [
  {
    "fields": {
      "Title": "My Deliverable Name",
      "File Type": "HTML",
      "Content Category": "Sales",
      "Owner Agent": "CRO.Sales",
      "Local Path": "CRO.Sales/my-deliverable-v1.0.html",
      "Absolute Path": "/Users/rhartley/ecomonetize/Project.Manager/CRO.Sales/my-deliverable-v1.0.html",
      "Status": "Published",
      "Visibility": "external",
      "Content Hash": "abc123def456...",
      "Version": "v1.0",
      "File Size Bytes": 45000,
      "Summary": "Sales page for the ERI briefing offer"
    }
  }
]
typecast: true

Important API constraints: - Maximum 10 records per create/update call (Airtable API limit) - Always use typecast: true -- this allows string values for select fields without pre-creating options - Rate limit: 5 requests/second per base - DateTime format: ISO 8601 (2026-03-22T14:30:00.000Z)


5. Safety Net: file-registry-sync.py --delta

The file-registry-sync.py script (planned, owned by Code.Assistant) will:

  1. Scan the filesystem for files not yet in the registry
  2. Compute content hashes and compare against existing records
  3. Generate a delta report of unregistered files
  4. Optionally push new records to Airtable in batches of 10

Run manually:

python3 Code.Assistant/file-registry-sync.py --delta

This is a safety net -- agents should still register files at creation time. The sync script catches anything that slipped through.

Note (2026-03-22): This script is planned but not yet implemented. Until it exists, agents must self-register all deliverables manually.


6. Version Tracking

When updating an existing file to a new version:

  1. Update the Content_Files record -- change Version, Content Hash, File Size, Last Updated
  2. Create a Content_Versions record in tbl7UHNcp0XUGXRD6:
records: [
  {
    "fields": {
      "Version Label": "my-deliverable v1.1",
      "File": ["<record_id_from_Content_Files>"],
      "Version Number": "v1.1",
      "Change Log": "Updated scoring logic, added new section on governance",
      "Uploaded By": "Revenue.OS",
      "Local Path": "Revenue.OS/frameworks/my-deliverable-v1.1.md"
    }
  }
]
  1. If the old version file still exists (e.g., archived with -archive suffix), update its Content_Files status to Archived.

7. Dedup Checking (content_hash)

Before registering a new file, check if its content hash already exists in the registry:

  1. Compute the MD5 hash: md5 -q /path/to/file
  2. Search the Content_Files table for a matching hash using mcp__claude_ai_Airtable__list_records_for_table with a formula filter:
    filterByFormula: {Content Hash} = 'your_hash_here'
    
  3. If a match is found:
  4. If it is the same file at the same path -- update the existing record (no new entry)
  5. If it is a different file with identical content -- flag as duplicate. Set Is Duplicate checkbox and link via Duplicate Of field
  6. If the matched record is Archived but your file is new -- create a new record (content may have been reused intentionally)

8. Common Pitfalls

Pitfall How to Avoid
Forgetting to register after creating a file Add registration as the last step of every deliverable workflow
Using wrong Content Category Check the allowed values in Section 2. When in doubt, use Operations
Missing content_hash Always compute the hash. It is the primary dedup mechanism
Exceeding 10-record batch limit Split into multiple API calls. The sync script handles this automatically
Registering agent-local TASKS.md These are auto-generated -- do NOT register them
Using relative paths for Absolute Path Always use full path starting with /Users/rhartley/...
Registering node_modules or build artifacts Only register source files and deliverables, not generated dependencies
Forgetting typecast:true Without it, new select values will throw errors
Using wrong agent name in Owner Agent Must match exactly: Revenue.OS not revenue.os or Revenue OS. See schema for full list

SOP created: 2026-03-22 | Review cycle: Quarterly