stemedb/applications/aphoria/uat/enterprise-simulation-uat.md
jordan bbeee18b68 feat: Institutional knowledge vision + roadmap phases 11-15
## Vision Update
- Shift from "code-level truth linter" to "self-learning institutional knowledge"
- Evidence-based authority model: merit over titles
  - ProductSpec → 0.95 authority, 1 usage to graduate
  - Standard (RFC) → 0.85 authority, 3 usages
  - Research (ADR) → 0.70 authority, 5 usages
  - Commit only → 0.40 authority, 10 usages
- Three-tier knowledge: Policies → Conventions → Observations
- Knowledge compounds with every commit

## Gap Analysis
- Documented missing features for enterprise pilot
- Phases 11-15 spec with implementation details
- Evidence detection, scope hierarchy, lifecycle management

## Roadmap Additions
- Phase 11: Evidence-Based Authority (🎯 current)
- Phase 12: Knowledge Scope Hierarchy
- Phase 13: Knowledge Lifecycle Management
- Phase 14: Governance Workflows
- Phase 15: Evidence Source Integration

## Enterprise Simulation UAT
- 6-month simulation: 3 teams, 19 contributors
- Month-by-month scenarios with expected outcomes
- Success metrics for 90-day and 180-day milestones

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 23:35:41 -07:00

22 KiB

Enterprise Simulation UAT

Scenario: Acme Corp adopts Aphoria across 3 teams over 6 months Goal: Validate self-learning institutional knowledge at enterprise scale Status: Specification (not yet implemented)


Simulation Overview

The Organization

Acme Corp (Engineering)
├── Platform Team (8 engineers)
│   ├── Alice, Bob (established patterns with specs/ADRs)
│   └── 6 others (1 new hire in Month 3: Jordan)
├── Payments Team (6 engineers)
│   ├── Carol (maintains payment specs)
│   └── 5 others
└── Mobile Team (5 engineers)
    └── 5 engineers (1 new hire in Month 4: Kim)

Authority model: Evidence-based, not title-based

  • Patterns with ProductSpec → highest authority (0.95)
  • Patterns with RFC/Standard → high authority (0.85)
  • Patterns with ADR/Research → medium authority (0.70)
  • Patterns from commits only → low authority (0.40)

The Projects

Team Projects Languages Focus
Platform api-gateway, auth-service, config-lib Rust, Go Infrastructure
Payments payment-processor, billing-service Python, Go Transactions
Mobile ios-app, android-app, mobile-bff Swift, Kotlin, TypeScript Client apps

The Timeline

Month Event Expected Outcome
1 Platform team adopts Aphoria Baseline patterns captured
2 Payments team joins Cross-team patterns emerge
3 New hire joins Platform Guided by existing patterns
4 Mobile team joins + new hire Team-specific patterns captured
5 Platform refactors API versioning Pattern deprecation + migration
6 SOC 2 audit preparation Evidence generation

Month 1: Platform Team Adoption

1.1 Setup

Scenario: Platform team installs Aphoria on all 3 projects.

# Each project
cd api-gateway && aphoria init --org acme --team platform
cd auth-service && aphoria init --org acme --team platform
cd config-lib && aphoria init --org acme --team platform

Expected:

  • Connected to org knowledge graph
  • 0 policies, 0 conventions, 0 observations (fresh start)

1.2 Week 1-2: Baseline Commits

Scenario: Team makes 50 commits across projects with normal development.

Commits include:

  • TLS configuration (verify=true in 48, verify=false in 2 test fixtures)
  • JWT audience validation (enabled in 45, disabled in 5 internal services)
  • API versioning using /api/v1/{resource} (consistently in all 15 endpoints)
  • Error format {"error": {"code": X, "message": Y}} (consistently in all handlers)
  • Timeout of 30s (consistent)

Expected Observations Captured:

Pattern Usages Evidence Level Authority Weight
API versioning /api/v1/{resource} 15 ProductSpec (specs/api-design.md) 0.95
Error format {"error":{...}} 12 Research (ADR-015) 0.70
30s default timeout 8 Commit only 0.40
TLS verify=true 48 Standard (RFC 8446) 0.85
JWT aud validation=true 45 Standard (RFC 7519) 0.85

1.3 Week 3: Pattern Graduation

Scenario: After 20+ consistent usages, patterns graduate.

Test Case 1.3.1: API versioning graduates to convention (high evidence)

$ aphoria patterns pending

Pending Graduation:
  [P001] API Versioning: /api/v1/{resource}
         Usages: 15 across 3 projects
         Evidence: ProductSpec (specs/api-design.md → REQ-API-001)
         Authority: 0.95
         Shadow Mode: 100 scans, 0 FPs
         Status: Ready for promotion (evidence threshold met with 1 usage)

$ aphoria patterns promote P001 --scope team

Promoted: API Versioning → Team Convention (Platform)

Expected:

  • Pattern status changes to "Active Convention"
  • Scope is "Team: Platform"
  • New commits deviating from pattern get FLAG

1.4 Week 4: First Conflict Detection

Scenario: New endpoint added without versioning.

# billing-service/src/routes.py
@app.route("/invoices")  # Missing /api/v1/ prefix
def list_invoices():
    ...
$ git commit -m "Add invoice endpoint"

Aphoria scan:
  ⚠ API Versioning: Your team uses /api/v{major}/{resource}
    └ Established by @alice (Staff, Platform) - 15 usages
    └ Your code: /invoices → Suggest: /api/v1/invoices

  Accept suggestion? [y/n/explain/ignore]

Test Case 1.4.1: Developer accepts suggestion

> y
# Code updated, commit amended

Test Case 1.4.2: Developer explains deviation

> explain
# System shows: Pattern origin, ADR link, who to ask

Test Case 1.4.3: Developer ignores (justified)

> ignore --reason "Legacy endpoint for backward compatibility" --expiry 90d
# Acknowledgment recorded with expiry

Month 2: Payments Team Joins

2.1 Payments Team Setup

Scenario: Payments team connects to same org knowledge graph.

cd payment-processor && aphoria init --org acme --team payments
cd billing-service && aphoria init --org acme --team payments

Expected:

  • Receives: 12 org policies (RFCs, OWASP)
  • Receives: 5 platform conventions (API versioning, error format, etc.)
  • Question: Should Platform conventions apply to Payments?

2.2 Cross-Team Pattern Discovery

Scenario: Payments team uses same error format independently.

# payment-processor/src/handlers.py
def process_payment(req):
    if error:
        return {"error": {"code": "PAYMENT_FAILED", "message": str(e)}}

Test Case 2.2.1: Pattern recognized as matching Platform convention

$ git commit -m "Add payment processing"

Aphoria scan:
  ✓ Error format matches org convention
    └ Established by Platform Team (12 usages)
    └ Your usage is consistent - no action needed

  + Captured: Transaction retry with exponential backoff
    → First usage in Payments team

2.3 Team-Specific Patterns

Scenario: Payments uses Stripe SDK with specific patterns.

# Consistent across payment-processor
stripe.api_key = os.getenv("STRIPE_API_KEY")
stripe.max_network_retries = 3
stripe.api_version = "2024-04-10"

Test Case 2.3.1: Team-specific pattern captured

Captured: Stripe SDK configuration pattern
  - API version: 2024-04-10
  - Max retries: 3
  - Key from env var

This is specific to Payments team (not org-wide).

Expected:

  • Pattern scoped to Team: Payments
  • Does NOT apply to Platform team
  • Would apply to new Payments projects

2.4 Cross-Team Conflict

Scenario: Payments uses different timeout than Platform.

# payment-processor: 60s timeout (transaction needs more time)
# platform: 30s timeout (standard)

Test Case 2.4.1: Conflict detected, scoped resolution

Aphoria scan:
  ⚠ Timeout Conflict:
    Platform convention: 30s (8 usages)
    Your code: 60s

  This may be intentional for payment processing.

  Options:
  [1] Accept Platform convention (30s)
  [2] Create Payments team convention (60s)
  [3] Acknowledge with reason

> 2
Reason: Payment transactions require longer timeouts for bank processing

Created: Payments team convention (60s timeout)
Note: Platform convention (30s) still applies to Platform projects

Month 3: New Hire Onboarding (Platform)

3.1 Day 1: New Hire Setup

Scenario: Jordan joins Platform team, first commit on day 1.

cd auth-service && aphoria init --org acme --team platform

Connected to Acme Engineering knowledge graph
Your team: Platform

Knowledge available:
  • 12 policies (org-wide, from RFCs/OWASP)5 conventions (Platform team patterns)23 observations (individual patterns, not enforced)

Quick start:
  • Run `aphoria patterns list` to see team conventions
  • Run `aphoria scan` before each commit
  • Ask @alice or @bob about any flagged patterns

3.2 First Commit: Guided by Conventions

Scenario: Jordan adds new endpoint, doesn't know team patterns.

# auth-service/src/routes.py (Jordan's code)
@app.route("/users/me")  # Missing versioning
def get_current_user():
    if error:
        return {"msg": "User not found"}  # Wrong error format
