Skip to content

fix: keep the System Status report's positional filter working - #1710

Merged
jakejackson1 merged 1 commit into
developmentfrom
fix/system-report-deprecate-positional-filter
Sep 2, 2026
Merged

fix: keep the System Status report's positional filter working#1710
jakejackson1 merged 1 commit into
developmentfrom
fix/system-report-deprecate-positional-filter

Conversation

@jakejackson1

Copy link
Copy Markdown
Member

Summary

6.17 rekeyed the System Status report's items array from positional integer keys to named string keys, so the four sections an add-on knew as 03 became php, directories, global and security. gfpdf_system_status_report_items is a public filter keyed by that same index, so any listener writing $items[1]['my_row'] silently stopped reaching the report — no error, no notice, the row just disappears. Gravity PDF Core Booster's Outdated Templates warning is one of them, and it is unlikely to be the only one.

The rekey itself is worth keeping. Two sections were added at the head of the report and every section added after would renumber the ones below it again, which is exactly what made a positional index a bad contract. But third parties shouldn't have to change their code for it, so this serves the old shape alongside the new one instead.

get_report_items() hands the four sections to gfpdf_system_status_report_items at the indexes they sat at before 6.17, through apply_filters_deprecated(), and reads the result back off those same indexes. A listener written against the old shape neither sees nor needs a change. One that has moved on gets a _deprecated_hook notice under WP_DEBUG naming the replacement, gfpdf_system_status_report_sections — keyed by section name, fired last, so it sees the whole report including anything the positional filter contributed.

6.17.0 has not shipped, so nothing is broken in the field yet. The 6.17 release line (feat/system-report-detect-legacy-templates-6.16.1) carries the same change and needs the same fix before it does.

Try it

Drop this in an mu-plugin, open Forms → System Status, and look at Directories and Permissions:

add_filter( 'gfpdf_system_status_report_items', function( $items ) {
	$items[1]['my_row'] = [ 'label' => 'My Row', 'value' => 'Still here' ];
	return $items;
} );

On development today the row is missing. With this branch it renders, and with WP_DEBUG on you also get a notice pointing at the replacement filter. Swapping to the new filter drops the notice and keeps the row:

add_filter( 'gfpdf_system_status_report_sections', function( $items ) {
	$items['directories']['my_row'] = [ 'label' => 'My Row', 'value' => 'Still here' ];
	return $items;
} );

Test plan

  • Three new tests in Test_Controller_System_Report: each legacy index still reaches the section it stood for (including that a removed row stays removed, and that an index the listener invents is dropped rather than drawn as an untitled table); the positional filter is handed exactly the four sections it knew, while the deprecation section it never saw still reaches the report; and a row added by section name through the new filter lands.
  • Integration suite green single-site — 1623 tests, 0 failures
  • Integration suite green multisite — 1623 tests, 0 failures
  • PHPCS clean
Design notes

Why the deprecation sections are held back from the old filter. They have no index of their own, and giving them one would renumber the four below them — the break this exists to avoid. They reach the report through get_report_structure() and the new named filter only.

Why an invented index is dropped. build_gravitypdf_report() matches $items[ $table['id'] ], so a key with no matching section id has nowhere to land regardless of the read-back. Pre-6.17, $items[4] auto-vivified $structure[0]['tables'][4] with rows and no title; Gravity Forms reads the caption with rgar() so it drew an untitled table rather than erroring. Not a shape worth reproducing.

Why POSITIONAL_SECTIONS is a literal, not derived from get_report_structure(). It is a historical record, not configuration. Deriving it — even filtering out Deprecation::get_groups() — would auto-expose a future fifth section at index 4, and re-break every legacy listener the moment a section is inserted above security. It is marked frozen, and the tests catch both an append and a reorder.

Why it doesn't go through Deprecation::apply_filters(). That wrapper sources the version, replacement and removal text from the deprecation registry, which is the v3 layer 7.0 removes. gfpdf_system_status_report_items isn't a v3 feature and has no removal scheduled, so registering it would put a developer-facing filter rename into the Deprecated report section and the admin notice alongside "removed in 7.0" guidance. Called unregistered it would render an empty version string. Plain apply_filters_deprecated() is the right primitive here.

