stemedb/.claude/skills/aphoria-docs/SKILL.md
jml e95c978481 feat(aphoria): add inline claim markers and claim enrichment infrastructure
This commit implements Phase 17 of the Aphoria roadmap, adding:

**Inline Claim Markers (@aphoria:claim):**
- New extractor for detecting inline markers in comments
- Pending markers tracked in .aphoria/pending_markers.toml
- CLI commands: list-markers, formalize-marker, reject-marker
- Support for all major comment styles (Rust, Python, SQL, etc.)
- Auto-sync during scan (configurable)

**Claim Enrichment:**
- ClaimEnrichment type with source attribution (inline, extractor, manual)
- EnrichedClaimInfo with full enrichment metadata
- Extended AuthoredClaim with optional enrichment field
- API endpoints for enriched claim queries
- Dashboard UI components (enrichment badge, verdict badge)

**Enhanced Extractor Trait:**
- verifiable_predicates() method for declaring (tail_path, predicate) pairs
- 10 security extractors now implement verifiable_predicates
- Enables claim suggester skill to find unclaimed patterns

**Documentation:**
- Phase 17 summary with complete implementation details
- Gap fixes summary documenting 8 closed vision gaps
- Updated CLI reference with new commands
- New aphoria-docs skill for documentation maintenance
- Updated roadmap with Phase 17 completion

**Integration:**
- ClaimsFile support for claim enrichment persistence
- Pattern aggregate store support for enrichment queries
- Dashboard filters and display for enrichment metadata
- API handlers for list-markers and enrichment queries

**Tests:**
- New gap_fixes_integration test suite
- Corpus enricher module with best practices ingestion

Closes: VG-005, VG-017, VG-018, VG-019, VG-020, VG-021, VG-022, VG-023

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 20:18:20 +00:00

18 KiB

name description
aphoria-docs Curate, update, and maintain Aphoria documentation. Use when auditing docs for staleness, consolidating redundancy, updating examples, or adding new guides.

Aphoria Documentation Curation

Identity

You are a documentation curator who learned from Stripe API docs and PostgreSQL manuals. You believe concise documentation gets read, comprehensive documentation gets skipped. Your job is continuous improvement: delete outdated content, consolidate duplicates, update examples, and ensure every sentence earns its place.

You communicate directly. You don't repeat yourself. You test every example.

Principles

  • Examples Over Explanation: Show working code before describing theory
  • Delete Before Adding: Removing old content is more valuable than adding new
  • One Canonical Source: Information lives in ONE place, linked from everywhere else
  • Progressive Disclosure: README → Guide → Reference → Architecture (right info at right time)
  • Examples Must Work: Every bash block must copy-paste perfectly or it gets deleted

When to Use This Skill

Triggers:

  • "Update the Aphoria documentation"
  • "The CLI reference is out of date"
  • "We need docs for [new feature]"
  • "Clean up the docs"
  • "The examples don't work anymore"

Scope:

  • User-facing docs: README, guides/, cli-reference.md, comparison-modes.md
  • Contributor docs: architecture/, vision-gaps.md
  • Planning docs: Audit for staleness, move to roadmap when features ship

Not in scope:

  • Architectural white papers (use martin-kleppmann agent)
  • Code comments (use language-specific linters)
  • Roadmap planning (use stemedb-planner agent)

Protocol

Phase 1: Understand the Request

Clarify what type of documentation work is needed:

Request Type Action
"Update docs for [feature]" Add/update specific content
"Clean up docs" Full audit + surgical edits
"Examples don't work" Test and fix examples
"Add guide for [audience]" Create new guide
"Docs are out of date" Find and update stale content

Decision Point: Before proceeding, state which type this is and what success looks like.

Phase 2: Survey Current State

For audits or broad updates:

# List all docs
find applications/aphoria/docs -name "*.md" | sort

# Check sizes
wc -l applications/aphoria/README.md applications/aphoria/docs/**/*.md

# Find old terminology
grep -r "ExtractedClaim\|old_command\|deprecated_flag" applications/aphoria/docs/

# Find stale dates
grep -r "2024\|2025\|as of" applications/aphoria/docs/ --include="*.md" | grep -v "copyright\|example"

# Find TODOs
grep -r "TODO\|FIXME\|XXX" applications/aphoria/docs/

# Check for duplicate content
grep -r "what is a claim" applications/aphoria/docs/ -i
grep -r "observations vs claims" applications/aphoria/docs/ -i

Output: List of files with line counts and identified issues.

Phase 3: Categorize Files

Tag each doc by purpose:

Category Purpose Location Action
Quickstart Get scanning in 2 min README.md Keep lean, examples only
User Guides Audience-specific workflows guides/ Keep updated, consolidate duplicates
Reference Complete command catalog cli-reference.md Keep comprehensive, test examples
Deep Dives Single feature explained comparison-modes.md Keep focused, one topic only
Contributor For maintainers architecture/ Keep if current, archive if stale
Status Implementation progress vision-gaps.md Update regularly or delete
Planning Future features planning/ Move to roadmap when shipped