$ git commit -m "Add current user endpoint"

Aphoria scan:
  ⚠ API Versioning: Your team uses /api/v{major}/{resource}
    └ Evidence: ProductSpec (specs/api-design.md → REQ-API-001)
    └ Also: ADR-042: API Versioning Strategy
    └ Your code: /users/me → Suggest: /api/v1/users/me

  ⚠ Error Format: Your team uses {"error": {"code": X, "message": Y}}
    └ Evidence: Research (ADR-015: Error Handling)
    └ Your code: {"msg": "..."} → Suggest: {"error": {"code": "...", "message": "..."}}

  Accept suggestions? [y/n/explain]

Test Case 3.2.1: New hire accepts suggestions

> y
Applied 2 suggestions. Code updated.

Expected:

  • Jordan's code updated to match conventions
  • Jordan learns team patterns through workflow
  • No wiki reading required

3.3 Week 2: Jordan Contributes Pattern

Scenario: Jordan adds logging pattern that becomes team convention.

# Jordan's consistent logging across 5 commits
logger.info("Starting operation", extra={"operation": "auth", "user_id": user_id})

Test Case 3.3.1: Pattern captured with low evidence

Captured: Structured logging with extra context
  - Usages: 5
  - Evidence: Commit only (no ADR, no spec, no standard)
  - Authority weight: 0.40

Status: Observation (not enforced)
Note: Add ADR or link to spec to accelerate promotion

Test Case 3.3.2: Jordan adds ADR → promotion candidate

# Jordan creates docs/adr/ADR-023-structured-logging.md
# Commits with reference to ADR

Aphoria scan:
  + Captured: Structured logging pattern
    → Evidence upgraded: Research (ADR-023)
    → Authority weight increased to 0.70
    → Eligible for convention promotion after 5 usages (3 more needed)

Test Case 3.3.3: Pattern linked to ops spec → immediate promotion

# Jordan links pattern to ops/observability-spec.md

Aphoria scan:
  + Captured: Structured logging pattern
    → Evidence upgraded: ProductSpec (ops/observability-spec.md)
    → Authority weight: 0.95
    → Ready for promotion (ProductSpec requires only 1 usage)

Month 4: Mobile Team Joins

4.1 Mobile Team Setup

Scenario: Mobile team connects, different language ecosystem.

cd mobile-bff && aphoria init --org acme --team mobile

Expected:

  • Receives org policies (security)
  • Does NOT receive Platform/Payments conventions (different domain)
  • Question: Which conventions should apply cross-team?

4.2 New Hire (Mobile) Day 1

Scenario: Kim joins Mobile team, completely different from Platform.

Connected to Acme Engineering knowledge graph
Your team: Mobile

Knowledge available:
  • 12 policies (org-wide security)0 conventions (Mobile team has none yet)0 observations (fresh team)

Note: Platform and Payments teams have established conventions.
      Run `aphoria patterns --scope org` to see if any should apply to Mobile.

Test Case 4.2.1: Mobile creates team-specific conventions

// mobile-bff/src/api.ts
export async function fetchUser(id: string): Promise<User> {
  const response = await fetch(`/api/v1/users/${id}`);  // Same versioning!
  if (!response.ok) {
    throw new ApiError(response.status, await response.json());
  }
  return response.json();
}
Aphoria scan:
  ✓ API versioning /api/v1/{resource}
    └ Matches org-wide pattern (Platform + Payments use this)
    └ Consider promoting to org convention?

  + Captured: ApiError class for HTTP error handling
    → First usage in Mobile team

4.3 Pattern Promotion to Org Level

Scenario: API versioning now used by all 3 teams → org convention.

$ aphoria patterns --scope org --candidates

Org Convention Candidates:
  [P042] API Versioning: /api/v{major}/{resource}
         Platform Team: 25 usages (established by @alice)
         Payments Team: 12 usages (adopted)
         Mobile Team: 8 usages (adopted)

         Recommendation: Promote to org convention
         Approval required: Admin or 2 Staff Engineers

$ aphoria patterns promote P042 --scope org --approvers alice@acme.com,carol@acme.com

Promoted: API Versioning → Org Convention (Acme)
Now applies to all teams by default.

Month 5: Platform Refactors API Versioning

5.1 Pattern Deprecation

Scenario: Platform decides to add version in header, not path.

$ aphoria deprecate "api-versioning-path" \
    --reason "Moving to header-based versioning per RFC proposal" \
    --superseded-by "api-versioning-header" \
    --sunset-date 2026-09-01