move_gravitypdf_active_plugins_to_gf_addons() is unaffected — its positional indexes are into Gravity Forms' own report, which is handed to it before the Gravity PDF report is merged on.

6.17 rekeyed the system report's items array from positional integer keys to named string keys, so the four
sections an add-on knew as 0-3 became `php`, `directories`, `global` and `security`.
`gfpdf_system_status_report_items` is a public filter keyed by that same index, so every listener writing
`$items[1]['my_row']` silently stopped reaching the report — no error, no notice, the row just vanished. Gravity
PDF Core Booster's Outdated Templates warning is one of them. 6.17.0 has not shipped, so nothing is broken in the
field yet; the 6.17 release line carries the same change and needs the same fix before it does.

The rekey is worth keeping. Two sections were added at the head of the report and every section added after would
renumber the ones below it again, which is what made the index a bad contract in the first place. So rather than
ask third parties to change their code, the old shape is served alongside the new one.

`get_report_items()` now hands the four sections to `gfpdf_system_status_report_items` at the indexes they sat at
before 6.17, through `apply_filters_deprecated()`, and reads the result back off those same indexes. A listener
written against the old shape neither sees nor needs a change; one that has moved on gets `_deprecated_hook`
under `WP_DEBUG` naming the replacement.

The sections added since — the deprecation groups — are held back from it. They have no index of their own, and
giving them one would renumber the four below them, which is the break this exists to avoid. An index the
listener invents has no section to land in and is dropped: pre-6.17 that auto-vivified a table with rows and no
title, which is not a shape worth reproducing.

`gfpdf_system_status_report_sections` is the replacement. It is keyed by section name and fires last, so it sees
the whole report including anything the positional filter contributed. Nothing schedules the old filter's
removal, which is why it isn't registered on `Deprecation` — that registry is the v3 layer 7.0 removes, and an
unregistered call through it would render an empty version.

`POSITIONAL_SECTIONS` is a frozen historical record rather than something derived from `get_report_structure()`.
Deriving it would auto-expose a future fifth section at index 4, and re-break every listener the moment a section
is inserted above `security`. The tests lock both halves: that each index still reaches the section it stood for,
and that the filter is handed exactly four.

Integration suite green single-site and multisite (1623 tests), PHPCS clean.

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

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

Coverage report for commit: ffb5c2c
File: ./tmp/jest-coverage/clover.xml

Cover ┌─────────────────────────┐ Freq.
   0% │ ░░░░░░░░░░░░░░░░░░░░░░░ │  0.0%
  10% │ ░░░░░░░░░░░░░░░░░░░░░░░ │  0.0%
  20% │ ░░░░░░░░░░░░░░░░░░░░░░░ │  0.0%
  30% │ ░░░░░░░░░░░░░░░░░░░░░░░ │  0.0%
  40% │ ░░░░░░░░░░░░░░░░░░░░░░░ │  0.0%
  50% │ ░░░░░░░░░░░░░░░░░░░░░░░ │  0.0%
  60% │ ░░░░░░░░░░░░░░░░░░░░░░░ │  0.0%
  70% │ █░░░░░░░░░░░░░░░░░░░░░░ │  1.6%
  80% │ ███░░░░░░░░░░░░░░░░░░░░ │  8.1%
  90% │ ███████░░░░░░░░░░░░░░░░ │ 21.0%
 100% │ ███████████████████████ │ 69.4%
      └─────────────────────────┘
 *Legend:* █ = Current Distribution 
Summary - Lines: 92.99% | Methods: 88.31% | Branches: 81.37%
FilesLinesMethodsBranches
src/assets/js/react/actions
   coreFonts.js100.00%100.00%100.00%
   fontManager.js100.00%100.00%100.00%
   templates.js100.00%100.00%100.00%
src/assets/js/react/components/Alert
   Alert.js100.00%100.00%100.00%
src/assets/js/react/components/CoreFonts
   CoreFontContainer.js100.00%100.00%91.43%
   CoreFontCounter.js100.00%100.00%100.00%
   CoreFontListResults.js100.00%100.00%85.71%
   CoreFontListSpacer.js100.00%100.00%100.00%
src/assets/js/react/components
   CustomHashRouter.js100.00%100.00%100.00%
   Empty.js100.00%100.00%100.00%
   ShowMessage.js79.31%80.00%64.29%
   Spinner.js100.00%100.00%100.00%
