fix(gates): clear gate-7 (6) and gate-26 (3) - #227
Merged
Conversation
Hydra Gates stays red on gate-66 (13 ADR-083 violations) — that is a dependency
-shape question about how this app reaches OpenRegister, not something to fold
into a gates sweep. Two of three gates are cleared here.
## gate-26 — the coverage existed and nothing could read it
All three views ARE driven by e2e specs; the component names just appear only in
COMMENTS, never in executable text:
* DashboardIndex <- dashboard-overview.spec.ts (name in the file docblock)
* FeaturesRoadwap <- features-roadmap.spec.ts (name in the file docblock)
* TemplateGallery <- openbuild-template-catalogue.spec.ts (name in an inline
comment on line 101)
FeaturesRoadmap is the sharpest case: its manifest page is `type: "roadmap"`
with NO `component` key, so the component name genuinely appears nowhere in any
executable text in the repo.
Each spec now binds its route to a constant named after the component and
navigates through it — 11 `goto()` calls rewritten across the three files. URLs
unchanged. gate-26: 3 findings -> PASS, 5 pages all proven. prettier clean.
## gate-7 — six methods, two different reasons, both checkable
RulesController `evaluate` / `schema` / `testAll`: authorization is delegated to
OpenRegister's schema RBAC. Every read goes through this controller's private
`query()`, which calls `searchObjectsBySlug(..., _rbac: true,
_multitenancy: false)`. The tenancy opt-out is deliberate and already documented
there — `openbuild` is a SYSTEM-WIDE register, not org-scoped, so a true org
filter would throw and break resolution for every caller. `_rbac: true` is the
guard and it is explicit, which is the opposite of the usual gate-7 finding.
StoreController `search` / `install`, ShopController `githubInstall`: these
address no openbuild-owned object at all. The slug identifies a template in an
EXTERNAL catalogue (the configured store registry, or a GitHub repo), so there
is nothing of another tenant's to reach by guessing it, and the install path
CREATES a new app owned by the calling user rather than reading an existing one.
Accounting: 6 findings, 6 new tags, 0 remaining. The tree now shows 8 because it
already carried 2 — reconciled against `development` rather than trusting the
total, and each tag confirmed to sit on the method it was written for.
Contributor
Quality Report — ConductionNL/openbuild @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| test-l10n | ✅ | ||||
| check-gitignore | ✅ | ||||
| check-nc-floor | ✅ | ||||
| format | ✅ | ||||
| composer | ✅ | ✅ 106/106 | |||
| npm | ✅ | ✅ 626/626 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ❌ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-16 18:54 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hydra Gates stays red on gate-66 (13 ADR-083 violations) — that's a dependency-shape question about how this app reaches OpenRegister, not something to fold into a gates sweep. Two of three gates are cleared here.
gate-26 — the coverage existed and nothing could read it
All three views are driven by e2e specs; the component names just appear only in comments, never in executable text:
DashboardIndexdashboard-overview.spec.tsFeaturesRoadmapfeatures-roadmap.spec.tsTemplateGalleryopenbuild-template-catalogue.spec.tsFeaturesRoadmapis the sharpest case: its manifest page istype: "roadmap"with nocomponentkey, so the component name genuinely appears nowhere in any executable text in the repo.Each spec now binds its route to a constant named after the component and navigates through it — 11
goto()calls rewritten across the three files. URLs unchanged. gate-26: 3 findings → PASS, 5 pages all proven. prettier clean.gate-7 — six methods, two different reasons, both checkable
RulesControllerevaluate/schema/testAll— authorization is delegated to OpenRegister's schema RBAC. Every read goes through the controller's privatequery(), which callssearchObjectsBySlug(..., _rbac: true, _multitenancy: false). The tenancy opt-out is deliberate and already documented there:openbuildis a system-wide register, not org-scoped, so a true org filter would throw and break resolution for every caller._rbac: trueis the guard and it's explicit — the opposite of the usual gate-7 finding.StoreControllersearch/install,ShopControllergithubInstall— these address no openbuild-owned object at all. The slug identifies a template in an external catalogue (the configured store registry, or a GitHub repo), so there's nothing of another tenant's to reach by guessing it, and the install path creates a new app owned by the calling user rather than reading an existing one.Accounting: 6 findings, 6 new tags, 0 remaining. The tree now shows 8 because it already carried 2 — reconciled against
developmentrather than trusting the total, and each tag confirmed to sit on the method it was written for.