Skip to content

Edit and rename the readme for GitHub#3

Closed
maxme wants to merge 2 commits into
Automattic:masterfrom
maxme:readme-for-github
Closed

Edit and rename the readme for GitHub#3
maxme wants to merge 2 commits into
Automattic:masterfrom
maxme:readme-for-github

Conversation

@maxme

@maxme maxme commented Dec 17, 2013

Copy link
Copy Markdown

No description provided.

@georgestephanis

Copy link
Copy Markdown
Contributor

We're actually going to be writing a separate readme.md for GitHub. The WordPress.org readme has a lot of semantic details that GitHub doesn't need and just clutter it up. We can provide a better one for GitHub usage.

gravityrail pushed a commit that referenced this pull request Jul 24, 2016
Dailymotion shortcode: fix failing test when ID is an empty string
angelablake pushed a commit that referenced this pull request May 28, 2026
…ment

Three CI failures on the first PR #3 push, all rooted in conditional
expressions tripping up static analysis tools that the dev-mode build skips:

1. **i18n-check-webpack-plugin: `msgid argument is not a string literal`** —
   `webpack`'s production minifier folds adjacent
   `cond ? __( A ) : __( B )` into `__( cond ? A : B )`. The folded form
   has no literal `__()` arguments for the static extractor to read, so the
   translation strings "Verified", "Customized", and "Default" all
   disappeared from the `.pot` output. Fixed by resolving each translated
   string into a named variable before the conditional render — the
   minifier can't fold across an assignment boundary.

   - `_inc/screens/settings/site-verification-card.tsx`: extract
     `verifiedLabel` / `notSetLabel` at module scope (the values don't
     depend on render-time state).
   - `_inc/screens/settings/title-structure-field.tsx`: extract
     `customizedLabel` / `defaultLabel` inside the component body (cheap to
     re-resolve per render; closer to use site).

2. **Phan: `UnusedPluginSuppression` + `PhanUndeclaredClassMethod`** —
   `@phan-suppress-next-line` only suppresses the immediately-following
   source line. My `get_settings()` call put the suppression two lines above
   the actual `Jetpack_SEO_Utils::get_front_page_meta_description()` call
   (the ternary spanned multiple lines). Phan flagged the suppression as
   unused and the method call as undeclared. Restructured the ternary into
   `if / else` so the suppression sits on the line directly before the
   method call, matching the pattern already used in `class-initializer.php`.

Verified locally: `NODE_ENV=production pnpm run build` clean (this catches
the i18n fold trap that `jetpack build packages/seo` dev mode skips);
`pnpm run typecheck` clean; `composer phpunit` clean.

Co-Authored-By: Filipe Varela <filipe@automattic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
angelablake pushed a commit that referenced this pull request May 29, 2026
Restores keoshi's original placement (e644739). PR #3's earlier choice to
place the status card alongside the editable input form on the Settings tab
created visible redundancy on JN: the input form's count badge plus its
per-service text inputs already convey which services are connected, so the
adjacent read-only status card was duplicate UI. Surfaced during JN testing
on PR #3.

Changes:

- `_inc/screens/settings/site-verification-card.tsx` → `_inc/screens/overview/site-verification-card.tsx` (`git mv`). Restored the data source to `OverviewResponse['site_verification']` and re-added the "Edit verification" footer button → `#/settings` (using the `Button href` pattern per [[feedback_jetpack_button_link_pattern]], not keoshi's `as={ NavLink }` which doesn't typecheck).
- `_inc/screens/settings/index.tsx`: drop the `<SiteVerificationCard>` import + render. Settings now hosts only the editable input form.
- `_inc/screens/overview/index.tsx`: render the verification card alongside the visibility card in the existing grid.
- `_inc/data/overview-types.ts`: extend `OverviewResponse` with a `site_verification` boolean map (per-service connected state). Deliberately booleans, not the raw codes — Overview only needs "is this connected?"; the actual codes belong behind the Settings endpoint where the input form needs them. Smaller payload, smaller privacy surface.
- `src/class-rest-controller.php` `get_overview()`: emit the new boolean map by reducing the existing `get_site_verification()` codes via `'' !== $code`.