Deprecated: API Versioning (path-based)
  Status: DEPRECATED
  Sunset: 2026-09-01
  Migration: Use X-API-Version header instead
  Superseded by: api-versioning-header

All teams notified.

5.2 Migration Guidance

Scenario: Payments team commits with old pattern.

$ git commit -m "Add refund endpoint"

Aphoria scan:
  ⚠ Deprecated Pattern: Path-based API versioning
    └ Status: DEPRECATED (sunset: 2026-09-01)
    └ Your code: /api/v1/refunds
    └ Migrate to: Header-based versioning (X-API-Version: 1)
    └ See: Migration Guide (linked), ADR-089 (linked)

  Options:
  [1] Migrate now (update code)
  [2] Acknowledge (defer migration)
  [3] Explain (I understand, intentional)

5.3 Migration Tracking

Scenario: Dashboard shows migration progress.

$ aphoria migrations status

Migration: Path-based → Header-based API versioning
  Sunset: 2026-09-01 (120 days remaining)

  Progress by team:
  ├── Platform: 15/25 endpoints migrated (60%)
  ├── Payments: 0/12 endpoints migrated (0%)
  └── Mobile: 0/8 endpoints migrated (0%)

  Total: 15/45 endpoints (33%)

  Blockers:
  • Payments: Legacy client compatibility (acknowledged by @carol)
  • Mobile: Waiting for iOS app update

Month 6: SOC 2 Audit Preparation

6.1 Evidence Generation

Scenario: Auditor needs evidence for CC6.1 (Logical Access Controls).

$ aphoria audit report --standard soc2 --control CC6.1

SOC 2 CC6.1: Logical Access Controls
Generated: 2026-07-15

1. Policy Inventory
   ├── 15 security policies (org-wide)
   ├── 8 team conventions (access-related)
   └── All policies signed by authorized approvers

2. Policy Enforcement Evidence
   ├── 847/852 endpoints comply (99.4%)
   ├── 5 documented exceptions (acknowledged, tickets linked)
   └── 0 unacknowledged violations

3. Change Control Evidence
   ├── All pattern changes have approval chain
   ├── Deprecation announced 90+ days before sunset
   └── Migration tracking active for 3 patterns

4. Access Review Evidence
   ├── 23 contributors across 3 teams
   ├── Role-based authority model configured
   └── Seniority weights applied to pattern approvals

[EXPORT TO PDF]

6.2 Auditor Questions

Test Case 6.2.1: "Show me the approval chain for this policy"

$ aphoria audit trail --pattern "tls-1.3-required"

Pattern: TLS 1.3 Required
Status: Active (Org Policy)

Timeline:
  2024-01-15 Created by alice@acme.com (Staff, Platform)
  2024-01-16 Approved by security-team@acme.com
  2024-01-17 Promoted to org policy by admin@acme.com
  2024-06-01 Reviewed and reconfirmed by ciso@acme.com

Enforcement:
  Commit scans: 1,247 (100% checked)
  Violations detected: 23
  Violations resolved: 23
  Current compliance: 100%

Test Case 6.2.2: "Show me exception handling"

$ aphoria audit exceptions --policy "jwt-audience-validation"

Exceptions for: JWT Audience Validation Required

Active Exceptions (5):
  [E001] internal-metrics-service
         Reason: Internal service, no external exposure
         Approved by: alice@acme.com (Staff)
         Expires: 2026-12-31
         Ticket: PLAT-1234

  [E002] legacy-auth-bridge
         Reason: Backward compatibility during migration
         Approved by: carol@acme.com (Staff)
         Expires: 2026-09-01
         Ticket: PAY-567

  ... 3 more

Test Execution Plan

Phase 1: Setup (Week 1)

Test ID Description Expected Status
SETUP-1 Create simulated org structure 3 teams, 19 contributors
SETUP-2 Initialize knowledge graph Empty, connected
SETUP-3 Load RFC/OWASP corpus 12+ policies

Phase 2: Month 1 Simulation (Week 2)

Test ID Description Expected Status
M1-1 Platform init across 3 projects Connected, 0 conventions
M1-2 50 commits with patterns 5+ observations captured
M1-3 Pattern graduation 3+ conventions promoted
M1-4 First conflict detection FLAG with suggestions
M1-5 Accept/explain/ignore flows All paths work

Phase 3: Month 2 Simulation (Week 3)

Test ID Description Expected Status
M2-1 Payments team joins Inherits org policies
M2-2 Cross-team pattern recognition Matches Platform conventions
M2-3 Team-specific pattern capture Scoped to Payments only
M2-4 Cross-team conflict resolution Team override created

