assumption-tracking

Explicit tracking, validation, and failure planning for project assumptions. Reference for managing assumptions throughout project lifecycle.

16 stars

Best use case

assumption-tracking is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Explicit tracking, validation, and failure planning for project assumptions. Reference for managing assumptions throughout project lifecycle.

Teams using assumption-tracking should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/assumption-tracking/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/devops/assumption-tracking/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/assumption-tracking/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How assumption-tracking Compares

Feature / Agentassumption-trackingStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Explicit tracking, validation, and failure planning for project assumptions. Reference for managing assumptions throughout project lifecycle.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Assumption Tracking Skill

// Project Autopilot - Assumption Management
// Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>

**Purpose:** Explicitly track assumptions, define validation methods, and create failure plans to handle invalidated assumptions.

---

## Why Assumptions Matter

Assumptions are beliefs about the project that haven't been verified:
- **Valid assumptions** enable confident planning
- **Invalid assumptions** cause cascading failures
- **Untracked assumptions** become silent risks

This skill ensures assumptions are:
1. **Explicitly stated** - No hidden assumptions
2. **Categorized** - Technical, business, or external
3. **Validated** - With clear criteria
4. **Planned for failure** - With mitigation and fallback

---

## Assumption Categories

### Technical Assumptions
Beliefs about technical capabilities:
- API availability and behavior
- Library/framework compatibility
- Performance characteristics
- Infrastructure capabilities
- Data format and structure

### Business Assumptions
Beliefs about requirements and priorities:
- User behavior expectations
- Requirement interpretations
- Priority orderings
- Scope boundaries
- Timeline expectations

### External Assumptions
Beliefs about external factors:
- Third-party service SLAs
- Integration partner readiness
- Timeline dependencies
- Resource availability
- Regulatory compliance

---

## Assumption Template

### YAML Format

```yaml
assumptions:
  - id: A001
    statement: "Supabase rate limits won't affect normal usage"
    category: external
    criticality: high       # high | medium | low
    phase: 3               # Phase where assumption matters
    validation:
      method: "load_test"   # load_test | api_check | manual | code_review
      command: "npm run test:load"
      criteria: "< 10% failures at 100 concurrent users"
      when: "before_phase_3"  # when to validate
    failure_plan:
      impact: "Authentication delays during peak usage"
      mitigation: "Implement request queuing with exponential backoff"
      fallback: "Switch to self-hosted auth service"
      effort: "medium"      # low | medium | high
    status: untested        # untested | validated | invalidated
    validated_at: null
    notes: ""

  - id: A002
    statement: "Next.js 14 App Router supports all required features"
    category: technical
    criticality: medium
    phase: 1
    validation:
      method: "code_review"
      command: null
      criteria: "All planned features have documentation"
      when: "before_planning"
    failure_plan:
      impact: "May need to use Pages Router for some features"
      mitigation: "Identify feature gaps early, plan workarounds"
      fallback: "Fall back to Pages Router or hybrid approach"
      effort: "high"
    status: validated
    validated_at: "2026-01-29"
    notes: "Verified against Next.js 14 docs"

  - id: A003
    statement: "User data model matches existing schema"
    category: business
    criticality: high
    phase: 2
    validation:
      method: "api_check"
      command: "curl -X GET https://api.example.com/users/schema"
      criteria: "Schema includes: id, email, name, created_at"
      when: "before_phase_2"
    failure_plan:
      impact: "Database migration complexity increases"
      mitigation: "Add migration step to transform data"
      fallback: "Create new user entity, migrate data async"
      effort: "high"
    status: untested
    validated_at: null
    notes: ""
```

### Markdown Format

```markdown
## Assumptions

### Phase Assumptions
| ID | Assumption | Category | Criticality | Status |
|----|------------|----------|-------------|--------|
| A001 | Supabase rate limits won't affect normal usage | external | High | Untested |
| A002 | Next.js 14 App Router supports all required features | technical | Medium | Validated |
| A003 | User data model matches existing schema | business | High | Untested |

### Validation Tasks
| Assumption | Method | When | Criteria |
|------------|--------|------|----------|
| A001 | load_test | Before Phase 3 | < 10% failures at 100 users |
| A002 | code_review | Before planning | All features documented |
| A003 | api_check | Before Phase 2 | Schema includes required fields |

### Failure Plans
| Assumption | If Fails | Mitigation | Fallback |
|------------|----------|------------|----------|
| A001 | Auth delays | Request queuing | Self-hosted auth |
| A002 | Feature gaps | Plan workarounds | Pages Router hybrid |
| A003 | Schema mismatch | Migration step | New entity + async migrate |
```

---

## Validation Protocol

### Validation Methods

