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
1 change: 1 addition & 0 deletions reputation-probation-reinstatement-guard/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
reports/frames/
39 changes: 39 additions & 0 deletions reputation-probation-reinstatement-guard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Reputation Probation Reinstatement Guard

Self-contained reviewer artifact for SCIBASE issue #15, focused on safe reputation re-entry after moderation probation.

This slice is intentionally narrow. It does not duplicate broad community ledgers, endorsement rings, review calibration, badge renewal/decay, leaderboard eligibility, civility checks, correction impact, peer-review recertification, workload equity, profile credit consent, or abuse detection. It evaluates whether reputation accrual can restart after a moderation outcome is already known.

## What It Checks

- Minimum probation windows before profile reputation deltas resume.
- Open appeals that should block reinstatement.
- Required remediation evidence and reviewer quorum.
- Public-redacted reinstatement receipts instead of private moderation-note exposure.
- Reputation deltas accidentally applied during probation.
- Capped re-entry so badges and leaderboards do not jump immediately after reinstatement.

## Local Verification

```sh
npm run check
npm test
npm run demo
npm run verify-video
```

`npm run demo` writes reviewer artifacts to `reports/`:

- `clean-audit.json`
- `risky-audit.json`
- `risky-review.md`
- `summary.svg`
- `manifest.json`
- `demo.mp4`

## Requirement Mapping

- Community reputation: protects score, badge, and leaderboard updates during probation.
- Transparency: emits redacted reinstatement decisions and remediation actions.
- Fairness: requires remediation evidence and independent moderator quorum before trust re-entry.
- Reviewer demonstration: synthetic clean/risky packets produce JSON, Markdown, SVG, and MP4 artifacts without credentials or external services.
42 changes: 42 additions & 0 deletions reputation-probation-reinstatement-guard/demo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
"use strict";

const fs = require("node:fs");
const path = require("node:path");
const {
evaluateProbationReinstatementPacket,
renderMarkdownReport,
renderSvgSummary
} = require("./index");
const { cleanPacket, riskyPacket } = require("./sample-data");

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

const clean = evaluateProbationReinstatementPacket(cleanPacket, { now: "2026-06-01T11:00:00.000Z" });
const risky = evaluateProbationReinstatementPacket(riskyPacket, { now: "2026-06-01T11:00:00.000Z" });
const manifest = {
module: "reputation-probation-reinstatement-guard",
issue: 15,
generatedAt: "2026-06-01T11:00:00.000Z",
scenarios: [
{ name: "clean", status: clean.status, fingerprint: clean.fingerprint, findings: clean.findings.length },
{ name: "risky", status: risky.status, fingerprint: risky.fingerprint, findings: risky.findings.length }
],
artifacts: [
"reports/clean-audit.json",
"reports/risky-audit.json",
"reports/risky-review.md",
"reports/summary.svg",
"reports/demo.mp4"
]
};

fs.writeFileSync(path.join(reportsDir, "clean-audit.json"), `${JSON.stringify(clean, null, 2)}\n`);
fs.writeFileSync(path.join(reportsDir, "risky-audit.json"), `${JSON.stringify(risky, null, 2)}\n`);
fs.writeFileSync(path.join(reportsDir, "risky-review.md"), renderMarkdownReport(risky, riskyPacket));
fs.writeFileSync(path.join(reportsDir, "summary.svg"), renderSvgSummary(risky));
fs.writeFileSync(path.join(reportsDir, "manifest.json"), `${JSON.stringify(manifest, null, 2)}\n`);

console.log(`Clean status: ${clean.status} (${clean.fingerprint})`);
console.log(`Risky status: ${risky.status} (${risky.fingerprint})`);
console.log(`Wrote reviewer artifacts to ${reportsDir}`);
Loading