[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GKMM6EN10690PSD7025ZJ6":3,"skill-same:01M6GKMM6EN10690PSD7025ZJ6":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M6GKMM6EN10690PSD7025ZJ6","roots-reviewing",null,"Use when asked to review or audit code in a Roots-stack WordPress project - \"review my diff\", \"check before the MR\", a pre-merge or convention audit of providers, hooks, Blade, blocks, post types, routes, Livewire, assets and security. Read-only, fixed report template. For understanding a project use roots-onboarding; for fixing a bug use roots-debugging.","hekivo\u002Fkivo-wise","hekivo","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F278159278?v=4","01M6GKH8S3Z4CAJ9RRR607G1WJ","Hekivo","01M6GKH8XNM7HTVF4DC86MA8RG",14,"MIT","https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fplugins\u002Fkivo-wise\u002Fskills\u002Froots-reviewing\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"roots reviewing","diff","audit code","read-only","types","post","project","hooks","only","review my diff","review","use","check","template","livewire","stack","audit","code","debugging","wordpress","2026-11-10 10:12:30",false,"---\nname: roots-reviewing\ndescription: Use when asked to review or audit code in a Roots-stack WordPress project - \"review my diff\", \"check before the MR\", a pre-merge or convention audit of providers, hooks, Blade, blocks, post types, routes, Livewire, assets and security. Read-only, fixed report template. For understanding a project use roots-onboarding; for fixing a bug use roots-debugging.\n---\n\n# Roots reviewing: convention audit by profile\n\nReviews a diff or a folder against the conventions of the active profile and reports findings in one fixed template. It reads and reports; it does not edit, commit or push.\n\n## When to use\n\n- Before opening or merging a change request, or when the user asks for a review or a health check.\n- After generating code (a block, a provider, a component) to confirm it follows the project's pattern.\n- For a second, independent read: run the `acorn-reviewer` agent on the same scope.\n\n## Inputs required\n\n- Scope: files, a folder, or the diff against the default branch (`git diff \u003Cdefault branch>...HEAD --stat` to list it). Default: everything changed on the branch.\n- Active profile and app path from the session context or the detector JSON (`scripts\u002Fdetect-roots-project.mjs`).\n- Project rules: `AGENTS.md`, `.ai\u002F`, `.claude\u002Frules\u002F`. A project rule overrides any default below; cite it when it decides a finding.\n- Runner placeholders for any command you suggest: `{{runner.test}}`, `{{runner.cache}}`, `{{runner.acorn}}`.\n\n## Procedure\n\n1. **Fix the scope and the profile.** List changed files; group them by area (providers, views, blocks, post types, routes, Livewire, assets, config, tests).\n2. **Load the project rules** and note anything stricter than the defaults (language of code, commit rules, native-first gates).\n3. **Apply the checks for each area that appears in the scope.** The full greppable checklist is in `references\u002Fchecklists.md`; the profile decides which checks apply:\n\n   | Area | `sage-theme` | `acorn-mu-plugin` | `radicle-app` |\n   | --- | --- | --- | --- |\n   | Theme provider | `ThemeServiceProvider` extends `Roots\\Acorn\\Sage\\SageServiceProvider` | not applicable | not applicable |\n   | Other providers | extend `Illuminate\\Support\\ServiceProvider`; registered in `config\u002Fapp.php` or `functions.php` | registered where the boot code lists them (configurator, `config\u002Fapp.php`, composer extra) | registered in `composer.json` `extra.acorn.providers` |\n   | Post types | Poet config or the project's classes | classes or Poet, as the project does | `config\u002Fpost-types.php` (`roots\u002Facorn-post-types`) |\n   | Blocks | ACF Composer class + Blade view | ACF Composer class + Blade view | native `block.json` + Blade render; ACF checks do not apply |\n   | Livewire | only if installed | version 4 rules (see `acorn-livewire`) | only if installed |\n   | Tests | project suite | project suite | Pest |\n\n4. **Native-first check.** For every custom class or hook in the diff, ask which native WordPress \u002F ACF \u002F Acorn mechanism covers it and whether the diff says why not. Missing reason on a duplicate of a native mechanism is a finding.\n5. **Security and escaping pass** on every view and endpoint touched (checklist section \"Security\").\n6. **Run the tests the scope implies** (`{{runner.test}}`) when the user allows it; a failing test is a Critical finding with the output line.\n7. **Report with the template below.** Every finding has file:line, the rule, and the skill that explains it. Count findings by severity. Acknowledge what is done well.\n8. **Do not fix** unless the user asks afterwards; then hand each finding to the owning skill.\n\n### Severity\n\n| Severity | Meaning | Examples |\n| --- | --- | --- |\n| Critical | Breaks behaviour, security or data | unescaped output, missing `permission_callback`, double escape that corrupts a URL, provider never registered, raw SQL without `prepare` |\n| Improvement | Convention or maintainability | hooks outside `boot()`, logic in a Blade view, custom code duplicating a native mechanism |\n| Good practice | Worth keeping | tests added, native hook used with a verified reason |\n\n### Report template (fixed)\n\n```markdown\n## Review: \u003Cscope>\nProfile: \u003Ckind> at \u003Cpath>   Rules read: \u003Cfiles>\n\n### Critical\n- **\u003Cfile>:\u003Cline>** - \u003Cissue>. Rule: \u003Crule>. See `\u003Cskill>`.\n\n### Improvement\n- **\u003Cfile>:\u003Cline>** - \u003Cissue>. Rule: \u003Crule>. See `\u003Cskill>`.\n\n### Good practices\n- \u003Cobservation>\n\n### Not checked\n- \u003Carea and why, for example \"Livewire: not installed\">\n\n### Summary\n\u003CX> critical, \u003CY> improvements, \u003CZ> good practices. Verdict: \u003Cready | ready after fixes | needs rework>.\n```\n\n## Verification\n\n- Each finding points to a real line you read; no finding is inferred from a file name alone.\n- Checks for packages the profile lacks (ACF on `radicle-app`, Livewire when not installed) are listed under \"Not checked\", not reported as violations.\n- The report uses the template exactly and states the profile.\n- Suggested commands use runner placeholders; none runs `wp`, `composer`, `php`, `yarn` or `npm` bare.\n\n## Failure modes\n\n| Symptom | Cause | Fix |\n| --- | --- | --- |\n| ACF findings on a project without ACF | Applied the `sage-theme` checks to `radicle-app` | Re-read the profile; move them to \"Not checked\" |\n| \"Provider not registered\" false alarm | Registration lives in `composer.json` extra or a configurator | Check the profile's registration place with `scripts\u002Finventory-project.mjs --app \u003Cpath>` |\n| Review flags a project convention as wrong | Project rule stricter or different from the default | Follow the project rule; cite it |\n| Findings without line numbers | Reviewed the summary, not the file | Open the file and cite the line |\n| Verdict \"ready\" but tests were not run | Skipped step 6 silently | State that tests were not run |\n\n## Escalation\n\n- Disagreement between a project rule and a native mechanism: report both and ask the user which wins.\n- A suspected security issue in code outside the scope: report it separately, do not widen the review silently.\n- Large diffs (over about 40 files): ask whether to split the review by area and run `acorn-reviewer` per area.\n\n\u003C!-- verified: refs\u002Froots-sage\u002Fapp\u002FProviders\u002FThemeServiceProvider.php:7 — extends SageServiceProvider; refs\u002Froots-acorn\u002Fsrc\u002FRoots\u002FAcorn\u002FSage\u002FSageServiceProvider.php:9 — SageServiceProvider extends Illuminate ServiceProvider; vendor\u002Filluminate\u002Fview\u002FCompilers\u002FBladeCompiler.php:124 — echo format e(%s); vendor\u002Filluminate\u002Fsupport\u002Fhelpers.php:124 — e() double-encodes by default; vendor\u002Flog1x\u002Facf-composer\u002Fsrc\u002FConsole\u002FBlockMakeCommand.php:18 — acf:block; src\u002FConsole\u002Fstubs\u002Fblock.localized.stub:146,156 — with() and fields(); upstream design-system checks (R-css-vars, R-component-reuse, R-nl2br) dropped as project-specific -->\n","# Roots reviewing: convention audit by profile\n\nReviews a diff or a folder against the conventions of the active profile and reports findings in one fixed template. It reads and reports; it does not edit, commit or push.\n\n## When to use\n\n- Before opening or merging a change request, or when the user asks for a review or a health check.\n- After generating code (a block, a provider, a component) to confirm it follows the project's pattern.\n- For a second, independent read: run the `acorn-reviewer` agent on the same scope.\n\n## Inputs required\n\n- Scope: files, a folder, or the diff against the default branch (`git diff \u003Cdefault branch>...HEAD --stat` to list it). Default: everything changed on the branch.\n- Active profile and app path from the session context or the detector JSON (`scripts\u002Fdetect-roots-project.mjs`).\n- Project rules: `AGENTS.md`, `.ai\u002F`, `.claude\u002Frules\u002F`. A project rule overrides any default below; cite it when it decides a finding.\n- Runner placeholders for any command you suggest: `{{runner.test}}`, `{{runner.cache}}`, `{{runner.acorn}}`.\n\n## Procedure\n\n1. **Fix the scope and the profile.** List changed files; group them by area (providers, views, blocks, post types, routes, Livewire, assets, config, tests).\n2. **Load the project rules** and note anything stricter than the defaults (language of code, commit rules, native-first gates).\n3. **Apply the checks for each area that appears in the scope.** The full greppable checklist is in `references\u002Fchecklists.md`; the profile decides which checks apply:\n\n   | Area | `sage-theme` | `acorn-mu-plugin` | `radicle-app` |\n   | --- | --- | --- | --- |\n   | Theme provider | `ThemeServiceProvider` extends `Roots\\Acorn\\Sage\\SageServiceProvider` | not applicable | not applicable |\n   | Other providers | extend `Illuminate\\Support\\ServiceProvider`; registered in `config\u002Fapp.php` or `functions.php` | registered where the boot code lists them (configurator, `config\u002Fapp.php`, composer extra) | registered in `composer.json` `extra.acorn.providers` |\n   | Post types | Poet config or the project's classes | classes or Poet, as the project does | `config\u002Fpost-types.php` (`roots\u002Facorn-post-types`) |\n   | Blocks | ACF Composer class + Blade view | ACF Composer class + Blade view | native `block.json` + Blade render; ACF checks do not apply |\n   | Livewire | only if installed | version 4 rules (see `acorn-livewire`) | only if installed |\n   | Tests | project suite | project suite | Pest |\n\n4. **Native-first check.** For every custom class or hook in the diff, ask which native WordPress \u002F ACF \u002F Acorn mechanism covers it and whether the diff says why not. Missing reason on a duplicate of a native mechanism is a finding.\n5. **Security and escaping pass** on every view and endpoint touched (checklist section \"Security\").\n6. **Run the tests the scope implies** (`{{runner.test}}`) when the user allows it; a failing test is a Critical finding with the output line.\n7. **Report with the template below.** Every finding has file:line, the rule, and the skill that explains it. Count findings by severity. Acknowledge what is done well.\n8. **Do not fix** unless the user asks afterwards; then hand each finding to the owning skill.\n\n### Severity\n\n| Severity | Meaning | Examples |\n| --- | --- | --- |\n| Critical | Breaks behaviour, security or data | unescaped output, missing `permission_callback`, double escape that corrupts a URL, provider never registered, raw SQL without `prepare` |\n| Improvement | Convention or maintainability | hooks outside `boot()`, logic in a Blade view, custom code duplicating a native mechanism |\n| Good practice | Worth keeping | tests added, native hook used with a verified reason |\n\n### Report template (fixed)\n\n```markdown\n## Review: \u003Cscope>\nProfile: \u003Ckind> at \u003Cpath>   Rules read: \u003Cfiles>\n\n### Critical\n- **\u003Cfile>:\u003Cline>** - \u003Cissue>. Rule: \u003Crule>. See `\u003Cskill>`.\n\n### Improvement\n- **\u003Cfile>:\u003Cline>** - \u003Cissue>. Rule: \u003Crule>. See `\u003Cskill>`.\n\n### Good practices\n- \u003Cobservation>\n\n### Not checked\n- \u003Carea and why, for example \"Livewire: not installed\">\n\n### Summary\n\u003CX> critical, \u003CY> improvements, \u003CZ> good practices. Verdict: \u003Cready | ready after fixes | needs rework>.\n```\n\n## Verification\n\n- Each finding points to a real line you read; no finding is inferred from a file name alone.\n- Checks for packages the profile lacks (ACF on `radicle-app`, Livewire when not installed) are listed under \"Not checked\", not reported as violations.\n- The report uses the template exactly and states the profile.\n- Suggested commands use runner placeholders; none runs `wp`, `composer`, `php`, `yarn` or `npm` bare.\n\n## Failure modes\n\n| Symptom | Cause | Fix |\n| --- | --- | --- |\n| ACF findings on a project without ACF | Applied the `sage-theme` checks to `radicle-app` | Re-read the profile; move them to \"Not checked\" |\n| \"Provider not registered\" false alarm | Registration lives in `composer.json` extra or a configurator | Check the profile's registration place with `scripts\u002Finventory-project.mjs --app \u003Cpath>` |\n| Review flags a project convention as wrong | Project rule stricter or different from the default | Follow the project rule; cite it |\n| Findings without line numbers | Reviewed the summary, not the file | Open the file and cite the line |\n| Verdict \"ready\" but tests were not run | Skipped step 6 silently | State that tests were not run |\n\n## Escalation\n\n- Disagreement between a project rule and a native mechanism: report both and ask the user which wins.\n- A suspected security issue in code outside the scope: report it separately, do not widen the review silently.\n- Large diffs (over about 40 files): ask whether to split the review by area and run `acorn-reviewer` per area.\n\n\u003C!-- verified: refs\u002Froots-sage\u002Fapp\u002FProviders\u002FThemeServiceProvider.php:7 — extends SageServiceProvider; refs\u002Froots-acorn\u002Fsrc\u002FRoots\u002FAcorn\u002FSage\u002FSageServiceProvider.php:9 — SageServiceProvider extends Illuminate ServiceProvider; vendor\u002Filluminate\u002Fview\u002FCompilers\u002FBladeCompiler.php:124 — echo format e(%s); vendor\u002Filluminate\u002Fsupport\u002Fhelpers.php:124 — e() double-encodes by default; vendor\u002Flog1x\u002Facf-composer\u002Fsrc\u002FConsole\u002FBlockMakeCommand.php:18 — acf:block; src\u002FConsole\u002Fstubs\u002Fblock.localized.stub:146,156 — with() and fields(); upstream design-system checks (R-css-vars, R-component-reuse, R-nl2br) dropped as project-specific -->\n",{"name":5,"description":7},"main","4045a2f672c1d4c1b4a5a5712b468c5d73ca6724","plugins\u002Fkivo-wise\u002Fskills\u002Froots-reviewing",0,"https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise","https:\u002F\u002Fhekivo.github.io\u002Fkivo-wise\u002F","https:\u002F\u002Fgithub.com\u002Fhekivo","https:\u002F\u002Fhekivo.dev","2026-11-08 06:10:39",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add hekivo\u002Fkivo-wise --skill roots-reviewing",{"tool":59,"command":60},"bunx","bunx skills add hekivo\u002Fkivo-wise --skill roots-reviewing",{"tool":62,"command":63},"pnpm","pnpm dlx skills add hekivo\u002Fkivo-wise --skill roots-reviewing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fplugins\u002Fkivo-wise\u002Fskills\u002Froots-reviewing\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"references\u002Fchecklists.md","REFERENCE","参考文档",6216,"https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fplugins\u002Fkivo-wise\u002Fskills\u002Froots-reviewing\u002Freferences\u002Fchecklists.md",[74,108,126,146,164,188],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":90,"publishedAt":39},"01M6GKWJDFKQM27HTFXX20QVTP","wp-rest-api","Use when building, extending, or debugging WordPress REST API endpoints\u002Froutes: register_rest_route, WP_REST_Controller\u002Fcontroller classes, schema\u002Fargument validation, permission_callback\u002Fauthentication, response shaping, register_rest_field\u002Fregister_meta, or exposing CPTs\u002Ftaxonomies via show_in_rest.","https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fthird-party\u002Fwp-rest-api\u002FSKILL.md",[80,85],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[91,92,93,94,38,95,37,96,97,98,99,100,101,30,102,103,104,105,106,107],"REST","api","wp rest api","rest api","workflows","authentication","Meta","controller","Bash","shaping","filesystem","schema","show","route","register","with","wp-cli",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":116,"publishedAt":39},"01M6GKWEA5BMJZ2RPPEEJTCC3N","wp-abilities-api","Use when working with the WordPress Abilities API (wp_register_ability, wp_register_ability_category, \u002Fwp-json\u002Fwp-abilities\u002Fv1\u002F*, @wordpress\u002Fabilities) including defining abilities, categories, meta, REST exposure, and permissions checks for clients.","https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fthird-party\u002Fwp-abilities-api\u002FSKILL.md",[114,115],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},[92,117,118,38,95,119,97,91,99,120,121,101,122,30,105,123,124,106,125,107],"wp abilities api","cli","permissions","php","json","node","targets","clients","categories",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":39},"01M6GKWA4GG2BZRFXCR9E73VR7","wp-security-escaping","Use when writing or reviewing code that outputs data, handles input or checks permissions in a WordPress + Acorn project - Blade {{ }} vs {!! !!}, esc_html, esc_attr, esc_url, wp_kses_post, \"&#038; in the URL\", double escaping, sanitize_text_field, nonces, current_user_can, map_meta_cap, permission_callback, $wpdb->prepare, whereRaw, file uploads, escaping ACF values, secrets in .env. For route middleware use acorn-routes-api; for ACF validation use acf-native; for Livewire actions use acorn-livewire.","https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fskills\u002Fwp-security-escaping\u002FSKILL.md",[],[133,134,135,136,36,119,137,97,92,138,33,139,140,104,141,25,142,143,144,145],"security","wp security","wp security escaping","writing","actions","secrets","text","cap","map","middleware","native","URL","routes-api",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":39},"01M6GKW6VVY73BMZ3JNDMR4CWZ","wp-phpstan","Use when configuring, running or fixing PHPStan in a WordPress project that uses Acorn - phpstan.neon, baseline, szepeviktor\u002Fphpstan-wordpress stubs, larastan, level raising, \"Cannot access property on mixed\", get_field() types, paths for app\u002F. For Pint or Mago formatting use testing-wp; for runtime errors use roots-debugging.","https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fskills\u002Fwp-phpstan\u002FSKILL.md",[],[153,154,38,37,155,156,30,25,157,158,159,160,161,162,23,163],"wp phpstan","testing","baseline","access","get","neon","runtime","formatting","app","paths","errors",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":39},"01M6GKW3JRSRS9N112QFA3SEGT","wp-performance","Use when a WordPress page, query or request is slow or needs profiling - TTFB, slow or N+1 queries, Query Monitor, Server-Timing, wp profile and wp doctor, autoloaded options, Redis object cache hit rate, transients, WP_CACHE_KEY_SALT. Adds the runner and Redis notes on top of the official procedure. For Eloquent query design use acorn-data; for PHP type errors use wp-phpstan.","https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fskills\u002Fwp-performance\u002FSKILL.md",[],[171,172,173,38,174,175,176,177,178,179,180,181,182,30,183,184,185,186,187,163],"performance","wp performance","design","query design","official","notes","monitor","doctor","cache","server","redis","page","queries","runner","query","type","timing",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":194,"publishedAt":39},"01M6GKVZN243XQB5QWZ5ZKMG7P","wp-hooks-lifecycle","Use when adding, moving or debugging WordPress actions and filters in an Acorn project - add_action\u002Fadd_filter priority and accepted_args, where a hook belongs (setup or filters files vs a provider boot()), load order (mu-plugins, plugins_loaded, after_setup_theme, init), when Acorn boots per profile, hooks that never fire on Acorn routes, REST or Livewire requests (template_redirect, wp_head), save_post firing twice in the block editor, the_content priorities. For ACF hooks use acf-native; for provider structure use acorn-stack.","https:\u002F\u002Fgithub.com\u002Fhekivo\u002Fkivo-wise\u002Fblob\u002Fmain\u002Fskills\u002Fwp-hooks-lifecycle\u002FSKILL.md",[],[195,26,196,38,197,198,37,137,91,34,33,30,199,200,201,202,203,25,204,205],"lifecycle","wp hooks lifecycle","init","boot","never","filters","files","provider","structure","filter","theme"]