Contributing
WednesdayAI welcomes contributions — bug fixes, new plugins, channel adapters, hook packs, and documentation.Before you start
Read CONTRIBUTING.md for the full guide. Key points:- Fork philosophy: lean core, highly extensible. If it can be a plugin, it should be.
- Stability over features: we prefer a stable, well-tested core over feature parity with upstream openclaw.
- Extension scope: new extensions use
@wednesdayai/*, not@openclaw/*. - Plugin version pinning: bundled extensions carry no
openclawpeer dependency — fork-base compatibility is expressed by our SemVer version and theforkBasemarker indist/build-info.json(ADR 0005). Third-party plugins target our published SemVer, never an upstream2026.xrange.
Setup
Development workflow
1
Create a branch from main
Branch first — do not work directly on
main.2
Write tests first
TDD is preferred. Colocate
*.test.ts next to the source.3
Implement the change
Keep changes scoped; do not bundle unrelated refactors.
4
Run checks before committing
5
Commit with the committer script
type(scope): description.6
Open a PR
Use the template in
.github/pull_request_template.md.Documentation requirements
WednesdayAI tracks completed work in two places. Both are required for new features and committed with the PR branch:- Dev log — create
dev-docs/logs/YYYY-MM-DD-<feature-slug>.md(Summary / Goal / Changes / Impact / Benefits / References). The logs are flat and dated; seedev-docs/STRUCTURE.mdin the core repo for the format. - CHANGELOG entry — add a pointer record to
dev-docs/CHANGELOG.md(the narrative index) linking to the dev log. The releaseCHANGELOG.mdis generated by release-please from Conventional Commits — do not hand-edit it.
PR checklist
Before opening a PR, verify:-
pnpm tsgoexits 0 -
pnpm build && pnpm check && pnpm testpass - Fork philosophy: lean core, stable contracts, correct naming
- If new extension:
@wednesdayai/*scope, plugin-sdk contract, noopenclawpeer pin (ADR 0005), noworkspace:*independencies - If touching plugin-sdk exports: no
any, no breaking changes without a migration path - User-facing changes described in commit messages (release-please generates
CHANGELOG.md) - Dev log created for new features at
dev-docs/logs/YYYY-MM-DD-<slug>.md(pointer added todev-docs/CHANGELOG.md) - AI-assisted PRs marked as such in the title or description
Review criteria
PRs are evaluated against the fork philosophy:- Lean core — does this add to core, or could it be a plugin/hook/SDK extension?
- Stable contracts — does this change public plugin-sdk, hook, or gateway API? If so, is there a migration path?
- Naming — user-facing text uses
WednesdayAI; code/config/imports useopenclaw. - Extension scope — new WednesdayAI-native extensions use
@wednesdayai/*.
Cherry-picks from upstream openclaw
We selectively adopt changes from upstream openclaw. The bar:- Does it improve stability or extensibility?
- Does it touch core contracts (plugin-sdk, hooks, gateway, routing)? If so, a detailed stability rationale is required.
- Does it add platform-specific dependencies that belong in a transport integration?
Reporting security issues
Report security vulnerabilities via GitHub Security Advisories or emailsecurity@expansionx.com.au. Do not post publicly before a fix is ready. See SECURITY.md for the trust model and what qualifies as a vulnerability.
Getting help
- Issues: github.com/ExpansionX/WednesdayAI-core/issues
- Discussions: GitHub Discussions on the repo
- Contact: hello@expansionx.com.au for maintainer discussions