```
FUNCTION validateAssumption(assumption):
    result = {
        assumption_id: assumption.id,
        passed: false,
        evidence: null,
        error: null,
        validated_at: null
    }

    SWITCH assumption.validation.method:
        CASE "load_test":
            # Run load test
            output = runCommand(assumption.validation.command)
            result.passed = evaluateCriteria(output, assumption.validation.criteria)
            result.evidence = {
                type: "load_test",
                output: output,
                metrics: parseLoadTestMetrics(output)
            }

        CASE "api_check":
            # Check API endpoint
            IF assumption.validation.command:
                output = runCommand(assumption.validation.command)
            ELSE:
                output = fetchAPI(assumption.validation.endpoint)
            result.passed = evaluateCriteria(output, assumption.validation.criteria)
            result.evidence = {
                type: "api_check",
                response: output
            }

        CASE "manual":
            # Request manual verification
            LOG "Manual verification required for: {assumption.statement}"
            user_response = requestManualVerification(assumption)
            result.passed = user_response.confirmed
            result.evidence = {
                type: "manual",
                verified_by: user_response.user,
                notes: user_response.notes
            }

        CASE "code_review":
            # Analyze code or documentation
            LOG "Code review required for: {assumption.statement}"
            review_result = performCodeReview(assumption.validation.criteria)
            result.passed = review_result.meets_criteria
            result.evidence = {
                type: "code_review",
                findings: review_result.findings
            }

    IF result.passed:
        assumption.status = "validated"
        assumption.validated_at = now()
        LOG "✅ Assumption {assumption.id} VALIDATED"
    ELSE:
        assumption.status = "invalidated"
        LOG "❌ Assumption {assumption.id} INVALIDATED"
        activateFailurePlan(assumption.failure_plan)

    RETURN result
```

### Automatic Validation Triggers

```yaml
validation_triggers:
  - when: "before_planning"
    validate:
      - assumptions WHERE criticality == "high" AND phase == null

  - when: "before_phase"
    validate:
      - assumptions WHERE phase == current_phase AND status == "untested"

  - when: "phase_complete"
    validate:
      - assumptions WHERE phase == current_phase AND status == "untested"

  - when: "on_demand"
    validate:
      - assumption specified by user
```

---

## Failure Plan Activation

### When Assumption Invalidated

```
FUNCTION activateFailurePlan(failure_plan):
    LOG "⚠️ Activating failure plan"
    LOG "Impact: {failure_plan.impact}"
    LOG "Mitigation: {failure_plan.mitigation}"

    # Create mitigation task
    task = {
        type: "assumption_failure",
        title: "Mitigate invalidated assumption",
        description: failure_plan.mitigation,
        priority: "high",
        effort: failure_plan.effort,
        blocks: getAffectedPhases(assumption)
    }

    addTask(task)

    # If mitigation fails, fallback
    IF mitigationFails():
        LOG "⚠️ Mitigation failed, activating fallback"
        LOG "Fallback: {failure_plan.fallback}"

        fallback_task = {
            type: "assumption_fallback",
            title: "Implement fallback for assumption failure",
            description: failure_plan.fallback,
            priority: "critical"
        }

        addTask(fallback_task)
```

### Failure Plan Impact Assessment

```
FUNCTION assessFailurePlanImpact(assumption):
    impact = {
        affected_phases: [],
        affected_tasks: [],
        scope_change: false,
        timeline_impact: "unknown"
    }

    # Find affected phases
    FOR each phase IN project.phases:
        IF phase.depends_on_assumption(assumption.id):
            impact.affected_phases.add(phase.number)
            impact.affected_tasks.extend(phase.tasks)

    # Determine if scope change needed
    IF assumption.failure_plan.effort == "high":
        impact.scope_change = true
        impact.timeline_impact = "significant"
    ELSE IF assumption.failure_plan.effort == "medium":
        impact.timeline_impact = "moderate"
    ELSE:
        impact.timeline_impact = "minimal"

    RETURN impact
```

---

## Assumption Tracking in Phases

### Phase Template Addition

Add to each phase file:

```markdown
## Assumptions

### Phase Assumptions
| ID | Assumption | Criticality | Status |
|----|------------|-------------|--------|
| A001 | {statement} | High | Untested |
| A002 | {statement} | Medium | Validated |

### Validation Schedule
| Assumption | Method | When | Criteria |
|------------|--------|------|----------|
| A001 | load_test | Before Phase 3 | < 10% failures |
| A002 | api_check | Phase start | Schema match |

### Failure Plans
| Assumption | If Fails | Mitigation | Fallback |
|------------|----------|------------|----------|
| A001 | Auth delays | Request queuing | Self-hosted |
| A002 | Schema mismatch | Migration step | New entity |
```

### Assumption Status Tracking

```yaml
# In phase file or .autopilot/assumptions.yaml
assumptions_status:
  - id: A001
    status: validated
    validated_at: "2026-01-29T10:30:00Z"
    evidence: "Load test passed with 3% failure rate"

  - id: A002
    status: invalidated
    validated_at: "2026-01-29T11:00:00Z"
    evidence: "Schema missing required fields"
    mitigation_status: in_progress
```

---

## Integration Points

### With /autopilot:plan

```
plan.md reads:
    - assumptions WHERE phase == current_phase
    - Creates validation tasks
    - Adds assumption checks to phase quality gate
```

### With /autopilot:takeoff

```
build.md executes:
    - IF untested assumptions for current phase:
        FIRST validate assumptions
        IF any invalidated:
            Pause and show failure plan
            Wait for user decision
```

