- Add FUNDING.yml for sponsor button on repo
- Add support section to README with badges
Time to get paid for doing jack shit
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Lead with the problem: you have docs, no time to organize them
- Clear "Is this for you?" section
- Installation options: Docker first, then Claude Desktop, k8s, source
- Full tool reference with collapsible sections
- No more `latest` tag - link to releases badge instead
- Acknowledge this works with any MCP-compatible AI, not just Claude
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Show pod status, events, describe, and logs when k8s rollout fails
instead of just timing out with no context.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add cog.toml with commit type configs and version bump hooks
- Add .woodpecker.yml pipeline for automated version bumping on main
- Add Version element to csproj for cog to update
- Document cog workflow in CLAUDE.md
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The 24-hour timeout was still not being respected - sessions were being
killed after ~14 minutes. Using Timeout.InfiniteTimeSpan completely
disables idle-based session pruning in the SDK's IdleTrackingBackgroundService.
This makes the MCP server bulletproof against session drops during long
periods of inactivity (e.g., when users are discussing/planning before
making tool calls).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Woodpecker was interpreting ${VAR} as CI variables and replacing
them with empty strings. Changed to $VAR syntax which gets passed
through to the shell correctly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Directory.Build.props for consistent version across all projects
- Add version.json to track current version in source control
- Update release pipeline to:
- Calculate version bumps from conventional commits
- Pass /p:Version to all build/test/pack commands
- Commit version.json back before tagging
- Generate changelog in GitHub releases
- Version bump rules:
- feat!: or BREAKING CHANGE: → major bump
- feat: → minor bump
- fix/perf/refactor/build/ci/docs/style/test: → patch bump
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add ApiResult<T> type to carry success/failure with error details
- Add UpdateDocumentWithResultAsync and CreateTagWithResultAsync methods
- Update DocumentTools.Update and TagTools.Create to return actual
HTTP status codes and response bodies in error responses
- Add comprehensive tests for error handling (18 new tests)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Validates all commit messages in a PR follow the conventional commits
format before allowing build/test to proceed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The /api/ endpoint returns HTML (Swagger UI), not JSON.
Changed ping to use /api/status/ which returns JSON with version info.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
MCP endpoints return 406 for plain GET requests since they use SSE.
TCP socket probes check if the port is open without protocol issues.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
HTTP transport mode was missing the required WithHttpTransport() call,
causing MapMcp() to fail. Also adds Kubernetes manifests for deployment.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Provides build commands, architecture overview, and development
conventions for AI-assisted development.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The old plugin only works on tag events. Using curl to call
GitHub API directly to create releases.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Woodpecker evaluates ${VAR} before the shell runs. Using $$ escaping
so variables are passed to the shell properly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Multiline backslash continuation may have shell expansion issues.
Using single line with quoted arguments instead.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Each command runs in separate shell - variables don't persist.
All steps with variable dependencies now use single script blocks.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add IsPackable and package metadata to csproj for NuGet package
generation in CI pipeline.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Each command runs in separate shell - variables don't persist.
Moving everything into one script block.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The multiline script runs in sh, not bash. Using sed instead of
bash parameter expansion for stripping the v prefix.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Each step runs in a fresh container, so NuGet packages restored in one
step aren't available in the next. Consolidating restore/build/test
into single steps.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use woodpeckerci/plugin-git with lfs: false setting instead of
skipping clone entirely.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Woodpecker's default clone step fails when git-lfs isn't installed.
Using manual clone with alpine/git instead.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The LFS warning is non-fatal. Removing the incorrect clone config
that was causing linter errors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
YAML anchors don't work across document boundaries in multi-document
files. Using separate files in .woodpecker/ directory instead, which
is the recommended approach and matches WeightTracker's pattern.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The docker-buildx plugin requires privileged mode which isn't enabled
by default. Kaniko builds containers without requiring privileged mode.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- docker-dev: Builds and pushes :dev tag on every main push
- docker-release: Builds :latest and :vX.Y.Z on tags
- docker-verify: Dry-run build on PRs
Updated README with Docker tag documentation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>