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>
4.9 KiB
Gap Fixes Summary
Overview
This document summarizes the fixes implemented for Gap 1 (Observations Treatment) and Gap 5 (Lineage Enforcement) from the Aphoria gap analysis.
Gap 1: Fix Observation Treatment (Confidence-Based Tiers)
Problem
The persistent scan mode was using claim_to_assertion() which assigned Tier 3 (Expert) authority to all observations, regardless of confidence. This gave extractor observations the same weight as human-authored claims.
Solution
Changed episteme/local/store.rs line 36 in ingest_claims() from:
let assertion = claim_to_assertion(claim, &self.signing_key, timestamp, git_commit.as_deref());
To:
let assertion = observation_to_assertion(claim, &self.signing_key, timestamp, git_commit.as_deref());
Behavior
Observations now get appropriate tier assignment based on confidence:
- Tier 4 (Community, 0.3 weight): confidence ≥ 0.9
- Tier 5 (Anecdotal, 0.1 weight): confidence < 0.9
This correctly distinguishes observations (extractor pattern matches) from claims (human-authored rules with provenance).
Files Changed
applications/aphoria/src/episteme/local/store.rs(1 line)
Tests
- Existing
bridge::tests::test_observation_to_tier_*tests validate tier mapping - Existing
episteme::tests::test_ingest_observations_creates_tier4_assertionsvalidates storage integration - All 1171 aphoria tests pass
Gap 5: Enforce Lineage on Supersede (Already Implemented + Enhanced)
Status
The core auto-deprecation feature was already implemented in ClaimsFile::supersede() at line 152-168.
Enhancement Added
Added duplicate validation warning when creating a new claim that conflicts with an existing active claim.
Implementation
Modified ClaimsFile::add() in claims_file.rs to check for duplicate active claims with the same concept_path and predicate. When detected, prints a warning:
⚠️ Warning: Active claim(s) already exist for path/to/concept::predicate
- claim-001 (Invariant description)
Consider using 'aphoria claims supersede claim-001' instead
Behavior
- Supersede: Automatically marks old claim as
ClaimStatus::Supersededwhen creating superseding claim - Create: Warns if creating duplicate active claim (suggests using supersede instead)
- No breaking changes: Warning is informational only, claim is still added
Files Changed
applications/aphoria/src/claims_file.rs(add() method enhanced, 2 new tests added)
Tests
test_supersede()validates auto-deprecation (already existed)test_duplicate_active_warning()validates warning is showntest_no_warning_for_deprecated_duplicates()validates warning only for active claims- All 1171 aphoria tests pass
Verification
Build & Test
# Build
cargo build -p aphoria
# Run all tests
cargo test -p aphoria --lib
# Run clippy
cargo clippy -p aphoria --lib -- -D warnings
All checks pass with no warnings.
Manual Testing
- Gap 1: Run
aphoria scan --mode persistent --syncand verify observations are created with Tier 4/5 (not Tier 3) - Gap 5: Run
aphoria claims supersede old-id --new-id new-id ...and verify old claim status becomessuperseded - Gap 5: Run
aphoria claims createwith same concept_path/predicate as existing active claim and verify warning is displayed
Impact
Gap 1
- Semantic correctness: Observations are now properly distinguished from claims in authority weight
- Query resolution: Lens calculations will correctly weight observations lower than authored claims
- Backward compatible: Existing scans continue to work, just with corrected tier assignment
Gap 5
- Lineage enforcement: Supersession now properly deprecates old claims (already worked)
- User guidance: Duplicate warnings help users discover supersede feature
- No breaking changes: All existing workflows continue to work
Related Documentation
applications/aphoria/docs/vision-gaps.md- Original gap analysisapplications/aphoria/docs/claims-explained.md- Claim vs observation semantics.aphoria/claims.toml- Example claims with supersession chainsapplications/aphoria/src/bridge.rs- Tier assignment logic
Commit Message
fix(aphoria): use confidence-based tiers for observations (Gap 1) + enhance lineage warnings (Gap 5)
Gap 1: Fix Observation Treatment
- Change ingest_claims() to use observation_to_assertion() instead of claim_to_assertion()
- Observations now get Tier 4 (≥0.9 confidence) or Tier 5 (<0.9 confidence) instead of Tier 3
- Semantically correct: observations (grep results) ≠ claims (human-authored rules)
Gap 5: Enhance Lineage Enforcement
- Add duplicate validation warning when creating claims with same concept_path/predicate
- Suggests using 'aphoria claims supersede' instead of creating duplicate actives
- Core auto-deprecation already worked (supersede() marks old claim as Superseded)
All 1171 tests pass. No breaking changes.