Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
4b0f1d5
Add Windsurf rules for Formidable Forms development standards
shervElmi Jan 20, 2026
b1b9da9
Add Windsurf skills for field type creation and code review
shervElmi Jan 20, 2026
5a53ec2
Add Windsurf workflows for bug fixing, testing, and security auditing
shervElmi Jan 20, 2026
760c4b1
Add comprehensive Windsurf configuration for Formidable Forms develop…
shervElmi Jan 20, 2026
63ae03d
Update fix-bug workflow with comprehensive enterprise debugging and t…
shervElmi Jan 22, 2026
38825eb
Add pattern discovery process and verification rules to Formidable co…
shervElmi Jan 23, 2026
d3dda2c
Update fix-bug workflow to emphasize pattern discovery and prevent ov…
shervElmi Jan 23, 2026
0907902
Add comprehensive WordPress PHP coding standards documentation for AI…
shervElmi Jan 28, 2026
fbee695
Add WordPress PHP coding standards rules documentation split into foc…
shervElmi Jan 28, 2026
ffaef2f
Add comprehensive WordPress JavaScript coding standards documentation…
shervElmi Jan 28, 2026
e421816
Add modular WordPress JavaScript coding standards rules split into fo…
shervElmi Jan 28, 2026
50fd034
Add comprehensive WordPress HTML coding standards documentation for A…
shervElmi Jan 28, 2026
d55dc69
Add modular WordPress HTML coding standards rules split into focused …
shervElmi Jan 28, 2026
bee912b
Add comprehensive WordPress CSS coding standards documentation for AI…
shervElmi Jan 28, 2026
78a19d4
Add modular WordPress CSS coding standards rules split into focused f…
shervElmi Jan 28, 2026
3b61cdb
Add comprehensive WordPress accessibility coding standards documentat…
shervElmi Jan 28, 2026
97eaa8d
Add modular WordPress accessibility coding standards rules split into…
shervElmi Jan 28, 2026
c148d70
Merge remote-tracking branch 'origin/HEAD' into feature/windsurf-conf…
shervElmi Feb 3, 2026
3940778
feat(ci): add conventional commit message guidelines
shervElmi Feb 6, 2026
8693470
docs(windsurf): add skill frontmatter and improve configuration docum…
shervElmi Feb 6, 2026
a730b7d
refactor(windsurf): consolidate configuration files into centralized …
shervElmi Feb 10, 2026
603164e
refactor(windsurf): remove redundant AGENTS.md and README.md from roo…
shervElmi Feb 10, 2026
c69e77f
Merge remote-tracking branch 'origin/HEAD' into feature/windsurf-conf…
shervElmi Feb 10, 2026
1be6bd8
feat(windsurf): add conventional commits rule for standardized commit…
shervElmi Feb 10, 2026
058954b
feat(windsurf): add enterprise code change principles rule for safe m…
shervElmi Feb 10, 2026
3b9dd2b
feat(windsurf): add Formidable Forms patterns rule for plugin-specifi…
shervElmi Feb 10, 2026
97335b7
feat(windsurf): add Formidable Forms testing conventions rule for tes…
shervElmi Feb 10, 2026
bdec0b5
refactor(windsurf): standardize punctuation in enterprise and testing…
shervElmi Feb 10, 2026
fa43df1
feat(windsurf): add WordPress accessibility coding standards rule for…
shervElmi Feb 10, 2026
4c5d0d1
feat(windsurf): add WordPress CSS coding standards rule for styleshee…
shervElmi Feb 10, 2026
d975866
feat(windsurf): add WordPress HTML coding standards rule for markup d…
shervElmi Feb 10, 2026
056417a
feat(windsurf): add WordPress JavaScript coding standards rule for JS…
shervElmi Feb 10, 2026
38d52a1
feat(windsurf): add WordPress PHP coding standards rule for PHP devel…
shervElmi Feb 10, 2026
fd93026
feat(windsurf): add WordPress Gutenberg block editor development stan…
shervElmi Feb 10, 2026
efd3bc9
feat(windsurf): modernize WordPress JavaScript coding standards with …
shervElmi Feb 10, 2026
5dc435a
feat(windsurf): add WordPress VIP coding standards rule for enterpris…
shervElmi Feb 10, 2026
b658dda
refactor(windsurf): remove deprecated rules and consolidate WordPress…
shervElmi Feb 10, 2026
2ff7a07
feat(windsurf): add enterprise bug-fixing skill with structured workf…
shervElmi Feb 10, 2026
5de9ff1
style(windsurf): fix table column alignment in conventional commits d…
shervElmi Feb 11, 2026
26975ec
refactor(windsurf): expand custom solutions principle to include web …
shervElmi Feb 11, 2026
614fdd3
feat(windsurf): add Fast Context requirement to enterprise analysis p…
shervElmi Feb 11, 2026
d93c524
feat(windsurf): add WCAG 2.2 Level AA conformance requirement and sim…
shervElmi Feb 11, 2026
9fe1403
feat(windsurf): expand analysis phase with pattern discovery workflow…
shervElmi Feb 11, 2026
f189c28
feat(windsurf): add Formidable Forms PHP-specific coding standards an…
shervElmi Feb 11, 2026
217239c
refactor(windsurf): consolidate Formidable Forms testing documentatio…
shervElmi Feb 11, 2026
029634f
feat(windsurf): add comprehensive WordPress Block Editor (Gutenberg) …
shervElmi Feb 11, 2026
fcb1579
feat(windsurf): add WordPress VIP Block Editor standards rule with dy…
shervElmi Feb 11, 2026
342cf0f
feat(windsurf): add WordPress VIP performance optimization standards …
shervElmi Feb 11, 2026
f29ee23
feat(windsurf): add WordPress VIP PHP coding standards rule with data…
shervElmi Feb 11, 2026
465b1f1
feat(windsurf): add WordPress VIP security standards rule with OWASP-…
shervElmi Feb 11, 2026
046ca72
refactor(windsurf): remove redundant WordPress VIP PHP standards rule…
shervElmi Feb 11, 2026
1fadde6
feat(windsurf): add WordPress CSS coding standards rule with Formidab…
shervElmi Feb 11, 2026
aa708fc
feat(windsurf): add 50/72 character limit rule to conventional commit…
shervElmi Feb 11, 2026
e27dace
refactor(windsurf): consolidate CSS file globs into single-line array…
shervElmi Feb 11, 2026
d71a10d
refactor(windsurf): convert CSS and PHP code examples from spaces to …
shervElmi Feb 12, 2026
ed81287
feat(windsurf): add EditorConfig and markdownlint configuration for .…
shervElmi Feb 12, 2026
554da0a
feat(build): exclude .windsurf directory from plugin zip distribution
shervElmi Feb 12, 2026
c32bf0a
feat(windsurf): expand fix-bug checklist with comprehensive analysis,…
shervElmi Feb 12, 2026
ae4b86f
feat(windsurf): add PR template for bug fixes with branch naming, con…
shervElmi Feb 12, 2026
8608f42
feat(windsurf): add branch/PR section and improve formatting in fix-b…
shervElmi Feb 12, 2026
bbf12e0
feat(windsurf): expand fix-bug workflow with core principles, detaile…
shervElmi Feb 12, 2026
7120f95
feat(windsurf): add change flow diagrams and improve solution compari…
shervElmi Feb 12, 2026
a85cf32
feat(windsurf): restructure fix-bug PR/commit templates to separate P…
shervElmi Feb 12, 2026
7d02785
Merge branch 'master' into feature/windsurf-configuration-formidable
shervElmi Feb 12, 2026
d9a4f80
feat(windsurf): standardize writing style rules and issue reference f…
shervElmi Feb 12, 2026
5356e9a
Merge remote-tracking branch 'origin/HEAD' into feature/windsurf-conf…
shervElmi Feb 13, 2026
2e2c80a
feat(windsurf): add mandatory coding standards and cross-plugin resea…
shervElmi Feb 13, 2026
e0aeaf3
feat(windsurf): split enterprise principles into code-change-principl…
shervElmi Feb 16, 2026
c81b1e4
feat(windsurf): consolidate WordPress coding rules by removing duplic…
shervElmi Feb 16, 2026
e0e55ae
feat(windsurf): streamline fix-bug skill by removing duplicate conten…
shervElmi Feb 16, 2026
790c18c
Merge pull request #2958 from Strategy11/feature/enhance-windsurf-con…
shervElmi Feb 17, 2026
2a5e0b8
feat(windsurf): add Formidable JavaScript rules to fix-bug skill and …
shervElmi Feb 17, 2026
a9c4386
feat(windsurf): add Big-O algorithm efficiency requirement to code ch…
shervElmi Feb 17, 2026
ffd538e
docs(windsurf): standardize scope formatting in conventional commits …
shervElmi Feb 17, 2026
6acbddc
docs(windsurf): add comments to writing style scope in enterprise pri…
shervElmi Feb 17, 2026
4137437
style(windsurf): standardize punctuation in CSS property grouping list
shervElmi Feb 17, 2026
965305a
feat(windsurf): add Formidable Forms JavaScript coding standards and …
shervElmi Feb 17, 2026
bacf7e1
refactor(windsurf): standardize comment formatting in frm-testing.md …
shervElmi Feb 17, 2026
bf122bf
refactor(windsurf): update PHP version requirements and clarify WordP…
shervElmi Feb 17, 2026
735b99d
feat(windsurf): add Formidable Forms React patterns and best practice…
shervElmi Feb 17, 2026
e235329
feat(windsurf): add Formidable Forms security patterns and helper fun…
shervElmi Feb 17, 2026
66c495d
feat(windsurf): remove inline event handlers from accessibility keybo…
shervElmi Feb 17, 2026
1a055bd
feat(windsurf): remove VIP Standards and Tooling sections from block-…
shervElmi Feb 17, 2026
34c3e2d
refactor(windsurf): simplify WordPress JavaScript standards to match …
shervElmi Feb 17, 2026
303637b
refactor(windsurf): standardize comment formatting in wpvip-block-edi…
shervElmi Feb 17, 2026
0f97365
refactor(windsurf): standardize comment formatting in wpvip-performan…
shervElmi Feb 17, 2026
bf4b545
refactor(windsurf): standardize comment formatting and update securit…
shervElmi Feb 17, 2026
efac250
feat(windsurf): add .windsurf directory to export-ignore in .gitattri…
shervElmi Feb 17, 2026
f597589
refactor(windsurf): add CSS-specific rules for shared classes and sty…
shervElmi Feb 18, 2026
c362def
Merge branch 'master' into docs/address-feedback-windsurf-rules
Crabcyborg Feb 20, 2026
97b9e28
Merge branch 'master' into docs/address-feedback-windsurf-rules
Crabcyborg Feb 20, 2026
be7ae87
Add multi-issue fix principle to code change guidelines
shervElmi Feb 20, 2026
604f8e5
Add guideline for PHPDoc/JSDoc parameter descriptions
shervElmi Feb 20, 2026
245d220
Add ESLint documentation with active plugins and usage commands
shervElmi Feb 20, 2026
9ac97a0
Add explicit window assignment guideline for var-to-const/let refacto…
shervElmi Feb 20, 2026
d822d9d
Add new custom eslint rules
Crabcyborg Feb 20, 2026
fdc61eb
Build and minimize js files
Crabcyborg Feb 20, 2026
78b3d59
Merge pull request #2964 from Strategy11/add_new_custom_eslint_rules
Crabcyborg Feb 20, 2026
349ca42
Merge pull request #2960 from Strategy11/docs/address-feedback-windsu…
Crabcyborg Feb 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
.php-cs-fixer.cache export-ignore
.wp-env.json export-ignore
.coderabbit.yaml export-ignore
.windsurf export-ignore
cypress.config.js export-ignore
/bin/ export-ignore
changelog.txt export-ignore
Expand Down Expand Up @@ -45,6 +46,7 @@ mago.toml export-ignore
/resources/ export-ignore
webpack.dev.js export-ignore
.browserslistrc export-ignore
/eslint-rules/ export-ignore
/phpcs-sniffs/ export-ignore
.deepsource.toml export-ignore
.semgrepignore export-ignore
7 changes: 7 additions & 0 deletions .windsurf/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Override parent EditorConfig for .windsurf/ markdown files
# Code blocks in these rule files must use WP coding standards (tabs, indent_size 4)
# while all other .md files in the project keep space/2 from the root config.

