diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 10d08a3..638d2fa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,3 +27,18 @@ npm run cellfence:self-check Do not relax fixture expectations to hide implementation defects. If a fixture reveals an ambiguity, record the ambiguity in the change description and update the protocol only when the intended rule is clear. Publishing is intentionally not automated in v0.x. Future npm publishing should use GitHub OIDC trusted publishing rather than long-lived package tokens. + +## Lightweight contributor workflow + +If you're new to the project or just want to tackle a small issue, follow this +short path: + +1. **Pick an issue** - look for issues labeled `good first issue` or `help wanted`. +2. **Comment before you start** - add a comment on the issue stating you're working on it. +3. **Keep the PR focused** - address only the issue acceptance criteria, without unrelated refactors or generated output. +4. **Run targeted validation first** - use the smallest relevant npm check, such as `node --test tests/.mjs`, `npm run build`, or `npm test`. +5. **Report skipped slow checks** - if a full suite or mutation run is not practical, say exactly what you skipped and why. +6. **Include validation results** - add the commands you ran and a short result summary to the PR description. + +Documentation-only changes can use focused validation when the PR explains why +broader checks were not needed. diff --git a/tests/engine-api-coverage.test.mjs b/tests/engine-api-coverage.test.mjs index e28f529..bbab067 100644 --- a/tests/engine-api-coverage.test.mjs +++ b/tests/engine-api-coverage.test.mjs @@ -1363,20 +1363,20 @@ test("engine changed checks require an explicit plugin cache identity", () => { plugins: [plugin], }); assert.equal(uncached.baseCacheHit, false); - const seeded = checkChangedRepository({ + const seeded = withFrozenDate("2026-01-01T00:00:00.000Z", () => checkChangedRepository({ rootDir, manifestPath: "cellfence.manifest.json", baseRef: "HEAD", plugins: [plugin], pluginCacheKey: "cache-test@1", - }); - const cached = checkChangedRepository({ + })); + const cached = withFrozenDate("2026-01-01T00:00:00.000Z", () => checkChangedRepository({ rootDir, manifestPath: "cellfence.manifest.json", baseRef: "HEAD", plugins: [plugin], pluginCacheKey: "cache-test@1", - }); + })); assert.equal(seeded.baseCacheHit, false); assert.equal(cached.baseCacheHit, true); } finally {