Skip to content

feat(docs): add CompatibilityTestBot and document webhook deduplication differences#10

Merged
neil-pozetroninc merged 1 commit intomainfrom
implement-compatibility-bot
Oct 24, 2025
Merged

feat(docs): add CompatibilityTestBot and document webhook deduplication differences#10
neil-pozetroninc merged 1 commit intomainfrom
implement-compatibility-bot

Conversation

@neil-pozetroninc
Copy link
Copy Markdown
Contributor

Summary

This PR adds CompatibilityTestBot and comprehensive documentation explaining the critical behavioral difference between Probot (Node.js) and ProbotSharp regarding webhook deduplication.

Key Changes:

  • ✅ New CompatibilityTestBot example that disables idempotency middleware
  • ✅ Comprehensive documentation updates across 6 documentation files
  • ✅ Migration guide Section 7 explaining the deduplication difference
  • ✅ Updated comparison table in main README

Problem Statement

Probot (Node.js) does NOT automatically deduplicate webhooks by delivery ID. The application is responsible for tracking processed delivery IDs and implementing deduplication logic.

ProbotSharp takes a more opinionated approach with built-in deduplication via UseIdempotency() middleware (enabled by default in all examples).

This critical behavioral difference was previously undocumented in:

  • Migration guide (Probot-to-ProbotSharp-Guide.md)
  • Main README comparison table
  • Configuration best practices
  • Operational guidance

Solution

1. CompatibilityTestBot Example (6 new files, 940 lines)

  • examples/CompatibilityTestBot/ - Complete test application
  • Disables UseIdempotency() to match Probot behavior
  • Tracks all webhook deliveries including duplicates
  • Provides HTTP API for integration testing
  • Comprehensive README with troubleshooting

Features:

  • HTTP-based integration testing against real server process
  • TestEventTracker to verify webhook delivery processing
  • Demonstrates proper ASP.NET Core Minimal API patterns
  • Production-ready configuration with clear documentation

2. Documentation Updates (154 lines added across 6 files)

Probot-to-ProbotSharp-Guide.md:

  • New Section 7 (~120 lines) documenting deduplication difference
  • Code examples showing both Probot and ProbotSharp behavior
  • Configuration examples for InMemory, Redis, and Database providers
  • Clear guidance on when to enable/disable idempotency

README.md:

  • Added row to comparison table highlighting webhook deduplication

Architecture.md:

  • Contextualized idempotency strategy as difference from Probot
  • Updated ADR-002 with Probot comparison note

AdapterConfiguration.md:

  • Added callout explaining Probot difference
  • Clarified how to disable for Probot-compatible behavior

ConfigurationBestPractices.md:

  • New middleware configuration section
  • Trade-offs of enabling/disabling idempotency
  • Cross-references to related documentation

Operations.md:

  • Added idempotency metrics section
  • Guidance on monitoring duplicate delivery rates
  • Context about expected duplicate scenarios

Impact

For Developers:

  • Clear understanding of behavioral difference from Probot
  • Ability to choose appropriate behavior for their use case
  • Better integration testing capabilities
  • Reduced confusion during migration

For Documentation:

  • Comprehensive coverage of idempotency difference
  • Cross-referenced sections for easy navigation
  • Production-ready examples with clear guidance

Testing

  • ✅ Build succeeded (0 errors, StyleCop warnings expected)
  • ✅ All pre-commit hooks passed:
    • kubeconform: ✓
    • verify-local-links: ✓ (406 valid links)
    • verify-github-links: ✓ (27 verified)
    • verify-markdown-code: ✓ (17 verified)

Files Changed

New Files (6):

  • examples/CompatibilityTestBot/CompatibilityTestApp.cs (315 lines)
  • examples/CompatibilityTestBot/CompatibilityTestBot.csproj (22 lines)
  • examples/CompatibilityTestBot/Program.cs (193 lines)
  • examples/CompatibilityTestBot/README.md (267 lines)
  • examples/CompatibilityTestBot/TestEventTracker.cs (84 lines)
  • examples/CompatibilityTestBot/appsettings.json (59 lines)

Modified Files (6):

  • README.md (1 line added)
  • docs/AdapterConfiguration.md (3 lines added)
  • docs/Architecture.md (7 lines added)
  • docs/ConfigurationBestPractices.md (21 lines added)
  • docs/Operations.md (7 lines added)
  • docs/Probot-to-ProbotSharp-Guide.md (115 lines added)

Total: 12 files changed, 1,094 insertions(+)

Related Issues

This addresses the documentation gap identified regarding webhook deduplication behavioral differences between Probot and ProbotSharp.


Ready for Review

…on differences

Adds CompatibilityTestBot example that disables idempotency middleware to match
Probot (Node.js) behavior, which does not automatically deduplicate webhooks by
delivery ID. This behavioral difference was previously undocumented in the
migration guide and comparison materials.

Documentation updates:
- Add comprehensive Section 7 to Probot-to-ProbotSharp-Guide.md explaining the
  deduplication difference with code examples for both frameworks
- Update README.md comparison table to highlight webhook deduplication difference
- Add Probot comparison notes to Architecture.md, AdapterConfiguration.md,
  ConfigurationBestPractices.md, and Operations.md
- Document when to enable/disable idempotency middleware

CompatibilityTestBot features:
- HTTP-based integration testing against real server process
- TestEventTracker to verify webhook delivery processing
- Tracks all deliveries including duplicates (Probot-compatible behavior)
- Demonstrates proper ASP.NET Core Minimal API patterns
- Comprehensive README with troubleshooting and testing guidance

This ensures developers migrating from Probot understand the idempotency
difference and can choose appropriate behavior for their use case.

Co-Authored-By: Claude <noreply@anthropic.com>
@neil-pozetroninc neil-pozetroninc merged commit e7b8851 into main Oct 24, 2025
6 checks passed
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.

1 participant