Repository navigation
Releases: Pollora/harness
Releases · Pollora/harness
Release list
v0.1.16
Changed
- The Distribution archive gate (QA-06) blocks. It started observed in 0.1.15 so that raising the harness turned no repository red; all the Pollora packages and the framework now run
pollora-qa archive --fixclean, so a release archive that carries a development file (tests, CI, tool configuration, agent files) fails the check inenforcemode. A repository that is not ready listsDistribution archiveunderobservedin.harness.json
v0.1.15
Added
- A Distribution archive gate (QA-06):
pollora-qa checkbuilds the archivegit archivewould produce and fails when a development file is in it (tests/,.github/,.claude/,AGENTS.md,.harness.json,api-surface.json,rector.php,composer-dependency-analyser.php,phpstan*.neon,phpunit*.xml,pint.json,renovate.json,.gitignore,.gitattributes…), with the.gitattributeslines to add. It reads the real archive, because anexport-ignoreon a directory cannot be seen file by file. It runs for thecore,framework,integrationandwp-pluginprofiles: the archive of atemplateor aprojectis the product. It is skipped wheregit archivecannot be built. It starts observed (reported, never blocking, like the npm audit did), so that raising the harness to this version turns no repository red; a repository fixes.gitattributeswithpollora-qa archive --fixwhen it raises it, and the gate will block in a later version pollora-qa archive [--fix]: checks the same thing from the command line;--fixadds the missingexport-ignorelines to.gitattributes, under one header, and never removes a linepollora-qa initkeeps the files it creates out of the archive of acore,framework,integrationorwp-pluginrepository:.claude,.harness.json,AGENTS.md,rector.php,api-surface.jsonandcomposer-dependency-analyser.php, plus thetests,.githuband tool configuration it finds..gitattributeslists itself, since a tracked.gitattributeswould otherwise travel in the archive
v0.1.14
Fixed
- A file that calls
exit()ordie()no longer ends a run with a pass. A WordPress plugin starts nearly every file withdefined('ABSPATH') || exit;.pollora-qa surfaceand the Public surface gate load the plugin's classes, so the first guarded file stopped the whole process with status 0, before the summary and the Ratchet gate, and CI read that as a pass. The run now fails with a message that says what happened - The surface extractor defines
ABSPATHandWPINCwhen WordPress is absent (only if they are not defined), so the guarded files of a plugin load and its attributes, hooks, configuration keys and commands are recorded
v0.1.13
Changed
- SEC-04 also skips three more WordPress core functions that return escaped HTML:
get_block_wrapper_attributes(),get_previous_posts_link()andget_next_posts_link(). With them, the Pollora theme template reports nothing for SEC-04, and itsobserved: securitycan go - ARCH-05 has no exception any more:
src/ThirdParty/is no longer excluded from the rule, since the framework moved WooCommerce and WP Rocket to their own packages. A framework that still has code insrc/ThirdParty/that names a plugin is now reported
v0.1.12
Added
- Dependency audit (npm) (SEC-09):
pollora-qa checkrunsnpm audit --audit-level=highfor everypackage-lock.jsonof the repository (the root and up to two levels down, nevernode_modules,vendoror.worktrees), andtemplate.ymlhas a matchingnpm-auditjob. Composer's audit does not see these alerts. The gate is observed: it reports and never blocks, inenforcemode too, until a later release makes it blocking
Changed
- SEC-04 no longer reports the outputs that are escaped by construction:
{!! !!}followed by an escaping function (esc_attr,esc_html,esc_url,esc_js,esc_textarea, their__,_eand_xforms,wp_kses,wp_kses_post,wp_kses_data,absint,wc_kses_notice,wp_strip_all_tags), a component$slot, or one of the WordPress and WooCommerce functions that return HTML they have escaped themselves (post_class,wc_price,wp_nav_menu,get_search_form…, the list is inpresets/semgrep/common.yml). Only the first call is looked at, so{!! esc_html($a) . $b !!}passes: keep the whole expression escaped. Anything else (apply_filters(),do_shortcode(),get_option(), a variable, a theme's own helper) is still reported and needs{{ }}, an escaping function, or anosemgrepcomment that says why. On the Apiary theme the reports go from 310 to 114
v0.1.11
Added
observedinput oftemplate.yml: the gates (secrets,style,security,audit) reported but never blocking, inenforcemode too, asobserveddoes in a package's.harness.json
Fixed
- The style gate of
template.ymlparses a template: the placeholders the scaffolder fills in (%theme_namespace%) are not PHP and made Pint fail on every file that holds one, whatever its style. Pint runs on a copy where each placeholder is an identifier
v0.1.10
Added
template.yml, a reusable workflow for a template (the skeleton, a theme, a plugin, a module): secrets, code style, security patterns and dependency audit, run from the outside. The template installs nothing and carries no.harness.json: it only adds.github/workflows/harness.yml, so nothing of the harness is copied into the projects built from it.mode: enforceblocks a merge,observereports