[*.md]
indent_style = tab
indent_size = 4
8 changes: 8 additions & 0 deletions .windsurf/.markdownlint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"default": true,
"MD003": { "style": "atx" },
"MD007": { "indent": 4 },
"MD013": { "line_length": 9999 },
"no-hard-tabs": false,
"whitespace": false
}
104 changes: 104 additions & 0 deletions .windsurf/rules/enterprise/code-change-principles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
trigger: always_on
description: Enterprise code change principles for safe, minimal-scope modifications.
---

# Enterprise Code Change Principles

Critical principles for enterprise-level plugin development.

---

## Core Principles

1. **NEVER guess**: Always search and verify before making changes
2. **Minimal scope**: Fix at the most specific location, closest to the problem
3. **Backward compatibility**: Maintain 100% compatibility with existing callers
4. **No custom solutions**: Never invent new patterns. Use existing ones or search the web to review best practices, then follow the official WordPress standards or VIP guidelines.
5. **User changes are final**: If user makes manual changes, treat as authoritative
6. **Multi-issue fixes**: When fixing multiple issues in one request, run all 6 phases independently for each issue. Findings from one issue's phases may inform the next, but every phase is mandatory for every issue, even when issues share a root cause.

---

## Analysis Phase

Before proposing solutions:

### Phase 1: Understand