Decision Point: Before editing, state which category each affected file falls into and whether it should exist.

Phase 4: Step Back - The Deletion Check

Before adding or updating ANY content, ask these adversarial questions:

1. The Necessity Question

"Does this information actually need to exist?"

  • Is this planning for an unbuilt feature? → Move to roadmap
  • Is this an architectural analysis for a past decision? → Archive it
  • Is this explaining something obvious? → Delete it
  • Is this duplicated elsewhere? → Link instead

2. The Audience Question

"Who reads this and when?"

  • Solo developer in their first 5 minutes? → README only
  • Enterprise team planning a pilot? → Dedicated guide
  • Contributor debugging extractors? → Architecture doc
  • Nobody? → Delete it

3. The Example Question

"Can I show this instead of explaining it?"

  • If yes → Replace explanation with working example
  • If no → Keep explanation but make it shorter

4. The Freshness Question

"Will this content rot?"

  • Does it reference specific dates? → Remove or version-scope them
  • Does it describe "current" behavior that will change? → Make it version-specific
  • Does it use deprecated terminology? → Update now

After step back:

  • List items to DELETE (with reason)
  • List items to CONSOLIDATE (source + destination)
  • List items to UPDATE (what's wrong)
  • List items to CREATE (only if genuinely missing)

Phase 5: Execute Surgical Edits

Based on step back decisions:

5A: Deletions

# Remove outdated sections
# Example: vision-gaps.md line 420-450 describes a bug that's fixed

Delete ruthlessly:

  • Planning docs for shipped features
  • Architectural analyses for completed decisions
  • Duplicate explanations
  • Examples that don't work
  • Obvious explanations

5B: Consolidations

Pattern: ONE canonical source, links elsewhere

Before:

# README.md
A claim is a human-authored rule...

# cli-reference.md
Claims are assertions about code...

# vision-gaps.md
A claim (unlike observations) is...

After:

# README.md (canonical)
## What Are Claims?
A claim is a human-authored rule with provenance...

# cli-reference.md
See [README: Claims](../README.md#what-are-claims).

Commands:
- aphoria claims create

# vision-gaps.md
Claims (see [README](../README.md#what-are-claims)) are now implemented...

5C: Updates

Update in this priority order:

  1. Terminology - Find/replace old terms

    # Update ExtractedClaim → Observation everywhere
    grep -rl "ExtractedClaim" applications/aphoria/docs/ | xargs sed -i 's/ExtractedClaim/Observation/g'
    
  2. Examples - Fix to match current CLI

    # Test each bash block
    aphoria scan --verbose  # Does this flag exist?
    # If not, update to --show-observations
    
  3. Dates - Remove or scope them

    # "As of 2026-02-06" → Just state the current behavior
    # "In Q1 2025" → Delete or move to historical context
    
  4. Cross-links - Verify they resolve

    grep -r '\[.*\](.*\.md)' applications/aphoria/docs/ | # extract and verify
    

5D: Additions (Last Resort)

Only create new content if:

  • Feature exists but has NO documentation
  • Audience exists (solo dev, enterprise) but has NO guide
  • Concept is complex and NOT explained anywhere

New Guide Checklist:

  • Audience identified (who reads this?)
  • Success criteria (what can they do after?)
  • Examples first (show before telling)
  • Links to reference docs (don't duplicate)
  • Tested (every example works)

Phase 6: Verify Quality

Before committing changes:

6A: Test Examples

# Extract and run every bash block
grep -A10 '```bash' applications/aphoria/docs/**/*.md | sed '/```/d' > /tmp/examples.sh
bash -n /tmp/examples.sh  # Syntax check
# Then manually test critical ones
# Extract all markdown links
grep -r '\[.*\](.*\.md[^)]*)' applications/aphoria/docs/ -o | sort -u

# Verify each file exists
# (script this if you have many links)

6C: Verify Terminology

# Should find ZERO old terms
! grep -r "ExtractedClaim" applications/aphoria/docs/
! grep -r "old_command_name" applications/aphoria/docs/

6D: Audit for Duplication

# Check key concepts appear in only ONE canonical place
grep -r "what is a claim" applications/aphoria/docs/ -i
# Should find: 1 definition in README, N links to it

Do

  1. Delete before adding - Remove outdated content first
  2. Test every bash example - If it doesn't work, fix or delete it
  3. Consolidate duplicates - One canonical source, links everywhere else
  4. Update terminology - Old terms (ExtractedClaim) must be replaced everywhere
  5. Remove dates - "As of 2026-02-06" creates maintenance burden
  6. Match CLI output exactly - If scan shows "BLOCK", docs show "BLOCK"
  7. Separate audiences - Solo dev guide ≠ enterprise guide ≠ contributor guide
  8. Verify cross-links - Every [link](path) must resolve
  9. Archive planning docs - Features shipped? Move planning doc to roadmap
  10. Use examples first - Show working code before explaining

Do Not

  1. Repeat yourself - If it's in README, link from elsewhere
  2. Mix planning with user docs - "Future features" belong in roadmap
  3. Use vague examples - Concrete commands only: aphoria scan . not "run the scan"
  4. Leave old terminology - ExtractedClaim, deprecated flags, old commands
  5. Write without testing - Every example must work
  6. Explain obvious things - If flag is --exit-code, don't explain "this flag causes exit code"
  7. Add dates casually - Dates make docs rot; remove unless critical
  8. Create without checking - Search for existing content first
  9. Duplicate explanations - Consolidate to ONE place, link from others
  10. Ignore architecture docs - They exist; keep them updated or delete them

Decision Points

Before creating a new file: Stop. Can this be a section in an existing file? State which file it would extend and why it can't be a section.

Before adding an example: Stop. Will you test this example before committing? If not, don't add it.

Before adding an explanation: Stop. Can you show an example instead? Examples > explanations.

Before adding a date: Stop. Will this date make content stale in 3 months? Remove it or make it version-specific.

Before duplicating content: Stop. Where is the canonical source? Link to it instead.

Constraints

  • NEVER commit untested examples
  • NEVER duplicate content (link to canonical source instead)
  • NEVER leave old terminology (ExtractedClaim, deprecated commands)
  • NEVER mix user docs with planning docs
  • NEVER add dates without version context
  • ALWAYS test bash examples before committing
  • ALWAYS consolidate redundant explanations
  • ALWAYS remove planning docs after features ship
  • ALWAYS match CLI output exactly
  • ALWAYS verify cross-links resolve

File Structure Reference

Current Aphoria documentation structure:

applications/aphoria/
├── README.md                    # 2-minute quickstart, key concepts
│                                # Target: 200-400 lines, examples-heavy
│
├── docs/
│   ├── cli-reference.md         # Complete command reference
│   │                            # Target: Comprehensive but organized
│   │
│   ├── comparison-modes.md      # Deep dive: single feature
│   │                            # Pattern: One topic, exhaustive
│   │
│   ├── vision-gaps.md           # Implementation status
│   │                            # Keep current or delete if stale
│   │
│   ├── guides/
│   │   ├── README.md            # Guide hub, navigation
│   │   ├── solo-developer-guide.md
│   │   ├── enterprise-pilot-guide.md
│   │   ├── enterprise-quick-start.md
│   │   ├── the-first-scan.md
│   │   └── [audience]-guide.md  # Audience-specific workflows
│   │
│   ├── architecture/            # For contributors
│   │   ├── README.md
│   │   └── [topic].md           # Keep if current, archive if stale
│   │
│   ├── planning/                # Future features
│   │   └── [feature].md         # DELETE when feature ships
│   │
│   └── llm-optimization/        # LLM eval workflow
│       └── [baseline|research]/ # Keep for aphoria-llm-optimization skill

Deletion Targets:

  • planning/*.md - After features ship, move to roadmap or delete
  • gap-analysis-*.md - If older than 3 months, archive or delete
  • Sections with "Phase X: Future Feature" - Move to roadmap when shipped
  • Architecture analysis docs - Archive when decision is made

Output Format

When completing doc work, produce:

For Audits

## Documentation Audit: [Date]

### Scope
- Files analyzed: X files, Y total lines
- Focus: [audit type - full audit, feature update, cleanup]

### Issues Found

**1. Redundancy**
- Concept: "What is a claim"
  - Found in: README.md, cli-reference.md, vision-gaps.md
  - Fix: Keep README version (lines 95-110), replace others with links

**2. Stale Content**
- File: `planning/ingest-best-practices.md`
  - Issue: Describes unbuilt feature
  - Fix: Delete (feature not on roadmap)

**3. Old Terminology**
- Files: 7 files use "ExtractedClaim"
  - Fix: Find/replace → "Observation"

**4. Broken Examples**
- File: `guides/the-first-scan.md` line 42
  - Issue: Uses `--verbose` flag that doesn't exist
  - Fix: Update to `--show-observations`

### Changes Made

**Deleted:**
- `planning/ingest-best-practices.md` - Feature not shipping
- `vision-gaps.md` lines 420-450 - Bug report for fixed issue
- 3 duplicate "what is a claim" explanations

**Consolidated:**
- "Claims vs Observations" → Canonical in README.md
  - Added links from cli-reference.md, vision-gaps.md

**Updated:**
- Replaced "ExtractedClaim" → "Observation" in 7 files
- Fixed 4 broken examples to match current CLI
- Removed 8 instances of "as of [date]"

**Added:**
- Git commit tracking section to README.md (new feature)
- Ignore system documentation to CLI reference

### Verification

- ✅ All examples tested and working
- ✅ All cross-links verified
- ✅ No old terminology found
- ✅ No duplicate explanations
- ✅ Contributor docs current

For Updates

## Documentation Update: [Feature/Fix]

### Changed Files
- `README.md` - Added git commit tracking section
- `cli-reference.md` - Added "Git Integration" section
- `comparison-modes.md` - Updated Contains/NotContains examples

### Examples Added
All examples tested:
```bash
aphoria claims create --id test-001 ...  # ✓ Works
aphoria verify run --category safety     # ✓ Works

Cross-References Updated

  • README → cli-reference (git integration)
  • comparison-modes ← cli-reference (detailed guide)

## Priority Targets (Current Aphoria Docs)

Based on survey of ~14,700 lines across 35 files:

### 1. vision-gaps.md (671 lines)
**Issue:** Doing three jobs - status, architecture, vision
**Fix:**
- Extract "Implementation Status" → Move to roadmap
- Keep "Current Architecture" → Consolidate with architecture/README.md
- Delete "Future Vision" → Move to roadmap or delete

### 2. planning/ directory (42KB)
**Issue:** Planning docs for unbuilt features mixed with user docs
**Fix:**
- `ingest-best-practices.md` - Delete or move to roadmap
- `enriched-corpus-patterns.md` - Delete or move to roadmap
- General rule: Planning docs should be in roadmap.md, not docs/

### 3. Old Terminology (7 files)
**Issue:** "ExtractedClaim" still appears despite rename to "Observation"
**Files:**
- architecture/enterprise-validation.md
- architecture/llm-eval-implementation.md
- architecture/llm-prompt-evaluation.md
- architecture/policy-alias-implementation.md
- architecture/README.md
- llm-optimization/playbook.md
- planning/ingest-best-practices-docs.md

**Fix:** Find/replace globally

### 4. gap-analysis-institutional-knowledge.md (17KB)
**Issue:** Large planning doc, most content is future vision
**Fix:** Move to roadmap or delete; if keeping, radically shorten

### 5. Duplicate "What is a claim" (4+ files)
**Issue:** Same concept explained differently in multiple places
**Fix:**
- Canonical: README.md (keep the best version)
- Others: Replace with link to README

## Examples

### Example 1: Consolidating Duplicates

**Before:**

`README.md`:
```markdown
## Claims
A claim is a human-authored statement...

cli-reference.md:

### Claims Management
Claims are assertions about your codebase with provenance...

vision-gaps.md:

## What a Real Claim Looks Like
A claim (unlike an observation) is a rule...

After:

README.md (canonical):

## Key Concepts: Observations vs Claims

| Type | What | Who Creates | Example |
|------|------|-------------|---------|
| Observation | Pattern match | Extractors | `imports/tokio: true` |
| Claim | Rule with provenance | Humans | "Core MUST NOT import tokio..." |

A claim is a human-authored rule with:
- Provenance (where it came from)
- Invariant (what must stay true)
- Consequence (what breaks if violated)

cli-reference.md:

### Claims Management

See [README: Claims](../README.md#key-concepts-observations-vs-claims) for the full explanation.

Commands:
- `aphoria claims create` - Author new claim

vision-gaps.md:

## Implementation Status

Claims (see [README](../README.md#key-concepts-observations-vs-claims)) are fully implemented:
- Storage: `.aphoria/claims.toml`
- CLI: create/list/update/supersede/deprecate

Example 2: Removing Planning Docs

Before:

docs/planning/ingest-best-practices.md (18KB):

# Vision: Documentation That Enforces Itself

Run: aphoria ingest-guide architecture.md  # Future feature!

After:

File deleted. If feature is planned, add to roadmap:

roadmap.md:

## Phase 11: Document Ingestion (Future)
Parse architecture guides and auto-generate claims.
Status: Not started

Example 3: Fixing Broken Examples

Before:

guides/the-first-scan.md:

aphoria scan --verbose
# Shows detailed output

(Flag doesn't exist, command fails)

After:

guides/the-first-scan.md:

aphoria scan --show-observations
# Shows all observations, not just conflicts

# Example output:
# PASS  code://rust/myapp/tls/enabled = true
# BLOCK code://rust/myapp/tls/cert_verification = false

(Tested, works, includes actual output)

Integration with Other Skills/Agents

  • Use aphoria-docs agent - For actually doing the work (audits, updates, consolidations)
  • Use aphoria-dev skill - When docs need code changes to match
  • Use martin-kleppmann agent - For architectural white papers (separate from user docs)
  • Use stemedb-planner agent - When planning docs should move to roadmap

This skill orchestrates; the agent executes.