src/assets/js/react/components/FontManager
   AddFont.js100.00%100.00%100.00%
   AddUpdateFontFooter.js85.37%50.00%88.89%
   AdvancedButton.js100.00%100.00%100.00%
   FontList.js100.00%50.00%65.22%
   FontListAlertMessage.js100.00%100.00%100.00%
   FontListHeader.js100.00%100.00%100.00%
   FontListIcon.js100.00%100.00%100.00%
   FontListItems.js85.39%64.00%68.66%
   FontListSkeleton.js100.00%100.00%100.00%
   FontManager.js77.78%57.14%50.00%
   FontManagerBody.js94.20%96.43%90.29%
   FontManagerHeader.js100.00%100.00%100.00%
   FontVariant.js90.00%60.00%70.00%
   FontVariantLabel.js100.00%100.00%100.00%
   InitialAddUpdateState.js100.00%100.00%100.00%
   SearchBox.js90.00%66.67%69.23%
   TemplateTooltip.js100.00%75.00%100.00%
   UpdateFont.js75.00%50.00%75.00%
src/assets/js/react/components/Modal
   CloseDialog.js93.33%66.67%70.59%
src/assets/js/react/components/Template
   TemplateActivateButton.js100.00%100.00%100.00%
   TemplateButton.js85.71%66.67%100.00%
   TemplateContainer.js71.43%66.67%25.00%
   TemplateDeleteButton.js100.00%100.00%70.00%
   TemplateFooterActions.js100.00%100.00%100.00%
   TemplateHeaderNavigation.js82.35%85.71%70.00%
   TemplateHeaderTitle.js100.00%100.00%100.00%
   TemplateList.js100.00%100.00%60.00%
   TemplateListItem.js100.00%100.00%92.86%
   TemplateListItemComponents.js100.00%100.00%100.00%
   TemplateScreenshot.js100.00%100.00%100.00%
   TemplateScreenshots.js100.00%100.00%50.00%
   TemplateSearch.js93.75%88.89%50.00%
   TemplateSingle.js100.00%100.00%100.00%
   TemplateSingleComponents.js100.00%100.00%75.00%
   TemplateUploader.js98.04%100.00%86.67%
src/assets/js/react/reducers
   coreFontReducer.js95.65%100.00%88.00%
   fontManagerReducer.js87.21%75.00%75.00%
   index.js100.00%100.00%100.00%
   templateReducer.js100.00%100.00%100.00%
src/assets/js/react/sagas
   coreFonts.js91.67%100.00%75.00%
   fontManager.js86.96%90.00%83.33%
   index.js100.00%100.00%100.00%
   templates.js83.33%100.00%100.00%
src/assets/js/react/selectors
   getTemplates.js91.11%100.00%83.33%
src/assets/js/react/utilities/FontManager
   adjustFontListHeight.js100.00%100.00%100.00%
   associatedFontManagerSelectBox.js94.44%100.00%66.67%
   fontManagerReducer.js100.00%100.00%100.00%
   getTabLocation.js100.00%100.00%100.00%
   toggleUpdateFont.js100.00%100.00%100.00%
src/assets/js/react/utilities
   withRouterHooks.js100.00%100.00%100.00%

🤖 Jest coverage report

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

Coverage report for commit: ffb5c2c
File: tmp/coverage/report-xml/merged.xml

Cover ┌─────────────────────────┐ Freq.
   0% │ █████████░░░░░░░░░░░░░░ │ 11.4%
  10% │ █░░░░░░░░░░░░░░░░░░░░░░ │  0.9%
  20% │ █░░░░░░░░░░░░░░░░░░░░░░ │  0.5%
  30% │ █░░░░░░░░░░░░░░░░░░░░░░ │  0.9%
  40% │ █░░░░░░░░░░░░░░░░░░░░░░ │  0.5%
  50% │ ███████░░░░░░░░░░░░░░░░ │  8.5%
  60% │ ██░░░░░░░░░░░░░░░░░░░░░ │  1.4%
  70% │ █████░░░░░░░░░░░░░░░░░░ │  6.2%
  80% │ ██████████████░░░░░░░░░ │ 19.0%
  90% │ ███████████████████████ │ 32.2%
 100% │ ██████████████░░░░░░░░░ │ 18.5%
      └─────────────────────────┘
 *Legend:* █ = Current Distribution 
Summary - Lines: 83.49% | Methods: 89.61%
FilesLinesMethodsBranches
/var/www/html/wp-content/plugins/gravity-pdf
   api.php96.55%100.00%100.00%
   gravity-pdf-updater.php53.97%100.00%100.00%
   pdf.php58.77%72.22%100.00%
/var/www/html/wp-content/plugins/gravity-pdf/src/Controller
   Controller_Actions.php98.94%100.00%100.00%
   Controller_Activation.php95.45%100.00%100.00%
   Controller_Custom_Fonts.php88.52%100.00%100.00%
   Controller_Debug.php100.00%100.00%100.00%
   Controller_Export_Entries.php96.67%100.00%100.00%
   Controller_Form_Settings.php86.05%90.00%100.00%
   Controller_Install.php100.00%100.00%100.00%
   Controller_Mergetags.php100.00%100.00%100.00%
   Controller_PDF.php82.14%100.00%100.00%
   Controller_Pdf_Queue.php83.72%77.78%100.00%
   Controller_Save_Core_Fonts.php66.67%100.00%100.00%
   Controller_Settings.php86.05%100.00%100.00%
   Controller_Shortcodes.php100.00%100.00%100.00%
   Controller_System_Report.php100.00%100.00%100.00%
   Controller_Templates.php100.00%100.00%100.00%
   Controller_Uninstaller.php83.33%77.78%100.00%
   Controller_Upgrade_Routines.php93.94%100.00%100.00%
   Controller_Webhooks.php100.00%100.00%100.00%
   Controller_Zapier.php100.00%100.00%100.00%
/var/www/html/wp-content/plugins/gravity-pdf/src/Exceptions
   GravityPdfDatabaseUpdateException.php50.00%100.00%100.00%
   GravityPdfDomainException.php50.00%100.00%100.00%
   GravityPdfException.php50.00%100.00%100.00%
   GravityPdfFontNotFoundException.php50.00%100.00%100.00%
   GravityPdfIdException.php50.00%100.00%100.00%
   GravityPdfModelNotUpdatedException.php50.00%100.00%100.00%
   GravityPdfRuntimeException.php50.00%100.00%100.00%
   GravityPdfShortcodeEntryIdException.php50.00%100.00%100.00%
   GravityPdfShortcodePdfConditionalLogicFailedException.php50.00%100.00%100.00%
   GravityPdfShortcodePdfConfigNotFoundException.php50.00%100.00%100.00%
   GravityPdfShortcodePdfInactiveException.php50.00%100.00%100.00%
