This is an automated email from the ASF dual-hosted git repository.

mridulpathak pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-plugins.git

commit e5462abb389fdc68da3658f94e8a06f4e15d56b6
Author: Mridul Pathak <[email protected]>
AuthorDate: Mon Oct 26 19:37:59 2026 +0530

    Require a full regression run, not just the touched component, in 
manage-contribution-workflow
    
    A clean component-scoped test run doesn't prove other components or plugins 
that internally call into the changed code still work, since a userLogin that 
was fine before a functional change may not satisfy whatever the change now 
requires. This has broken internal callers in unrelated framework components 
and, separately, in a plugins repository that a codebase grep could never find. 
Documents running the full suite (no component filter) as the default 
verification step, with codebase [...]
---
 .../manage-contribution-workflow/SKILL.md          | 33 ++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/ai-agent-skills/manage-contribution-workflow/SKILL.md 
b/ai-agent-skills/manage-contribution-workflow/SKILL.md
index 0992d572d..2d4d803d3 100644
--- a/ai-agent-skills/manage-contribution-workflow/SKILL.md
+++ b/ai-agent-skills/manage-contribution-workflow/SKILL.md
@@ -220,6 +220,39 @@ Skipping this doesn't fail loudly — it produces failures 
like
 `cleanAll loadAll` first, every time, before treating test failures as
 meaningful signal.
 
+### Regression Scope: Run The Whole Suite, Not Just The Touched Component
+
+Running only `./gradlew "ofbiz --test component=<the-component-you-changed>"`
+after a functional change is not sufficient verification, even when it
+passes clean. Other components — and even other repositories (`plugins/`) —
+can call into the component you touched internally, as a trusted side
+effect, using a `userLogin` that was never meant to satisfy whatever new
+requirement your change just added. A clean component-level suite proves
+nothing about those callers if no test in that one component happens to
+exercise the call path.
+
+This is not specific to permission checks — any functional/behavioral change
+can break an internal caller in a different component or plugin the same
+way. It has recurred more than once in the same vein of work: a change in
+one application component broke internal callers in two unrelated
+components, and a separate change broke a caller inside a `plugins/`
+repository entirely — something a codebase grep for callers inside
+`applications/` can never find, because plugin code lives outside the
+framework checkout.
+
+**The rule:** before considering any functional change verified, run
+`./gradlew cleanAll loadAll` and then the full regression suite with **no**
+`component=` filter (`./gradlew "ofbiz --test"`), which runs every
+component's and every plugin's tests — not just the one(s) you edited.
+Grepping the codebase for callers of a changed service
+(`grep -rn "\"<serviceName>\""`) is a useful first pass to scope the blast
+radius and find candidates to double-check, but it is not a substitute for
+actually running the full suite: it cannot see across repositories, and it
+can miss indirect or ECA-triggered call chains. Only fall back to a
+component-scoped run when the full suite is genuinely impractical (e.g. a
+known-slow CI environment), and say so explicitly rather than treating a
+component-only pass as equivalent verification.
+
 ## Backporting To A Release Branch
 
 When a fix committed on `trunk` also needs to land on a release branch (e.g.

Reply via email to