• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Unleash / unleash / 43429019315
89%
master: 91%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 13 Nov 2026 12:58PM UTC
Jobs 1
Files 1263
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

13 Nov 2026 12:52PM UTC coverage: 88.759% (-0.008%) from 88.767%
43429019315

push

github

web-flow
fix: scope milestone strategy updates to the feature's release plan

Fixes an issue where you could update strategies belonging to release
*templates* and strategies belonging to other features/envs as long as
they were milestone strategies.

Does this by adding a check that the target is a strategy on a release
*plan* in the *current environment*, belonging to *this feature* and in
*this environment*. We don't check that it belongs to any *specific*
plan because A) we don't provide a plan id in the path, and B) you can
still only have one plan per env. Still, even if there were more, the
strategy id should uniquely identify the strat and if you can update one
plan in an env, you can update others.

Also prevents change requests from circumventing the same validation,
leading to 409s if you've got invalid changes on application. This is
the same pattern we do with other changes: we don't validate that the
change is valid when you add it to the CR, only when you attempt to
apply it.

<details>
<summary>Claude's words 🤖 </summary>

`PUT
/api/admin/projects/:project/features/:featureName/environments/:environment/milestone-strategies/:strategyId`
checked `UPDATE_FEATURE_STRATEGY` against the project and environment in
the URL, but the service only checked that a milestone strategy with
that ID existed. Release templates and applied plans share the
`milestone_strategies` table, so a user with that one permission could
overwrite a release template's strategies, or the inactive milestone
strategies of a plan on another feature, another environment or a
feature in another project. The same ID could be carried in an
`updateMilestoneStrategy` change request and written when it was
applied.

## Mitigations

- `ReleasePlanMilestoneStrategyService.unprotectedUpdateStrategy` now
confirms, before any write, that the strategy's milestone belongs to a
release plan definition with `discriminator = 'plan'` whose feature and
environment match the request, and that the f... (continued)

4200 of 5290 branches covered (79.4%)

2 of 5 new or added lines in 2 files covered. (40.0%)

16843 of 18976 relevant lines covered (88.76%)

804.86 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
17.65
-1.1% src/lib/features/release-plans/release-plan-milestone-strategy-store.ts
1
92.59
-3.24% src/lib/features/release-plans/release-plan-milestone-strategy-service.ts
Jobs
ID Job ID Ran Files Coverage
1 43429019315.1 13 Nov 2026 12:58PM UTC 1263
88.76
GitHub Action Run
Source Files on build 43429019315
  • Tree
  • List 1263
  • Changed 3
  • Source Changed 2
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #43429019315
  • 1251f45d on github
  • Prev Build on main (#43403292931)
  • Next Build on main (#43434493736)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc