Skip to content

Fix #174: [milestone Milestone 2 ] Extend ActionEvidence in crates/aep-core/src/evidence.rs: add `mcp_header_ri... - #177

Merged
telleroutlook merged 1 commit into
mainfrom
claude/issue-174
Jul 20, 2026
Merged

Fix #174: [milestone Milestone 2 ] Extend ActionEvidence in crates/aep-core/src/evidence.rs: add `mcp_header_ri...#177
telleroutlook merged 1 commit into
mainfrom
claude/issue-174

Conversation

@telleroutlook

Copy link
Copy Markdown
Contributor

Fixes #174

Generated by claude-bot-go worker.

…/aep-core/src/evidence.rs`: add `mcp_header_ri...
@telleroutlook

Copy link
Copy Markdown
Contributor Author

Summary

Safe refactor from enum to string representation with proper migration path and comprehensive test coverage

Severity

none

Blocking findings

None.

Verdict

✅ Approved

Merge risk

low

Audit

  • model: opus
  • effort: high
  • tokens: input=0, output=0
{
  "approved": true,
  "severity": "none",
  "summary": "Safe refactor from enum to string representation with proper migration path and comprehensive test coverage",
  "findings": [],
  "merge_risk": "low",
  "Model": "opus",
  "model": "claude-cli",
  "effort": "high",
  "tokens": {
    "input_tokens": 0,
    "output_tokens": 0
  },
  "same_verdict_count": 1
}

@telleroutlook

Copy link
Copy Markdown
Contributor Author

Summary

Breaking API change from Option to Option without backward compatibility or migration path for existing consumers

Severity

medium

Blocking findings

  1. crates/aep-core/src/evidence.rs:59 Public field type changed from Option to Option, breaking all existing code that reads or constructs this field - no migration path or compatibility layer provided

Verdict

❌ Rejected

Merge risk

medium

Audit

  • model: opus
  • effort: high
  • tokens: input=0, output=0
{
  "approved": false,
  "severity": "medium",
  "summary": "Breaking API change from Option\u003cMcpHeaderRisk\u003e to Option\u003cString\u003e without backward compatibility or migration path for existing consumers",
  "findings": [
    {
      "file": "crates/aep-core/src/evidence.rs",
      "line": 59,
      "issue": "Public field type changed from Option\u003cMcpHeaderRisk\u003e to Option\u003cString\u003e, breaking all existing code that reads or constructs this field - no migration path or compatibility layer provided",
      "kind": "blocker"
    }
  ],
  "merge_risk": "medium",
  "Model": "opus",
  "model": "claude-cli",
  "effort": "high",
  "tokens": {
    "input_tokens": 0,
    "output_tokens": 0
  },
  "same_verdict_count": 1
}

@telleroutlook

Copy link
Copy Markdown
Contributor Author

Summary

Missing definition of critical McpHeaderRisk::as_str() method called in production code

Severity

high

Blocking findings

  1. crates/proxy-wasm-evidence/src/recorder.rs:150 Production code calls mcp_header_risk.map(|r| r.as_str().to_string()) but McpHeaderRisk::as_str() method definition is not visible in this diff. If this method does not exist or has wrong signature, build_evidence() will fail to compile, breaking all evidence creation.
  2. crates/aep-core/src/evidence.rs:131 Test calls McpHeaderRisk::HighEntropyValue.as_str() but as_str() method is not defined in visible code. Test compilation will fail if method doesn't exist, masking the real build breakage.
  3. crates/aep-core/src/evidence.rs:50 Type change from Option to Option is a breaking API change. Any external code accessing ActionEvidence.mcp_header_risk expecting enum type will break. No evidence issue Fix #174: [milestone Milestone 2 ] Extend ActionEvidence in crates/aep-core/src/evidence.rs: add `mcp_header_ri... #177 description provided to justify this breakage.

Verdict

❌ Rejected

Merge risk

high