Verified locally: `NODE_ENV=production pnpm run build` clean (catches the i18n fold trap dev builds skip); `pnpm run typecheck` clean; `composer phpunit` clean.

Co-Authored-By: Filipe Varela <filipe@automattic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
angelablake pushed a commit that referenced this pull request May 29, 2026
…tings

UX iteration in PR #3 based on JN testing feedback. Three threads:

Overview: clarity + always-visible discovery
- Drop the "SEO tools active" row from the Site visibility card (tautological — the menu only renders when the module is active).
- Rephrase the search-engines row: "Discoverable by search engines" / "Hidden from search engines".
- Rename buttons honestly: "Manage settings" -> "Manage visibility"; "Edit verification" -> "Manage verification".
- Both buttons deep-link to the matching Settings section via `?focus=visibility` / `?focus=verification`.

Overview: new SEO tools banner + always-visible menu
- Remove the `is_seo_tools_module_active()` gate from `Initializer::add_menu_item()`. Menu always visible.
- New `SeoToolsBanner` component above the Overview grid: on/off state + opposite-action button.
- New `POST /jetpack-seo/v1/seo-tools` toggles the module. Disabling preserves all stored data.
- New `useToggleSeoTools` hook invalidates `jetpack-seo-overview` on success.

Pulls forward project-memory work earmarked for "after PR #5b" — JN testing surfaced the friction sooner.

Settings: new Site visibility section
- Group search-engine discoverability, Sitemap, and Canonical URLs under `<section id="visibility">` heading at the top.
- New `search_engines_visible` field on `GET/POST /jetpack-seo/v1/settings` mirrors WP core's `blog_public`.
- Wrap Verification card in `<section id="verification">` so it's also a deep-link target.

Verified locally:
- `pnpm run typecheck` clean.
- `NODE_ENV=production pnpm run build` clean.
- `composer phpunit` clean.

Co-Authored-By: Filipe Varela <filipe@automattic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
angelablake pushed a commit that referenced this pull request May 29, 2026
Second round of UX iteration on PR #3 from JN testing.

- SEO tools banner is now a `ToggleControl` (was Button). Added optimistic local state so the toggle reflects the user's choice immediately rather than waiting for the overview query refetch to land — that gap was producing a double-click bug where Re-enable needed two presses.
- Visibility section consolidated into one CollapsibleCard containing all three knobs (search engines, sitemap, canonical URLs) as adjacent `ToggleControl`s. Matches the Jetpack Settings convention of grouping related settings inside a single card.
- Sitemap data folded into `/jetpack-seo/v1/settings` (extended with `sitemap_enabled`, `sitemap_url`, `news_sitemap_url`). The `/jetpack-seo/v1/sitemap` REST endpoints + `useSitemap` hook + standalone `SitemapCard` are removed — one round-trip serves the entire visibility section now.
- Deep-link scroll fixed: switched from `useSearchParams` to `useLocation` + manual `URLSearchParams` parsing. `useSearchParams`'s instance is recreated on every render, so a same-pathname re-navigation (Overview to Settings to Overview to Settings) wasn't reliably re-triggering the scroll effect. `location.search` is a stable string and behaves as expected.

Verified locally:
- `pnpm run typecheck` clean.
- `NODE_ENV=production pnpm run build` clean.
- `composer phpunit` clean.

Co-Authored-By: Filipe Varela <filipe@automattic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
angelablake pushed a commit that referenced this pull request May 29, 2026
…efault

Third round of UX iteration on PR #3.

- Deep-link scroll: switched to `document.getElementById` + `requestAnimationFrame` so the scroll fires after the route transition + layout settle. The previous ref-based approach was unreliable through Tabs.Root transitions — refs read null on the first effect firing, and `useSearchParams`'s instance churn meant same-pathname re-navigations weren't re-triggering the effect.
- Inactive-state UX: when the `seo-tools` module is off, dim the Overview cards (`opacity: 0.55`) and dim the Settings cards. Settings also renders a warning Notice above the cards explaining the settings aren't being applied. Banner on Overview stays full-strength as the primary CTA. Controls remain interactive so users can prep configuration that will apply on re-enable.
- Settings now reads `seo_tools_active` from the `/settings` response (new field) rather than firing a second query.
- Post Title Structure card now defaults to closed (was open), matching the other Settings cards' collapsed-by-default convention.

Verified locally:
- `pnpm run typecheck` clean.
- `NODE_ENV=production pnpm run build` clean.
- `composer phpunit` clean.

Co-Authored-By: Filipe Varela <filipe@automattic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
angelablake pushed a commit that referenced this pull request May 29, 2026
`Modules::activate( 'seo-tools' )` defaults `$exit = true` and `$redirect = true`. In a REST context that's wrong twice:

- `$exit = true` calls `exit(0)` AFTER updating `active_modules`. The REST handler never returns its response. The JS mutation sees a malformed/empty body and TanStack invalidation marks the cache stale, but the next refetch reads the same module state from before any client-perceived change actually propagated, and the cached "Disabled" state snaps back into the banner on the next tab visit.
- `$redirect = true` calls `wp_safe_redirect( admin.php?page=jetpack )` from inside the REST request lifecycle, mixing a 302 header into the response.

Passing `false, false` makes activate behave as a plain "flip the option" call that returns to our handler so we can send back the actual `WP_REST_Response`.

Also added a small safety net on the frontend: if the mutation errors (e.g. `Jetpack_Plan::supports()` returns false for the module on this site), the optimistic banner state reverts to the pre-toggle value instead of leaving the UI lying about a state that didn't actually take.

Surfaced during PR #3 JN testing — re-enabling SEO after disabling didn't stick visually on Overview even though Settings looked correct, and the underlying cause was the activate() exit-short-circuit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
dhasilva pushed a commit that referenced this pull request Jun 2, 2026
CI feedback from the initial push surfaced four classes of issues:

- Typecheck failures from the partial scope:
  - Remove the unused "Manage settings" button from SiteVisibilityCard
    (referenced the trimmed JetpackSeoRoutes.Settings constant). The button
    returns in PR #3 when the Settings tab lands as its deep-link target.
  - Update useSimpleMutation onSuccess to TanStack Query v5's 4-arg form
    (data, variables, onMutateResult, context) — v5 added onMutateResult
    between variables and context.

- Project-structure expectations for a new package:
  - Add .phan/config.php so static analysis recognises the package's PHP.
  - Add changelog/.gitkeep so the changelog directory survives release.

- Changelog format:
  - Reset CHANGELOG.md to the keep-a-changelog header only (no pre-release
    `[0.1.0-alpha] - unreleased` block — pending entries live in changelog/).
  - Change the Jetpack-plugin changelog Type from `added` to `enhancement`
    (plugin/jetpack uses major|enhancement|compat|bugfix|other, not the
    keep-a-changelog vocabulary the packages use).

Co-Authored-By: Filipe Varela <filipe@automattic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
dhasilva added a commit that referenced this pull request Jun 2, 2026
#49203)

* Components: add BoundedLayout layout primitive

Add a shared `BoundedLayout` wrapper to `@automattic/jetpack-components` with two MSD-aligned presets — `compact` (660px) and `wide` (1344px) — so products can keep visual alignment across Overview / Settings / Dashboard screens.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Jetpack SEO: introduce package foundation and Site visibility Overview

Adds a new `automattic/jetpack-seo` package that mounts a React admin at
`wp-admin/admin.php?page=jetpack-seo`. Menu item gates on the `seo-tools`
module being active.

This PR is the first of a staged series introducing the Jetpack SEO product;
it ships only the package scaffold and the Overview screen's Site visibility
card. Follow-up PRs add the Settings, Per-post SEO (Content), and AI tabs,
along with their REST writers and respective Overview cards.

New package
- PHP: `Initializer` (admin menu registration + asset enqueue, gated on
  `seo-tools`), `REST_Controller` exposing `/jetpack-seo/v1/overview` only.
- React SPA: `createHashRouter` + `RouterProvider`, `AdminPage` from
  `@automattic/jetpack-components`, TanStack Query for server state.
- Single screen: Overview with a Site visibility card (search-engines
  allowed, sitemap active/inactive, SEO tools active/inactive). All other
  Overview cards land with the PRs that own their underlying features.

Jetpack plugin wiring
- `class.jetpack.php`: load the new package in `late_initialization()`.
- `composer.json`: require `automattic/jetpack-seo`.

Co-Authored-By: Angela Blake <angela.blake@a8c.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* SEO foundation: fix typecheck, project structure, and changelog format

CI feedback from the initial push surfaced four classes of issues:

- Typecheck failures from the partial scope:
  - Remove the unused "Manage settings" button from SiteVisibilityCard
    (referenced the trimmed JetpackSeoRoutes.Settings constant). The button
    returns in PR #3 when the Settings tab lands as its deep-link target.
  - Update useSimpleMutation onSuccess to TanStack Query v5's 4-arg form
    (data, variables, onMutateResult, context) — v5 added onMutateResult
    between variables and context.

- Project-structure expectations for a new package:
  - Add .phan/config.php so static analysis recognises the package's PHP.
  - Add changelog/.gitkeep so the changelog directory survives release.

- Changelog format:
  - Reset CHANGELOG.md to the keep-a-changelog header only (no pre-release
    `[0.1.0-alpha] - unreleased` block — pending entries live in changelog/).
  - Change the Jetpack-plugin changelog Type from `added` to `enhancement`
    (plugin/jetpack uses major|enhancement|compat|bugfix|other, not the
    keep-a-changelog vocabulary the packages use).

Co-Authored-By: Filipe Varela <filipe@automattic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* SEO foundation: address Phan + scope-leftover issues

CI surfaced two more issues on the foundation PR:

- Initializer still called `LLMS_Txt::init()`, `AI_Crawlers::init()`, and
  `Schema_Builder::init()` — those classes live in later PRs (#4 and #6).
  Remove the calls; they return when their classes land.

- Initializer registered `maybe_redirect_legacy_surfaces` on `admin_init`,
  which would have 301-redirected `?page=jetpack&tab=seo|traffic` to the
  new admin page. But the legacy Traffic page is still live on trunk in
  this PR's window, so redirecting now strands users mid-task. Remove the
  hook + the method entirely; the redirect lands in PR #5b alongside the
  discoverability banner and the actual deletion of the legacy surfaces.

- Phan can't see `Jetpack_SEO_Utils` (lives in plugins/jetpack, not this
  package). The runtime-safety `class_exists` checks already guard the
  calls; add `@phan-suppress-next-line PhanUndeclaredClassMethod` so
  static analysis stops flagging them.

Co-Authored-By: Filipe Varela <filipe@automattic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* SEO foundation: opt into shared admin-page-layout mixin

Drops the SEO admin page's reliance on admin-ui's internal `.admin-ui-page*`
classes — which are hashed in the standalone `@wordpress/admin-ui` build and
only literal in some WP core bundles — in favor of the stable
`.jp-admin-page__page` hook that `<AdminPage>` forwards onto admin-ui's
`<Page>` and the shared `jetpack-admin-page-layout-wp-build` mixin from
`@automattic/jetpack-base-styles`.

This also delivers the sticky `JetpackFooter` behavior previously proposed
as a one-off in `<AdminPage>`'s own SCSS — the shared mixin already pins
the footer to the bottom of the viewport via the stable selector chain,
which is the same path Newsletter / Protect / Backup / Search / VideoPress
take. See CGastrell's review on #49201.

Per-page opt-in lives in a new non-module `_inc/admin-page-layout.scss`
(matching the Newsletter pattern), so the mixin's body-class scope stays
out of the CSS-modules file.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* SEO foundation: ship PHPUnit + jest configs across the CI matrix

The first PR push only included `phpunit.11.xml.dist`, so CI's PHP test
matrix (PHP 7.4–8.5) failed at config-read because PHPUnit 8/9/12 had no
config to select. Adds `phpunit.8.xml.dist`, `phpunit.9.xml.dist`, and
`phpunit.12.xml.dist`, mirrored verbatim from `packages/ip`'s set.

Adds a `test` script + a `tests/jest.config.js` so the JS-tests CI job
doesn't error with `Missing script: test` either. Uses `--passWithNoTests`
so the package can ship before it grows JS tests, and inherits the shared
`jetpack-js-tools/jest/config.base.js` for when it does (asset stub for
`.scss` imports, ts/jsx transform, JSDOM environment).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* SEO foundation: add .gitattributes so build/ ships with the package