- Read and understand the complete issue
- Clarify expected vs actual behavior
- Identify reproduction steps
- Determine scope: which plugin(s), which feature(s)
- **Cross-plugin**: Identify if the feature or setting exists in Lite, Pro, or both. Understand the full feature context across all relevant plugins
- Working on an addon: research must include Lite AND Pro
- Working on Pro: research must include Lite
- Working on Lite: check if the change affects Pro or any active addon

### Phase 2: Locate

- Use code_search to find the root cause (not just symptoms)
- Trace execution flow from entry point to failure
- **Analyze complete context** of the class or file being changed — all features, logic, and flows
- **Trace parent hierarchy**: search parent classes and files up to plugin root
- **CSS-Specific Rules - Trace complete style cascade**: When debugging CSS on an element, identify ALL classes on the element and its ancestors, then search for ALL CSS rules affecting it (not just the obvious class). Understand the complete cascade before proposing changes
- Identify ALL affected locations in the codebase
- Map dependencies: what calls this code, what does this code call
- Check plugin requirements: must code work standalone or require Pro/addons
- **Cross-plugin**: Search for the same feature, helper, or code path in Lite and Pro (and addons if relevant). Understand how data flows between plugins

### Phase 3: Research

- **Never invent custom solutions if existing patterns exist**
- Find existing patterns: search models, controllers, helpers, views for similar functionality
- Study pattern usage: search ALL places using the pattern
- Search official WordPress/VIP docs: function parameters, return types, deprecated alternatives
- Search platform-specific docs: performance and security best practices
- Verify alignment: ensure approach matches existing codebase patterns
- **Cross-plugin**: Search for existing patterns and helpers in Lite and Pro that already solve the problem. Reuse them instead of inventing new solutions
- **Iterate**: if a better pattern is found, repeat from Phase 2