/var/www/html/wp-content/plugins/gravity-pdf/src/Helper/Fields
   Field_Address.php92.16%100.00%100.00%
   Field_Chainedselect.php66.67%75.00%100.00%
   Field_Checkbox.php94.34%100.00%100.00%
   Field_Consent.php89.47%100.00%100.00%
   Field_Coupon.php--100.00%
   Field_Creditcard.php83.33%100.00%100.00%
   Field_Date.php83.33%100.00%100.00%
   Field_Default.php83.33%100.00%100.00%
   Field_Discount.php44.00%75.00%100.00%
   Field_Email.php83.33%100.00%100.00%
   Field_Fg_Ls_Consent.php92.86%100.00%100.00%
   Field_Fg_Ls_Signature.php73.08%66.67%100.00%
   Field_Fileupload.php94.23%100.00%100.00%
   Field_Form.php89.09%100.00%100.00%
   Field_Hidden.php81.82%100.00%100.00%
   Field_Html.php89.47%100.00%100.00%
   Field_Image_Choice.php86.67%100.00%100.00%
   Field_Likert.php97.22%100.00%100.00%
   Field_List.php92.41%100.00%100.00%
   Field_Multi_Choice.php50.00%100.00%100.00%
   Field_Multiselect.php92.59%100.00%100.00%
   Field_Name.php84.62%100.00%100.00%
   Field_Number.php83.33%100.00%100.00%
   Field_Option.php57.69%50.00%100.00%
   Field_Page.php83.33%100.00%100.00%
   Field_Phone.php94.55%100.00%100.00%
   Field_Poll.php93.75%100.00%100.00%
   Field_Post_Category.php85.00%100.00%100.00%
   Field_Post_Content.php82.35%100.00%100.00%
   Field_Post_Custom_Field.php50.00%100.00%100.00%
   Field_Post_Excerpt.php81.82%100.00%100.00%
   Field_Post_Image.php94.00%100.00%100.00%
   Field_Post_Tags.php90.91%100.00%100.00%
   Field_Post_Title.php81.82%100.00%100.00%
   Field_Product.php88.46%100.00%100.00%
   Field_Products.php85.41%100.00%100.00%
   Field_Quantity.php84.62%100.00%100.00%
   Field_Quiz.php89.74%100.00%100.00%
   Field_Radio.php95.35%100.00%100.00%
   Field_Rank.php95.24%100.00%100.00%
   Field_Rating.php95.24%100.00%100.00%
   Field_Repeater.php97.37%100.00%100.00%
   Field_Section.php90.74%100.00%100.00%
   Field_Select.php94.12%100.00%100.00%
   Field_Shipping.php75.00%66.67%100.00%
   Field_Signature.php67.39%100.00%100.00%
   Field_Slim.php82.35%100.00%100.00%
   Field_Slim_Post.php91.30%100.00%100.00%
   Field_Subtotal.php65.38%75.00%100.00%
   Field_Survey.php95.00%100.00%100.00%
   Field_Tax.php32.00%50.00%100.00%
   Field_Text.php81.82%100.00%100.00%
   Field_Textarea.php90.63%100.00%100.00%
   Field_Time.php81.82%100.00%100.00%
   Field_Tos.php92.59%100.00%100.00%
   Field_Total.php68.00%66.67%100.00%
   Field_V3_List.php92.86%100.00%100.00%
   Field_V3_Products.php73.68%100.00%100.00%
   Field_V3_Section.php77.78%100.00%100.00%
   Field_Website.php85.71%100.00%100.00%
/var/www/html/wp-content/plugins/gravity-pdf/src/Helper/Fonts
   FlushCache.php80.00%100.00%100.00%
   LocalFile.php90.00%100.00%100.00%
   LocalFilesystem.php66.67%100.00%100.00%
   SupportsOtl.php88.89%100.00%100.00%
   TtfFontValidation.php72.73%100.00%100.00%
/var/www/html/wp-content/plugins/gravity-pdf/src/Helper
   Helper_Abstract_Addon.php93.33%100.00%100.00%
   Helper_Abstract_Config_Settings.php75.00%100.00%100.00%
   Helper_Abstract_Controller.php-100.00%100.00%
   Helper_Abstract_Field_Products.php89.47%66.67%100.00%
   Helper_Abstract_Fields.php93.59%93.75%100.00%
   Helper_Abstract_Fields_Input_Type.php84.00%100.00%100.00%
   Helper_Abstract_Form.php--100.00%
   Helper_Abstract_Model.php100.00%100.00%100.00%
   Helper_Abstract_Options.php75.51%78.57%100.00%
   Helper_Abstract_Pdf_Shortcode.php89.52%91.67%100.00%
   Helper_Abstract_View.php92.31%100.00%100.00%
   Helper_Data.php96.57%100.00%100.00%
   Helper_Field_Container.php92.31%100.00%100.00%
   Helper_Field_Container_Gf25.php82.22%100.00%100.00%
   Helper_Field_Container_Void.php16.67%-100.00%
   Helper_Form.php70.97%64.29%100.00%
   Helper_Interface_Actions.php-100.00%100.00%
   Helper_Interface_Config.php50.00%100.00%100.00%
   Helper_Interface_Config_Settings.php50.00%100.00%100.00%
   Helper_Interface_Deprecated_Features.php-100.00%100.00%
   Helper_Interface_Extension_Settings.php-100.00%100.00%
   Helper_Interface_Extension_Uninstaller.php-100.00%100.00%
   Helper_Interface_Field_Pdf_Config.php50.00%100.00%100.00%
   Helper_Interface_Filters.php-100.00%100.00%
   Helper_Interface_Setup_TearDown.php-100.00%100.00%
   Helper_Interface_Url_Signer.php-100.00%100.00%
   Helper_Logger.php-100.00%100.00%
   Helper_Misc.php73.56%93.94%100.00%
   Helper_Mpdf.php50.00%100.00%100.00%
   Helper_Notices.php79.69%73.33%100.00%
   Helper_Options_Fields.php96.87%100.00%100.00%
   Helper_PDF.php89.35%94.29%100.00%
   Helper_PDF_List_Table.php84.50%92.31%100.00%
   Helper_Pdf_Queue.php84.31%100.00%100.00%
   Helper_QueryPath.php80.00%100.00%100.00%
   Helper_Sha256_Url_Signer.php87.50%100.00%100.00%
   Helper_Singleton.php90.00%100.00%100.00%
   Helper_Templates.php96.44%100.00%100.00%
   Helper_Trait_Logger.php--100.00%
   Helper_Url_Signer.php82.86%100.00%100.00%