Without `.gitattributes`, the production-publish pipeline that vendors
`automattic/jetpack-seo` into the Jetpack plugin's `jetpack_vendor/`
respects `.gitignore` and drops the webpack-built `build/` directory.
The PHP source files come along (they're not gitignored), so the SEO
admin menu item appears and the mount `<div id="jetpack-seo-root">`
renders — but the enqueued `build/index.js` URL 404s, leaving the
admin page visually blank.

Mirrors Newsletter's `.gitattributes` (the canonical wp-build package):
- `/build/**  production-include` overrides gitignore for build output
- `*.tsx`/`*.ts`/`*.scss` under `_inc/` and `src/` are
  `production-exclude` since webpack has already compiled them into
  `build/`.

Confirmed against the 404 on
`wp-content/plugins/jetpack-dev/jetpack_vendor/automattic/jetpack-seo/build/index.js`
in JetpackBeta on `sweetly-partial-gazelle.jurassic.ninja`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Jetpack SEO: migrate Overview to the shared data-sync layer

Address review feedback on #49203 — replace hand-rolled data plumbing
with Jetpack's established patterns.

Data layer:
- Register a read-only `overview` data-sync entry (namespace
  `jetpack_seo`) via Data_Sync_Readonly + Schema, bootstrapped onto the
  page with attach_to_plugin() so the app hydrates from
  window.jetpack_seo without a round-trip.
- use-overview -> useDataSync; overview-types -> Zod OverviewSchema;
  providers -> DataSyncProvider.
- Delete class-rest-controller.php, use-simple-query.ts and the unused
  use-simple-mutation.ts; drop the dead jetpackSeoRest bootstrap and the
  now-unused @wordpress/api-fetch and @tanstack/react-query deps.

Module gating:
- Move the seo-tools module check up into Initializer::init() so no
  routes, menu, or assets register when the module is off (matches how
  other Jetpack modules gate), removing the redundant per-method check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: adopt shared components and design tokens on the Overview

Address review feedback on #49203 — replace hand-rolled UI with the
platform's primitives.

- Collapse shell.tsx onto AdminPage (drop the header-actions slot/fill
  context and the background/padding CSS overrides); delete
  header-actions-context.tsx and _inc/style.module.scss.
- Use @wordpress/ui Notice (compound), Stack, and Link in place of
  @wordpress/components Notice/ExternalLink and flexbox CSS.
- Give StatusDot its own style module using @wordpress/theme color
  tokens; tokenize remaining colors and spacing.
- Extract ternary __() labels to module scope so i18n extraction
  survives the production minifier.
- Remove the unused BoundedLayout from @automattic/jetpack-components.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: rebuild the admin page on wp-build + script-data

Migrate the SEO foundation page off the custom webpack/React-Router setup
onto @wordpress/build (wp-build), matching the live pattern the other
recently-modernized Jetpack admin pages use (modeled on the Podcast package).

- Build: add the wpPlugin block + wp-build scripts, the routes/index entry
  (stage/route/package.json), and drop webpack.config.js, babel.config.js,
  react-router, and zod.
- Data layer: replace the data-sync Overview wiring with the shared
  script-data layer. wp-build pages load as ES modules, so wp_localize_script
  can't bootstrap them; the server now injects state onto
  window.JetpackScriptData.seo via the jetpack_admin_js_script_data filter
  (Podcast/Newsletter pattern), read synchronously in get-overview.ts.
- PHP: keep the seo-tools module gate and the Admin_Menu top-level menu;
  load build/build.php + register WP_Build_Polyfills and alias the screen id
  on current_screen so wp-build's self-hooked enqueue fires for our slug.
- Styles: convert CSS-module SCSS to plain prefixed SCSS (no wp-build package
  uses CSS modules).
- composer: drop wp-js-data-sync + schema, add wp-build-polyfills.

Verified: dev + production build, tsgo typecheck, php -l, phpcs, eslint, and
i18n string extraction all pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: align wp-build to trunk cohort (@wordpress/build 0.14.0)

Sync the branch with trunk and bump @wordpress/build 0.13.0 -> 0.14.0 to
match the current wp-build cohort. The branch had fallen ~99 commits behind
trunk, which had since bumped @wordpress/build; the stale 0.13.0 pin left the
PR-merge lockfile referencing build variants trunk no longer defines, failing
CI's frozen install. Regenerated pnpm-lock.yaml on the merged tree.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: refresh plugins/jetpack composer.lock for the SEO dep change

The SEO package's composer.json changed (dropped wp-js-data-sync + schema,
added wp-build-polyfills), so the consuming plugin's lock was stale and failed
CI's "Lock files are up to date" check. Regenerated via
tools/composer-update-monorepo.sh.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: fix Overview page padding and status-dot colors