---

## Solution Phase

### Phase 4: Select Solution

- Propose 2-3 solutions with trade-offs clearly stated
- Select the solution with minimal scope and lowest risk
- Fix at the most specific location, closest to root cause
- Prefer adding safety checks over refactoring
- Fix must be testable without touching other code
- **Verify changes are not overkill**: If affecting several areas, review everything carefully to make sure the fix is not excessive. If it is, go back to Phase 2

---

## Change Phase

### Phase 5: Implement

- Never refactor unrelated code in the same commit
- If a rule conflicts with existing code in the file being modified, follow the rule for new code but do not refactor unrelated existing code
- Make the smallest change that completely solves the problem
- **CSS-Specific Rules - Never modify shared CSS classes**: If a CSS class is already used elsewhere in the plugin, do not change its behavior. Instead, add a new specific class for the feature and define new styles for it
- Use Big-O to compare algorithms and choose the most efficient one for large inputs and iterations
- Never change method signatures, return types, or data structures
- Add defensive checks where data comes in, not where used everywhere
- Add PHPDoc/JSDoc for new methods/properties/functions and comments for complex logic
- Never guess the version number and use `@since x.x` as the version placeholder in docblocks

---

## Change Verification Phase

### Phase 6: Verify

- Confirm fix resolves the reported issue
- Confirm backward compatibility with existing callers
- Confirm this change does not break any existing functionality
- Test with Pro plugin active AND inactive
- Test with empty data and missing keys
- Confirm no PHP warnings, notices, or errors in any scenario
- Test edge cases
- Remove all debug code (error_log statements, debug comments, debug files)
- Verify code passes phpcs/linting checks
127 changes: 127 additions & 0 deletions .windsurf/rules/enterprise/conventional-commits.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
---
trigger: always_on
description: Enforces conventional commit message format for all git commits in the project.
---

# Conventional Commit Messages

