Skip to content
Open
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
36 changes: 36 additions & 0 deletions scientific-bounty-scope-change-guard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Scientific Bounty Scope Change Guard

Self-contained guard for SCIBASE issue #18, Scientific Bounty System.

The module reviews sponsor-requested changes after a scientific bounty is launched. It blocks or escalates changes that would move the goalposts for solver teams: problem statements, deliverables, scoring rubrics, eligibility, prize schedules, NDA/data-room terms, and post-submission effective dates.

## What It Checks

- Material changes after launch are frozen unless they include sponsor, review, and audit evidence.
- Submitted or in-progress solver work is grandfathered when scope changes after submissions begin.
- Rubric weights still total 100 and changed scoring criteria have equal-notice evidence.
- Eligibility and NDA/data-room changes cannot silently narrow access for active teams.
- Prize schedule changes need finance/escrow evidence before scoring or payout.
- Active solver teams receive equal notice, and material changes require consent or a deadline extension.

## Files

- `index.js` - evaluation engine and report formatters
- `sample-data.js` - synthetic challenge scenarios
- `test.js` - dependency-free tests using Node's built-in `assert`
- `demo.js` - generates reviewer JSON, Markdown, and SVG reports
- `render-video.js` - renders a short MP4 with `ffmpeg`, or an animated GIF fallback with ImageMagick
- `reports/demo.mp4` / `reports/demo.gif` - reviewer demo artifact

## Validation

```bash
node scientific-bounty-scope-change-guard/test.js
node scientific-bounty-scope-change-guard/demo.js
node scientific-bounty-scope-change-guard/render-video.js
node --check scientific-bounty-scope-change-guard/index.js
node --check scientific-bounty-scope-change-guard/sample-data.js
node --check scientific-bounty-scope-change-guard/test.js
node --check scientific-bounty-scope-change-guard/demo.js
node --check scientific-bounty-scope-change-guard/render-video.js
```
24 changes: 24 additions & 0 deletions scientific-bounty-scope-change-guard/demo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const fs = require('fs');
const path = require('path');
const {
evaluateScopeChangeControl,
formatMarkdownReport,
formatSvgSummary
} = require('./index');
const { reviewInput } = require('./sample-data');

const reportsDir = path.join(__dirname, 'reports');
fs.mkdirSync(reportsDir, { recursive: true });

const evaluation = evaluateScopeChangeControl(reviewInput);

fs.writeFileSync(
path.join(reportsDir, 'scope-change-review.json'),
`${JSON.stringify(evaluation, null, 2)}\n`
);
fs.writeFileSync(path.join(reportsDir, 'scope-change-review.md'), formatMarkdownReport(evaluation));
fs.writeFileSync(path.join(reportsDir, 'scope-change-review.svg'), formatSvgSummary(evaluation));

console.log(`Generated reports in ${reportsDir}`);
console.log(`Overall decision: ${evaluation.overallDecision}`);

Loading