Phase 4: Month 3 Simulation (Week 4)

Test ID Description Expected Status
M3-1 New hire day 1 setup Guided onboarding
M3-2 First commit guidance 2+ suggestions provided
M3-3 Junior pattern capture Lower authority weight
M3-4 Senior adoption → promotion Weight increases

Phase 5: Month 4 Simulation (Week 5)

Test ID Description Expected Status
M4-1 Mobile team joins Different domain handling
M4-2 New hire (Mobile) day 1 Fresh team, org policies
M4-3 Cross-team pattern detection Same pattern, 3 teams
M4-4 Org-level promotion Admin approval required

Phase 6: Month 5 Simulation (Week 6)

Test ID Description Expected Status
M5-1 Pattern deprecation Status changes, notified
M5-2 Migration guidance on commit Deprecated warning + guide
M5-3 Migration tracking Progress by team

Phase 7: Month 6 Simulation (Week 7)

Test ID Description Expected Status
M6-1 SOC 2 report generation Comprehensive evidence
M6-2 Approval chain audit Full timeline
M6-3 Exception documentation Linked to tickets

Success Criteria

Knowledge Compound Metrics

Metric Target Measurement
Observations captured 100+ Count in graph
Conventions promoted 15+ Active conventions
Cross-team patterns 5+ Multi-team usage
Deprecated patterns 2+ Lifecycle tested

Onboarding Metrics

Metric Target Measurement
New hire guidance events 10+ per new hire Suggestion count
Suggestion acceptance rate >80% Accepted/offered
Time to first compliant commit <1 day Timestamp delta

Governance Metrics

Metric Target Measurement
Approval chain completeness 100% All patterns have approver
Exception documentation 100% All exceptions have reason
Migration tracking accuracy 100% Matches actual state

Audit Readiness

Metric Target Measurement
SOC 2 evidence generation <5 minutes Command execution
Evidence completeness All controls covered Auditor validation
Historical accuracy 100% Timeline matches reality

Implementation Notes

Simulation Infrastructure

pub struct SimulatedOrg {
    pub org_id: String,
    pub teams: Vec<SimulatedTeam>,
    pub knowledge_graph: KnowledgeGraph,
    pub timeline: SimulationTimeline,
}

pub struct SimulatedTeam {
    pub team_id: String,
    pub contributors: Vec<SimulatedContributor>,
    pub projects: Vec<SimulatedProject>,
}

pub struct SimulatedContributor {
    pub id: String,
    pub role: ContributorRole,
    pub seniority: u8,
    pub joined_at: u64,  // Simulation time
}

pub struct SimulatedCommit {
    pub author: String,
    pub project: String,
    pub patterns: Vec<PatternUsage>,
    pub timestamp: u64,
}

Test Fixtures

uat/fixtures/enterprise-sim/
├── org-structure.yaml       # Org, teams, contributors
├── month-1/
│   ├── commits.yaml         # 50 commits with patterns
│   └── expected.yaml        # Expected observations
├── month-2/
│   ├── commits.yaml
│   └── expected.yaml
├── month-3/
│   ├── new-hire-commits.yaml
│   └── expected.yaml
├── month-4/
│   ├── mobile-commits.yaml
│   └── expected.yaml
├── month-5/
│   ├── deprecation.yaml
│   └── migration-commits.yaml
└── month-6/
    └── audit-queries.yaml

Execution Script

#!/bin/bash
# run-enterprise-simulation.sh

set -euo pipefail

echo "=== Enterprise Simulation UAT ==="

# Setup
./setup-simulation.sh

# Month 1
./simulate-month.sh 1
./verify-month.sh 1

# Month 2
./simulate-month.sh 2
./verify-month.sh 2

# ... months 3-6

# Final metrics
./generate-report.sh

echo "=== Simulation Complete ==="

Appendix: Feature Dependencies

This simulation requires the following features from the gap analysis:

Feature Phase Required For
Evidence-based authority 10 M1-3 (evidence detection, graduation thresholds)
Scope hierarchy 11 M2-3 (team-specific patterns)
Knowledge lifecycle 12 M5-1 (deprecation)
Governance workflows 13 M4-4 (org-level approval)
External integration 15 M3-3 (ADR/spec linking)

Evidence Detection Requirements:

  • Commit message parsing for RFC/standard references
  • ADR file detection in repo (docs/adr/*.md)
  • Product spec linking (specs/*.md, *.spec.md)
  • Research document detection

Note: The simulation can be run incrementally as features are implemented. Early months (1-2) require only existing functionality + basic evidence detection. Later months (4-6) require the full feature set.