{"server":"tech.tresbien/drupal-code-query","count":9,"changes":[{"tool":"wordpal_theme","kind":"changed","observed_at":"2026-10-18T20:37:19.943Z","fields":["description"],"description_before":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference and its screenshot matches the WordPress screenshot. diff: the markup differs, the screenshots differ, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status, tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus plugins to install first, convert_command, reason when failed, wordpal_release, page_url and image links.\n- routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- wp_only_rows and drupal_only_rows: pixel rows that one screenshot alone has. visual_bands and visual_changed count the rows both screenshots have.\n- history: every run the gallery has shown for the theme, newest first, home page only. direction (improved, regressed, same, changed) compares a run with the run before.\n- next_offset is absent on the last page.","description_after":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- version: the theme version wordpress.org lists now. run: the run the gallery shows. run.theme_version is the version it converted, which can be older.\n- run.status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference and its screenshot matches the WordPress screenshot. diff: the markup differs, the screenshots differ, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status (run.status), tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, version, and run with status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus author, tags and page_url. Its run adds plugins to install first, convert_command, reason when failed, wordpal_release and image links.\n- run.routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- wp_only_rows and drupal_only_rows: pixel rows that one screenshot alone has. visual_bands and visual_changed count the rows both screenshots have.\n- history: every run the gallery has shown for the theme, newest first, home page only. direction (improved, regressed, same, changed) compares a run with the run before.\n- next_offset is absent on the last page.","description_similarity":0.918,"before_hash":"57557e7775d76c0506191777fead0810","after_hash":"35b4e888017369b153954d2390d97162"},{"tool":"wordpal_theme","kind":"changed","observed_at":"2026-10-15T00:52:30.373Z","fields":["description"],"description_before":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference and its screenshot matches the WordPress screenshot. diff: the markup differs, the screenshots differ, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status, tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus plugins to install first, convert_command, reason when failed, wordpal_release, page_url and image links.\n- routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- wp_only_rows and drupal_only_rows: pixel rows that one screenshot alone has. visual_bands and visual_changed count the rows both screenshots have.\n- next_offset is absent on the last page.","description_after":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference and its screenshot matches the WordPress screenshot. diff: the markup differs, the screenshots differ, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status, tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus plugins to install first, convert_command, reason when failed, wordpal_release, page_url and image links.\n- routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- wp_only_rows and drupal_only_rows: pixel rows that one screenshot alone has. visual_bands and visual_changed count the rows both screenshots have.\n- history: every run the gallery has shown for the theme, newest first, home page only. direction (improved, regressed, same, changed) compares a run with the run before.\n- next_offset is absent on the last page.","description_similarity":0.919,"before_hash":"f455f95d55ed7e0caebc16738678bf10","after_hash":"57557e7775d76c0506191777fead0810"},{"tool":"query_dataset","kind":"changed","observed_at":"2026-10-15T00:52:30.373Z","fields":["description"],"description_before":"Run read-only DuckDB SELECTs over the dataset behind the other tools, for a question none of them asks. Call describe_dataset first; it lists the 35 views, their columns, joins and recipes. Prefer a typed tool when one fits.\n- statements=[…]: up to 5 statements in one call, one result or error each.\n- Result: columns, and rows as arrays, up to max_rows (≤ 500, default 100) and 16 KB. When truncated is true: aggregate, filter, or use LIMIT and OFFSET. One SELECT (or SHOW, DESCRIBE, FROM-first), no semicolon, 15 s limit, nothing outside the bundle.\n- Dev-branch isolation: JOIN contrib_branch and filter kind = 'dev_branch' AND project <> 'drupal' before counting projects. change_record_adoption, symbol_usage and core_symbol_evidence hold release tags too. core_symbol_evidence is the full rollup; symbol_usage is its string-scan subset.\n- Adoption polarity: legacy is still on the old API (not adopted); migrated is adopted. Versions are text: compare *_seq integers (major*1000+minor). Never SUM(usage) across branch rows.\n- Errors list the views, the columns of the views you used, or the join map. An empty result over an fqn without a leading backslash gets a hint.\n- The same views are downloadable as parquet under https://api.tresbien.tech/data/docs. Its cookbook targets api.duckdb plus prelude views this mirror does not have, so take recipes from describe_dataset.","description_after":"Run read-only DuckDB SELECTs over the dataset behind the other tools, for a question none of them asks. Call describe_dataset first; it lists the 36 views, their columns, joins and recipes. Prefer a typed tool when one fits.\n- statements=[…]: up to 5 statements in one call, one result or error each.\n- Result: columns, and rows as arrays, up to max_rows (≤ 500, default 100) and 16 KB. When truncated is true: aggregate, filter, or use LIMIT and OFFSET. One SELECT (or SHOW, DESCRIBE, FROM-first), no semicolon, 15 s limit, nothing outside the bundle.\n- Dev-branch isolation: JOIN contrib_branch and filter kind = 'dev_branch' AND project <> 'drupal' before counting projects. change_record_adoption, symbol_usage and core_symbol_evidence hold release tags too. core_symbol_evidence is the full rollup; symbol_usage is its string-scan subset.\n- Adoption polarity: legacy is still on the old API (not adopted); migrated is adopted. Versions are text: compare *_seq integers (major*1000+minor). Never SUM(usage) across branch rows.\n- Errors list the views, the columns of the views you used, or the join map. An empty result over an fqn without a leading backslash gets a hint.\n- The same views are downloadable as parquet under https://api.tresbien.tech/data/docs. Its cookbook targets api.duckdb plus prelude views this mirror does not have, so take recipes from describe_dataset.","description_similarity":0.987,"before_hash":"d107c8e7c651e4df352b20a892779fb3","after_hash":"3b88b877305871f7ba29b8aeda454ae5"},{"tool":"wordpal_theme","kind":"changed","observed_at":"2026-10-14T00:32:17.062Z","fields":["description"],"description_before":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference and its screenshot matches the WordPress screenshot. diff: the markup differs, the screenshots differ, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status, tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus plugins to install first, convert_command, reason when failed, wordpal_release, page_url and image links.\n- routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- next_offset is absent on the last page.","description_after":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference and its screenshot matches the WordPress screenshot. diff: the markup differs, the screenshots differ, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status, tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus plugins to install first, convert_command, reason when failed, wordpal_release, page_url and image links.\n- routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- wp_only_rows and drupal_only_rows: pixel rows that one screenshot alone has. visual_bands and visual_changed count the rows both screenshots have.\n- next_offset is absent on the last page.","description_similarity":0.96,"before_hash":"0f7efb6bef7301ded5cc5384171809fa","after_hash":"f455f95d55ed7e0caebc16738678bf10"},{"tool":"wordpal_theme","kind":"changed","observed_at":"2026-10-13T06:40:43.811Z","fields":["description"],"description_before":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference. diff: it has some, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status, tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus plugins to install first, convert_command, reason when failed, wordpal_release, page_url and image links.\n- routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- next_offset is absent on the last page.","description_after":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference and its screenshot matches the WordPress screenshot. diff: the markup differs, the screenshots differ, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status, tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus plugins to install first, convert_command, reason when failed, wordpal_release, page_url and image links.\n- routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- next_offset is absent on the last page.","description_similarity":0.959,"before_hash":"f4342ae8450421ea87a474d4489664ad","after_hash":"0f7efb6bef7301ded5cc5384171809fa"},{"tool":"wordpal_theme","kind":"added","observed_at":"2026-10-12T00:30:32.729Z","fields":[],"description_before":null,"description_after":"Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- status (exact, diff, failed) is a verdict on the home page only. exact: its markup has no difference. diff: it has some, or the two pages could not be compared. failed: no pair of home page screenshots, as when the conversion fails.\n- Filters combine: status, tag, q. count: themes that pass all three. by_status: themes that pass tag and q, per status.\n- Row: slug, name, installs, status, routes_measured, routes_matching, markup_diffs_total. Up to eight pages are compared per theme. markup_diffs_total sums their markup differences.\n- theme: the row, plus plugins to install first, convert_command, reason when failed, wordpal_release, page_url and image links.\n- routes: route, markup_outcome (match, diff, skipped, error) and markup_diffs. A markup difference is an element, a class, an attribute or an inline style that differs.\n- A route whose screenshots were compared also has visual_outcome (match, diff, unstable, error), visual_bands, visual_changed, wp_height and drupal_height.\n- next_offset is absent on the last page.","description_similarity":null,"before_hash":null,"after_hash":"f4342ae8450421ea87a474d4489664ad"},{"tool":"query_dataset","kind":"changed","observed_at":"2026-10-12T00:30:32.729Z","fields":["description"],"description_before":"Run read-only DuckDB SELECTs over the dataset behind the other tools, for a question none of them asks. Call describe_dataset first; it lists the 33 views, their columns, joins and recipes. Prefer a typed tool when one fits.\n- statements=[…]: up to 5 statements in one call, one result or error each.\n- Result: columns, and rows as arrays, up to max_rows (≤ 500, default 100) and 16 KB. When truncated is true: aggregate, filter, or use LIMIT and OFFSET. One SELECT (or SHOW, DESCRIBE, FROM-first), no semicolon, 15 s limit, nothing outside the bundle.\n- Dev-branch isolation: JOIN contrib_branch and filter kind = 'dev_branch' AND project <> 'drupal' before counting projects. change_record_adoption, symbol_usage and core_symbol_evidence hold release tags too. core_symbol_evidence is the full rollup; symbol_usage is its string-scan subset.\n- Adoption polarity: legacy is still on the old API (not adopted); migrated is adopted. Versions are text: compare *_seq integers (major*1000+minor). Never SUM(usage) across branch rows.\n- Errors list the views, the columns of the views you used, or the join map. An empty result over an fqn without a leading backslash gets a hint.\n- The same views are downloadable as parquet under https://api.tresbien.tech/data/docs. Its cookbook targets api.duckdb plus prelude views this mirror does not have, so take recipes from describe_dataset.","description_after":"Run read-only DuckDB SELECTs over the dataset behind the other tools, for a question none of them asks. Call describe_dataset first; it lists the 35 views, their columns, joins and recipes. Prefer a typed tool when one fits.\n- statements=[…]: up to 5 statements in one call, one result or error each.\n- Result: columns, and rows as arrays, up to max_rows (≤ 500, default 100) and 16 KB. When truncated is true: aggregate, filter, or use LIMIT and OFFSET. One SELECT (or SHOW, DESCRIBE, FROM-first), no semicolon, 15 s limit, nothing outside the bundle.\n- Dev-branch isolation: JOIN contrib_branch and filter kind = 'dev_branch' AND project <> 'drupal' before counting projects. change_record_adoption, symbol_usage and core_symbol_evidence hold release tags too. core_symbol_evidence is the full rollup; symbol_usage is its string-scan subset.\n- Adoption polarity: legacy is still on the old API (not adopted); migrated is adopted. Versions are text: compare *_seq integers (major*1000+minor). Never SUM(usage) across branch rows.\n- Errors list the views, the columns of the views you used, or the join map. An empty result over an fqn without a leading backslash gets a hint.\n- The same views are downloadable as parquet under https://api.tresbien.tech/data/docs. Its cookbook targets api.duckdb plus prelude views this mirror does not have, so take recipes from describe_dataset.","description_similarity":0.987,"before_hash":"8f65fddf00d9b0d47af0b8b211bd1c6c","after_hash":"d107c8e7c651e4df352b20a892779fb3"},{"tool":"search_code","kind":"changed","observed_at":"2026-10-05T22:35:13.704Z","fields":["description"],"description_before":"Search the source of every indexed contrib project, plus core, for a code pattern: which files, or with by_repo which projects. Who-uses-a-core-symbol counts: list_symbol_users or lookup_core_symbol.\n- query is a regex. Set literal for exact text with ( [ ] . $ : or a space, and put r: f: lang: case: sym: b: terms in filters. repos: project machine name list. The index runs RE2, which has no lookaround or backreferences.\n- .module, .install, .theme, .engine, .profile and .inc count as PHP: lang:php includes them and sym: resolves inside them. No language filter is applied for you.\n- Returns total_matches and total_files plus a head of files (repo, path, matching lines), limit ≤ 50. by_repo: (repo, file_count) rows from a pull of up to 1000 files; total_files is the ceiling; truncated when cut. A parse error returns the index's own message.","description_after":"Search the source of every indexed contrib project, plus core, for a code pattern: which files, or with by_repo which projects. Who-uses-a-core-symbol counts: list_symbol_users or lookup_core_symbol.\n- query is a regex. Set literal for exact text with ( [ ] . $ : or a space, and put r: f: lang: case: sym: b: terms in filters. repos: project machine name list. The index runs RE2, which has no lookaround or backreferences.\n- .module, .install, .theme, .engine, .profile and .inc count as PHP: lang:php includes them and sym: resolves inside them. No language filter is applied for you.\n- Returns total_matches and total_files plus a head of files (repo, path, matching lines), limit ≤ 50. by_repo: (repo, file_count) rows from a pull of up to 1000 files; total_files is the ceiling; truncated when cut. A parse error returns the index's own message.\n- not_indexed: the repos the index lacks. A project with no installs and no recent release is not indexed.","description_similarity":0.952,"before_hash":"9464c5bbbda8ab2fdec77660dce9bbd3","after_hash":"d8d979ad179c239c2aef1293ae4c4c62"},{"tool":"query_dataset","kind":"changed","observed_at":"2026-09-30T08:49:43.316Z","fields":["description"],"description_before":"Run read-only DuckDB SELECTs over the dataset behind the other tools, for a question none of them asks. Call describe_dataset first; it lists the 31 views, their columns, joins and recipes. Prefer a typed tool when one fits.\n- statements=[…]: up to 5 statements in one call, one result or error each.\n- Result: columns, and rows as arrays, up to max_rows (≤ 500, default 100) and 16 KB. When truncated is true: aggregate, filter, or use LIMIT and OFFSET. One SELECT (or SHOW, DESCRIBE, FROM-first), no semicolon, 15 s limit, nothing outside the bundle.\n- Dev-branch isolation: JOIN contrib_branch and filter kind = 'dev_branch' AND project <> 'drupal' before counting projects. change_record_adoption, symbol_usage and core_symbol_evidence hold release tags too. core_symbol_evidence is the full rollup; symbol_usage is its string-scan subset.\n- Adoption polarity: legacy is still on the old API (not adopted); migrated is adopted. Versions are text: compare *_seq integers (major*1000+minor). Never SUM(usage) across branch rows.\n- Errors list the views, the columns of the views you used, or the join map. An empty result over an fqn without a leading backslash gets a hint.\n- The same views are downloadable as parquet under https://api.tresbien.tech/data/docs. Its cookbook targets api.duckdb plus prelude views this mirror does not have, so take recipes from describe_dataset.","description_after":"Run read-only DuckDB SELECTs over the dataset behind the other tools, for a question none of them asks. Call describe_dataset first; it lists the 33 views, their columns, joins and recipes. Prefer a typed tool when one fits.\n- statements=[…]: up to 5 statements in one call, one result or error each.\n- Result: columns, and rows as arrays, up to max_rows (≤ 500, default 100) and 16 KB. When truncated is true: aggregate, filter, or use LIMIT and OFFSET. One SELECT (or SHOW, DESCRIBE, FROM-first), no semicolon, 15 s limit, nothing outside the bundle.\n- Dev-branch isolation: JOIN contrib_branch and filter kind = 'dev_branch' AND project <> 'drupal' before counting projects. change_record_adoption, symbol_usage and core_symbol_evidence hold release tags too. core_symbol_evidence is the full rollup; symbol_usage is its string-scan subset.\n- Adoption polarity: legacy is still on the old API (not adopted); migrated is adopted. Versions are text: compare *_seq integers (major*1000+minor). Never SUM(usage) across branch rows.\n- Errors list the views, the columns of the views you used, or the join map. An empty result over an fqn without a leading backslash gets a hint.\n- The same views are downloadable as parquet under https://api.tresbien.tech/data/docs. Its cookbook targets api.duckdb plus prelude views this mirror does not have, so take recipes from describe_dataset.","description_similarity":0.987,"before_hash":"850ebad63dcb2f2bb92e02d07cf7e9fa","after_hash":"8f65fddf00d9b0d47af0b8b211bd1c6c"}],"next_before":null,"next_actions":[]}