Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/<relevant-test>.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.
8 changes: 4 additions & 4 deletions tests/engine-api-coverage.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down