AgentSkillsCN

offline-impact-evaluator

在初步提出栈方案后,根据离线需求进行验证,以识别差距、评估复杂度,并提出调整建议。

SKILL.md
--- frontmatter
name: offline-impact-evaluator
description: Validate proposed stack against offline requirements. Use after initial stack proposal to identify gaps, assess complexity, and recommend adjustments.

Offline Impact Evaluator

Validate the proposed stack against the offline requirement captured in architecture-refinement. Identify gaps, assess if the solution is over-engineered, and recommend stack adjustments when needed.

Standalone Usage

Can be invoked directly:

  • "Does this stack support session-durable offline?"
  • "Evaluate offline capability of Next.js + Supabase"
  • "Is this architecture over-engineered for transient offline?"

Prerequisites

Requires:

  • Architecture brief with offline_requirement.level
  • Stack candidates from candidate-generator

Evaluation Process

Step 1: Map Required vs. Actual Capability

Required LevelMinimum Actual Capability
noneNo offline logic needed
transientIn-memory buffering, retry logic, graceful degradation
session_durableIndexedDB/SQLite, background sync, service worker
strong_offline_firstCRDT/event sourcing, conflict resolution, guaranteed sync

Step 2: Assess Each Stack Component

For each candidate, evaluate:

ComponentOffline Consideration
FrontendService worker support, offline detection, UI graceful degradation
Data LayerLocal storage technology, query capability offline
SyncBackground sync API, conflict resolution strategy
AuthToken caching, session persistence, refresh handling

Step 3: Gap Analysis

Identify:

  • Under-delivery: Required capability not met
  • Over-engineering: Unnecessary complexity for the requirement
  • Risk areas: Components with weak offline story

Step 4: Recommendations

If gaps exist:

  1. Recommend component swaps or additions
  2. Estimate implementation complexity delta
  3. Flag if cost re-evaluation is needed

Offline Technology Reference

StrategyPersistenceSyncComplexityUse Case
Cache-onlyNoneNoneLowStatic assets, read-only data
IndexedDBSession+Manual/BGMediumTransactional local data
SQLite (WASM)Session+ManualMedium-HighComplex queries offline
Event QueueDurableBG SyncMediumAction buffering
CRDTDurableAutomaticHighReal-time collaboration, conflict-free

Output Contract

yaml
offline_impact_evaluation:
  stack_id: "<reference>"
  
  requirement:
    level: "<none|transient|session_durable|strong_offline_first>"
    session_close_behavior: "<loses_data|persists_locally>"
    sync_strategy: "<none|background_sync|manual_sync|crdt>"
  
  assessment:
    actual_level: "<none|transient|session_durable|strong_offline_first>"
    components:
      frontend:
        capability: "<level>"
        notes: "<details>"
      data_layer:
        capability: "<level>"
        technology: "<what provides offline>"
      sync:
        capability: "<level>"
        strategy: "<how sync works>"
  
  gap_analysis:
    has_gap: true|false
    gap_description: "<what's missing>"
    over_engineered: true|false
    over_engineering_notes: "<why it's excessive>"
  
  risks:
    - risk: "<risk description>"
      severity: "<low|medium|high>"
      mitigation: "<how to address>"
  
  recommendations:
    - action: "<what to change>"
      component: "<which component>"
      impact:
        cost: "<increase|decrease|same>"
        complexity: "<increase|decrease|same>"
        timeline: "<increase|decrease|same>"
  
  verdict:
    stack_viable: true|false
    requires_stack_change: true|false
    requires_cost_reevaluation: true|false

Example: Gap Analysis

yaml
offline_impact_evaluation:
  stack_id: "next-vercel-supabase"
  
  requirement:
    level: "session_durable"
    session_close_behavior: "persists_locally"
    sync_strategy: "background_sync"
  
  assessment:
    actual_level: "transient"
    components:
      frontend:
        capability: "transient"
        notes: "No service worker configured by default"
      data_layer:
        capability: "none"
        technology: "Server-side only"
      sync:
        capability: "none"
        strategy: "N/A"
  
  gap_analysis:
    has_gap: true
    gap_description: "Stack lacks local persistence and background sync"
    over_engineered: false
  
  risks:
    - risk: "Data loss on network interruption"
      severity: "high"
      mitigation: "Add IndexedDB layer with sync"
  
  recommendations:
    - action: "Add @tanstack/query with offline persistence"
      component: "data_layer"
      impact:
        cost: "same"
        complexity: "increase"
        timeline: "increase"
    - action: "Implement service worker for caching"
      component: "frontend"
      impact:
        cost: "same"
        complexity: "increase"
        timeline: "increase"
  
  verdict:
    stack_viable: true
    requires_stack_change: false
    requires_cost_reevaluation: false

Integration Points

  • Invoked by: stack-evaluation (after candidate-generator)
  • May trigger: Cost re-evaluation if requires_cost_reevaluation: true
  • Feeds into: implementation-plan (offline phase planning)