All commit messages MUST follow the Conventional Commits 1.0.0 specification.

## Format

```text
<type>(<scope>): <description>

[optional body]

[optional footer(s)]
```

## Types

| Type | Description | SemVer |
| ---------- | ----------------------------------------------------- | ------ |
| `fix` | Bug fix (patches a bug in the codebase) | PATCH |
| `feat` | New feature (adds functionality to the codebase) | MINOR |
| `docs` | Documentation only changes | - |
| `style` | Code style changes (formatting, whitespace, etc.) | - |
| `refactor` | Code change that neither fixes a bug nor adds feature | - |
| `perf` | Performance improvement | - |
| `test` | Adding or correcting tests | - |
| `build` | Changes to build system or external dependencies | - |
| `ci` | CI configuration changes | - |
| `chore` | Other changes that don't modify src or test files | - |

## Scope (Optional)

The scope provides additional context about what part of the codebase the commit affects:

- `builder`: Form builder related changes
- `entries`: Entry management changes
- `fields`: Field types or field handling
- `api`: API endpoints or integrations
- `admin`: Admin UI changes
- `frontend`: Front-end form display
- `db`: Database operations
- `i18n`: Internationalization
- `security`: Security fixes or improvements
- `deps`: Dependencies

## Breaking Changes

Indicate breaking changes with:

1. `!` after type/scope: `feat(api)!: change response format`
2. `BREAKING CHANGE:` footer in the commit body

## Examples

```text
fix(fields): resolve date field validation error

The date field was incorrectly validating dates in non-US formats.
Added locale-aware date parsing.
```

```text
feat(builder): add drag-and-drop field reordering

Implements smooth drag-and-drop functionality for reordering fields
in the form builder interface.
```

```text
fix: prevent XSS in field labels

Escape HTML entities in field labels before output.
```

```text
refactor(entries)!: change entry meta storage

BREAKING CHANGE: Entry meta now uses JSON encoding instead of
serialized PHP arrays. Run migration script before updating.
```

## Character Limits (50/72 Rule)

The 50/72 rule is a Git convention for readable commit messages:

| Element | Limit | Reason |
| ------------ | ------------- | ------------------------------------------------------- |
| Subject line | 50 characters | GitHub truncates at 72, but 50 is ideal for readability |
| Body lines | 72 characters | Matches terminal width and Git log formatting |

**Subject Line (50 chars):**

- Forces concise, scannable summaries
- Displays fully in `git log --oneline`
- GitHub shows full title without truncation

**Body Lines (72 chars):**

- Readable in terminals and Git interfaces
- Prevents awkward line breaks
- Matches email format conventions

---

## Rules

1. Type MUST be lowercase.
2. Description MUST start with lowercase letter.
3. Description MUST NOT end with a period.
4. Description MUST be imperative mood ("add" not "added" or "adds").
5. Body MUST be separated from description by a blank line.
6. Breaking changes MUST be indicated with `!` or `BREAKING CHANGE:` footer.
7. Subject line MUST be 50 characters or fewer.
8. Body lines MUST wrap at 72 characters.

## AI Commit Message Generation

When generating commit messages:

1. Analyze the staged changes to determine the appropriate type.
2. Identify the scope from the files/directories changed.
3. Write a concise description in imperative mood.
4. Add body with details if the change is complex.
23 changes: 23 additions & 0 deletions .windsurf/rules/enterprise/principles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
trigger: always_on
description: Baseline rules that apply across the entire Formidable Forms plugin ecosystem.
---

# General Principles

Baseline rules that apply across the Formidable Forms plugin ecosystem.

## Writing Style for Generated Text

Applies to all generated text: PR titles, PR body, commit messages, comments, and etc.

- **No em dashes** (`—` or `–`): use commas, periods, or rewrite the sentence
- **No semicolons** (`;`): split into separate sentences instead
- **Full GitHub URL** for issue references (e.g., `https://github.com/Strategy11/formidable-pro/issues/3030`), never shorthand `#number` (PRs may target a different repo than the issue)
- **No hard-wrapping** in PR body text: let GitHub handle line wrapping. The 72-char wrap rule applies only to **commit message bodies**

---

## PHPDoc/JSdoc Parameter Descriptions

PHPDoc/JSdoc `@param` descriptions must be concise and describe what the parameter contains. Never document a parameter as "Unused", always describe its content, even when it is present only for hook/filter signature compatibility.
Loading
Loading