/var/www/html/wp-content/plugins/gravity-pdf/src/Helper/Licensing
   EDD_SL_Plugin_Updater.php94.80%100.00%100.00%
/var/www/html/wp-content/plugins/gravity-pdf/src/Helper/Log
   Logger.php86.89%100.00%100.00%
   Redact_Processor.php96.15%100.00%100.00%
/var/www/html/wp-content/plugins/gravity-pdf/src/Helper/Mpdf
   Cache.php66.67%100.00%100.00%
Table truncated to fit comment

🤖 PHPUnit coverage report

jakejackson1 added a commit that referenced this pull request Sep 2, 2026
Cherry-picked from `development` (#1710), so this line ships the rekey and the shim that
keeps it compatible together, rather than 6.17.0 breaking a public filter and a later release un-breaking it.

The commit before this one rekeys the system report's items array from positional integer keys to named string
keys, so the four sections an add-on knew as 0-3 become `php`, `directories`, `global` and `security`.
`gfpdf_system_status_report_items` is a public filter keyed by that same index, so every listener writing
`$items[1]['my_row']` silently stops reaching the report — no error, no notice, the row just vanishes. Gravity
PDF Core Booster's Outdated Templates warning is one of them.

The rekey is worth keeping. Two sections are added at the head of the report and every section added after would
renumber the ones below it again, which is what made the index a bad contract in the first place. So rather than
ask third parties to change their code, the old shape is served alongside the new one.

`get_report_items()` now hands the four sections to `gfpdf_system_status_report_items` at the indexes they sat at
before 6.17, through `apply_filters_deprecated()`, and reads the result back off those same indexes. A listener
written against the old shape neither sees nor needs a change; one that has moved on gets `_deprecated_hook`
under `WP_DEBUG` naming the replacement.

The sections added since — the deprecation groups — are held back from it. They have no index of their own, and
giving them one would renumber the four below them, which is the break this exists to avoid. An index the
listener invents has no section to land in and is dropped: before the rekey that auto-vivified a table with rows
and no title, which is not a shape worth reproducing.

`gfpdf_system_status_report_sections` is the replacement. It is keyed by section name and fires last, so it sees
the whole report including anything the positional filter contributed. Nothing schedules the old filter's
removal, which is why it isn't registered on `Deprecation` — that registry is the v3 layer 7.0 removes, and an
unregistered call through it would render an empty version.

`POSITIONAL_SECTIONS` is a frozen historical record rather than something derived from `get_report_structure()`.
Deriving it would auto-expose a future fifth section at index 4, and re-break every listener the moment a section
is inserted above `security`.

Kept as a commit of its own rather than squashed into the one below, so both stay byte-comparable against their
upstream counterparts — which is what this branch exists for.

The tests move to this line's `tests/phpunit/unit-tests/` path and its `WP_UnitTestCase` base; the assertions are
unchanged.

Suite: 1187 tests, up 3 from 1184 on the commit below, with no new errors or failures. The 3 errors and 2
failures that remain are the pre-existing `Helper\Mpdf\Test_Request` borrowed-`vendor_prefixed` artifact and the
PHP 8.5 licensing deprecations, both reproduced on an untouched worktree. PHPCS clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jakejackson1
jakejackson1 merged commit 6b4346b into development Sep 2, 2026
25 of 30 checks passed
@jakejackson1
jakejackson1 deleted the fix/system-report-deprecate-positional-filter branch September 2, 2026 03:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant