feat: standardize woo-config-agent for multi-provider support#1141
feat: standardize woo-config-agent for multi-provider support#1141ashleyshaw wants to merge 8 commits into
Conversation
- AGENT.md with unified specification (v2.0.0) - Claude, Copilot, OpenAI provider configs - Store analysis, setup optimization, product configuration - Payment integration and performance optimization guidance Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
✅ Template check passed after update. Thanks for fixing the PR description. |
📝 WalkthroughWalkthroughAdds a multi-provider WooCommerce Config Agent with shared operating guidance, Claude/Copilot/OpenAI configurations, tool and skill schemas, integration metadata, and related project documentation updates. ChangesWooCommerce Config Agent
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related issues
Suggested labels: Suggested reviewers: Sequence Diagram(s)sequenceDiagram
participant StoreEvidence
participant CorePrompt
participant ProviderAdapter
participant ToolSchema
StoreEvidence->>CorePrompt: submit system reports and configuration inputs
CorePrompt->>ProviderAdapter: apply workflow and guardrails
ProviderAdapter->>ToolSchema: select typed tool or function contract
ToolSchema-->>ProviderAdapter: return structured inputs
ProviderAdapter-->>StoreEvidence: emit recommendations, plans, and verification output
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: abbf32461c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| providers: | ||
| - claude | ||
| - copilot | ||
| - openai |
There was a problem hiding this comment.
Add provider plugin manifests before marking support active
The agent declares all three providers active, but a repository-wide search found no WooCommerce plugin under plugins/ and no entry in plugins/PLUGIN_MANIFEST.json. Because provider discovery is performed through the registered plugin manifests, none of these configurations is installable through the repository's normal Claude, Copilot, or OpenAI paths; add and register the lightspeed-ecommerce-* plugin with its provider manifests.
Useful? React with 👍 / 👎.
| @@ -0,0 +1,19 @@ | |||
| [ | |||
There was a problem hiding this comment.
Use the canonical provider configuration shape
When this file is validated or loaded through schema/provider-config.schema.json, the top-level array is rejected because the contract requires an object containing provider and tools; openai/tools.json has the same defect and should use the corresponding provider/functions object. As written, both provider configurations are syntactically valid JSON but cannot be consumed by the standard multi-provider tooling.
Useful? React with 👍 / 👎.
| - id: store-analysis | ||
| - id: setup-optimization | ||
| - id: product-configuration | ||
| - id: payment-integration | ||
| - id: performance-optimization |
There was a problem hiding this comment.
Reference Copilot skills that actually exist
In the Copilot deployment, all five IDs resolve to nothing: a repository-wide search of agents/woo-config-agent/skills/ found no matching skill files or definitions. Copilot therefore advertises commands backed by unavailable skills; map these entries to the exported WooCommerce skill packages and include their valid references, or add the missing skill packages.
Useful? React with 👍 / 👎.
| - Analyze and optimize WooCommerce store configuration | ||
| - Configure products, pricing, and inventory | ||
| - Integrate payment gateways and payment processing | ||
| - Optimize for performance and conversions | ||
| - Setup customer management and support systems |
There was a problem hiding this comment.
Restore approval and production-safety guardrails
When connected to a real store, these instructions permit payment, pricing, inventory, and customer-system changes without preserving the exported agent's read-first/confirm-before-write workflow, staging-first requirement, or rules for credentials and customer/payment data. Because every provider inherits this shared prompt, add explicit approval gates, staging defaults, least-privilege handling, and prohibitions on exposing secrets before authorising these state-changing responsibilities.
AGENTS.md reference: AGENTS.md:L21-L21
Useful? React with 👍 / 👎.
Resolves .remember/now.md merge conflict and regenerates package-lock.json so npm ci passes (typescript 7.0.2->5.9.3, parser 8.64.0->8.65.0). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
⏱️ Aging and SLA annotation
Maintained by project-meta-sync workflow. |
Metadata governance
|
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@agents/woo-config-agent/AGENT.md`:
- Around line 5-8: Apply UK-English spelling consistently across all listed
agent surfaces: in agents/woo-config-agent/AGENT.md lines 5-8 and 49-70, update
the specified terminology; in shared/core-prompt.md lines 3-19, claude/agent.md
lines 7-19, and claude/tools.json lines 3-18, replace the specified US spellings
and verb usage; in copilot/agent.md line 5, expose /analyse and /optimise while
retaining US spellings only as compatibility aliases if required.
- Around line 24-29: Use one canonical identity for the five tools across all
provider definitions: agents/woo-config-agent/AGENT.md lines 24-29,
agents/woo-config-agent/openai/agent.md line 5, and
agents/woo-config-agent/openai/tools.json lines 2-6 must either use the same
canonical IDs or explicitly document mappings between the shared names and
provider-specific function names, so tool discovery resolves each function
consistently.
In `@agents/woo-config-agent/claude/agent.md`:
- Around line 13-19: Complete the Claude provider contract across both sites: in
agents/woo-config-agent/claude/agent.md lines 13-19, document the expected
Claude JSON response shape and error/failure behavior; in
agents/woo-config-agent/claude/tools.json lines 1-19, convert every tool to the
provider’s valid manifest format and add typed input_schema definitions
containing all required inputs for each tool.
In `@agents/woo-config-agent/openai/tools.json`:
- Around line 1-7: Expand each function declaration—create_store_analysis,
optimize_setup, configure_products, setup_payments, and analyze_performance—with
a clear description and a typed parameters schema. Define the required inputs
for store URLs, product settings, and payment configuration, including
appropriate property types, required arrays, and validation constraints so
OpenAI can reliably construct valid calls.
In `@agents/woo-config-agent/shared/core-prompt.md`:
- Around line 5-19: Add explicit shipping, tax compliance, and analytics
responsibilities to the shared WooCommerce workflow in the Core Responsibilities
section, and add corresponding checks to Best Practices. Preserve the existing
payment gateway, inventory, security, and performance coverage so the shared
prompt reflects the full advertised configuration scope.
- Around line 13-19: Replace the slogan-style safety items in
agents/woo-config-agent/shared/core-prompt.md (lines 13-19) with a reusable
explicit safety policy covering sensitive-data minimization, secret handling,
authorization, and refusal or reduction of unsafe data usage. Apply that shared
policy in agents/woo-config-agent/openai/agent.md (lines 3-5), requiring
explicit user approval and a preview before invoking any write-capable or
side-effecting WooCommerce function; keep the guardrails centralized for reuse
rather than duplicating them.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro
Run ID: ed3a96e3-0319-4ff4-a311-472172c3eaac
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (8)
agents/woo-config-agent/AGENT.mdagents/woo-config-agent/claude/agent.mdagents/woo-config-agent/claude/tools.jsonagents/woo-config-agent/copilot/agent.mdagents/woo-config-agent/copilot/skills.yamlagents/woo-config-agent/openai/agent.mdagents/woo-config-agent/openai/tools.jsonagents/woo-config-agent/shared/core-prompt.md
📜 Review details
⏰ Context from checks skipped due to timeout. (10)
- GitHub Check: sync-metadata
- GitHub Check: readme-regen
- GitHub Check: Unified Labeling, Status, and Type Assignment
- GitHub Check: Testing
- GitHub Check: lint
- GitHub Check: Linting
- GitHub Check: coderabbit-gate
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: Analyze (python)
- GitHub Check: Summary
⚠️ CI failures not shown inline (2)
GitHub Actions: changelog-validate / validate: feat: standardize woo-config-agent for multi-provider support
Conclusion: failure
##[group]Run actions/github-script@v7
with:
script: const cp = require("node:child_process");
const author = context.payload.pull_request?.user?.login || "";
const labels = (context.payload.pull_request?.labels || []).map((l) => l.name);
const has = (name) => labels.includes(name);
if (author === "dependabot[bot]" || author === "app/dependabot") {
core.info("Skipping changelog requirement for Dependabot pull requests.");
core.setOutput("run_validation", "false");
return;
}
if (has("meta:needs-changelog") && has("meta:no-changelog")) {
core.setFailed("PR cannot include both meta:needs-changelog and meta:no-changelog.");
return;
}
const restrictedTypes = new Set([
"type:feature",
"type:bug",
"type:performance",
"type:security",
"type:release",
"type:hotfix",
]);
if (has("meta:no-changelog") && labels.some((label) => restrictedTypes.has(label))) {
core.setFailed("meta:no-changelog is not allowed for high-impact release-related change types.");
return;
}
const baseSha = context.payload.pull_request?.base?.sha;
const headSha = context.payload.pull_request?.head?.sha;
const changed = cp
.execSync(`git diff --name-only ${baseSha} ${headSha}`, {
encoding: "utf8",
maxBuffer: 1024 * 1024 * 100,
})
.split("\n")
.filter(Boolean);
if (changed.includes("CHANGELOG.md")) {
core.info("CHANGELOG.md updated in PR diff.");
core.setOutput("run_validation", "true");
return;
}
if (has("meta:no-changelog")) {
core.info("Skipping changelog requirement due to meta:no-changelog label.");
core.setOutput("run_validation", "false");
return;
}
core.setFailed("PR requires a CHANGELOG.md update or the meta:no-changelog label.");
github-***REDACTED***
debug: false
user-agent: actions/github-script
result-encoding: json
retries: 0
retry-exempt-status-codes: 400,401,403,404,422
##[endgroup]
##[error]PR requires a CHANGELOG.md update or the meta:no-changelog label.
GitHub Actions: changelog-validate / 0_validate.txt: feat: standardize woo-config-agent for multi-provider support
Conclusion: failure
##[group]Run actions/github-script@v7
with:
script: const cp = require("node:child_process");
const author = context.payload.pull_request?.user?.login || "";
const labels = (context.payload.pull_request?.labels || []).map((l) => l.name);
const has = (name) => labels.includes(name);
if (author === "dependabot[bot]" || author === "app/dependabot") {
core.info("Skipping changelog requirement for Dependabot pull requests.");
core.setOutput("run_validation", "false");
return;
}
if (has("meta:needs-changelog") && has("meta:no-changelog")) {
core.setFailed("PR cannot include both meta:needs-changelog and meta:no-changelog.");
return;
}
const restrictedTypes = new Set([
"type:feature",
"type:bug",
"type:performance",
"type:security",
"type:release",
"type:hotfix",
]);
if (has("meta:no-changelog") && labels.some((label) => restrictedTypes.has(label))) {
core.setFailed("meta:no-changelog is not allowed for high-impact release-related change types.");
return;
}
const baseSha = context.payload.pull_request?.base?.sha;
const headSha = context.payload.pull_request?.head?.sha;
const changed = cp
.execSync(`git diff --name-only ${baseSha} ${headSha}`, {
encoding: "utf8",
maxBuffer: 1024 * 1024 * 100,
})
.split("\n")
.filter(Boolean);
if (changed.includes("CHANGELOG.md")) {
core.info("CHANGELOG.md updated in PR diff.");
core.setOutput("run_validation", "true");
return;
}
if (has("meta:no-changelog")) {
core.info("Skipping changelog requirement due to meta:no-changelog label.");
core.setOutput("run_validation", "false");
return;
}
core.setFailed("PR requires a CHANGELOG.md update or the meta:no-changelog label.");
github-***REDACTED***
debug: false
user-agent: actions/github-script
result-encoding: json
retries: 0
retry-exempt-status-codes: 400,401,403,404,422
##[endgroup]
##[error]PR requires a CHANGELOG.md update or the meta:no-changelog label.
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{yml,yaml,json}
📄 CodeRabbit inference engine (CLAUDE.md)
Do not use a
referencesfrontmatter field; use inline links or footer sections instead.
Files:
agents/woo-config-agent/copilot/skills.yamlagents/woo-config-agent/openai/tools.jsonagents/woo-config-agent/claude/tools.json
**/*
📄 CodeRabbit inference engine (CLAUDE.md)
**/*: Do not commitnode_modules/,build/, or other generated artefacts.
Do not add WordPress plugin- or theme-specific project code to this.githubcontrol-plane repository.
Do not move existing agents, instructions, or schemas without a migration issue recording the source path, target path, and validation plan.
Do not enqueue editor-only WordPress assets on the front end, or front-end assets in the editor.
**/*: Use UK English in code, documentation, comments and contributor-facing text, prioritising clarity, scalability and maintainability.
Every code change must include lint fixes, relevant tests and a short rationale summarising the change.
Never output secrets; treat production and customer data as sensitive and follow the OWASP Top 10 for web security.
Files:
agents/woo-config-agent/copilot/skills.yamlagents/woo-config-agent/openai/tools.jsonagents/woo-config-agent/claude/tools.jsonagents/woo-config-agent/copilot/agent.mdagents/woo-config-agent/shared/core-prompt.mdagents/woo-config-agent/claude/agent.mdagents/woo-config-agent/openai/agent.mdagents/woo-config-agent/AGENT.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (CLAUDE.md)
Use UK English throughout documentation and Markdown content (for example, “optimise”, “organisation”, “colour”, and “behaviour”).
Files:
agents/woo-config-agent/copilot/agent.mdagents/woo-config-agent/shared/core-prompt.mdagents/woo-config-agent/claude/agent.mdagents/woo-config-agent/openai/agent.mdagents/woo-config-agent/AGENT.md
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: lightspeedwp/.github
Timestamp: 2026-07-22T22:55:50.895Z
Learning: WooCommerce guidance should address payment gateways, inventory, shipping, tax compliance, analytics, security, and performance.
🔇 Additional comments (6)
agents/woo-config-agent/AGENT.md (1)
1-4: LGTM!Also applies to: 9-23, 30-43, 72-82
agents/woo-config-agent/shared/core-prompt.md (1)
1-1: LGTM!agents/woo-config-agent/claude/agent.md (1)
1-5: LGTM!agents/woo-config-agent/copilot/agent.md (1)
1-3: LGTM!agents/woo-config-agent/copilot/skills.yaml (1)
1-8: LGTM!agents/woo-config-agent/openai/agent.md (1)
1-2: LGTM!
| description: >- | ||
| Specialized configuration assistant for WooCommerce stores. Provides expert | ||
| guidance on setup, optimization, payment integration, product management, | ||
| and e-commerce best practices. |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Apply the UK-English rule consistently across the agent surfaces.
agents/woo-config-agent/AGENT.md#L5-L8: replace “Specialized” and “optimization” with “Specialised” and “optimisation”.agents/woo-config-agent/AGENT.md#L49-L70: replace “Specializes”, “Optimize”, and “organization” with “Specialises”, “Optimise”, and “organisation”.agents/woo-config-agent/shared/core-prompt.md#L3-L19: replace “specializing”, “Optimize”, “Setup” as a verb, “organization”, and “optimization”.agents/woo-config-agent/claude/agent.md#L7-L19: replace “optimization” and “Optimize”.agents/woo-config-agent/copilot/agent.md#L5-L5: expose/analyseand/optimise, retaining US spellings only as compatibility aliases if required.agents/woo-config-agent/claude/tools.json#L3-L18: replace “Analyze”, “Optimize”, and “Setup” as a verb.
As per coding guidelines, use UK English in code, documentation, comments and contributor-facing text.
📍 Affects 5 files
agents/woo-config-agent/AGENT.md#L5-L8(this comment)agents/woo-config-agent/AGENT.md#L49-L70agents/woo-config-agent/shared/core-prompt.md#L3-L19agents/woo-config-agent/claude/agent.md#L7-L19agents/woo-config-agent/copilot/agent.md#L5-L5agents/woo-config-agent/claude/tools.json#L3-L18
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@agents/woo-config-agent/AGENT.md` around lines 5 - 8, Apply UK-English
spelling consistently across all listed agent surfaces: in
agents/woo-config-agent/AGENT.md lines 5-8 and 49-70, update the specified
terminology; in shared/core-prompt.md lines 3-19, claude/agent.md lines 7-19,
and claude/tools.json lines 3-18, replace the specified US spellings and verb
usage; in copilot/agent.md line 5, expose /analyse and /optimise while retaining
US spellings only as compatibility aliases if required.
Source: Coding guidelines
…dator
Replace stub provider configs with substantial content (1,046 lines):
- shared/core-prompt.md: 7-phase WooCommerce methodology
- claude/{agent.md,tools.json}: 8 tools with full input schemas
- copilot/{agent.md,skills.yaml}: 7 skills with GitHub integration
- openai/{agent.md,tools.json}: 8 functions with parameter schemas
Also documents the 50-option / 50-field limits in docs/ISSUE_FIELDS.md so
the pre-existing validate:issue-fields check passes on develop.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Satisfies changelog-validate (type:feature requires a CHANGELOG.md entry; meta:no-changelog is disallowed for restricted types). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
🔍 Reviewer Summary for PR #1141CI Status: ❌ Recommendations
|
…check Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Ash Shaw <ashley@lightspeedwp.agency>
There was a problem hiding this comment.
Actionable comments posted: 9
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docs/ISSUE_FIELDS.md (1)
455-458: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winReconcile the org-field implementation status.
These lines say the infrastructure is in place, but the document later says org-level field writing and its infrastructure are not yet implemented. Please distinguish clearly between existing-but-disabled code and work that is still pending.
As per path instructions, documentation must be up to date and accurate.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/ISSUE_FIELDS.md` around lines 455 - 458, Update the org-field status section in ISSUE_FIELDS.md to distinguish the existing but disabled updateOrgIssueFields implementation from org-level field writing infrastructure that remains unimplemented. Align the wording with the later documentation and accurately identify the pending work without claiming the full feature is already in place.Source: Path instructions
CHANGELOG.md (1)
30-35: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winAdd linked issue references to every Unreleased entry.
These changed entries include PR links but no issue links;
#1145and#1146are also bare references rather than links. Please add markdown links to the corresponding issues.As per path instructions, each entry under
[Unreleased]must include a PR link and issue link.Also applies to: 42-46, 52-52
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@CHANGELOG.md` around lines 30 - 35, Update every entry under [Unreleased], including the entries around the project sync workflow and skill registry changes, to include a markdown link to its corresponding issue in addition to the existing PR link. Replace bare issue references such as `#1145` and `#1146` with linked issue URLs, preserving the current changelog wording and PR references.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@agents/woo-config-agent/claude/tools.json`:
- Around line 93-113: Update the tool schemas so required array inputs reject
empty arrays by adding minItems: 1 to regions in
agents/woo-config-agent/claude/tools.json lines 93-113 and
agents/woo-config-agent/openai/tools.json lines 72-82, and to kpis in
agents/woo-config-agent/claude/tools.json lines 182-201 and
agents/woo-config-agent/openai/tools.json lines 150-159; preserve the existing
required declarations and other schema fields.
In `@agents/woo-config-agent/copilot/skills.yaml`:
- Around line 119-129: Update the integration.projects.phase_columns
configuration to add a “Customer & Privacy” column for customer-support’s
customer-plan.md output, while preserving the existing columns and their order.
- Around line 10-31: Update the store-setup skill’s outputs declaration to
include a separate Phase 1 Store Analysis Report artefact alongside
setup-optimisation-plan.md, matching the outputs produced by /woo analyze and
/woo setup-plan; preserve the existing setup plan output and use the
repository’s established filename or naming convention for the analysis report.
In `@agents/woo-config-agent/openai/agent.md`:
- Around line 53-59: Update the Webhook pattern guidance to require
authenticating and authorizing webhook sources, verifying signatures, rejecting
replays, deduplicating event IDs, enforcing rate limits, and minimizing payloads
before dispatching analysis. Ensure only validated, non-duplicate events can
reach the model, and avoid forwarding unnecessary order or customer data.
- Around line 39-49: Update the OpenAI curl example’s model value in the chat
completions request to use a configurable, currently supported model ID
compatible with the existing tools and tool_choice fields, rather than the
deprecated gpt-4-turbo value. Preserve the endpoint and function-calling request
structure.
In `@agents/woo-config-agent/shared/core-prompt.md`:
- Around line 169-177: Define a provider-neutral canonical JSON success and
error envelope in the Outputs section of
agents/woo-config-agent/shared/core-prompt.md (lines 169-177). Update
agents/woo-config-agent/claude/agent.md (lines 68-69) to reference this
result/error contract instead of tools.json input schemas, and update
agents/woo-config-agent/openai/agent.md (lines 61-65) to reference the same
contract for automation consumers.
- Around line 1-7: Apply the required instruction-file template to all four
surfaces: agents/woo-config-agent/shared/core-prompt.md lines 1-7,
agents/woo-config-agent/claude/agent.md lines 1-7,
agents/woo-config-agent/copilot/agent.md lines 1-7, and
agents/woo-config-agent/openai/agent.md lines 1-7. Add consistent frontmatter, a
role declaration, and Overview, General Rules, Detailed Guidance, Examples,
Validation, and References sections to each file, preserving each provider’s
platform-specific content where applicable.
In `@docs/ISSUE_FIELDS.md`:
- Line 178: Update the documentation text near “All organization issues support
these fields” to use the UK spelling “organisation,” preserving the statement’s
meaning and applying the repository’s spelling convention.
- Line 176: Update the limits statement in ISSUE_FIELDS.md to match the
canonical values and counts from .github/issue-fields.yml: distinguish the
25-field organisation limit from the 50-field project limit, and describe the
configured fields as 5 universal, 6 pinned custom single-select, and 3 date/text
fields. Keep this as the single authoritative limits statement.
---
Outside diff comments:
In `@CHANGELOG.md`:
- Around line 30-35: Update every entry under [Unreleased], including the
entries around the project sync workflow and skill registry changes, to include
a markdown link to its corresponding issue in addition to the existing PR link.
Replace bare issue references such as `#1145` and `#1146` with linked issue URLs,
preserving the current changelog wording and PR references.
In `@docs/ISSUE_FIELDS.md`:
- Around line 455-458: Update the org-field status section in ISSUE_FIELDS.md to
distinguish the existing but disabled updateOrgIssueFields implementation from
org-level field writing infrastructure that remains unimplemented. Align the
wording with the later documentation and accurately identify the pending work
without claiming the full feature is already in place.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro Plus
Run ID: 79e6c958-0df9-4fdc-b89c-e5ce74bf45ac
📒 Files selected for processing (9)
CHANGELOG.mdagents/woo-config-agent/claude/agent.mdagents/woo-config-agent/claude/tools.jsonagents/woo-config-agent/copilot/agent.mdagents/woo-config-agent/copilot/skills.yamlagents/woo-config-agent/openai/agent.mdagents/woo-config-agent/openai/tools.jsonagents/woo-config-agent/shared/core-prompt.mddocs/ISSUE_FIELDS.md
📜 Review details
⏰ Context from checks skipped due to timeout. (7)
- GitHub Check: coderabbit-gate
- GitHub Check: Validation
- GitHub Check: Linting
- GitHub Check: Testing
- GitHub Check: Analyze (python)
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: Summary
⚠️ CI failures not shown inline (1)
GitHub Actions: Meta Agent / front-matter-validate: feat: standardize woo-config-agent for multi-provider support
Conclusion: failure
##[group]Run if [ "${GITHUB_EVENT_NAME}" = "pull_request" ]; then
�[36;1mif [ "${GITHUB_EVENT_NAME}" = "pull_request" ]; then�[0m
�[36;1m BASE_REF="09f09bfd1e7c925ed62654b3e87713f755efec30"�[0m
�[36;1m HEAD_REF="7276165495a87dfacc4ac672bd77834304220a6c"�[0m
�[36;1melif [ "${GITHUB_EVENT_NAME}" = "push" ]; then�[0m
�[36;1m BASE_REF="4ad97a1733028e17c8785ca7608b08416c4047a7"�[0m
�[36;1m HEAD_REF="8525b06729d2d7ee1086595162043b755b5306fc"�[0m
�[36;1melse�[0m
�[36;1m BASE_REF="HEAD~1"�[0m
�[36;1m HEAD_REF="8525b06729d2d7ee1086595162043b755b5306fc"�[0m
�[36;1mfi�[0m
�[36;1mnpm run validate:frontmatter:changed -- --base "$BASE_REF" --head "$HEAD_REF"�[0m
shell: /usr/bin/bash -e {0}
##[endgroup]
> `@lightspeedwp/github-community-health`@0.5.0 validate:frontmatter:changed
> node scripts/validation/validate-frontmatter-freshness.js --base 09f09bfd1e7c925ed62654b3e87713f755efec30 --head 7276165495a87dfacc4ac672bd77834304220a6c
Frontmatter freshness validation failed:
- docs/ISSUE_FIELDS.md: body changed but version was not updated (v1.0.8).
##[error]Process completed with exit code 1.
🧰 Additional context used
📓 Path-based instructions (8)
**/*
📄 CodeRabbit inference engine (CLAUDE.md)
**/*: Do not place reusable AI assets under.github/; place them in the matching top-level source folder such asai/,agents/,cookbook/,hooks/,instructions/,plugins/,skills/, orworkflows/.
Use UK English spelling throughout documentation and repository content.
Do not add WordPress plugin- or theme-specific project code to this organisation.githubrepository.
Do not move existing agents, instructions, or schemas without a migration issue recording the source path, target path, and validation plan.
Do not commitnode_modules/,build/, or other generated artefacts.
Use branch names in lowercase kebab-case with the format{type}/{scope}-{short-title}and an approved type prefix; never use theclaude/prefix.
Before every push, verify the branch, ensure it is notmainordevelopoutside an authorised release cycle, runnpm run validate:branch-name -- --branch $(git branch --show-current), and push withgit push -u origin <branch-name>.
PRs should targetdevelop; only explicitly authorised release cycles may targetmain, and onlyrelease/*orhotfix/*branches may merge tomain.
After a successful squash merge, delete the remote and local branch; never reuse a branch name that has already been merged.
Files:
agents/woo-config-agent/claude/tools.jsondocs/ISSUE_FIELDS.mdCHANGELOG.mdagents/woo-config-agent/copilot/agent.mdagents/woo-config-agent/shared/core-prompt.mdagents/woo-config-agent/copilot/skills.yamlagents/woo-config-agent/claude/agent.mdagents/woo-config-agent/openai/tools.jsonagents/woo-config-agent/openai/agent.md
**/*.{md,mdx,yml,yaml,json}
📄 CodeRabbit inference engine (CLAUDE.md)
Do not use a
referencesfrontmatter field; use inline links or footer sections instead.
Files:
agents/woo-config-agent/claude/tools.jsondocs/ISSUE_FIELDS.mdCHANGELOG.mdagents/woo-config-agent/copilot/agent.mdagents/woo-config-agent/shared/core-prompt.mdagents/woo-config-agent/copilot/skills.yamlagents/woo-config-agent/claude/agent.mdagents/woo-config-agent/openai/tools.jsonagents/woo-config-agent/openai/agent.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (CLAUDE.md)
Instruction files must use frontmatter, a role declaration, Overview, General Rules, Detailed Guidance, Examples, Validation, and References sections.
Files:
docs/ISSUE_FIELDS.mdCHANGELOG.mdagents/woo-config-agent/copilot/agent.mdagents/woo-config-agent/shared/core-prompt.mdagents/woo-config-agent/claude/agent.mdagents/woo-config-agent/openai/agent.md
docs/**
📄 CodeRabbit inference engine (CLAUDE.md)
Store permanent human documentation under
docs/, not reports or task trackers.
Files:
docs/ISSUE_FIELDS.md
**/docs/**/*.md
⚙️ CodeRabbit configuration file
**/docs/**/*.md: Review documentation files:
- Ensure markdown is linted and formatted per project style guides.
- Flag illogical folder structures, file naming, or misplaced content.
- Confirm documentation is up to date, accurate, and cross-referenced.
- Ensure accessibility (heading hierarchy, alt text for images, UK English).
Files:
docs/ISSUE_FIELDS.md
CHANGELOG.md
⚙️ CodeRabbit configuration file
CHANGELOG.md: Review CHANGELOG.md:
- Confirm entries follow Keep a Changelog 1.1.0 format.
- Each entry under [Unreleased] must include a PR link and issue link.
- Verify entries use the correct section headings (Added, Changed, Fixed, Deprecated, Removed, Security, Documentation, Performance).
- Check UK English spelling throughout.
Files:
CHANGELOG.md
agents/**/*.md
📄 CodeRabbit inference engine (AGENTS.md)
Each AI agent must have a Markdown specification following the required template.
Files:
agents/woo-config-agent/copilot/agent.mdagents/woo-config-agent/shared/core-prompt.mdagents/woo-config-agent/claude/agent.mdagents/woo-config-agent/openai/agent.md
**/*.{yml,yaml}
📄 CodeRabbit inference engine (CLAUDE.md)
Keep GitHub-native governance assets such as templates, labels, and workflows under
.github/.
Files:
agents/woo-config-agent/copilot/skills.yaml
🪛 GitHub Actions: Meta Agent / 1_front-matter-validate.txt
docs/ISSUE_FIELDS.md
[error] 1-1: Frontmatter freshness validation failed: body changed but version was not updated (v1.0.8). Step: npm run validate:frontmatter:changed
🪛 GitHub Actions: Meta Agent / front-matter-validate
docs/ISSUE_FIELDS.md
[error] 1-1: Frontmatter freshness validation failed: body changed but version was not updated (v1.0.8).
🪛 LanguageTool
docs/ISSUE_FIELDS.md
[style] ~35-~35: Would you like to use the Oxford spelling “Organization”? The spelling ‘Organisation’ is also correct.
Context: ...roject fields**: Max 50 per project - Organisation issue fields: Max 25 per organisation...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~35-~35: Would you like to use the Oxford spelling “organization”? The spelling ‘organisation’ is also correct.
Context: ...Organisation issue fields**: Max 25 per organisation --- ## Executive Summary This docume...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~176-~176: Would you like to use the Oxford spelling “organization”? The spelling ‘organisation’ is also correct.
Context: ...orts a maximum of 25 project fields per organisation (max_issue_fields_per_org: 25). Our c...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~176-~176: Would you like to use the Oxford spelling “specialized”? The spelling ‘specialised’ is also correct.
Context: ...ration uses 15 fields (5 universal + 10 specialised domain fields), leaving room for future...
(OXFORD_SPELLING_Z_NOT_S)
[uncategorized] ~178-~178: Do not mix variants of the same word (‘organization’ and ‘organisation’) within a single text.
Context: ...(project_total_field_limit: 50). All organization issues support these fields: | Field |...
(EN_WORD_COHERENCY)
[uncategorized] ~480-~480: The official name of this software platform is spelled with a capital “H”.
Context: ... } } 2. Create mapping in `.github/issue-field-ids.yml` (example): ...
(GITHUB)
[uncategorized] ~491-~491: The official name of this software platform is spelled with a capital “H”.
Context: ...enable the writer Verification record: `.github/reports/audits/2026-06-07-private-proje...
(GITHUB)
agents/woo-config-agent/copilot/agent.md
[style] ~9-~9: Would you like to use the Oxford spelling “optimized”? The spelling ‘optimised’ is also correct.
Context: ...et for WooCommerce store configuration, optimised for teams that manage their store's inf...
(OXFORD_SPELLING_Z_NOT_S)
[uncategorized] ~22-~22: Do not mix variants of the same word (‘analyze’ and ‘analyse’) within a single text.
Context: ...ig and produce an ordered setup plan. | /woo analyze, /woo setup-plan | | `product-manage...
(EN_WORD_COHERENCY)
[uncategorized] ~49-~49: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...even phases to a project board's columns so progress is trackable. - **Pull reque...
(COMMA_COMPOUND_SENTENCE_2)
agents/woo-config-agent/shared/core-prompt.md
[style] ~10-~10: Would you like to use the Oxford spelling “optimize”? The spelling ‘optimise’ is also correct.
Context: ..., and developers assess, configure, and optimise WooCommerce stores running on WordPress...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~38-~38: Would you like to use the Oxford spelling “optimize”? The spelling ‘optimise’ is also correct.
Context: ...on only. - UK English in all prose (optimise, organisation, behaviour). ## Core Wor...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~38-~38: Would you like to use the Oxford spelling “organization”? The spelling ‘organisation’ is also correct.
Context: ... UK English in all prose (optimise, organisation, behaviour). ## Core Workflow The age...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~66-~66: Would you like to use the Oxford spelling “Optimization”? The spelling ‘Optimisation’ is also correct.
Context: ...and the top risks. ### Phase 2 — Setup Optimisation Turn the analysis into a prioritised c...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~68-~68: Would you like to use the Oxford spelling “prioritized”? The spelling ‘prioritised’ is also correct.
Context: ... Optimisation Turn the analysis into a prioritised configuration plan. - Resolve any **bl...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~79-~79: Would you like to use the Oxford spelling “Optimization”? The spelling ‘Optimisation’ is also correct.
Context: ... branding). Output artefact: Setup Optimisation Plan — ordered list of changes, each ...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~99-~99: Would you like to use the Oxford spelling “tokenization”? The spelling ‘tokenisation’ is also correct.
Context: ...ns and average order value. - Enforce tokenisation — no raw card data ever touches the W...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~108-~108: Would you like to use the Oxford spelling “Optimization”? The spelling ‘Optimisation’ is also correct.
Context: ...e statement. ### Phase 5 — Performance Optimisation - Ensure a persistent object cache...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~119-~119: Would you like to use the Oxford spelling “optimizations”? The spelling ‘optimisations’ is also correct.
Context: ...ne, target Core Web Vitals, and ordered optimisations. ### Phase 6 — Inventory & Operations ...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~149-~149: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...d numbers, CVV, or full track data**. - Do not disable tax collection or alter tax...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~154-~154: Would you like to use the Oxford spelling “minimization”? The spelling ‘minimisation’ is also correct.
Context: ... under any circumstance. - Respect data minimisation: collect only the customer data the sto...
(OXFORD_SPELLING_Z_NOT_S)
agents/woo-config-agent/claude/agent.md
[style] ~10-~10: Would you like to use the Oxford spelling “optimization”? The spelling ‘optimisation’ is also correct.
Context: ...ow the seven-phase workflow (analysis → optimisation → products → payments → performance → o...
(OXFORD_SPELLING_Z_NOT_S)
[grammar] ~43-~43: Consider using “to” with “prefer”.
Context: ...tive WooCommerce features over plugins; prefer plugins over custom code. Only recommend custom code when native...
(PREFER_OVER_TO)
agents/woo-config-agent/openai/agent.md
[style] ~9-~9: Would you like to use the Oxford spelling “optimized”? The spelling ‘optimised’ is also correct.
Context: ...enAI API for WooCommerce configuration, optimised for automation and integration into bac...
(OXFORD_SPELLING_Z_NOT_S)
[uncategorized] ~11-~11: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...alls and machine-readable JSON responses so results can be consumed by other servic...
(COMMA_COMPOUND_SENTENCE_2)
[uncategorized] ~16-~16: Although a hyphen is possible, it is not necessary in a compound modifier in which the first word is an adverb that ends in ‘ly’.
Context: ...must return a plan for a human or a separately-authorised system to apply, not perform the mutati...
(HYPHENATED_LY_ADVERB_ADJECTIVE)
[uncategorized] ~63-~63: Possible missing article found.
Context: ...ue tracker. ## Response Format Return JSON matching the schema of the invoked func...
(AI_HYDRA_LEO_MISSING_A)
[style] ~72-~72: Would you like to use the Oxford spelling “minimization”? The spelling ‘minimisation’ is also correct.
Context: ...r payments are in scope. - Respect data minimisation and GDPR in any customer-data function ...
(OXFORD_SPELLING_Z_NOT_S)
🔇 Additional comments (15)
CHANGELOG.md (3)
6-6: LGTM!
39-39: 📐 Maintainability & Code QualityConfirm the Phase label.
The supplied PR objectives describe this agent as a Phase 1 standardised structure, but this entry calls it Phase 2. Please confirm the intended phase before merging.
28-29: LGTM!Also applies to: 31-38, 40-41, 43-43, 45-45, 47-49, 50-51
docs/ISSUE_FIELDS.md (1)
5-7: LGTM!Also applies to: 26-35, 436-436, 447-454, 460-491, 510-513
agents/woo-config-agent/copilot/skills.yaml (5)
93-105:customer-supporthas no project-board home.See the linked comment on the
integration.projects.phase_columnsblock (lines 119-129) — this skill's output has nowhere to land.
1-9: LGTM!
32-91: LGTM!product-management,payment-integration(security block correctly mirrors the shared core-prompt's tokenisation/PCI/no-secrets guardrails),performance-tuning, andinventory-controlall look consistent.
107-118: LGTM!analytics-reportingoutput name lines up cleanly with the "Analytics" project column too.
130-133: LGTM!agents/woo-config-agent/shared/core-prompt.md (1)
9-167: LGTM!Also applies to: 179-185
agents/woo-config-agent/claude/agent.md (1)
9-67: LGTM!Also applies to: 71-80
agents/woo-config-agent/copilot/agent.md (1)
9-61: LGTM!agents/woo-config-agent/openai/agent.md (1)
9-38: LGTM!Also applies to: 50-52, 67-72
agents/woo-config-agent/claude/tools.json (1)
4-85: LGTM!Also applies to: 117-181, 202-204
agents/woo-config-agent/openai/tools.json (1)
2-71: LGTM!Also applies to: 83-149, 160-163
| "regions": { | ||
| "type": "array", | ||
| "items": { "type": "string" }, | ||
| "description": "ISO country codes to accept payments from." | ||
| }, | ||
| "average_order_value": { | ||
| "type": "number", | ||
| "description": "Average order value in the store's base currency." | ||
| }, | ||
| "preferred_gateways": { | ||
| "type": "array", | ||
| "items": { "type": "string" }, | ||
| "description": "Gateways the merchant already uses or prefers." | ||
| }, | ||
| "flow": { | ||
| "type": "string", | ||
| "enum": ["hosted_fields", "redirect", "onsite_tokenised"], | ||
| "description": "Integration flow, which determines PCI SAQ scope." | ||
| } | ||
| }, | ||
| "required": ["regions"] |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Make required array inputs genuinely non-empty.
Both provider manifests accept empty required arrays, allowing calls with no payment regions or KPIs.
agents/woo-config-agent/claude/tools.json#L93-L113: add"minItems": 1toregions.agents/woo-config-agent/claude/tools.json#L182-L201: add"minItems": 1tokpis.agents/woo-config-agent/openai/tools.json#L72-L82: mirror"minItems": 1forregions.agents/woo-config-agent/openai/tools.json#L150-L159: mirror"minItems": 1forkpis.
📍 Affects 2 files
agents/woo-config-agent/claude/tools.json#L93-L113(this comment)agents/woo-config-agent/claude/tools.json#L182-L201agents/woo-config-agent/openai/tools.json#L72-L82agents/woo-config-agent/openai/tools.json#L150-L159
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@agents/woo-config-agent/claude/tools.json` around lines 93 - 113, Update the
tool schemas so required array inputs reject empty arrays by adding minItems: 1
to regions in agents/woo-config-agent/claude/tools.json lines 93-113 and
agents/woo-config-agent/openai/tools.json lines 72-82, and to kpis in
agents/woo-config-agent/claude/tools.json lines 182-201 and
agents/woo-config-agent/openai/tools.json lines 150-159; preserve the existing
required declarations and other schema fields.
| skills: | ||
| - id: store-setup | ||
| name: Store Setup & Analysis | ||
| description: >- | ||
| Analyse a WooCommerce System Status Report and produce an ordered | ||
| setup-optimisation plan (impact, effort, rollback per item). | ||
| commands: | ||
| - /woo analyze | ||
| - /woo setup-plan | ||
| inputs: | ||
| - name: system_status | ||
| required: true | ||
| description: System Status Report text or JSON. | ||
| - name: business_model | ||
| required: false | ||
| description: b2c | b2b | subscription | digital | mixed. | ||
| outputs: | ||
| - setup-optimisation-plan.md | ||
| github: | ||
| creates_issues: true | ||
| issue_labels: ["type:chore", "area:woocommerce"] | ||
|
|
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
store-setup outputs are missing the Phase 1 artefact.
The shared core prompt defines two distinct artefacts across two phases: a Store Analysis Report for Phase 1, and a separate Setup Optimisation Plan for Phase 2. Yet store-setup runs both /woo analyze and /woo setup-plan (lines 17-18) but only declares setup-optimisation-plan.md (line 27) as output — the analysis report never gets a file of its own.
📄 Proposed fix
outputs:
+ - store-analysis-report.md
- setup-optimisation-plan.md📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| skills: | |
| - id: store-setup | |
| name: Store Setup & Analysis | |
| description: >- | |
| Analyse a WooCommerce System Status Report and produce an ordered | |
| setup-optimisation plan (impact, effort, rollback per item). | |
| commands: | |
| - /woo analyze | |
| - /woo setup-plan | |
| inputs: | |
| - name: system_status | |
| required: true | |
| description: System Status Report text or JSON. | |
| - name: business_model | |
| required: false | |
| description: b2c | b2b | subscription | digital | mixed. | |
| outputs: | |
| - setup-optimisation-plan.md | |
| github: | |
| creates_issues: true | |
| issue_labels: ["type:chore", "area:woocommerce"] | |
| skills: | |
| - id: store-setup | |
| name: Store Setup & Analysis | |
| description: >- | |
| Analyse a WooCommerce System Status Report and produce an ordered | |
| setup-optimisation plan (impact, effort, rollback per item). | |
| commands: | |
| - /woo analyze | |
| - /woo setup-plan | |
| inputs: | |
| - name: system_status | |
| required: true | |
| description: System Status Report text or JSON. | |
| - name: business_model | |
| required: false | |
| description: b2c | b2b | subscription | digital | mixed. | |
| outputs: | |
| - store-analysis-report.md | |
| - setup-optimisation-plan.md | |
| github: | |
| creates_issues: true | |
| issue_labels: ["type:chore", "area:woocommerce"] |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@agents/woo-config-agent/copilot/skills.yaml` around lines 10 - 31, Update the
store-setup skill’s outputs declaration to include a separate Phase 1 Store
Analysis Report artefact alongside setup-optimisation-plan.md, matching the
outputs produced by /woo analyze and /woo setup-plan; preserve the existing
setup plan output and use the repository’s established filename or naming
convention for the analysis report.
| integration: | ||
| projects: | ||
| enabled: true | ||
| phase_columns: | ||
| - Analysis | ||
| - Optimisation | ||
| - Products | ||
| - Payments | ||
| - Performance | ||
| - Operations | ||
| - Analytics |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
phase_columns leaves customer-support with no board column.
Seven skills, seven columns — but the mapping doesn't line up 1:1. inventory-control's output (operations-runbook.md) clearly maps to "Operations", and analytics-reporting's (analytics-plan.md) to "Analytics", while store-setup alone spans both "Analysis" and "Optimisation". That leaves customer-support (Customer & Privacy, outputting customer-plan.md) without a matching column — its GitHub Project cards would have nowhere to go.
🗂️ Proposed fix
phase_columns:
- Analysis
- Optimisation
- Products
- Payments
- Performance
- Operations
+ - Customer
- Analytics📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| integration: | |
| projects: | |
| enabled: true | |
| phase_columns: | |
| - Analysis | |
| - Optimisation | |
| - Products | |
| - Payments | |
| - Performance | |
| - Operations | |
| - Analytics | |
| integration: | |
| projects: | |
| enabled: true | |
| phase_columns: | |
| - Analysis | |
| - Optimisation | |
| - Products | |
| - Payments | |
| - Performance | |
| - Operations | |
| - Customer | |
| - Analytics |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@agents/woo-config-agent/copilot/skills.yaml` around lines 119 - 129, Update
the integration.projects.phase_columns configuration to add a “Customer &
Privacy” column for customer-support’s customer-plan.md output, while preserving
the existing columns and their order.
| curl https://api.openai.com/v1/chat/completions \ | ||
| -H "Authorization: Bearer $OPENAI_API_KEY" \ | ||
| -H "Content-Type: application/json" \ | ||
| -d '{ | ||
| "model": "gpt-4-turbo", | ||
| "messages": [ | ||
| {"role": "system", "content": "<contents of ../shared/core-prompt.md>"}, | ||
| {"role": "user", "content": "Analyse this store and propose a setup plan."} | ||
| ], | ||
| "tools": <contents of ./tools.json>, | ||
| "tool_choice": "auto" |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
file="agents/woo-config-agent/openai/agent.md"
if grep -q '"model": "gpt-4-turbo"' "$file"; then
echo "Deprecated model identifier remains in the OpenAI example" >&2
exit 1
fiRepository: lightspeedwp/.github
Length of output: 216
🌐 Web query:
OpenAI Chat Completions model list deprecated model gpt-4-turbo as of 2025
💡 Result:
As of July 23, 2026, the gpt-4-turbo model is officially deprecated and has been scheduled for shutdown [1][2]. According to OpenAI's developer documentation, the gpt-4-turbo model (along with its associated snapshot gpt-4-turbo-2024-04-09 and the alias gpt-4-turbo-completions) is set to be shut down on October 23, 2026 [1][2]. While the model remains callable via the API as of July 2026, it has been delisted from OpenAI's official pricing tables [3]. Developers are encouraged to migrate to newer, more capable models such as gpt-4.1 or the gpt-5 series [1][3]. Despite some third-party sources previously indicating different or earlier unofficial deprecation statuses [4][5], the official OpenAI deprecations page confirms the October 2026 shutdown date [1].
Citations:
- 1: https://developers.openai.com/api/docs/deprecations
- 2: https://community.openai.com/t/deprecation-notice-upcoming-model-shutdowns-in-2026/1379553
- 3: https://www.rapidevelopers.com/ai-api-limits-performance-matrix/gpt-4-turbo
- 4: https://endoflife.ai/openai-api
- 5: https://aichangelog.dev/openai/gpt-4-turbo
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
file="agents/woo-config-agent/openai/agent.md"
echo "== relevant docs =="
sed -n '1,90p' "$file"
echo
echo "== model/tool-call mentions =="
rg -n '(model|tools|tool_choice|OPENAI|gpt-4-turbo|gpt-4\.1|gpt-5)' agents/woo-config-agent/openai agent/woo-config-agent || trueRepository: lightspeedwp/.github
Length of output: 3783
Replace the deprecated model in the OpenAI copy-and-paste example.
gpt-4-turbo is deprecated and scheduled for shutdown, so this primary integration snippet is a bit of a time traveller. Update it to a configurable, currently supported model ID and keep the selected endpoint compatible with the tools + tool_choice function-calling surface.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@agents/woo-config-agent/openai/agent.md` around lines 39 - 49, Update the
OpenAI curl example’s model value in the chat completions request to use a
configurable, currently supported model ID compatible with the existing tools
and tool_choice fields, rather than the deprecated gpt-4-turbo value. Preserve
the endpoint and function-calling request structure.
Source: MCP tools
| Batch and webhook patterns: | ||
|
|
||
| - **Batch** — feed multiple stores' System Status exports and fan out | ||
| `create_store_analysis` calls; collect results into a portfolio report. | ||
| - **Webhook** — on a WooCommerce `order.updated` or config-change webhook, run | ||
| the relevant analysis function and post the plan to the team's channel or | ||
| issue tracker. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift
Authenticate and deduplicate webhook dispatches.
The webhook pattern dispatches analysis from order.updated or configuration events without requiring signature verification, source authorisation, replay protection, deduplication, rate limits, or payload minimisation. Add those gates before forwarding events to the model, otherwise forged or repeated events can trigger costly calls and expose order/customer data.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@agents/woo-config-agent/openai/agent.md` around lines 53 - 59, Update the
Webhook pattern guidance to require authenticating and authorizing webhook
sources, verifying signatures, rejecting replays, deduplicating event IDs,
enforcing rate limits, and minimizing payloads before dispatching analysis.
Ensure only validated, non-duplicate events can reach the model, and avoid
forwarding unnecessary order or customer data.
| # WooCommerce Config Agent — Core Prompt | ||
|
|
||
| > Provider-agnostic core instructions shared by the Claude, Copilot, and OpenAI | ||
| > configurations. Each provider file references this document and layers its | ||
| > platform-specific tooling on top. | ||
|
|
||
| ## Role |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift
Apply the required instruction-file template consistently.
All four instruction surfaces omit the same required metadata and section contract.
agents/woo-config-agent/shared/core-prompt.md#L1-L7: add frontmatter, role, Overview, General Rules, Detailed Guidance, Examples, Validation, and References.agents/woo-config-agent/claude/agent.md#L1-L7: apply the same template.agents/woo-config-agent/copilot/agent.md#L1-L7: apply the same template.agents/woo-config-agent/openai/agent.md#L1-L7: apply the same template.
As per coding guidelines, instruction files must use frontmatter, a role declaration, Overview, General Rules, Detailed Guidance, Examples, Validation, and References sections.
📍 Affects 4 files
agents/woo-config-agent/shared/core-prompt.md#L1-L7(this comment)agents/woo-config-agent/claude/agent.md#L1-L7agents/woo-config-agent/copilot/agent.md#L1-L7agents/woo-config-agent/openai/agent.md#L1-L7
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@agents/woo-config-agent/shared/core-prompt.md` around lines 1 - 7, Apply the
required instruction-file template to all four surfaces:
agents/woo-config-agent/shared/core-prompt.md lines 1-7,
agents/woo-config-agent/claude/agent.md lines 1-7,
agents/woo-config-agent/copilot/agent.md lines 1-7, and
agents/woo-config-agent/openai/agent.md lines 1-7. Add consistent frontmatter, a
role declaration, and Overview, General Rules, Detailed Guidance, Examples,
Validation, and References sections to each file, preserving each provider’s
platform-specific content where applicable.
Source: Coding guidelines
| ## Outputs | ||
|
|
||
| The agent produces Markdown reports and, where a machine-readable form helps, | ||
| JSON. Every recommendation set includes: | ||
|
|
||
| 1. **Findings** — what is currently configured and where it falls short. | ||
| 2. **Recommendations** — ordered, each with impact/effort/rollback. | ||
| 3. **Verification** — how to confirm the change worked (a test to run). | ||
| 4. **Risks** — what could go wrong and the mitigation. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Define one shared result and failure contract.
The shared prompt and both provider surfaces discuss JSON output, but the available tool schemas define inputs only. Add one provider-neutral success/error envelope and reference it at every provider surface.
agents/woo-config-agent/shared/core-prompt.md#L169-L177: define the canonical JSON result and error shape.agents/woo-config-agent/claude/agent.md#L68-L69: reference that result/error contract instead oftools.jsoninput schemas.agents/woo-config-agent/openai/agent.md#L61-L65: reference the same contract for automation consumers.
📍 Affects 3 files
agents/woo-config-agent/shared/core-prompt.md#L169-L177(this comment)agents/woo-config-agent/claude/agent.md#L68-L69agents/woo-config-agent/openai/agent.md#L61-L65
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@agents/woo-config-agent/shared/core-prompt.md` around lines 169 - 177, Define
a provider-neutral canonical JSON success and error envelope in the Outputs
section of agents/woo-config-agent/shared/core-prompt.md (lines 169-177). Update
agents/woo-config-agent/claude/agent.md (lines 68-69) to reference this
result/error contract instead of tools.json input schemas, and update
agents/woo-config-agent/openai/agent.md (lines 61-65) to reference the same
contract for automation consumers.
| ### 3.1 Universal Project Fields | ||
|
|
||
| GitHub supports a maximum of 25 project fields per organisation (`max_issue_fields_per_org: 25`). Our current configuration uses 15 fields (5 universal + 10 specialised domain fields), leaving room for future expansion. Single-select fields may define up to 50 options (`single_select_max_options: 50`), and the project as a whole is capped at 50 total fields (`project_total_field_limit: 50`). Single-select fields may define up to 50 options (`single_select_max_options: 50`), and the project as a whole is capped at 50 total fields (`project_total_field_limit: 50`). | ||
| GitHub supports a maximum of 25 project fields per organisation (`max_issue_fields_per_org: 25`). Our current configuration uses 15 fields (5 universal + 10 specialised domain fields), leaving room for future expansion. Single-select fields may define up to 50 options (`single_select_max_options: 50`), and the project as a whole is capped at 50 total fields (`project_total_field_limit: 50`). |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== locate relevant files =="
git ls-files | rg '(^|/)(docs/ISSUE_FIELDS\.md|\.github/issue-fields\.ya?ml)$|issue-fields' || true
echo
echo "== docs/ISSUE_FIELDS.md around line 176 =="
if [ -f docs/ISSUE_FIELDS.md ]; then
sed -n '150,190p' docs/ISSUE_FIELDS.md | nl -ba -v150
fi
echo
echo "== docs/ISSUE_FIELDS.md references around 455 and 493 =="
if [ -f docs/ISSUE_FIELDS.md ]; then
sed -n '445,500p' docs/ISSUE_FIELDS.md | nl -ba -v445
fi
echo
echo "== issue-fields yml stats =="
for f in .github/issue-fields.yml .github/issue-fields.yaml; do
if [ -f "$f" ]; then
echo "--- $f ---"
wc -l "$f"
sed -n '1,140p' "$f" | nl -ba
fi
done
echo
echo "== deterministic field counts =="
python3 - <<'PY'
from pathlib import Path
p=Path('.github/issue-fields.yml')
if not p.exists():
print('MISSING .github/issue-fields.yml')
raise SystemExit
s=p.read_text()
print('max_issue_fields_per_org' in s)
print('single_select_max_options' in s)
print('project_total_field_limit' in s)
lines=s.splitlines()
for pref in ['universal_fields:', 'custom_fields:', 'single_select_options:']:
print(pref, '\n'.join(f' {l}' for l in lines if l.startswith(' '+pref.split(':')[0])))
# rough block counts at indentation 2
fields=[]
for i,l in enumerate(lines):
if i+1<1000 and l.startswith(' id:'):
# simple backtracked field header-ish assumption
head=line=lines[0]
for i,l in enumerate(lines):
if l.rstrip().endswith(':') and l.startswith(' ') and not l.startswith(' '):
fields.append(l.strip().rstrip(':'))
print('fields_by_indent_2=', fields)
print('count_indent_2=', len(fields))
PYRepository: lightspeedwp/.github
Length of output: 658
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== docs/ISSUE_FIELDS.md around line 176 =="
sed -n '150,190p' docs/ISSUE_FIELDS.md | awk '{printf "%5d\t%s\n", NR+149, $0}'
echo
echo "== docs/ISSUE_FIELDS.md references around 455 and 493 =="
sed -n '445,500p' docs/ISSUE_FIELDS.md | awk '{printf "%5d\t%s\n", NR+444, $0}'
echo
echo "== .github/issue-fields.yml stats and relevant contents =="
wc -l .github/issue-fields.yml
sed -n '1,140p' .github/issue-fields.yml | awk '{printf "%5d\t%s\n", NR, $0}'
echo
echo "== deterministic parse of .github/issue-fields.yml fields =="
python3 - <<'PY'
from pathlib import Path
p = Path('.github/issue-fields.yml')
text = p.read_text()
print('contains max_issue_fields_per_org:', 'max_issue_fields_per_org' in text)
print('contains single_select_max_options:', 'single_select_max_options' in text)
print('contains project_total_field_limit:', 'project_total_field_limit' in text)
# Count YAML block-style fields with 2-space id/name keys; print counts by block title.
counts = {}
for line in text.splitlines():
if line.startswith(' id:') and 'current' not in line:
title = ''
for prev in reversed(text[:text.index(line)].splitlines()):
if prev.strip().endswith(':') and (not prev.startswith(' ') or len(prev)-len(prev.lstrip()) == 2):
title = prev.split(':', 1)[0].strip()
break
counts[title] = counts.get(title, 0) + 1
print(counts)
print('id_count_without_current', sum(1 for line in text.splitlines() if line.strip().startswith('id:') and 'current' not in line))
PYRepository: lightspeedwp/.github
Length of output: 9516
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== .github/issue-fields.yml field definitions =="
awk '
NR>=135 && NR<=333 {
printf "%5d\t%s\n", NR, $0
}
' .github/issue-fields.yml
echo
echo "== counts by section in docs and yml =="
python3 - <<'PY'
from pathlib import Path
import re
md = Path('docs/ISSUE_FIELDS.md').read_text()
yml = Path('.github/issue-fields.yml').read_text()
doc = re.search(r'## 3\. Project Field Configuration(.*?)(?=## |$)', md, re.S).group(1)
tables = re.findall(r'\| Field \|', doc)
print('markdown table headers after Project Field Configuration:', len(tables))
for m in re.findall(r'<details>(.*?)</details>', doc, re.S):
print('detail table headers:', m.count('| Field |'))
id_count = sum(1 for line in yml.splitlines() if re.match(r'^ id: ', line) or re.match(r'^ id: ', line))
single_select_id_count = sum(1 for line in yml.splitlines() if re.match(r'^ id: ', line) and 'SingleSelect' in line)
print('yaml id declarations:', id_count)
print('yaml single select id declarations:', single_select_id_count)
# simple count of declared fields between section keys by indentation
for section in ['universal_issue_fields:', 'single_select_issue_fields:', 'markdown_issue_fields:', 'text_issue_fields:', 'options_issue_fields:']:
idx = yml.find(section)
if idx == -1:
print(section, 'MISSING')
continue
next_section = min((yml.find(sec, idx+len(section)) for sec in ('universal_issue_fields:', 'single_select_issue_fields:', 'markdown_issue_fields:', 'text_issue_fields:', 'options_issue_fields:', 'limits:') if sec != section and idx + len(section) <= yml.find(sec) != -1), default=len(yml))
block = yml[idx:next_section]
field_ids = len(re.findall(r'^ id: ', block, re.M))
field_type_uses = len(re.findall(r'^ type: (single_select|date|text|markdown|options)', block, re.M))
print(section.strip(), 'field_ids=', field_ids, 'types_declared=', field_type_uses)
PYRepository: lightspeedwp/.github
Length of output: 6733
Align the field limits with the canonical YAML.
This still maps max_issue_fields_per_org: 25 as a project limit, while the project cap is 50. It also says 15 fields, but the configuration contains 5 universal issue fields, 6 pinned custom single-select fields, and 3 date/text fields. Keep one authoritative limits statement and make the counts match .github/issue-fields.yml.
🧰 Tools
🪛 LanguageTool
[style] ~176-~176: Would you like to use the Oxford spelling “organization”? The spelling ‘organisation’ is also correct.
Context: ...orts a maximum of 25 project fields per organisation (max_issue_fields_per_org: 25). Our c...
(OXFORD_SPELLING_Z_NOT_S)
[style] ~176-~176: Would you like to use the Oxford spelling “specialized”? The spelling ‘specialised’ is also correct.
Context: ...ration uses 15 fields (5 universal + 10 specialised domain fields), leaving room for future...
(OXFORD_SPELLING_Z_NOT_S)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/ISSUE_FIELDS.md` at line 176, Update the limits statement in
ISSUE_FIELDS.md to match the canonical values and counts from
.github/issue-fields.yml: distinguish the 25-field organisation limit from the
50-field project limit, and describe the configured fields as 5 universal, 6
pinned custom single-select, and 3 date/text fields. Keep this as the single
authoritative limits statement.
Source: Path instructions
| GitHub supports a maximum of 25 project fields per organisation (`max_issue_fields_per_org: 25`). Our current configuration uses 15 fields (5 universal + 10 specialised domain fields), leaving room for future expansion. Single-select fields may define up to 50 options (`single_select_max_options: 50`), and the project as a whole is capped at 50 total fields (`project_total_field_limit: 50`). Single-select fields may define up to 50 options (`single_select_max_options: 50`), and the project as a whole is capped at 50 total fields (`project_total_field_limit: 50`). | ||
| GitHub supports a maximum of 25 project fields per organisation (`max_issue_fields_per_org: 25`). Our current configuration uses 15 fields (5 universal + 10 specialised domain fields), leaving room for future expansion. Single-select fields may define up to 50 options (`single_select_max_options: 50`), and the project as a whole is capped at 50 total fields (`project_total_field_limit: 50`). | ||
|
|
||
| All organization issues support these fields: |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Use UK spelling consistently.
Change “organization” to “organisation” to match the repository-wide documentation requirement.
As per coding guidelines, use UK English spelling throughout documentation and repository content.
🧰 Tools
🪛 LanguageTool
[uncategorized] ~178-~178: Do not mix variants of the same word (‘organization’ and ‘organisation’) within a single text.
Context: ...(project_total_field_limit: 50). All organization issues support these fields: | Field |...
(EN_WORD_COHERENCY)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/ISSUE_FIELDS.md` at line 178, Update the documentation text near “All
organization issues support these fields” to use the UK spelling “organisation,”
preserving the statement’s meaning and applying the repository’s spelling
convention.
Source: Coding guidelines
Linked issues
Closes #1101
Changelog
Added
Fixed
package-lock.jsonsync so CInpm cipassesChecklist (Global DoD / PR)