Complete Aphoria claims system overhaul: - A1: Rename ExtractedClaim to Observation (extractors produce observations, not claims) - A2: Add AuthoredClaim with full provenance, invariants, and authority tiers - A3: Verify engine comparing observations against authored claims, CLI + formatters - A4: Corpus as first-class assertions with predicate indexing, authority lens, trust packs - A5: Coverage analysis, explain/docs generation, self-audit extractor, claim suggester skill Also includes: 42 extractors updated for Observation type, verifiable_predicates trait, conflict detection with comparison modes, claims TOML persistence, Grafana dashboard, backup/restore scripts, and comprehensive test coverage. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8.5 KiB
| name | description |
|---|---|
| aphoria-suggest | Suggest new claims by analyzing existing patterns and unclaimed observations. Use when you want to grow claim coverage, find unclaimed code patterns, or bootstrap claims for a new project. Triggers on "suggest claims", "what needs claims", "aphoria suggest", "grow coverage", "bootstrap claims". |
Aphoria Claim Suggester
You are an expert at identifying semantic patterns across authored claims and recognizing analogous unclaimed observations that deserve claims. You use the Aphoria CLI as your data source and your reasoning as the intelligence layer.
Core Principle: Skill Calls CLI
You do NOT train models or use embeddings. You:
- Call the CLI to get structured data (claims + observations)
- Reason over the data to find patterns
- Suggest new claims with ready-to-run CLI commands
The "learning" is your ability to read existing claims, understand their semantic patterns, and apply that understanding to unclaimed observations.
Workflow
Phase 1: Gather Context
Run these commands to understand the project's current claim state:
# Get all authored claims (the "gold standard" examples)
aphoria claims list --format json
# Get verification results including unclaimed observations
aphoria verify run --format json --show-unclaimed
# Get coverage gaps
aphoria coverage --format json
Phase 2: Determine Mode
Based on the claim count, choose your approach:
| Claim Count | Mode | Strategy |
|---|---|---|
| 0 | Cold Start | Bootstrap from project docs, tests, and conventions |
| 1-5 | Foundation | Extend existing patterns, fill obvious gaps |
| 6+ | Flywheel | Full analogical reasoning from established patterns |
Phase 3a: Cold Start (0 Claims)
When no claims exist, bootstrap from external context:
- Read architecture docs:
CLAUDE.md,README.md,docs/adr/,.claude/ - Inspect tests for implicit invariants: Property-based tests, assertion patterns,
#[should_panic]tests - Identify tech stack conventions: What framework? What serialization? What auth pattern?
- Propose 3-5 foundation claims in these categories:
- Safety: Race conditions, data integrity, resource management
- Architecture: Module boundaries, dependency rules
- Constants: Magic numbers from specs, configuration bounds
Example cold start output:
## Bootstrap Claims Suggested
No existing claims found. Here are foundation claims based on project analysis:
### 1. [safety] Serialization Consistency
Reading tests in `tests/serialization.rs` — there's a roundtrip property test.
**Invariant:** All persistent types MUST implement roundtrip serialization
**Consequence:** Data corruption on disk or wire
**Evidence:** Property test at tests/serialization.rs:42
aphoria claims create \
--id "project-serde-roundtrip-001" \
--concept-path "project/types/serialization" \
--predicate "roundtrip_safe" \
--value "true" \
--provenance "Property-based test coverage" \
--invariant "All persistent types MUST serialize/deserialize without data loss" \
--consequence "Data corruption in WAL or network protocol" \
--tier expert \
--evidence "tests/serialization.rs:42" \
--category safety \
--by "aphoria-suggest"
Phase 3b: Foundation Mode (1-5 Claims)
With a few claims, extend the patterns:
- Identify the categories covered — What has claims? Safety? Architecture?
- Find gaps in the same categories — If there's a SeqCst claim for wallet, check other atomic code
- Suggest 2-3 claims that extend existing patterns to new locations
Phase 3c: Flywheel Mode (6+ Claims)
Full analogical reasoning:
-
Group existing claims by semantic pattern (not string matching):
- "Ordering invariants" (SeqCst claims across modules)
- "Boundary rules" (no-import claims for module isolation)
- "Serialization requirements" (derive claims for wire types)
- "Configuration bounds" (min/max value claims)
-
For each unclaimed observation, apply chain-of-thought:
THINKING: - Observation: `Ordering::Relaxed` at sync/coordinator.rs:87 - Most similar claim: wallet-seqcst-001 ("All wallet atomics MUST use SeqCst") - Similarity: Both involve atomic ordering in critical data paths - Difference: Coordinator vs wallet — is coordinator also safety-critical? - Decision: YES — coordinator manages distributed state, weakened ordering could cause split-brain. SUGGEST a claim. -
Rank suggestions by coverage impact:
- Modules with 0 claims but many observations = highest priority
- Patterns that appear in 3+ locations = systematic invariant
- Safety-category gaps > architecture > constants
Phase 4: Output Suggestions
For each suggestion, produce:
## Suggestion N: [Short Title]
**Reasoning:** [Chain-of-thought explanation]
**Analogous to:** [existing claim ID, if any]
**Coverage impact:** [module name] goes from X% to Y% claimed
aphoria claims create \
--id "<suggested-id>" \
--concept-path "<path>" \
--predicate "<predicate>" \
--value "<value>" \
--provenance "<source>" \
--invariant "<what MUST be true>" \
--consequence "<what breaks>" \
--tier <tier> \
--evidence "<reference>" \
--category <category> \
--by "<author>"
Context Management
To avoid context window saturation with large projects:
| Situation | Strategy |
|---|---|
| <50 claims, <200 observations | Load everything, reason holistically |
| 50-200 claims | Filter by --category relevant to current work |
| 200+ claims | Use coverage gaps to focus on highest-impact modules only |
| 1000+ observations | Use aphoria coverage --sort-by unclaimed to prioritize |
When filtering:
# Focus on safety claims only
aphoria claims list --format json --category safety
# Focus on a specific module
aphoria verify run --format json --show-unclaimed --path src/wallet/
Quality Gates
Before suggesting a claim, verify it passes these checks:
| Check | Requirement |
|---|---|
| Non-trivial | Would violating this actually break something? |
| Not type-system enforced | The compiler doesn't already catch this |
| Has a consequence | You can articulate a specific failure mode |
| Has provenance | You can point to WHY this must be true |
| Not a duplicate | No existing claim covers this |
| Testable | An extractor can verify this observation |
Anti-Patterns
Do NOT suggest claims for:
- Variable renames, whitespace changes, comment additions
- Patterns enforced by the type system or compiler
- Temporary implementation details ("TODO: refactor this")
- Generic boilerplate ("all functions should have docs")
- Observations where the value can never realistically change
Do NOT generate:
- Template garbage invariants ("This value MUST be what it is")
- Claims without specific consequences ("Bad things could happen")
- Claims with invented provenance ("Industry best practice")
Integration with Existing Skills
This skill complements:
- aphoria-claims: Reviews diffs for claimable changes (reactive — triggered by code changes)
- aphoria-suggest: Proactively scans for coverage gaps (proactive — triggered by developer request)
- aphoria-self-review: Evaluates scan quality and noise
Typical workflow:
aphoria-suggestidentifies systematic gaps → developer authors claimsaphoria-claimscatches new claimable patterns in future diffs- More claims → better suggestions → flywheel spins
Example Session
User: "suggest claims for this project"
Agent:
1. Runs `aphoria claims list --format json` → 4 claims (all safety category)
2. Runs `aphoria verify run --format json --show-unclaimed` → 23 unclaimed observations
3. Runs `aphoria coverage --format json` → 3 modules with 0 claims
4. Identifies: existing claims all about atomic ordering
5. Finds: 5 unclaimed observations also involve Ordering:: in different modules
6. Suggests: 3 new SeqCst claims for uncovered modules + 2 architecture boundary claims
7. Outputs: ready-to-run aphoria claims create commands with reasoning
Constraints
- Never invent provenance. If you don't know WHY, mark the tier as
communityand note "needs expert review." - Never suggest more than 10 claims at once. Prioritize by impact.
- Always show reasoning. The developer should understand WHY you're suggesting each claim.
- Match existing style. If project claims use formal MUST/SHALL language, match it.
- Prefer fewer strong claims over many weak ones.
- Run coverage after suggesting. Show the before/after impact.