test: add smoke test, CI workflow, and agent guidance #1

Merged
w33ble merged 5 commits from feat/initial-implementation into main 2026-09-25 19:39:50 -06:00
Collaborator

Summary

  • End-to-end smoke test (proxy_test.go): builds the binary, runs it against a stub streamable-HTTP MCP server, and asserts the initialize round-trip, header injection, and a clean exit on stdin EOF; plus a mise run test task
  • Forgejo CI workflow (.forgejo/workflows/ci.yaml): build, vet, test, and lint on push/PR, with the golangci-lint binary cached by version (picoclaw pattern)
  • AGENTS.md: go-sdk gotchas (EncodeMessage emits no trailing newline; streamable transport keeps the GET SSE stream open after stdin EOF), golangci-lint v2 config-schema note, and the feature-branch/PR convention (main is protected)

Why

Session retro found the repo had no tests — a phantom fix and a stdio line-framing bug survived several debug cycles before od -c caught it. The smoke test pins those behaviors; CI enforces the checks AGENTS.md already mandates; the docs capture the gotchas that cost the most debugging time.

## Summary - End-to-end smoke test (proxy_test.go): builds the binary, runs it against a stub streamable-HTTP MCP server, and asserts the initialize round-trip, header injection, and a clean exit on stdin EOF; plus a `mise run test` task - Forgejo CI workflow (.forgejo/workflows/ci.yaml): build, vet, test, and lint on push/PR, with the golangci-lint binary cached by version (picoclaw pattern) - AGENTS.md: go-sdk gotchas (EncodeMessage emits no trailing newline; streamable transport keeps the GET SSE stream open after stdin EOF), golangci-lint v2 config-schema note, and the feature-branch/PR convention (main is protected) ## Why Session retro found the repo had no tests — a phantom fix and a stdio line-framing bug survived several debug cycles before `od -c` caught it. The smoke test pins those behaviors; CI enforces the checks AGENTS.md already mandates; the docs capture the gotchas that cost the most debugging time.
Builds the binary, runs it against a stub streamable-HTTP MCP server,
and asserts the initialize round-trip, header injection, and a clean
exit on stdin EOF. Guardrail for the stdio line-framing and EOF-shutdown
behaviors the SDK hides.
Runs build, vet, test, and lint on push and PRs. Caches the compiled
golangci-lint binary keyed by version (picoclaw pattern) to avoid a
from-source rebuild on every run.
docs: work on feature branches, main is protected
All checks were successful
CI / Build, vet, test, lint (pull_request) Successful in 7m13s
08ce348e9c
ci: use golangci-lint-action for linting
All checks were successful
CI / Build, vet, test, lint (pull_request) Successful in 1m30s
CI / Build, vet, test, lint (push) Successful in 2m31s
release / release (push) Successful in 5m7s
eb68e69fd8
Replaces the manual binary cache/install steps with
golangci/golangci-lint-action@v9, which handles binary download and
analysis-cache internally (build/module caches stay with setup-go).
only-new-issues is left off: it calls GitHub-only PR APIs.
w33ble approved these changes 2026-09-25 19:39:26 -06:00
w33ble merged commit eb68e69fd8 into main 2026-09-25 19:39:50 -06:00
w33ble deleted branch feat/initial-implementation 2026-09-25 19:39:50 -06:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
w33ble/mcp-ferryman!1
No description provided.