### With /autopilot:scan

```
scan.md includes:
    - List all assumptions
    - Show validation status
    - Flag invalidated assumptions
    - Suggest validation schedule
```

### With /autopilot:cockpit

```
resume.md loads:
    - Assumption status from previous session
    - Continues with validation state preserved
```

---

## Commands

### List Assumptions

```bash
/autopilot:assumptions list
/autopilot:assumptions list --phase=3
/autopilot:assumptions list --status=untested
```

### Validate Assumption

```bash
/autopilot:assumptions validate A001
/autopilot:assumptions validate --phase=3
/autopilot:assumptions validate --all
```

### Update Assumption Status

```bash
/autopilot:assumptions mark A001 --status=validated
/autopilot:assumptions mark A001 --status=invalidated
```

---

## Output Format

### Assumption Validation Report

```markdown
## Assumption Validation Report

**Phase:** 3 - User Dashboard
**Validated:** 2026-01-29

### Summary
| Status | Count |
|--------|-------|
| Validated | 2 |
| Invalidated | 1 |
| Untested | 1 |

### Results

#### ✅ A001: Supabase rate limits
**Status:** Validated
**Method:** load_test
**Evidence:** 3% failure rate at 100 concurrent users (criteria: <10%)

#### ✅ A002: Next.js 14 features
**Status:** Validated
**Method:** code_review
**Evidence:** All required features documented

#### ❌ A003: User schema match
**Status:** Invalidated
**Method:** api_check
**Evidence:** Schema missing `avatar` field

**Failure Plan Activated:**
- Impact: Database migration complexity increases
- Mitigation: Add migration step to transform data
- Fallback: Create new user entity, migrate data async

#### ⏳ A004: Payment gateway latency
**Status:** Untested
**When:** Before Phase 5
```

---

## Best Practices

### Writing Good Assumptions

**DO:**
- Be specific and testable
- Include clear validation criteria
- Define realistic failure plans
- Categorize by type (technical, business, external)
- Assign criticality based on impact

**DON'T:**
- Leave assumptions implicit
- Assume without evidence
- Skip failure planning for critical assumptions
- Wait until failure to consider alternatives

### Validation Timing

| Criticality | When to Validate |
|-------------|------------------|
| High | Before dependent phase starts |
| Medium | During phase planning |
| Low | During phase execution |

### Failure Plan Quality

Good failure plans have:
- Clear impact description
- Specific mitigation steps
- Fallback option that doesn't require the assumption
- Effort estimate

Related Skills

issue-tracking-with-beans

16
from diegosouzapw/awesome-omni-skill

Use when starting work, tracking tasks, or deciding where to record discovered work - clarifies when to use TodoWrite vs Beans

assumption-logging

16
from diegosouzapw/awesome-omni-skill

Capture and structure assumptions from pilot plans and hypotheses into a centralized log for ongoing risk monitoring and stakeholder alerts. Use when extracting, tracking, and signaling assumption changes from pilot documentation.

prediction-tracking

16
from diegosouzapw/awesome-omni-skill

Track and evaluate AI predictions over time to assess accuracy. Use when reviewing past predictions to determine if they came true, failed, or remain uncertain.

error-tracking

16
from diegosouzapw/awesome-omni-skill

Add error tracking and performance monitoring to your project services. Use this skill when adding error handling, creating new controllers/routes, instrumenting background jobs, or tracking performance. Supports Sentry, Datadog, and other monitoring solutions. ALL ERRORS MUST BE CAPTURED - no exceptions.

assumption-validation

16
from diegosouzapw/awesome-omni-skill

Test whether assumptions are true before making commitments. Use when assumptions have low certainty and high risk.

payment-tracking-rule

16
from diegosouzapw/awesome-omni-skill

Implements payment status tracking in the Request model.

ML Experiment Tracking

16
from diegosouzapw/awesome-omni-skill

Track machine learning experiments with reproducible parameters and metrics

asset-tracking

16
from diegosouzapw/awesome-omni-skill

Use when managing asset metadata, dependencies, and delivery workflows across teams.

analytics-tracking

16
from diegosouzapw/awesome-omni-skill

(中文)When the user wants to set up, improve, or audit analytics tracking and measurement. Also use when the user mentions "set up tracking," "GA4," "Google Analytics," "conversion tracking," "event tracking," "UTM parameters," "tag manager," "GTM," "analytics implementation," or "tracking plan." For A/B test measurement, see ab-test-setup.

assumption-grading

16
from diegosouzapw/awesome-omni-skill

Assess assumptions on certainty and risk to prioritize validation efforts. Use at project start or before phase transitions.

assumption-buster

16
from diegosouzapw/awesome-omni-skill

Flip, remove, or exaggerate assumptions to unlock new solution angles.

aiwf:error-tracking

16
from diegosouzapw/awesome-omni-skill

Add Sentry v8 error tracking and performance monitoring to your project services. Use this skill when adding error handling, creating new controllers, instrumenting cron jobs, or tracking database performance. ALL ERRORS MUST BE CAPTURED TO SENTRY - no exceptions.