[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C2WM0X7WHTPQ18D7R7R9BB":3,"skill-same:01M6C2WM0X7WHTPQ18D7R7R9BB":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6C2WM0X7WHTPQ18D7R7R9BB","regression-baseline",null,"Create and maintain regression test baselines for comparison and drift detection across versioned snapshots","jmagly\u002Faiwg","jmagly","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1159087?v=4","01M6C10AK8N2WCSQN11FYGTJWN","Joseph Magly","01M6C10AQ8A2RMED1Y1BSVY7NF",229,"MIT","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fcodex-sdlc\u002Fskills\u002Fregression-baseline\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37],"baseline","regression","regression baseline","test","create","detection","regression test","snapshots","maintain","drift","across","comparison","for","drift detection","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: regression-baseline\nplatforms: [all]\ndescription: Create and maintain regression test baselines for comparison and drift detection across versioned snapshots\n\n---\n\n# regression-baseline\n\nCreate and maintain regression test baselines for comparison and drift detection.\n\n## Triggers\n\n\nAlternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):\n\n- \"snapshot tests\" → baseline creation shorthand\n- \"capture current behavior\" → baseline establishment\n\n## Purpose\n\nThis skill manages regression baselines by:\n- Capturing known-good system states as baselines\n- Storing snapshots of expected outputs\n- Maintaining versioned baseline history\n- Comparing current state to baseline\n- Detecting drift from established baselines\n- Managing baseline updates and approvals\n\n## Behavior\n\nWhen triggered, this skill:\n\n1. **Identifies baseline scope**:\n   - Determine what to baseline (tests, outputs, performance)\n   - Select baseline type (functional, visual, performance, API)\n   - Identify affected components\n   - Check for existing baselines\n\n2. **Captures baseline data**:\n   - Run tests and capture outputs\n   - Take snapshots (visual, data, API responses)\n   - Measure performance metrics\n   - Record system configuration\n   - Generate checksums\u002Fhashes\n\n3. **Stores baseline**:\n   - Version baseline with semantic versioning\n   - Tag with git commit\u002Frelease\n   - Store in `.aiwg\u002Ftesting\u002Fbaselines\u002F`\n   - Update baseline manifest\n   - Link to requirements\u002Ffeatures\n\n4. **Validates baseline quality**:\n   - Ensure baseline is stable (run multiple times)\n   - Verify baseline is reproducible\n   - Check for known issues in baseline\n   - Require approval for critical baselines\n\n5. **Documents baseline**:\n   - Record what is baselined\n   - Note when and why baseline was created\n   - Document known deviations\n   - Link to issues\u002Frequirements\n\n6. **Manages baseline lifecycle**:\n   - Archive old baselines\n   - Update baselines on intentional changes\n   - Track baseline drift over time\n   - Alert on excessive drift\n\n## Baseline Types\n\n### Functional Baseline\n\n```yaml\nfunctional_baseline:\n  description: Expected behavior outputs\n  scope: Unit and integration tests\n  format: JSON snapshots\n\n  capture:\n    - test_outputs\n    - assertions\n    - mock_data\n    - expected_errors\n\n  example:\n    test: \"user registration\"\n    baseline: \"baselines\u002Ffunctional\u002Fuser-registration-v1.json\"\n    includes:\n      - success_response_format\n      - validation_error_messages\n      - database_state_after_registration\n```\n\n### Visual Baseline\n\n```yaml\nvisual_baseline:\n  description: UI screenshots for visual regression\n  scope: Frontend components\n  format: PNG images with metadata\n\n  capture:\n    - component_screenshots\n    - page_screenshots\n    - responsive_breakpoints\n    - interaction_states\n\n  example:\n    component: \"LoginForm\"\n    baseline: \"baselines\u002Fvisual\u002Flogin-form-v2.png\"\n    metadata:\n      viewport: 1920x1080\n      theme: dark\n      state: default\n```\n\n### Performance Baseline\n\n```yaml\nperformance_baseline:\n  description: Performance benchmarks\n  scope: API response times, load tests\n  format: JSON metrics\n\n  capture:\n    - response_times_p50_p95_p99\n    - throughput_requests_per_second\n    - resource_utilization\n    - database_query_times\n\n  example:\n    endpoint: \"\u002Fapi\u002Fusers\"\n    baseline: \"baselines\u002Fperformance\u002Fapi-users-v1.json\"\n    metrics:\n      p50_response_time_ms: 45\n      p95_response_time_ms: 120\n      p99_response_time_ms: 250\n      throughput_rps: 1000\n```\n\n### API Contract Baseline\n\n```yaml\napi_baseline:\n  description: API request\u002Fresponse contracts\n  scope: REST\u002FGraphQL APIs\n  format: OpenAPI\u002FJSON schemas\n\n  capture:\n    - request_schemas\n    - response_schemas\n    - status_codes\n    - headers\n\n  example:\n    endpoint: \"POST \u002Fapi\u002Fauth\u002Flogin\"\n    baseline: \"baselines\u002Fapi\u002Fauth-login-v3.yaml\"\n    contract:\n      request_body_schema: LoginRequest\n      success_response: 200 with token\n      error_responses: [400, 401, 429]\n```\n\n## Baseline Manifest\n\n```yaml\n# .aiwg\u002Ftesting\u002Fbaselines\u002Fmanifest.yaml\n\nbaselines:\n  - id: functional-auth-v1\n    type: functional\n    created: 2026-01-28T10:00:00Z\n    created_by: test-engineer\n    git_commit: abc123def\n    release: v1.2.0\n    scope: Authentication flows\n    files:\n      - baselines\u002Ffunctional\u002Flogin-v1.json\n      - baselines\u002Ffunctional\u002Flogout-v1.json\n      - baselines\u002Ffunctional\u002Fregister-v1.json\n    status: active\n    approved_by: tech-lead\n    notes: Initial baseline for auth module\n\n  - id: visual-dashboard-v2\n    type: visual\n    created: 2026-01-20T14:30:00Z\n    created_by: frontend-engineer\n    git_commit: def456ghi\n    release: v1.1.0\n    scope: Dashboard UI components\n    files:\n      - baselines\u002Fvisual\u002Fdashboard-desktop-v2.png\n      - baselines\u002Fvisual\u002Fdashboard-mobile-v2.png\n    status: active\n    approved_by: design-lead\n    previous_baseline: visual-dashboard-v1\n    changes: Updated color scheme per design system v2\n\n  - id: performance-api-v1\n    type: performance\n    created: 2026-01-15T09:00:00Z\n    created_by: devops-engineer\n    git_commit: ghi789jkl\n    release: v1.0.0\n    scope: Core API endpoints\n    files:\n      - baselines\u002Fperformance\u002Fapi-benchmarks-v1.json\n    status: active\n    approved_by: architect\n    notes: Pre-optimization baseline\n```\n\n## Baseline Comparison Report\n\n```markdown\n# Baseline Comparison Report\n\n**Date**: 2026-01-28\n**Baseline**: functional-auth-v1\n**Current State**: HEAD (commit xyz789)\n**Comparison Type**: Functional\n\n## Executive Summary\n\n**Status**: ⚠️ Drift Detected\n**Changes**: 3 outputs differ from baseline\n**Severity**: Medium - Unexpected behavior changes\n\n| Metric | Baseline | Current | Drift |\n|--------|----------|---------|-------|\n| Tests Passing | 45\u002F45 | 43\u002F45 | -2 |\n| Output Matches | 100% | 93.3% | -6.7% |\n| New Failures | 0 | 2 | +2 |\n\n## Detailed Comparison\n\n### Test: user-login\n\n**Status**: ⚠️ Drift\n\n**Baseline** (functional-auth-v1):\n```json\n{\n  \"status\": 200,\n  \"body\": {\n    \"token\": \"jwt.header.payload.signature\",\n    \"user\": {\n      \"id\": \"uuid\",\n      \"email\": \"user@example.com\"\n    }\n  }\n}\n```\n\n**Current**:\n```json\n{\n  \"status\": 200,\n  \"body\": {\n    \"token\": \"jwt.header.payload.signature\",\n    \"user\": {\n      \"id\": \"uuid\",\n      \"email\": \"user@example.com\",\n      \"name\": \"John Doe\"  \u002F\u002F NEW FIELD\n    }\n  }\n}\n```\n\n**Analysis**: New `name` field added to response\n**Impact**: Breaking change for clients expecting exact schema\n**Recommendation**: Update baseline if intentional, or fix if bug\n\n### Test: user-registration-invalid-email\n\n**Status**: ❌ Failure\n\n**Baseline**:\n```json\n{\n  \"status\": 400,\n  \"body\": {\n    \"error\": \"Invalid email format\"\n  }\n}\n```\n\n**Current**:\n```json\n{\n  \"status\": 500,\n  \"body\": {\n    \"error\": \"Internal server error\"\n  }\n}\n```\n\n**Analysis**: Validation now returns 500 instead of 400\n**Impact**: Critical - Server error on invalid input\n**Recommendation**: Fix immediately - regression in error handling\n\n### Test: user-logout\n\n**Status**: ✅ Match\n\nOutput matches baseline exactly. No drift detected.\n\n## Drift Summary\n\n| Test | Status | Drift Type | Severity |\n|------|--------|------------|----------|\n| user-login | ⚠️ Drift | Schema change | Medium |\n| user-registration | ✅ Match | None | - |\n| user-registration-invalid | ❌ Fail | Error code | High |\n| user-logout | ✅ Match | None | - |\n| token-refresh | ✅ Match | None | - |\n\n## Root Cause Analysis\n\n### Likely Causes\n\n1. **user-login drift**: Intentional feature addition (commit abc123)\n   - PR #789: \"Add user name to login response\"\n   - Needs baseline update\n\n2. **invalid-email failure**: Unintentional regression\n   - Validation middleware broken\n   - Returns 500 instead of 400\n   - Introduced in commit def456\n\n## Recommendations\n\n### Immediate Actions\n\n- [ ] Fix validation error handling (returns 500 instead of 400)\n- [ ] Add test for proper error codes\n- [ ] Verify error handling across all validation\n\n### Baseline Updates\n\n- [ ] Update baseline for user-login if name field is intentional\n- [ ] Document breaking change in API changelog\n- [ ] Notify API consumers of schema change\n\n### Process Improvements\n\n- [ ] Require baseline review for API changes\n- [ ] Add baseline diff to PR template\n- [ ] Run baseline comparison in CI\n\n## Approval Required\n\nTo update baseline with new outputs:\n\n```bash\n# Review changes\naiwg baseline compare functional-auth-v1\n\n# Update if intentional\naiwg baseline update functional-auth-v1 \\\n  --approve-changes user-login \\\n  --justification \"Added name field per REQ-123\"\n\n# Or create new baseline version\naiwg baseline create functional-auth-v2 \\\n  --based-on v1 \\\n  --changes \"Added user name to login response\"\n```\n```\n\n## Usage Examples\n\n### Create New Baseline\n\n```\nUser: \"Create baseline for authentication tests\"\n\nSkill executes:\n1. Identify auth test suite\n2. Run tests and capture outputs\n3. Validate stability (run 3 times)\n4. Store baseline with version\n5. Update manifest\n\nOutput:\n\"Baseline Created: functional-auth-v1\n\nScope: Authentication tests (45 tests)\nFormat: JSON snapshots\nLocation: .aiwg\u002Ftesting\u002Fbaselines\u002Ffunctional\u002Fauth\u002F\n\nFiles:\n- login-v1.json\n- logout-v1.json\n- register-v1.json\n- token-refresh-v1.json\n\nStatus: Active\nGit Commit: abc123\nRelease: v1.2.0\n\nNext: Baseline will be used for regression detection\"\n```\n\n### Update Existing Baseline\n\n```\nUser: \"Update baseline for dashboard UI\"\n\nSkill checks current vs baseline:\n\"Comparing to visual-dashboard-v1:\n- 5 screenshots differ\n- Changes: Color scheme updated\n\nApprove changes?\n- dashboard-desktop.png\n- dashboard-mobile.png\n- widget-panel.png\n\nReason for update?\"\n\nUser: \"Design system v2 rollout\"\n\nSkill creates:\n\"Baseline Updated: visual-dashboard-v2\n\nPrevious: visual-dashboard-v1 (archived)\nChanges: Design system v2 colors\nApproved by: [current user]\nFiles updated: 5\n\nNew baseline active for regression tests\"\n```\n\n### Compare to Baseline\n\n```\nUser: \"Compare current state to baseline\"\n\nSkill analyzes:\n\"Baseline Comparison: functional-auth-v1\n\nStatus: ⚠️ Drift Detected\n\nMatches: 43\u002F45 tests (95.6%)\nDrifts: 2 tests show differences\n\nDrift 1: user-login\n  - New field 'name' in response\n  - Severity: Medium\n  - Likely intentional (commit abc123)\n\nDrift 2: invalid-email handling\n  - Returns 500 instead of 400\n  - Severity: High\n  - Likely regression (needs fix)\n\nSee full report: .aiwg\u002Ftesting\u002Fbaseline-comparison.md\"\n```\n\n## Integration\n\nThis skill uses:\n- `regression-bisect`: Find commits that broke baseline\n- `regression-metrics`: Track baseline drift over time\n- `test-coverage`: Ensure baselines cover critical paths\n- `project-awareness`: Detect test framework and conventions\n\n## Agent Orchestration\n\n```yaml\nagents:\n  creation:\n    agent: test-engineer\n    focus: Baseline capture and validation\n\n  analysis:\n    agent: test-architect\n    focus: Drift analysis and recommendations\n\n  approval:\n    agent: tech-lead\n    focus: Baseline update approval\n```\n\n## Configuration\n\n### Baseline Storage\n\n```yaml\nbaseline_config:\n  storage_path: .aiwg\u002Ftesting\u002Fbaselines\u002F\n  structure:\n    - functional\u002F\n    - visual\u002F\n    - performance\u002F\n    - api\u002F\n\n  versioning: semantic  # v1, v2, v3\n  compression: gzip     # for large baselines\n  retention: 10         # keep last 10 versions\n```\n\n### Drift Thresholds\n\n```yaml\ndrift_thresholds:\n  functional:\n    exact_match_required: true\n    allow_new_fields: false  # strict schema matching\n\n  visual:\n    pixel_diff_threshold: 0.1%  # 0.1% difference allowed\n    ignore_areas: [timestamp, dynamic-content]\n\n  performance:\n    p50_tolerance: 10%   # ±10% from baseline\n    p95_tolerance: 15%   # ±15% from baseline\n    p99_tolerance: 20%   # ±20% from baseline\n```\n\n### Approval Requirements\n\n```yaml\napproval_config:\n  require_approval_for:\n    - baseline_creation: true\n    - baseline_updates: true\n    - baseline_deletion: true\n\n  approvers:\n    - tech-lead\n    - architect\n    - test-lead\n\n  approval_via:\n    - pr_review\n    - issue_comment\n    - command_flag: --approved-by\n```\n\n## Output Locations\n\n- Baselines: `.aiwg\u002Ftesting\u002Fbaselines\u002F{type}\u002F`\n- Manifest: `.aiwg\u002Ftesting\u002Fbaselines\u002Fmanifest.yaml`\n- Comparisons: `.aiwg\u002Ftesting\u002Fbaseline-comparisons\u002F`\n- Archived: `.aiwg\u002Ftesting\u002Fbaselines\u002Farchive\u002F`\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fschemas\u002Ftest\u002Fbaseline-schema.yaml\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fcommands\u002Fbaseline-create.md\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fagents\u002Ftest-engineer.md\n","# regression-baseline\n\nCreate and maintain regression test baselines for comparison and drift detection.\n\n## Triggers\n\n\nAlternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):\n\n- \"snapshot tests\" → baseline creation shorthand\n- \"capture current behavior\" → baseline establishment\n\n## Purpose\n\nThis skill manages regression baselines by:\n- Capturing known-good system states as baselines\n- Storing snapshots of expected outputs\n- Maintaining versioned baseline history\n- Comparing current state to baseline\n- Detecting drift from established baselines\n- Managing baseline updates and approvals\n\n## Behavior\n\nWhen triggered, this skill:\n\n1. **Identifies baseline scope**:\n   - Determine what to baseline (tests, outputs, performance)\n   - Select baseline type (functional, visual, performance, API)\n   - Identify affected components\n   - Check for existing baselines\n\n2. **Captures baseline data**:\n   - Run tests and capture outputs\n   - Take snapshots (visual, data, API responses)\n   - Measure performance metrics\n   - Record system configuration\n   - Generate checksums\u002Fhashes\n\n3. **Stores baseline**:\n   - Version baseline with semantic versioning\n   - Tag with git commit\u002Frelease\n   - Store in `.aiwg\u002Ftesting\u002Fbaselines\u002F`\n   - Update baseline manifest\n   - Link to requirements\u002Ffeatures\n\n4. **Validates baseline quality**:\n   - Ensure baseline is stable (run multiple times)\n   - Verify baseline is reproducible\n   - Check for known issues in baseline\n   - Require approval for critical baselines\n\n5. **Documents baseline**:\n   - Record what is baselined\n   - Note when and why baseline was created\n   - Document known deviations\n   - Link to issues\u002Frequirements\n\n6. **Manages baseline lifecycle**:\n   - Archive old baselines\n   - Update baselines on intentional changes\n   - Track baseline drift over time\n   - Alert on excessive drift\n\n## Baseline Types\n\n### Functional Baseline\n\n```yaml\nfunctional_baseline:\n  description: Expected behavior outputs\n  scope: Unit and integration tests\n  format: JSON snapshots\n\n  capture:\n    - test_outputs\n    - assertions\n    - mock_data\n    - expected_errors\n\n  example:\n    test: \"user registration\"\n    baseline: \"baselines\u002Ffunctional\u002Fuser-registration-v1.json\"\n    includes:\n      - success_response_format\n      - validation_error_messages\n      - database_state_after_registration\n```\n\n### Visual Baseline\n\n```yaml\nvisual_baseline:\n  description: UI screenshots for visual regression\n  scope: Frontend components\n  format: PNG images with metadata\n\n  capture:\n    - component_screenshots\n    - page_screenshots\n    - responsive_breakpoints\n    - interaction_states\n\n  example:\n    component: \"LoginForm\"\n    baseline: \"baselines\u002Fvisual\u002Flogin-form-v2.png\"\n    metadata:\n      viewport: 1920x1080\n      theme: dark\n      state: default\n```\n\n### Performance Baseline\n\n```yaml\nperformance_baseline:\n  description: Performance benchmarks\n  scope: API response times, load tests\n  format: JSON metrics\n\n  capture:\n    - response_times_p50_p95_p99\n    - throughput_requests_per_second\n    - resource_utilization\n    - database_query_times\n\n  example:\n    endpoint: \"\u002Fapi\u002Fusers\"\n    baseline: \"baselines\u002Fperformance\u002Fapi-users-v1.json\"\n    metrics:\n      p50_response_time_ms: 45\n      p95_response_time_ms: 120\n      p99_response_time_ms: 250\n      throughput_rps: 1000\n```\n\n### API Contract Baseline\n\n```yaml\napi_baseline:\n  description: API request\u002Fresponse contracts\n  scope: REST\u002FGraphQL APIs\n  format: OpenAPI\u002FJSON schemas\n\n  capture:\n    - request_schemas\n    - response_schemas\n    - status_codes\n    - headers\n\n  example:\n    endpoint: \"POST \u002Fapi\u002Fauth\u002Flogin\"\n    baseline: \"baselines\u002Fapi\u002Fauth-login-v3.yaml\"\n    contract:\n      request_body_schema: LoginRequest\n      success_response: 200 with token\n      error_responses: [400, 401, 429]\n```\n\n## Baseline Manifest\n\n```yaml\n# .aiwg\u002Ftesting\u002Fbaselines\u002Fmanifest.yaml\n\nbaselines:\n  - id: functional-auth-v1\n    type: functional\n    created: 2026-01-28T10:00:00Z\n    created_by: test-engineer\n    git_commit: abc123def\n    release: v1.2.0\n    scope: Authentication flows\n    files:\n      - baselines\u002Ffunctional\u002Flogin-v1.json\n      - baselines\u002Ffunctional\u002Flogout-v1.json\n      - baselines\u002Ffunctional\u002Fregister-v1.json\n    status: active\n    approved_by: tech-lead\n    notes: Initial baseline for auth module\n\n  - id: visual-dashboard-v2\n    type: visual\n    created: 2026-01-20T14:30:00Z\n    created_by: frontend-engineer\n    git_commit: def456ghi\n    release: v1.1.0\n    scope: Dashboard UI components\n    files:\n      - baselines\u002Fvisual\u002Fdashboard-desktop-v2.png\n      - baselines\u002Fvisual\u002Fdashboard-mobile-v2.png\n    status: active\n    approved_by: design-lead\n    previous_baseline: visual-dashboard-v1\n    changes: Updated color scheme per design system v2\n\n  - id: performance-api-v1\n    type: performance\n    created: 2026-01-15T09:00:00Z\n    created_by: devops-engineer\n    git_commit: ghi789jkl\n    release: v1.0.0\n    scope: Core API endpoints\n    files:\n      - baselines\u002Fperformance\u002Fapi-benchmarks-v1.json\n    status: active\n    approved_by: architect\n    notes: Pre-optimization baseline\n```\n\n## Baseline Comparison Report\n\n```markdown\n# Baseline Comparison Report\n\n**Date**: 2026-01-28\n**Baseline**: functional-auth-v1\n**Current State**: HEAD (commit xyz789)\n**Comparison Type**: Functional\n\n## Executive Summary\n\n**Status**: ⚠️ Drift Detected\n**Changes**: 3 outputs differ from baseline\n**Severity**: Medium - Unexpected behavior changes\n\n| Metric | Baseline | Current | Drift |\n|--------|----------|---------|-------|\n| Tests Passing | 45\u002F45 | 43\u002F45 | -2 |\n| Output Matches | 100% | 93.3% | -6.7% |\n| New Failures | 0 | 2 | +2 |\n\n## Detailed Comparison\n\n### Test: user-login\n\n**Status**: ⚠️ Drift\n\n**Baseline** (functional-auth-v1):\n```json\n{\n  \"status\": 200,\n  \"body\": {\n    \"token\": \"jwt.header.payload.signature\",\n    \"user\": {\n      \"id\": \"uuid\",\n      \"email\": \"user@example.com\"\n    }\n  }\n}\n```\n\n**Current**:\n```json\n{\n  \"status\": 200,\n  \"body\": {\n    \"token\": \"jwt.header.payload.signature\",\n    \"user\": {\n      \"id\": \"uuid\",\n      \"email\": \"user@example.com\",\n      \"name\": \"John Doe\"  \u002F\u002F NEW FIELD\n    }\n  }\n}\n```\n\n**Analysis**: New `name` field added to response\n**Impact**: Breaking change for clients expecting exact schema\n**Recommendation**: Update baseline if intentional, or fix if bug\n\n### Test: user-registration-invalid-email\n\n**Status**: ❌ Failure\n\n**Baseline**:\n```json\n{\n  \"status\": 400,\n  \"body\": {\n    \"error\": \"Invalid email format\"\n  }\n}\n```\n\n**Current**:\n```json\n{\n  \"status\": 500,\n  \"body\": {\n    \"error\": \"Internal server error\"\n  }\n}\n```\n\n**Analysis**: Validation now returns 500 instead of 400\n**Impact**: Critical - Server error on invalid input\n**Recommendation**: Fix immediately - regression in error handling\n\n### Test: user-logout\n\n**Status**: ✅ Match\n\nOutput matches baseline exactly. No drift detected.\n\n## Drift Summary\n\n| Test | Status | Drift Type | Severity |\n|------|--------|------------|----------|\n| user-login | ⚠️ Drift | Schema change | Medium |\n| user-registration | ✅ Match | None | - |\n| user-registration-invalid | ❌ Fail | Error code | High |\n| user-logout | ✅ Match | None | - |\n| token-refresh | ✅ Match | None | - |\n\n## Root Cause Analysis\n\n### Likely Causes\n\n1. **user-login drift**: Intentional feature addition (commit abc123)\n   - PR #789: \"Add user name to login response\"\n   - Needs baseline update\n\n2. **invalid-email failure**: Unintentional regression\n   - Validation middleware broken\n   - Returns 500 instead of 400\n   - Introduced in commit def456\n\n## Recommendations\n\n### Immediate Actions\n\n- [ ] Fix validation error handling (returns 500 instead of 400)\n- [ ] Add test for proper error codes\n- [ ] Verify error handling across all validation\n\n### Baseline Updates\n\n- [ ] Update baseline for user-login if name field is intentional\n- [ ] Document breaking change in API changelog\n- [ ] Notify API consumers of schema change\n\n### Process Improvements\n\n- [ ] Require baseline review for API changes\n- [ ] Add baseline diff to PR template\n- [ ] Run baseline comparison in CI\n\n## Approval Required\n\nTo update baseline with new outputs:\n\n```bash\n# Review changes\naiwg baseline compare functional-auth-v1\n\n# Update if intentional\naiwg baseline update functional-auth-v1 \\\n  --approve-changes user-login \\\n  --justification \"Added name field per REQ-123\"\n\n# Or create new baseline version\naiwg baseline create functional-auth-v2 \\\n  --based-on v1 \\\n  --changes \"Added user name to login response\"\n```\n```\n\n## Usage Examples\n\n### Create New Baseline\n\n```\nUser: \"Create baseline for authentication tests\"\n\nSkill executes:\n1. Identify auth test suite\n2. Run tests and capture outputs\n3. Validate stability (run 3 times)\n4. Store baseline with version\n5. Update manifest\n\nOutput:\n\"Baseline Created: functional-auth-v1\n\nScope: Authentication tests (45 tests)\nFormat: JSON snapshots\nLocation: .aiwg\u002Ftesting\u002Fbaselines\u002Ffunctional\u002Fauth\u002F\n\nFiles:\n- login-v1.json\n- logout-v1.json\n- register-v1.json\n- token-refresh-v1.json\n\nStatus: Active\nGit Commit: abc123\nRelease: v1.2.0\n\nNext: Baseline will be used for regression detection\"\n```\n\n### Update Existing Baseline\n\n```\nUser: \"Update baseline for dashboard UI\"\n\nSkill checks current vs baseline:\n\"Comparing to visual-dashboard-v1:\n- 5 screenshots differ\n- Changes: Color scheme updated\n\nApprove changes?\n- dashboard-desktop.png\n- dashboard-mobile.png\n- widget-panel.png\n\nReason for update?\"\n\nUser: \"Design system v2 rollout\"\n\nSkill creates:\n\"Baseline Updated: visual-dashboard-v2\n\nPrevious: visual-dashboard-v1 (archived)\nChanges: Design system v2 colors\nApproved by: [current user]\nFiles updated: 5\n\nNew baseline active for regression tests\"\n```\n\n### Compare to Baseline\n\n```\nUser: \"Compare current state to baseline\"\n\nSkill analyzes:\n\"Baseline Comparison: functional-auth-v1\n\nStatus: ⚠️ Drift Detected\n\nMatches: 43\u002F45 tests (95.6%)\nDrifts: 2 tests show differences\n\nDrift 1: user-login\n  - New field 'name' in response\n  - Severity: Medium\n  - Likely intentional (commit abc123)\n\nDrift 2: invalid-email handling\n  - Returns 500 instead of 400\n  - Severity: High\n  - Likely regression (needs fix)\n\nSee full report: .aiwg\u002Ftesting\u002Fbaseline-comparison.md\"\n```\n\n## Integration\n\nThis skill uses:\n- `regression-bisect`: Find commits that broke baseline\n- `regression-metrics`: Track baseline drift over time\n- `test-coverage`: Ensure baselines cover critical paths\n- `project-awareness`: Detect test framework and conventions\n\n## Agent Orchestration\n\n```yaml\nagents:\n  creation:\n    agent: test-engineer\n    focus: Baseline capture and validation\n\n  analysis:\n    agent: test-architect\n    focus: Drift analysis and recommendations\n\n  approval:\n    agent: tech-lead\n    focus: Baseline update approval\n```\n\n## Configuration\n\n### Baseline Storage\n\n```yaml\nbaseline_config:\n  storage_path: .aiwg\u002Ftesting\u002Fbaselines\u002F\n  structure:\n    - functional\u002F\n    - visual\u002F\n    - performance\u002F\n    - api\u002F\n\n  versioning: semantic  # v1, v2, v3\n  compression: gzip     # for large baselines\n  retention: 10         # keep last 10 versions\n```\n\n### Drift Thresholds\n\n```yaml\ndrift_thresholds:\n  functional:\n    exact_match_required: true\n    allow_new_fields: false  # strict schema matching\n\n  visual:\n    pixel_diff_threshold: 0.1%  # 0.1% difference allowed\n    ignore_areas: [timestamp, dynamic-content]\n\n  performance:\n    p50_tolerance: 10%   # ±10% from baseline\n    p95_tolerance: 15%   # ±15% from baseline\n    p99_tolerance: 20%   # ±20% from baseline\n```\n\n### Approval Requirements\n\n```yaml\napproval_config:\n  require_approval_for:\n    - baseline_creation: true\n    - baseline_updates: true\n    - baseline_deletion: true\n\n  approvers:\n    - tech-lead\n    - architect\n    - test-lead\n\n  approval_via:\n    - pr_review\n    - issue_comment\n    - command_flag: --approved-by\n```\n\n## Output Locations\n\n- Baselines: `.aiwg\u002Ftesting\u002Fbaselines\u002F{type}\u002F`\n- Manifest: `.aiwg\u002Ftesting\u002Fbaselines\u002Fmanifest.yaml`\n- Comparisons: `.aiwg\u002Ftesting\u002Fbaseline-comparisons\u002F`\n- Archived: `.aiwg\u002Ftesting\u002Fbaselines\u002Farchive\u002F`\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fschemas\u002Ftest\u002Fbaseline-schema.yaml\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fcommands\u002Fbaseline-create.md\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fagents\u002Ftest-engineer.md\n",{"name":5,"namespace":43,"platforms":44,"description":7},"aiwg",[45],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fcodex-sdlc\u002Fskills\u002Fregression-baseline",36,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg","https:\u002F\u002Faiwg.io","https:\u002F\u002Fgithub.com\u002Fjmagly","https:\u002F\u002Fintegrolabs.io","ml\u002Fai, industrial automation, safety\u002Fsecurity, ssi\r\n\r\nmagly.net\r\nintegrolabs.io\r\naiwg.io\r\nfortemi.com\r\npagenary.com\r\nbytecask.com","2026-11-12 00:33:10",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add jmagly\u002Faiwg --skill regression-baseline",{"tool":62,"command":63},"bunx","bunx skills add jmagly\u002Faiwg --skill regression-baseline",{"tool":65,"command":66},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill regression-baseline","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fcodex-sdlc\u002Fskills\u002Fregression-baseline\u002FSKILL.md",true,[],[71,99,123,129,136,150],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":78,"publishedAt":38},"01M70QA0BSYJ49EES9V4RE8QH1","host-hardening","Read-only system hardening baseline and plan-first host hardening recommendations for SSH, Docker bind addresses, firewall persistence, datastores, exporters and audit retention.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[77],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":109,"publishedAt":38},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis","Read-only firewall analysis and effective host exposure reconstruction for Docker published ports, UFW bypass, stale rules, CDN scope, IPv6 asymmetry and external probe allowlists.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[105,108],{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[110,111,112,82,113,87,114,115,89,116,79,117,91,118,119,94,95,120,121,122],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":124,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":128,"publishedAt":38},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[127],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[81,79,80,90,82,98,85,84,93,86,87,88,89,97,91,92,83,94,95,96],{"skillNo":130,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":135,"publishedAt":38},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[133,134],{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[111,110,94,113,87,114,89,112,79,117,91,118,119,82,95,116,115,120,121,122],{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":143,"publishedAt":38},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[142],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[144,145,146,147,148,149],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":157,"publishedAt":38},"01M6CB4AVK1W76MFMPP0JP32CJ","pi-local","Pi-local duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.pi\u002Fskills\u002Fpi-local\u002FSKILL.md",[156],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[158,159,118,160,145],"pi","pi local","duplicate"]