Fixing Plugin Check errors with GitHub Copilot 🔗 **Source:** [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) > [!note]+ Document Notes > tags: [wordpress, mcp, github-copilot] > author: [MISSING] > source: [YouTube] > reference: [https://www.youtube.com/watch?v=jTRNaaBhHJA] > date created: > > # 🏷️ Title: Fixing Plugin Check errors with GitHub Copilot > <!-- deep-read:sections start --> ## 🧰 Action Inbox - [H2] Draft a guide for enabling WordPress.com MCP — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJA #articleseed - [H4] Write a snippet to resolve NPX path issues — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJA #xref - [H6] Publish CLI recipe: `wp plugin check --format=csv` — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJA #articleseed - [H7] Create a script to convert CSV to GitHub issues — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJ A #articleseed - [H8] Ship Copilot PR review checklist for WordPress code — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJA #xref - [H10] Add README and “Tested up to” scaffolding to starter — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJA #addendum - [H9] Draft bug triage flow for AI-induced regressions — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJA #share - [H3] Note camera/stream constraints for live coding setups — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJA #share - [H5] Document Filesystem API pattern for uploads — https://developer.wordpress.org/apis/filesystem/ #xref - [H1] Capture aphorism: “AI excels on scoped tasks” — transcript/https://www.youtube.com/watch?v=jTRNaaBhHJA #aphorisms ## 🧭 Table of Contents - [📝 Summary](#-summary) - [📖 Main Content](#-main-content) - [🗒️ Notes](#️-notes) - [📚 References](#-references) - [🗣️ Paraphrase](#️-paraphrase) - [📰 Newsletter](#-newsletter) - [✅ Action Items](#-action-items) - [🧪 Hypotheses](#-hypotheses) - [📊 Methodology](#-methodology) - [❓ Questions](#-questions) - [🔮 Future Research](#-future-research) - [💡 Implications](#-implications) - [🧠 Learning Styles Assessment](#-learning-styles-assessment) - [📊 Accessibility Assessment](#-accessibility-assessment) - [🌍 DEIB Assessment](#-deib-assessment) - [✅ Logical Validity](#-logical-validity) - [🛡️ DARVO Analysis](#-darvo-analysis) - [🎯 Conclusion](#-conclusion) ### 🔗 References - Model Context Protocol (repo). https://github.com/modelcontextprotocol/ - Plugin Check (WordPress.org). https://wordpress.org/plugins/plugin-check/ - WordPress Filesystem API. https://developer.wordpress.org/apis/filesystem/ - WordPress Nonces. https://developer.wordpress.org/apis/security/nonces/ - WP-CLI commands index. https://developer.wordpress.org/cli/commands/ - Video: Fixing Plugin Check errors with GitHub Copilot. https://www.youtube.com/watch?v=jTRNaaBhHJA ## 📝 Summary - The speaker live-codes a plugin cleanup session. - They use MCP and GitHub Copilot to fix Plugin Check errors. - Stakeholders include WordPress plugin authors and hosting teams. - Risks include AI regressions and insecure file handling. - Bottom line: combine checks, CLI, and AI for faster remediation. ## 📖 Main Content - The stream shows WordPress.com MCP access via OAuth. It enables agent tools. The host toggles access and configures clients. They highlight NPX path pitfalls. They fix issues by setting an explicit path. They then use WP-CLI to export Plugin Check output. They convert results into GitHub issues and assign Copilot. Copilot opens PRs that fix flagged patterns. - Core terms: MCP (tool protocol for agents), WP-CLI (WordPress command line), WordPress Filesystem API (safe file IO), nonces (request validation tokens). See official docs for details. - Uncertainties: exact WordPress.com MCP documentation link is not provided in the video. I cannot verify it here without browsing. The MCP spec and WordPress docs remain accessible. I cite those directly. ### 🗒️ Notes #### ⏱️ [00:05:15](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=315) WordPress.com adds MCP tools ### [H1] WordPress.com MCP access uses OAuth login > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “this uses oauth by default… it will ask me to log into my WordPress.com account” Enables secure agent access without passwords. Tie this to MCP clients. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=915) #xref #articleseed ID:rw_[MISSING] #### ⏱️ [00:06:00](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=360) Enabling MCP in profile ### [H2] Users enable MCP via a profile toggle > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “you literally log into your account… click on the MCP icon, enable MCP tool access for your account” Simple activation supports multi-client configs. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=1012) #articleseed ID:rw_[MISSING] #### ⏱️ [00:03:01](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=181) Streaming gear caveats ### [H3] Live streams face camera overheating risks > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “it can overheat and shut down… I’m probably going to keep the stream to an hour” Plan for thermal limits in long sessions. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=205) #share ID:rw_[MISSING] #### ⏱️ [00:14:59](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=899) NPX conflicts ### [H4] NPX path issues block MCP server usage > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “if you have multiple versions of npx installed then it gives you some grief” Pin the Node path or package to stabilize CLI. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=899) #xref ID:rw_[MISSING] #### ⏱️ [00:31:40](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=1900) Unsafe uploads ### [H5] Replace move_uploaded_file with Filesystem API > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “the use of function move upload file is forbidden” Use WordPress Filesystem API for uploads and permissions. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=1902) #xref ID:rw_[MISSING] #### ⏱️ [00:24:49](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=1489) Export needs ### [H6] Use WP-CLI to export Plugin Check results > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “you can run it in a WPCLI command… export to a text” Prefer JSON or CSV for automation. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=1505) #articleseed ID:rw_[MISSING] #### ⏱️ [00:45:40](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=2740) Issue generation ### [H7] Convert CSV checks into GitHub issue files > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “prepare separate markdown files to be used to create GitHub issues” Group by file and line for clarity. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=2750) #articleseed ID:rw_[MISSING] #### ⏱️ [00:51:40](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=3100) AI PRs ### [H8] Copilot proposes PRs for flagged patterns > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “I’m going to merge these things and just see what happens” Review diffs and test before merging. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=3115) #xref ID:rw_[MISSING] #### ⏱️ [01:00:32](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=3632) Regression surfaced ### [H9] AI changes introduced a chmod bug > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “Failed to set permissions… undefined variable new file path” Reproduce, add tests, and roll forward with fix. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=3632) #xref #share ID:rw_[MISSING] #### ⏱️ [01:02:15](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=3735) Readme hygiene ### [H10] Add README and “Tested up to” fields > [!quote] [Fixing Plugin Check errors with GitHub Copilot](https://www.youtube.com/watch?v=jTRNaaBhHJA) by an unnamed author via [[YouTube]]. Published [MISSING]. Accessed . > “Create a readme.txt… that’s what WordPress requires” Follow Plugin Directory norms for metadata. [view highlight](https://www.youtube.com/watch?v=jTRNaaBhHJA&t=3735) #addendum ID:rw_[MISSING] ## 📚 References - Model Context Protocol (spec and tooling). https://github.com/modelcontextprotocol/ - WordPress Filesystem API guidance. https://developer.wordpress.org/apis/filesystem/ - Nonce best practices. https://developer.wordpress.org/apis/security/nonces/ - WP-CLI usage. https://developer.wordpress.org/cli/commands/ - Plugin Check plugin. https://wordpress.org/plugins/plugin-check/ ## 🗣️ Paraphrase - The host configures MCP, then uses WP-CLI and Copilot to triage issues. - They export Plugin Check output, make issues, accept PRs, and fix regressions. ## 📰 Newsletter - Today’s lab showed MCP + Copilot fixing Plugin Check errors fast. - Try `wp plugin check --format=csv` to feed CI and agents. - Use the Filesystem API for uploads, not `move_uploaded_file`. See docs. https://developer.wordpress.org/apis/filesystem/ - Bonus: add nonces, sanitize inputs, and keep `readme.txt` current. ## ✅ Action Items #### DevRel - Publish a “Plugin Check + AI” quickstart with examples and GIFs. - Record a short demo on CSV export and issue generation. - Add sample PR review checklist for WordPress standards. - Track demo goals and conversions from docs to trials. - Collect developer feedback via a short survey. #### OSPO - Define policy for AI-generated patches and code review gates. - Require Filesystem API for uploads in internal guides. - Add nonce and sanitation checks to secure coding training. - Maintain an SBOM and mark AI-touched files in metadata. - Align KPIs with reduced vulnerability counts per release. #### Community - Host office hours on Plugin Check and WP-CLI flows. - Pair newcomers on first “check → issue → PR → test” loop. - Share a sample repo with staged Plugin Check failures. - Publish transparent reports on fixes and review times. #### WordPress - Core: clarify error messages for common upload misuse. - Core Performance: track IO overhead from Filesystem API patterns. - Core AI: set guidelines for agent-run refactors and tests. - **Core Program Team:** standardize triage templates for tool output. - Playground: add a Plugin Check sandbox preset. - Training: create a module on nonces and uploads. - Documentation: add “from move_uploaded_file to Filesystem API” page. - Accessibility: document admin notices patterns for errors. - Meta: let Plugin Check export CSV/JSON from the UI. - CLI: expose `--format=csv` examples in official docs. - Hosting: document managed updates and their limits clearly. #### The WPOCC - Launch microgrants for “fix your plugin” sprints. - Fund maintainers to write safer upload examples. - Pilot a mentorship track on testing AI PRs. ### FAIR - Bind funding to published governance and test artifacts. - Add provenance notes for AI-assisted changes. - Provide operator agreements for agent access on hosts. ## 🧪 Hypotheses - MCP-enabled hosts cut triage time by 30% for Plugin Check issues. - CSV-to-issue tooling halves manual QA toil for maintainers. - Filesystem API adoption reduces upload-related vulnerabilities by 50%. - Nonce and sanitation training lowers review cycles per PR by 20%. ### 📊 Methodology - Run A/B trials across plugins with and without MCP workflows. - Measure lead time from error detection to merged fix. - Track incident counts tied to file uploads post-adoption. - Survey developers on perceived speed and confidence. ### ❓ Questions - Which Plugin Check errors cause the most regressions? - Where should AI propose changes versus open issues only? - How should hosts gate agent tools across environments? ### 🔮 Future Research - Map AI refactor patterns to secure coding guidelines. - Explore automated test scaffolding from issue metadata. - Study developer trust signals for AI-authored PRs. ### 💡 Implications - Practice: adopt CLI exports and issue templates. - Policy: require nonces and Filesystem API in reviews. - Security: gate uploads and set permissions safely. - Education: teach agents to output minimal diffs and tests. - Funding: support maintainers during modernization sprints. ### 🧠 Learning Styles Assessment - Reading level estimate: Flesch-Kincaid Grade ≈ 10 (approximate). #### 👀 Visual learners - Present: CLI, IDE, and UI sequences. - Improve: flow diagrams of MCP and CLI steps. #### 🔊 Aural learners - Present: narrated stream. - Improve: 3-minute audio recap with key commands. #### 🗣️ Verbal learners - Present: definitions for nonces and Filesystem API. - Improve: side-by-side term comparisons. #### 🧩 Kinesthetic learners - Present: hands-on CLI and PR merges. - Improve: guided labs with failing tests. #### 🧠 Logical learners - Present: stepwise triage and export processes. - Improve: decision trees for AI usage. #### 🧑‍🤝‍🧑 Social learners - Present: live interaction potential. - Improve: cohort sprints and code clinics. #### 🧘‍♀️ Solitary learners - Present: reproducible commands and notes. - Improve: self-check quizzes per section. #### 🌿 Naturalistic learners - Present: n/a in this context. - Improve: lifecycle thinking for maintenance costs. ### 📊 Accessibility Assessment #### Screen reader semantics - Present: headings and structure. - Improve: alt text for any screenshots. #### Keyboard navigation - Present: standard WordPress admin patterns. - Improve: visible focus and skip links in demos. #### Contrast and readability - Present: typical admin contrast. - Improve: check 4.5:1 for code overlays. #### Text resizing and reflow - Present: responsive layout by default. - Improve: test at 200% zoom in examples. #### Media and captions - Present: YouTube provides captions. - Improve: downloadable transcript and no autoplay. #### Forms and interactions - Present: plugin settings as forms. - Improve: inline validation patterns and targets. #### Standards reference - Map gaps to WCAG 2.2 AA criteria. ### 🌍 DEIB Assessment #### Cultural breadth - Present: global developer relevance. - Improve: examples from multiple locales. #### Inclusive language - Present: mostly neutral phrasing. - Improve: plain summaries for newcomers. #### Neurodiversity support - Present: chunked steps and repetition. - Improve: consistent icons and labels. #### Representation - Present: limited on-stream representation. - Improve: highlight diverse contributor work. #### Psychological safety - Present: nonjudgmental tone. - Improve: clear community guidelines and escalation paths. ### ✅ Logical Validity #### Strong reasoning - [H6] argues for CLI export to aid automation. This is practical and verifiable. - [H5] shifts from unsafe calls to the Filesystem API. It follows official guidance. - [H7] groups issues by file and line. This improves traceability and review speed. #### Fallacies - [H8] implies merging first is fine. This risks post-merge regressions. - Fix: require tests and review gates before merging. #### Tone of voice - Pragmatic, candid, and upbeat. Light humor offsets technical friction. ### 🛡️ DARVO Analysis - Deny: none noted. - Attack: none noted. - Reverse victim/offender: none noted. - The content stays procedural and supportive. ## 🎯 Conclusion - MCP, WP-CLI, and Copilot can shorten remediation loops. - Use CLI exports, structured issues, and safe APIs for uploads. - Add nonces, sanitize inputs, and test AI changes before merging. ## 🧱 Refactor Appendix (append after 🎯 Conclusion) ### 📚 Literature Split Pad - Purpose: Stage Konik CEE units that become per-source Literature notes. - Split level: **H3**. - Include verbatim quotes under 25 words and a [view highlight] link. ### [H1] 5–10-word present-tense claim > [!quote] [{Title or entity}]({ARTICLE_URL}) by [[{Author or [MISSING]}]] via [[{Site or [MISSING]}]]. Published {DATE_OR_[MISSING]}. Accessed . > “Short quote, verbatim, ≤25 words.” Two lines: context and use. Cite data if relevant. [view highlight]({ARTICLE_URL}#H1) #xref #articleseed ID:rw_[MISSING] ### [H2] 5–10-word present-tense claim > [!quote] [{Title or entity}]({ARTICLE_URL}) > “Short quote, verbatim, ≤25 words.” Two lines: context and use. [view highlight]({ARTICLE_URL}#H2) #xref ID:rw_[MISSING] --- ### 🔖 Atomic Split Pad (Zettel Candidates) - Purpose: Promote reusable claims into Atomic notes. - Split level: **H4**. - Each item: one idea, present tense, specific, testable. #### [Z1] 5–10-word present-tense claim - Scope/condition in one line. - Pointer to page/time or dataset. - Links: [[Parent-Concept]] [[Related-Idea]] #### [Z2] 5–10-word present-tense claim - Scope/condition in one line. - Pointer to page/time or dataset. - Links: [[Parent-Concept]] [[Related-Idea]] --- ### ✏️ Fleeting Queue (Extract by Selection) - Purpose: Capture quick actions or sparks for Fleeting notes. - Extraction: **Select one line** → “Refactor: Extract selection to new note (content only).” - Keep each line short and self-contained. - [F1] Short action — context/{ARTICLE_URL} #fleeting #inbox - [F2] Short action — context/{ARTICLE_URL} #fleeting #inbox - [F3] Short action — context/{ARTICLE_URL} #fleeting #inbox --- <!-- deep-read:sections end --> ## 📺 Video ![](https://www.youtube.com/watch?v=jTRNaaBhHJA) --- # 📄 Full Transcript *Auto-generated from YouTube captions · timestamps roughly every 30 seconds · [watch on YouTube](https://www.youtube.com/watch?v=jTRNaaBhHJA)* **[02:12]** Okay, should be live now. Um, there's nobody in the chat yet, so I can't check if my audio is working. Um, I suppose I could if I go to Twitch **[02:45]** something. Okay, it works. All right. Um, couple of things I want to cover before we get started today. Uh, first of all, I am using a new camera. It is a Sony ZV E10. Uh, apparently according to the box, it's the L model. **[03:15]** Um, it is specifically not a webcam. So, apparently it struggles. Struggles, maybe not the right word, but if you use it for long periods of time, it can overheat and shut down. There is a setting that you can enable that allows it to overheat for longer before it shuts down, which I don't know if that's a good thing or a bad thing. Uh there are apparently **[03:47]** uh dummy battery packs that you can buy for this thing that I cannot find locally. So I may need to order one internationally. Um so it might all go pear shape today. Um I'm probably going to keep the stream to an hour no more just because of that. Um but my video might just cut out and if it does I apologize and then I'll probably end the stream when that happens. So I'm keeping an eye on my video channel here. Um, I hope it doesn't happen after an hour. I hope an hour is is an okay amount of **[04:18]** time. Um, I'm finding my lights are very bright today, so I'm going to turn them down a little bit. Where are we here? 45. Let's go down to 35 and 40. Very, very bright. There we go. Doesn't need to be so bright. Um, okay. Right. And then also along with that, I have this horrible CamLink 4K setup connected to this little tiny little USB C adapter hanging off the end **[04:50]** of my MacBook and I hate it. Um, and the only reason for that is because the cable that came with the Cam Link literally worked for one day and then died. Um, so I'm kind of annoyed by that, but anyway, it is what it is. Hopefully it doesn't fall over. Okay, so that's that out of the way. Um, the other thing I wanted to just to chat about quickly before we get stuck into the core of today is that in case you **[05:22]** missed it, WordPress.com recently released something that I've been involved with since around Word Camp US. Uh we are as far as I know the first WordPress hosting company to support MCP. If you have watched any of my live streams you'll know what MCP is. Um essentially you can uh let me just see here. No let me just **[05:54]** see if I can get a link to the docs. Uh here we go. If you have any any sites or anything hosted on WordPress.com, you can enable it in your account, you can connect it up and then you can just use the MCP tools. Uh what I'm very quickly going to do here is just open up this window on the side in case I need to log in. Um I don't think I will need to log in. No, I don't need to log in. So this is what it looks like. Uh you essentially **[06:25]** have all of these tools available on WordPress.com um by default when you enable MCP access. You can enable or disable specific tools. You can also select specific sites to disable MCP access. Um so it's quite a bit of control that it gives you over all the sites that you have on your WordPress.com account. Once you have all this enabled, which is literally selecting a toggle, it's that quick. Enable access, select toggle, done. Um, **[06:59]** you can then configure your client. We have some configuration steps for a couple of clients already. Claude, desktop, cursor, VS Code. I'll do the VS Code one. It gives you the the JSON file to copy. You can just copy that. Um, and then if we go over here to VS Code, you'll see I have this set up already. So, there's my WordPress.com MP. I'm going to change this um to WordPress.com MCP and you'll see it's literally it's the same npx command that I've been using for all the other MCP stuff uses the same there's a slightly different MCP remote package **[07:30]** that it uses. Um what's cool about this and I mentioned this in my word camp US talk is this uses oorthth by default. So I am already connected. So it's not going to trigger it now. But once I start the server, if I'm not already authenticated, it'll trigger the oorthth authentication for WordPress.com. It will ask me to log into my WordPress.com account. And then once it's enabled and authenticated, then I can make those requests. So there's no fiddling with user passwords or or application passwords or any of that **[08:00]** kind of stuff, which is very, very cool. So everything is nice and secure. Um, and then it just works. So, I can open up a chat window in my agent. I did this yesterday. Uh, let's go to a new window. And I can say, um, check if my jonathan bossinger.com site has any any pending updates, for example. Um, and then they I think there's a tool **[08:31]** that'll check that for me. I'm not quite sure, actually. I'm just randomly trying this. Um, so what it should do now is it should ping word.commcp. I might need to tell it that site is connected on the word.commcp stuff. Uh, no, it's not doing what I wanted to. Okay, let's just stop here. Um, let's do this way. say check if my main Jonathan wait Jonathan Bassenger site on my WordPress.com **[09:02]** account has any pending updates. So you still need to give the chat agent like decent context. So now I'm telling it WordPress.com. Um, it should now try and use the MCP tool. No man. Okay, let me stop this and let me change **[09:34]** this to and let's go check if my main WordPress.com site messenger has any pending updates. Use the MCP tools. Let's give it a bit more context. What up? What? Where? Where? Where did There it is. Okay, come now. Come on, AI. Find the tools and use them. It would be sucky if it failed down in this live stream. **[10:10]** This is because um this is probably because I've got this open. So, let's try this again. Close this down. Close. Close that. Run it again. So that's one of the downsides about the MCP stuff is if you have a file open in something like VS Code, then it thinks that's the context. It's doing it again. **[10:44]** This is working perfectly fine the other day. I wonder if it's chat GBT5 mini being stupid. Um, let's go back to 40. Create new window. This is running. Yes. Okay. Let's do it this way. Use the available WordPress.com MCP tools to check if my Jonathan Basser **[11:17]** com site has any pending updates. Why is this thing being dumped? That's interesting. **[11:49]** All right, hang on. Right. Select tool. They're not the tools aren't available to the chat. What is that? Okay. **[12:24]** That's interesting. Wonder if something has changed. Super models. So we can use **[12:54]** Huh? Getting us. Wonder why that is. That's mildly annoying. This was working perfectly yesterday. Oh, you know what this might be? This is This might be that. **[13:26]** Hang on. This might be the node the node thing. There's a Yeah, there's a I keep forgetting about this. There's an issue with um there's an issue with MCP that if you have multiple versions of npx installed then it gives you some grief. Um so then the best thing to do is to put in the path. **[13:56]** So let me do that. Check here after the works. Oh, this music is epic. Um, let's just close this. This music is almost too epic for me. **[14:32]** There we go. Okay. And then I want to just create a log file just so that we get what's going on there. But I think I think this is the problem. Okay. Uh it's weird that it connected though. Let's try again. **[15:07]** Let's restart. Okay. Looks like it's all good now. So, let's see if chat can access this. There we go. All right, that was weird. Okay, so multiple multiple NPX versions set the path. It's in the docs. Uh let's try that again. So, **[15:38]** um, check if my main webpress.com site janbosinger.com has any pending updates. And now it should work. Yay, it found the tool. **[16:10]** Okay. Include updates. Checking the plugins. Okay. So, currently it only checks plugins. It doesn't check WordPress updates, which makes sense because WordPress.com manages updates for you. Um, but anyway, those are the kind of things you can do. So, there we go. Angie needs updating. Dializer plugins and themes updating. WordPress bet needs updating. Currently, all of the tools available are readonly tools. So, I can't use MCP to push updates yet. Um, that is still **[16:43]** coming. Basically, right now it's available for people to use. So, if you have a WordPress.com account and you want to play with this and you want to take this out, give it a bash, give it a try. You literally log into your account, go to your profile page, click on the MCP icon, enable MCP tool access for your account, follow the configuration options. There's even there's quick setup options for claw desktop and for cursor. Um, or you can just use the standard uh JSON configuration. Basically, it's the npx with the the two **[17:14]** arguments and then the path if you need it, if you have multiple versions of npx installed or node installed and then it should just work. So, please do give this a bash. Um, I'm kind of excited about it. As you know, I've been on this MCP train for a while now. I've been working on the core stuff. Um, but it's cool to see it start getting implemented in the wild by hosts. It's cool to be implemented by the company I work for. Um, but I hope more hosts are doing this. I've said this before. I believe that um this kind of stuff should be implemented at the server level by the **[17:45]** web hosts um because then users can opt their sites in or out of this as opposed to them having to manage it via custom plugins or whatever the case may be. Um cool. Moving along. Was there something else I wanted to talk about today before I got into I don't think so. So, um, last week I built, was it last week? No, it wasn't last week. It was two weeks ago. Last week I recorded **[18:15]** something else. Uh, two weeks ago I built a plug-in. It was a form plugin if I remember correctly. I think, can't remember now. Um, was it this form submissions plugin? No, this is March, December. Um, flip. I can't remember now **[18:46]** whether I saved that code or not. Whoops. I'm gonna have I'm gonna have to go I'm gonna have to go back to the actual YouTube video. to try and check where I put the code. This is embarrassing. Uh, so yeah, guess what? I guess what types of videos I watch? Marvel movies and **[19:17]** Mortal Kombat. Um, so let me go to my channel and let me go to my videos. Is this video? I really hope that I uploaded this code somewhere. Oh, it was the job application. That's right. **[19:52]** There it is. Okay. So, did I have another site for this that I was testing it on? Very possibly. And very possibly I deleted it. Um, okay. So, let me delete this site. Come on. Let's create a new site. **[20:24]** Create a shiny new site. Uh, let's go job applications. testing. Uh I want to use custom domain. I want to enable HTS. All right. **[20:58]** Okay, let's uh pull the code. No, that wasn't what I wanted. **[21:33]** That's what I want. And then let's open up the site. Somewhere along the line I zoomed in on this window as well. Let's zoom this out. Okay. **[22:17]** All of these extra files I probably need to clean up at some point. But anyway, uh do we have Yeah, we do have build stuff. So, we need to install that. Think we had PHPs installed on here as well. I'm pretty sure one of those **[22:47]** deprecations is like it's using all packages which is kind of annoying. Should probably fix that at some point too. Wonder if we could use AI to fix those deprecations. H I have composer stuff installed. Yes, PHPCs. Okay, that's what I thought. **[23:17]** Okay, cool. Um, all right. So, what I did then was let's install plug and check. I should have should have activated it. Anyway, I'll do that manually. Um, **[23:48]** to look over I'm having to look over my microphone to see my taskbar in case you're wondering why I'm stretching my neck like an idiot. Allow Brave browser helper GTU to find devices on local networks. No, unless it's this thing. Is it this thing? No, it's not. So why you ask me to do that? Stupid. Um, okay. So, let's activate that. We don't need the plugin activated to check it, I don't think. **[24:18]** Okay. So, the goal today is to see what happens if I do multiple issues with multiple pull requests for for all the different um plug-in check areas that come up because if you remember from two weeks ago, there was a couple of them. I don't know why I'm looking there because camera's there. I still haven't gotten used to my camera being up there. Um, there's nobody to chat anyway, so I'm just talking to myself. Oh dear, just realized I'm crazy. I talk to myself. Um, so let us enable all of **[24:49]** these and let's select the plugin and let's check it. Now, one thing I wish the plug-in check plug-in did is allow me to export this to a file somewhere. I know you can run it in a WPCLI command which I could export to a text fold, but it would be cool to actually have this as like an Excel, like a CSV maybe. Um, anyway. **[25:22]** Okay, while that's checking its thing, I'm going to start opening up some issues. What's this pull request here? Show form layout and block editor preview. Oh. Did I review that? I have no idea. Did I Did I create that during the stream and I forgot that it was there? I must have done **[25:54]** I must have opened I don't remember opening these in the stream so I must have done them afterwards. Um okay. So, let's check let's check let's check let's check let's check this let's check this show form layout let's go and check the pull requests um oh wait I'm not I need to open up um I need to open up the plug-in code so that one **[26:28]** no get repositories what do you What are you talking about? Oh, cuz I'm opening the site, not the plugin. Close. Open. Where are we? Vio one content plugins application. There we go. **[27:00]** That's better. Okay, here we go. Pull requests. Here we go. Show show form layout. Let's check that out. Uh, stash changes. Actually, let's cancel that. **[27:32]** It's fine. I feel like I worked on this. I was doing some secure file storage stuff after the stream. It's not really secure, but it makes it slightly more secure. Um, **[28:03]** okay. Let's go back here. Let's go back to pull request. Let's check it out. Let's see what that looks like. Okay. Okay. So, let's go npm bold content plugins. There we go. Let's see what that does. **[28:35]** Close this. Now, I've got another window open. I'm going to close these as well. All right. Okay. Let's go to the post. It doesn't look like Oh, I don't have the I don't have the plugin installed. Got installed. Don't have it activated. Okay. Okay. Let's do it again. **[29:08]** See, this is why I don't like working on projects over a couple of weeks in a live stream because I forget what I've done two weeks ago. Okay, there we go. Form looks good there. Preview the form. Oh, it's running to save it. Okay, that looks fine. I'm going to merge that. **[29:49]** So I feel like I did have there was another pull request and I think I did this after the stream where basically I rename the file with a UU ID so it's more difficult to guess the file name and then I replace the link inside the the listing um which appears under job applications with a function that like hides the link. Um so it's still not super secure, **[30:21]** but it's a little bit better. Uh I'm not planning on submitting this plugin anywhere. This is just, you know, what I decided to do to try and make it a little bit more secure. Uh in case anybody stumbles across this. Um, okay. So, let's get back to what we were doing earlier, which was plug-in check, which I just closed. Okay, back to plug-in check. Run the plugin check checks happiness. Okay. **[30:54]** So, what I'm going to do today is get all the common ones, log them, let co-pilot go off and run, see how much it gets done in an hour. I might do them one at a time and then let co-pilot run. Uh, and then we'll review them and then we'll see what happens. Okay, the get in north thing I'm fine with. Um the verify sh application detected. **[31:26]** Um I'm going to just worry about those things later. Okay, let's Okay, this one is one that I actually the use of function move upload file is forbidden. Um, you're probably supposed to use some some PH some some WordPress file. There we go. WordPress file system. Okay. So, let's start with this one. **[32:00]** So issue what I'm going to **[32:34]** One of the coding standards contains something about **[33:04]** this definitely a PHPCS thing. Okay. So there is internal WordPress file uploads. **[33:45]** Yeah. Okay. out of that one. Sign copilot to it and off we go. Okay, let's do the next one. Plug and check error. Check error. **[34:21]** I want to just see how these things how it works. And it's like these atomic atomic things. **[35:30]** sure there's a quick way to do this specifically side by side. That might help. What I'm thinking would be cool is there was a way that I could create like an MCP implementation that could when you click on a link here submits it to your GitHub repository. **[36:03]** Um that would be kind of cool. Okay, those two the same. So, I'm going to leave that. I'll leave that for now. Let's do this one. **[36:43]** I can't spell. That's just going to leave that **[37:25]** I didn't assign those others to co-pilot, did I? Okay, so there's six there. Let's have a look at what they look like. **[37:57]** Some of them already have pull requests. They're busy working on them. None of them are ready yet, are they? They're not work in progress at the moment. So, the more I think about this, the more I'm thinking, what if there was a way that I could like like export all this information into individual markdown files that groups **[38:33]** groups them line by line. and essentially gives me like for line 37 for example. **[39:03]** Like it would be cool if plug-in check gave me a CSV that I could wonder if plug-in check has **[39:40]** Yes, it does. I wonder if the PCLI subcomand does it. Of course that does that. **[40:11]** Okay. So plugin check format CSV. That should do it. **[41:06]** Perfectly plugin check plugin check. Would JSON be better? Jason, I can give to an agent. I think JSON might be better. Um, can I specify an output path? **[41:40]** Doesn't look like it. What I can do is I can pipe to that **[42:15]** I think it needs to be double. That should have worked. Oh, it did work. Okay. **[42:51]** So this is going to be some long thing. Yeah. Okay. Maybe CSP is better. Okay. No, wrong one. **[43:24]** Yeah, that's a bit better. So now what I can do is I can spin up a sub agent and say scan through the checks for each file group by the line. Group the areas by a line and prepare uh GitHub markdown issue descriptions, issue titles and descriptions. **[43:58]** Okay, let's try that. Um, okay, let me uh my brain is my brain is firing now. So, let's go new folder and let's go checks. Let's move checks to checks. Yes. And then let's go. It would be content plugins JB job application checks. Okay. Now I'm going to fire up. **[44:31]** Now I'm going to install the GitHub copilot coding agent. I think I have it installed. CLI uh which I think you just run copilers. I think I have this installed already. I think I installed it this week. No, I didn't install it. Okay. Um it's this one. So, let's install **[45:11]** I don't know if you can hear the music, but I can. And it rocks. Okay. I don't care about MCP service. That's fine. Yes, I trust the files in this folder. Okay, so scan through the checks.csv **[45:44]** file, which is a list of errors for this plug-in. Group the errors by file line and line number and prepare separate markdown files **[46:15]** to be used to create GitHub issues. **[46:56]** Now the reason I went with markdown box is because in VS Code something stuck in my teeth now. Um what is this doing? bunch of Python. Okay, let's hope it handles it. Um, in VS Code using the pull request um, extension, you can create issues **[47:29]** and when you create an issue, it's in markdown format. So, what I'm hoping this thing is going to do It's created a bunch of issues for me. Was it not able to do the thing? **[48:02]** Do I even have Python installed? I don't think I even have Python installed on this computer. This is See here. Oh, I do. Okay. Come on. That's fine. Let's try that again. **[48:57]** Okay, that's good. So, let's see what we got here. So, now if we go here, got a bunch of issues. Cool. So now I should be able to do that. Correct. And save. **[49:28]** Hang on. Let me just see what Click on the tick create position in the top right of the editor. This one. Okay, that should create it. That's kind of cool. I don't know if it's going to work. I'm going to do Okay, so those are the first two. The generic stuff **[50:01]** has already been logged, so I'm going to leave that. So, let's go back to Do I have another window open? Yeah, there it is. Let's go back to my issues. Yeah, it's creating them. I kind of like that. I wish there was a way I could just submit it. I probably could using GitHub MCP. I could connect the GitHub MCP to **[50:32]** C-Pilot and tell Copilot to run through the issues and just submit them. I could do that. That's kind of cool. Okay. Um, so those are there. So let's assign that to co-pilot. And let's assign that to co-pilot. And then let's see what it's done. I got about 10 minutes left of my hour. I might go over the hour a little bit. The camera seems to be handling. I'm going to check the temperature of the camera. **[51:07]** doesn't seem too hot. So, I think I might be okay. Um, okay. So, let's see. So, those are the issues. Um, let's see how many pull requests we've got so far. Got a bunch of pull requests. They all look they all look good. Um, let's start with for some reason. Yeah, 13 was the first one. **[51:40]** if you handle upload. Okay, that seems to be good. That seems to be good. Whether it's working is a whole different conversation. I'm just going to merge these things now. I'm going to yolo and merge these things and just see what happens. It's wild people. Okay, ready for review merch. **[52:14]** I am going to look through them. See what it's doing. Core file system. Chod file system. Okay, that seems to be okay. Doesn't seem to be doing I mean I don't I don't use the file system. I've never used the file system class, but that looks good. Doesn't seem to be doing anything funny. So, I'm going to merge **[52:44]** that. Look, I do think when it comes to WordPress, if it's like something that WordPress has been doing for a number of years, resolve conflicts. Okay, I think it's just taking that out. **[53:16]** Take that. I think I might need to rebase some of these before I measure them. Okay, that looks good. Merge. Okay, so then let's go to that one. **[53:47]** Let's do a Can you do a rebase here? Let's go. Ready for review. Doesn't have any conflicts. That's fine. Okay. So, it's using the file system. Get contents. That seems fine. Yeah, it all looks good. Okay, let's merge that. Okay. **[54:20]** Um, can see what's happening here. Verify nons blah blah blah. Okay, let's look at the code. If not, it gets not sanitize. Yeah, that's fine. I don't think that's actually needed, but I honestly don't think it matters. Um, **[54:54]** ready for review merge. Okay, it's probably exactly the same story. Yeah, it's fine. And I honestly feel like these kind of things are where AI is very very cool because it's a very specific scoped problem. Um **[55:25]** I think you can set up like instructions for your agent per repository. I need to do that as well at some point. Maybe that's the next thing I look into to like really improve this. But if it's really scoped and really specific, then I think the AI does really really well because then it's just matching, you know, common stuff that it knows. So again, it gets back to know the tools, know how to test. Um, **[55:57]** so this one is just fixing a DS store issue. I'm totally fine with that. Such a small thing. Let's check the next one. Fix your C and read me. Oh, that's that's that's a bad error. **[56:28]** So, that's actually not an error. That's actually this issue. Create a readme.txt txt because that's what WordPress requires. Um, so let's assign that to Copilot while we pull trunk and see if some of those errors are gone. Uh, what I'm also going to do is I'm going to copy this and open it up here so that I can see what I'm doing. Um, okay. So, let's go back here. **[57:00]** Let's go back here. Um, yeah, I'll come back to that later. That was quite a fun little experiment that I want to explore a bit more. Um, so let's go back to here. Let's go back to checking out main. Um, that's fine. Let's go back here. Let's pull **[57:30]** all the changes to main. Okay, so now we should have the latest version of this code. Let's see what plug-in check says. We should see a bunch of less errors now. Let's make sure. **[58:09]** Okay, I think we're definitely seeing less. And it hasn't finished. I think we're definitely seeing less errors. uh some of those areas were at line 55 and stuff I think. So I feel like it's fixed it's definitely fixed those issues. Um **[58:42]** and I feel like if I just continue this process eventually we'll get there which is great. Um yeah now let's see if it still works. So, let's go over to Hello World. There is the form that has been saved. Let's go on to the front end. Let's submit my data. **[59:23]** Um, I think I still have my resume on my desktop somewhere. Not seeing it there. My documents maybe downloads. I'm going to have to um have to go off screen and find my resume again. **[60:09]** Okay, there it is. Let's just download a copy of this. Okay. Failed to set permissions. Crap. We have a bug. **[60:40]** That's beautiful. So, let's see here. Yeah. Damn it. It's the day today. 17th. Yeah, there we go. Rewarding undefined variable new file path line 139 file directory D. Okay. So, let's let's give co-pilot that **[61:43]** Uh, let's do that. Let's see if I can handle it. While that's happening, **[62:15]** let's go and check if that other pull request is done. Yeah, there we go. Okay, so let's see what it's done. Oh, here we go. Plugin read me. See, that kind of stuff it'll probably handle no problem. So let's merge that and then let's pull that code. **[62:49]** Okay. And then let's run plugin check again. So now I should have some of these issues this these issues fixed. He's reading issues. Um, so I guess the question is if I was writing this all myself, how much better or worse would it be? Well, if I think about it, I spent what **[63:21]** an hour and a half last Friday, two weeks ago, Friday. I've spent about an hour today. I don't think I would have written it myself in that amount of time. But I definitely would have done some things differently. I think what I what I would have liked to have done is maybe start the plug-in using create block. create block. Yes. So that the block structure is correct because I remember the code there is a bit old. **[63:52]** Um and then what I'd probably do is I'd probably use the AI but build it feature by feature. So I'd build the block first and then I'd build the PDF upload and I'd fix that and iterate on that. Um, so it might take longer, but I definitely feel like a lot of the stuff I'd be able to get the AI to do for me and I wouldn't have to do the research myself. So, for example, the file upload stuff. I haven't worked on file upload stuff in WordPress for so **[64:22]** long I've forgotten how it all works. So, I'd have to go and read up about it and, you know, go and look at old code and that kind of thing. So, getting that through C-pilot would definitely speed me up. Um, it certainly is interesting. Uh, so I'm definitely liking the copilot experience. I I do feel like what would be cool is to add something to plug-in check or **[64:52]** build some kind of automation that you can run the plug-in checks and then generate the markdown files and then submit those to GitHub so that you could then assign it to GitHub cap automatically. That would be kind of cool. Um so I may or may not look into that. in future streams. I don't know. I'll see how I feel. I'm really what I'm really interested in doing is improving the use of the plug-in check plugin, improving how developers use it in their development workflows because AI **[65:24]** development is definitely becoming more and more of a thing. So, the better we get at showing people how to use the tools that checks the code, so PHPCS and the front-end JavaScript testing stuff, which I haven't really looked into, and plug-in check tests and all that kind of stuff. The more we can do that, the easier it is for developers who want to submit plug-in ideas that they've AI coded to get approved because they're running it through plugins check and various other things, the better for everybody. So, that's kind of where my focus is with this stuff. Um, **[65:57]** yeah. So, it's kind of kind of interesting to me. So, I'm going to spend a bit more time on this in the coming weeks probably. Uh, there you go. I've only got one issue in my readme now, and that's because it's got to test it up 6.4. Uh, but that's a bunch of issues gone, fixed through AI. Um, so I'm going to keep I'm going to keep noodling on this. I'm going to keep working on this. Uh, I think next week I'm going to try and see if I can build some kind of automation for this. Um, using GitHub Copilot, GitHub's MCP, **[66:29]** maybe document the process or build some kind of tool that will do it for maybe get a GitHub extension, something, I don't know. uh not GitHub extension, VS Code extension. Um because I think that could be kind of cool. All right, I'm going to call it a day. There is nobody on the stream, so I'm literally talking to myself and anybody from YouTube land who's watching this on YouTube. Um but I'm going to call it a day. Thank you so much. If you are watching on YouTube to watch that you are watching. Um yeah, if you want to see more videos like this, hit subscribe, hit like, share a comment. I all of it. I don't **[67:01]** care. Have a good one. Bye.