Audit

  • model: opus
  • effort: high
  • tokens: input=0, output=0
{
  "approved": false,
  "severity": "high",
  "summary": "Missing definition of critical McpHeaderRisk::as_str() method called in production code",
  "findings": [
    {
      "file": "crates/proxy-wasm-evidence/src/recorder.rs",
      "line": 150,
      "issue": "Production code calls mcp_header_risk.map(|r| r.as_str().to_string()) but McpHeaderRisk::as_str() method definition is not visible in this diff. If this method does not exist or has wrong signature, build_evidence() will fail to compile, breaking all evidence creation.",
      "kind": "blocker"
    },
    {
      "file": "crates/aep-core/src/evidence.rs",
      "line": 131,
      "issue": "Test calls McpHeaderRisk::HighEntropyValue.as_str() but as_str() method is not defined in visible code. Test compilation will fail if method doesn't exist, masking the real build breakage.",
      "kind": "blocker"
    },
    {
      "file": "crates/aep-core/src/evidence.rs",
      "line": 50,
      "issue": "Type change from Option\u003cMcpHeaderRisk\u003e to Option\u003cString\u003e is a breaking API change. Any external code accessing ActionEvidence.mcp_header_risk expecting enum type will break. No evidence issue #177 description provided to justify this breakage.",
      "kind": "blocker"
    }
  ],
  "merge_risk": "high",
  "Model": "opus",
  "model": "claude-cli",
  "effort": "high",
  "tokens": {
    "input_tokens": 0,
    "output_tokens": 0
  },
  "same_verdict_count": 2
}

@telleroutlook

Copy link
Copy Markdown
Contributor Author

Summary

Breaking API change converts public enum field to String without migration path

Severity

high

Blocking findings

  1. crates/aep-core/src/evidence.rs:52 Public API break: changes ActionEvidence.mcp_header_risk from Option to Option, breaking all downstream consumers that handle this enum directly
  2. crates/aep-core/src/evidence.rs:65 Test uses McpHeaderRisk::as_str() method but this method definition is not shown in diff - may not exist or may not handle all enum variants
  3. crates/proxy-wasm-evidence/src/recorder.rs:150 build_evidence converts enum to string via .map(|r| r.as_str().to_string()) but there's no validation that as_str() returns stable identifiers for all McpHeaderRisk variants

Verdict

❌ Rejected

Merge risk

high

Audit

  • model: opus
  • effort: high
  • tokens: input=0, output=0
{
  "approved": false,
  "severity": "high",
  "summary": "Breaking API change converts public enum field to String without migration path",
  "findings": [
    {
      "file": "crates/aep-core/src/evidence.rs",
      "line": 52,
      "issue": "Public API break: changes ActionEvidence.mcp_header_risk from Option\u003cMcpHeaderRisk\u003e to Option\u003cString\u003e, breaking all downstream consumers that handle this enum directly",
      "kind": "blocker"
    },
    {
      "file": "crates/aep-core/src/evidence.rs",
      "line": 65,
      "issue": "Test uses McpHeaderRisk::as_str() method but this method definition is not shown in diff - may not exist or may not handle all enum variants",
      "kind": "blocker"
    },
    {
      "file": "crates/proxy-wasm-evidence/src/recorder.rs",
      "line": 150,
      "issue": "build_evidence converts enum to string via .map(|r| r.as_str().to_string()) but there's no validation that as_str() returns stable identifiers for all McpHeaderRisk variants",
      "kind": "suggestion"
    }
  ],
  "merge_risk": "high",
  "Model": "opus",
  "model": "claude-cli",
  "effort": "high",
  "tokens": {
    "input_tokens": 0,
    "output_tokens": 0
  },
  "same_verdict_count": 3
}

@telleroutlook

Copy link
Copy Markdown
Contributor Author

Summary

Type change from enum to string is well-tested and maintains serialization compatibility

Severity

none

Blocking findings

None.

Verdict

✅ Approved

Merge risk

low

Audit

  • model: opus
  • effort: high
  • tokens: input=0, output=0
{
  "approved": true,
  "severity": "none",
  "summary": "Type change from enum to string is well-tested and maintains serialization compatibility",
  "findings": [],
  "merge_risk": "low",
  "Model": "opus",
  "model": "claude-cli",
  "effort": "high",
  "tokens": {
    "input_tokens": 0,
    "output_tokens": 0
  },
  "same_verdict_count": 1
}

@telleroutlook
telleroutlook merged commit 0d2ca59 into main Jul 20, 2026
3 checks passed
@telleroutlook
telleroutlook deleted the claude/issue-174 branch July 20, 2026 11:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[milestone Milestone 2 ] Extend ActionEvidence in crates/aep-core/src/evidence.rs: add `mcp_header_ri...

1 participant