Two CSS regressions from the wp-build rebuild, caught in JN testing:

- Page had no content padding: the layout SCSS included the
  `jetpack-admin-page-layout-wp-build` mixin, which only carries breadcrumb /
  anchor resets — not the content layout. Switch to the plain
  `jetpack-admin-page-layout` mixin (as Scan/Podcast do) and target both the
  top-level and Jetpack-submenu body classes.
- Status dots rendered near-black: the plain `--wpds-color-fg-content-*`
  tokens are the darkest text shades (#2900 / #470000). Use the `-weak`
  variants (#007f30 / #cc1818 / amber), the vivid indicator colors the
  shared StatusIndicator pattern uses.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: add content padding to the Overview page

The card sat flush against the header and page sides. `<AdminPage>` renders
its content with `horizontalSpacing={0}` and no `hasPadding`, so only the
header is padded — content padding is the consumer's responsibility (as in
Scan/Podcast). The earlier frontend cleanup removed the old `.paddedContent`
override without replacing it. Wrap the screen in `.jetpack-seo-page-content`
padded at `--wpds-dimension-padding-2xl` (24px) to align with the header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: remove the broken sitemap "View" link from the Overview

The link pointed at home_url('/sitemap.xml'), which 404s: the "active"
signal comes from a placeholder option (jetpack_seo_sitemap_enabled, which
exists nowhere else in Jetpack) rather than the real `sitemaps` module, and
even when the module is active Jetpack generates the sitemap via cron so the
URL isn't live immediately. Drop the link to avoid shipping a dead link;
correct sitemap detection + URL is tracked as a follow-up. The status row
itself is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: address #49203 review feedback (docs + cleanup)

- README: rewrite to match the shipped wp-build + script-data architecture
  (drop HashRouter/react-query/useSimpleQuery, REST API, pnpm run build/watch).
- composer.json: drop unused requires (jetpack-connection/constants/assets);
  keep admin-ui/status/wp-build-polyfills, which the Initializer actually uses.
- admin-page-layout.scss: use the -wp-build layout mixin variant so the code
  matches the changelog claim; it's a no-op superset until a tab adds breadcrumbs.
- Initializer: guard init() with a private static $initialized flag (Podcast
  pattern) so the body can't re-run when seo-tools is off; document the
  pre-wired sitemap_url / front_page_description Overview fields.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: regenerate jetpack composer.lock after trimming seo package deps

Follow-up to 8bc377e, which dropped the unused jetpack-connection/
constants/assets requires from the jetpack-seo package. The Jetpack
plugin's composer.lock still recorded the old require set for the
package, so the 'Lock files are up to date' check failed. Regenerated
with `composer update automattic/jetpack-seo`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: gate the package behind the rsm_jetpack_seo feature flag

Gate the entire SEO surface (admin menu, wp-build bundle, script data)
behind the rsm_jetpack_seo filter, default false during roll-out, mirroring
how the Scan package gates itself. Consolidate the package changelog into a
single entry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* remove product name translations

* Jetpack SEO: address review — drop wpds token fallbacks and fragile card CSS

- Remove hex fallbacks on --wpds-* design tokens to match @wordpress/theme's
  no-token-fallback-values convention (tokens are guaranteed under ThemeProvider).
- Remove the equal-height grid CSS that targeted @wordpress/ui's non-stable
  hashed Card internals; defer until a second Overview card exists.
- Use title="SEO" instead of title={ 'SEO' }.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Jetpack SEO: use logical margin-inline-end on the status dot for RTL

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Filipe Varela <filipe@automattic.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Angela Blake <angela.blake@a8c.com>
Co-authored-by: Angela Blake <angelablake@Angelas-MacBook-Pro.local>
Co-authored-by: Douglas <douglas.henri@automattic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants