Once stryker.config.ts exists and a baseline run completes, go through every surviving mutant: either the test suite is missing an assertion that should have caught it, or the mutated code path is genuinely dead and can be deleted. Don't chase 100% for its own sake where a mutant is equivalent (behaviourally identical to the original), but a surviving mutant on a real branch (an off-by-one in expiry/narrowing checks, a swapped comparison in scope matching, a dropped early return) is a real gap and gets a real test.
Target 80% mutation score on tokens.ts, revocation-view.ts, and mesh-session.ts specifically -- those are the modules this score should actually move the needle on.
Once stryker.config.ts exists and a baseline run completes, go through every surviving mutant: either the test suite is missing an assertion that should have caught it, or the mutated code path is genuinely dead and can be deleted. Don't chase 100% for its own sake where a mutant is equivalent (behaviourally identical to the original), but a surviving mutant on a real branch (an off-by-one in expiry/narrowing checks, a swapped comparison in scope matching, a dropped early return) is a real gap and gets a real test.
Target 80% mutation score on tokens.ts, revocation-view.ts, and mesh-session.ts specifically -- those are the modules this score should actually move the needle on.