Rename to Connect for Procore for WordPress.org guideline 17 - #11
Merged
Conversation
"Procore" is a registered trademark of Procore Technologies, Inc. Guideline 17 forbids a plugin slug or display name that *begins* with someone else's trademark, so "Procore Connect" would have been rejected on human review. The new name uses the format the guideline itself prescribes for integrations written by non-employees. Plugin Check does not catch this. Its trademark test compares against a hardcoded list of well-known brands in Trademarks_Check.php and "procore" is not on it, so the plugin passed clean at severity 1 with experimental checks on while still being unshippable. That is worth recording: a green Plugin Check is necessary, not sufficient. Renamed: slug, directory, main file, display name, text domain (378 gettext calls plus wp_set_script_translations and block.json), the POT, and the wordpress.org banner and icon, which the guideline also covers. Deliberately not renamed, because none of it affects guideline 17 and all of it would break working sites: every option name, the procore_connect_ hook prefix, the /wp-json/procore-connect/v1/ REST namespace, the yourtheme/procore-connect/ template override directory, the procore-connect CSS classes, the block name and the wp procore-connect CLI command. Settings, template overrides and custom CSS therefore survive the rename; only a one-time reactivation is needed, because WordPress identifies a plugin by its directory. Two real defects surfaced while auditing the old name, both artifacts of the earlier ProcoreWP to Procore Connect rename: - The REST proxy sent a cache-status header named `X-Procore Connect-Cached`. A header field name may not contain a space (RFC 7230); it is now `X-Connect-For-Procore-Cached`. - The User-Agent product token was `Procore Connect/2.0.6`, which is likewise not a valid token. It is now `ConnectForProcore/3.0.0`. Major version because the directory change forces a reactivation. Verified: 106 tests pass; PHPCS clean across 52 files with the text_domain property switched to connect-for-procore, so it would have failed on any missed gettext call; Plugin Check clean on the staged distributable across every category with experimental checks at severity 1; and the plugin activates in a real WordPress 7.0 install with no textdomain-too-early notice, with shortcodes, the opt-in REST routes and the WP-CLI subcommands all confirmed working. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Auditing the plugin against the WordPress.org submission requirements turned up one hard blocker.
The blocker
Guideline 17 forbids a plugin slug or display name that begins with someone else's trademark, and "Procore" is a registered trademark of Procore Technologies, Inc. (registered for construction project-management SaaS). "Procore Connect" would have been rejected on human review. The enforcement post extends this to the display name and the directory images, and applies to every plugin approved after 2015.
The new name uses the format the guideline itself prescribes for integrations written by non-employees.
Plugin Check does not catch this. Its trademark test compares against a hardcoded list of well-known brands in
Trademarks_Check.php, and "procore" is not on it — so the plugin passed clean at severity 1 with experimental checks enabled while still being unshippable. A green Plugin Check is necessary, not sufficient.What was renamed
Slug, directory, main file, display name, text domain (378 gettext calls plus
wp_set_script_translationsandblock.json), the POT, and the wordpress.org banner and icon.What deliberately was not
None of it affects guideline 17, and all of it would break working sites:
procore_connect_hook prefix/wp-json/procore-connect/v1/REST namespaceyourtheme/procore-connect/template override directoryprocore-connectCSS classeswp procore-connectCLI commandSo settings, template overrides and custom CSS all survive. The only user-visible cost is a one-time reactivation, because WordPress identifies a plugin by its directory — hence the major version bump.
Two real defects found while auditing the old name
Both were artifacts of the earlier
ProcoreWP→Procore Connectrename:X-Procore Connect-Cachedcontains a space, which RFC 7230 does not permit in a field name. NowX-Connect-For-Procore-Cached.Procore Connect/2.0.6is not a valid token. NowConnectForProcore/3.0.0.Verification
text_domainproperty switched toconnect-for-procore— so it would have errored on any gettext call I missed_load_textdomain_just_in_timenotice; shortcodes, the opt-in REST routes andwp procore-connect cache-clear/reset-tokenall confirmed working after the renameStill outstanding before submission
Contributors: ibuilderis not a WordPress.org account —profiles.wordpress.org/ibuilder/404s (verified against/matt/as a control). That field needs a real wp.org username, and the submission is tied to that account.🤖 Generated with Claude Code