# Contributing to member-console Thanks for your interest in improving the member console. This project is developed by and for the [Wiki Cafe MSC](https://git.coopcloud.tech/wiki-cafe) multi-stakeholder co-operative, and contributions from the wider community are welcome. The canonical repository lives on Gitea at **git.coopcloud.tech/wiki-cafe/member-console**. Issues, discussion, and pull requests happen there. That address is also the Go module path in `go.mod`, so moving the canonical host rewrites every import in the tree; such a move has to land before the first release tag, never after one. ## Getting set up Follow the [Quickstart in the README](README.md#quickstart-local-development) to bring up the test stack and run the console from source. The full stack contract (ports, secrets, teardown, running multiple worktrees at once) is documented in [`test/AGENTS.md`](test/AGENTS.md). ## Building and testing Compile the binary to `./member-console`: ```bash make build ``` Run the unit tests — database- and Stripe-backed tests self-skip without a database: ```bash go test ./... ``` For the full suite, point `TEST_DATABASE_URL` at a migrated Postgres (the test stack works). [docs/testing.md](docs/testing.md) covers what each kind of test exercises and how to run them. After a schema change, regenerate the sqlc query code with `make sqlc-generate` (see [docs/database-management.md](docs/database-management.md)). ## How changes are made 1. **Open an issue first** for anything non-trivial, so the approach can be discussed before code is written. Pick the form that matches what closes the issue (a bug, an enhancement, debt, a design question, or docs) and answer its fields; the tracker refuses a blank issue. Write it for someone who has never opened this repository: a title that reads on its own, the console's own terms explained once where they first appear, and no internal shorthand (milestone codes, decision numbers, change names as explanations, dates as narrative) and no deployment's counts or names. Questions go to the forum, not the tracker. 2. **Substantial or behavioral changes go through [OpenSpec](https://openspec.dev).** Proposals live under [`openspec/`](openspec/) and move through `proposal → specs → design → tasks` before implementation, then are archived once shipped. Docs-only and small mechanical fixes don't need a proposal. 3. **Branch, implement, and open a pull request** against `main`. Keep each PR focused on one change. ## Conventions These are enforced by review and, where possible, by tooling. Please run the checks below before opening a PR. - **Strict CSP.** The app runs under `script-src 'self'` / `style-src 'self'` with no `unsafe-inline`. Never add inline `