composer install # dev dependencies only — nothing from vendor/ ships
npm install
npm run env:start # WordPress + WooCommerce in DockerDev site: http://localhost:8888. Tests site: http://localhost:8889.
CLAUDE.md— the project map, commands, and standards.CONTEXT.md— the vocabulary and the money rules. Anything touching commissions, refunds, or payouts is decided there.docs/adr/— check here before "fixing" surprising behaviour..claude/skills/— the procedural how-to for backend conventions, the dev cycle, the WordPress.org gate, review standards, and git.
This plugin ships on WordPress.org. Every change passes:
composer phpcs # 0 violations
npm run phpunit # green
npm run plugin-check # 0 errors, 0 warnings on the built zipNo pull request merges without all three, and none without tests for what it changes.
main is released code, develop is the integration branch, work happens on
enhance/, fix/, or chore/ branches cut from develop. Commit messages are
type(scope): imperative subject with a body explaining why.
The full convention is in .claude/skills/flyaffiliate-git.
- Money compared as a float instead of integer cents.
- A write that is not idempotent when its hook fires twice.
- Output that is not escaped at the point of output, or a handler without a capability and nonce check.
manage_optionswheremanage_woocommercebelongs.- A remote asset, an inline
<style>/<script>, or a database write onadmin_init. - A version number guessed instead of
@since FLYAFFILIATE_SINCE. - A third-party plugin's symbol referenced outside
includes/Integrations/. - A new root-level file missing from
.distignore.
Include the WordPress, WooCommerce and PHP versions, and whether the problem reproduces with other plugins deactivated.