Skip to content

chore(ci): remove CLA check and fix milestones E2E form validation#1255

Merged
steilerDev merged 9 commits into
betafrom
chore/ci-green-cla-removal
Apr 17, 2026
Merged

chore(ci): remove CLA check and fix milestones E2E form validation#1255
steilerDev merged 9 commits into
betafrom
chore/ci-green-cla-removal

Conversation

@steilerDev
Copy link
Copy Markdown
Owner

Summary

  • Remove the optional CLA Assistant workflow and signatures artifact. Branch rulesets require only `Quality Gates` (beta) / `Quality Gates` + `E2E Gates` (main) — CLA has never been a required gate. As the sole contributor the self-signed CLA provides no value.
  • Strip stale `+ CLA` mentions from `/develop`, `/epic-close`, `/release` skill docs.
  • Add `noValidate` to the milestone create and detail-edit `` elements so the custom JS validation actually populates the error banner. Fixes E2E Scenarios 6/7 on `tests/milestones/milestones.spec.ts` across desktop/tablet/mobile (currently failing because HTML5 `required` blocks `onSubmit` before `setError` runs, leaving the error banner null).

Test plan

  • Quality Gates green
  • E2E shards green (not required on beta, but targeted so the eventual main promotion is clean)

Frank Steiler added 2 commits April 17, 2026 08:42
The CLA workflow is optional (not a required status check on beta or
main — branch rulesets require only Quality Gates / E2E Gates). As the
sole contributor, the self-signed CLA provides no value.

- Delete CLA.md, .github/workflows/cla.yml, .github/cla/signatures.json
- Strip stale "+ CLA" mentions from /develop, /epic-close, /release skill
  docs
…rror banner

HTML5 required on the title/targetDate inputs blocked form submission
before the onSubmit handler could call setError(...), so the custom
error banner (role=alert) never rendered. E2E Scenarios 6/7 on the
milestone create page asserted on a null banner text and failed across
desktop/tablet/mobile.

Adding noValidate to both the create form and the detail-page edit
form lets the JS validation handler run and populate the errorBanner
as the tests expect. The required attribute stays for screen-reader
hinting.
@github-actions
Copy link
Copy Markdown
Contributor

Thank you for your submission! We require all contributors to sign our Contributor License Agreement before we can accept your contribution.

To sign, please comment on this PR with:
I have read the CLA Document and I hereby sign the CLA


I have read the CLA Document and I hereby sign the CLA


Frank Steiler seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot.

Frank Steiler added 7 commits April 17, 2026 09:11
The SubNav component forced role='list' on the container <div> and
role='listitem' on each NavLink. Overriding the default role of an
<a> to 'listitem' makes it invisible to role=link accessibility queries,
breaking several E2E tests that navigate via getByRole('link', ...)
after the #1188 PageLayout refactor (invoices Budget subnav, settings
subnav across desktop/tablet/mobile).

Removing both role attributes lets NavLink expose its native anchor
role. Update SubNav unit tests to assert link semantics accordingly.
- MilestonesPage.getMilestoneTitles: the cardCell class does not exist
  on DataTableCard (which uses cardRow/cardValue). Scope the card
  iterator to top-level .card children (class^='card_') and read the
  title from .cardValue. Fixes the 3 mobile milestones scenarios (API
  create, delete confirm, delete cancel).

- invoices.spec.ts Scenario 2: pending summary count is returned from
  the same API response as the list, but a brief interleaving window
  after invoice creation causes the list render to show stale counts.
  Poll the summary count with expect.poll instead of a one-shot read.

- invoices.spec.ts Scenario 7: DataTable renders both the desktop
  table and the mobile cards simultaneously and toggles visibility
  via CSS media queries. locator('.invoiceLink').first() picked the
  hidden desktop <a> on mobile. Add :visible so the currently shown
  link is clicked.

- area-filter.spec.ts Scenario 1: the Area column is defaultVisible
  false, so its in-header Filter by Area button is never rendered.
  Drop the secondary assertion on the filter-button visibility; the
  core URL-based areaId filter behaviour is still fully validated.
[class*=emptyState] can match unrelated elements with classes like
emptyStateTitle/emptyStateDescription. Scope to the CSS-module-hashed
prefix emptyState_ so only the EmptyState component wrapper is picked
up. Aimed at the tablet filter-empty-state flake on shard 12.
After the SubNav role override was dropped, tests that relied on
role=listitem on nav tabs need to use role=link. Covers:

- budget/vendors.spec.ts (Vendors tab)
- budget/budget-sources.spec.ts (Sources tab)
- budget/budget-overview.spec.ts (four budget tabs)
- budget/subsidy-programs.spec.ts (Subsidies tab)
- admin/backup-restore.spec.ts (Backups tab) + remove outdated comment
- i18n/i18n.spec.ts (Auftragnehmer tab)
- MilestoneCreatePage.test.tsx: the back-link regex `/back|milestones/i`
  now collides with the SubNav Milestones tab (both role=link after the
  SubNav role override was dropped). Tighten to `/←\s*milestones/i`.

- invoices.spec.ts Scenario 1 (Budget subnav tabs): scope
  getByRole('link', 'Overview') to the Budget <nav> landmark so it
  does not collide with the project-logo link's aria-label
  ("Go to project overview").

- invoices.spec.ts Scenario 2 (Create invoice pending count): the
  create form defaults status to 'quotation' now (previously 'pending').
  Explicitly select 'pending' on the status select so the test's
  pending-summary assertion actually reflects the created invoice.

- settings-manage.spec.ts: same scoping fix for Profile / Manage
  SubNav tabs.
Same collision as MilestoneCreatePage after the SubNav role change: the
/back|milestones/i regex now matches both the header back link and the
SubNav Milestones tab. Tighten to /←\s*milestones/i.
- MilestoneDetailPage.test.tsx (not-found state): the not-found branch
  renders without SubNav and uses 'milestones.detail.backLink' which
  translates to 'Back to Milestones', not the header-format arrow.
  Restore the broader 'back to milestones' regex for this case.

- settings-manage.spec.ts (subnav test): add 'exact: true' so the
  'Manage' link query does not collide with 'User Management' tab.
@steilerDev steilerDev merged commit 4376a58 into beta Apr 17, 2026
33 of 34 checks passed
@steilerDev steilerDev deleted the chore/ci-green-cla-removal branch April 17, 2026 10:48
@github-actions github-actions Bot locked and limited conversation to collaborators Apr 17, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant