Thanks for contributing to mcp-hugo-server-go.
This repository is maintained with a release-hardening mindset: small changes, clear scope, explicit evidence, and no hand-wavy reviews.
- Open or link an issue before changing behavior.
- Prefer one issue per branch and one coherent change per PR.
- Do not push directly to
mainunless you are the maintainer performing a deliberate repository-maintenance or documentation-only change. - Do not merge with red or skipped required checks.
- Do not close an issue without proof:
- tests,
- logs or checks,
- validated behavior.
-
Confirm the target issue and current milestone.
-
Create a dedicated branch:
git checkout -b feat/issue-123-short-name
-
Make the smallest change that solves the actual problem.
-
Add or update regression tests.
-
Run the relevant checks locally.
-
Open a draft PR until the work is ready for review.
-
Link evidence in the PR description and in the issue when appropriate.
Run the checks that match your change. For most behavior changes, the baseline is:
go test ./...
go test -race ./...
go vet ./...
staticcheck ./...
govulncheck ./...Before changing mutation, build, preview, OAuth, or recovery shared-state paths, use the bounded focused race target for a fast local signal:
make race-criticalIt exercises selected real concurrent scenarios for content/build locking,
change-set ownership, idempotency, mutation quotas, chunked uploads, previews,
OAuth rate limiting and refresh, and recovery journals. It runs each selected
package with Go's race detector, disables cached test results, and defaults to
a 90-second per-package timeout. Override that bound when diagnosing a slower
machine with make race-critical RACE_CRITICAL_TIMEOUT=2m.
This focused target does not prove every package race-free and does not replace
go test ./... or the broader go test -race ./... validation when that is
practical for the change.
For release-facing or discovery-facing changes, also verify the relevant docs and helper checks:
go run ./cmd/check-changelog -version <tag-or-target-version>
go run ./cmd/check-readme-releaseIf you did not run a check, say so explicitly in the PR.
For any PR that adds a new opt-in parameter or a new documented response field to an existing tool, include at least one test that (#607):
- Calls the tool with the new parameter set, against a fixture shaped like
realistic production content — not just the simplest fixture that makes
the test pass. For example, a fixture exercising a bilingual site's
per-language taxonomy behavior should use explicit
langsuffixes (index.fr.md/index.en.md), matching how content actually exists on a real deployed site, not a bareindex.md. - Asserts the documented behavior actually occurs — not just "the call succeeds," but that the specific field or effect described in the tool's own description is present and correct.
This closes the gap between "the tool description promises X" and "a test proves X happens." A test suite that only exercises the easiest fixture shape can pass while the documented behavior silently fails to trigger on realistic input — treat that as a review blocker, not a nitpick.
AI-assisted coding is allowed.
AI-assisted issue triage, review comments, and PR review are also allowed, but they are held to the same standard as human review:
- every claim of fault must point to concrete evidence;
- every requested change must cite one of:
- failing test,
- reproducible runtime behavior,
- exact file/line mismatch,
- contract or spec violation,
- log evidence,
- security invariant breach.
Not acceptable:
- style-only nitpicks presented as bugs;
- vague "this feels wrong" review comments;
- speculative security claims without reproduction or code proof;
- AI-generated summaries that do not identify the actual failing path.
If you use AI substantially, disclose it in the PR and verify the output yourself before requesting review.
This project prefers evidence-driven review.
Good review feedback:
- names the failing invariant;
- cites the file and path involved;
- explains the user or operator impact;
- suggests a concrete correction direction.
Bad review feedback:
- broad "refactor this" without root cause;
- performance/security concerns without proof;
- contract changes without compatibility analysis.
Before opening an issue:
- search existing open and closed issues;
- confirm the problem is still present on current
main; - strip secrets, tokens, cookies, and private config values from evidence.
Prefer issues that include:
- affected version or commit;
- reproduction steps;
- observed behavior;
- expected behavior;
- impact;
- likely root cause if known.
PRs should explain:
- what changed;
- why it changed;
- what evidence proves it;
- what compatibility or operator risks remain.
Keep PRs small enough that a reviewer can verify them end to end.
If a change touches public behavior, review the relevant docs:
README.mddocs/tools.mddocs/mcp-contract.mddocs/operator-guide.mddocs/release-checklist.md- wiki pages if the operator workflow or public contract changed
Do not let code, changelog, README, and wiki drift apart.
- Never commit secrets.
- Never post bearer tokens, OAuth codes, cookies, or Cloudflare tokens in issues, PRs, wiki pages, or screenshots.
- Use private reporting for vulnerabilities as documented in SECURITY.md.
Preferred project languages:
- French
- English