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 promotion-dossier-export-guard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Promotion Dossier Export Guard

This self-contained Community & User Reputation System slice validates synthetic reputation and contribution dossier exports before they are shared with institutions, funders, tenure committees, annual-review offices, or promotion workflows.

The guard is distinct from broad reputation ledgers, CRediT taxonomy validation, contributor attestation, review calibration, workload equity, leaderboard privacy, sybil detection, probation/reinstatement, appeal evidence, and peer-review recertification. It focuses only on institution-facing export packets.

## What it checks

- contributor export consent and opt-out state
- anonymous or double-blind reviewer redaction
- semi-private review export permission
- CRediT contribution evidence links
- badge and reputation evidence freshness
- citation/profile export purpose boundaries
- conflict note redaction
- reviewer-safe remediation before dossier release

## Run locally

```sh
npm test
npm run demo
swift scripts/make-demo-video.swift artifacts/promotion-dossier-demo.mp4
```

The demo writes reviewer artifacts under `artifacts/`:

- `promotion-dossier-results.json`
- `promotion-dossier-report.md`
- `promotion-dossier-summary.svg`
- `promotion-dossier-demo.mp4`
- `demo-transcript.md`

## Boundaries

All packets are synthetic. The module does not call institutional systems, HR systems, private profile stores, live reputation services, credentials, external APIs, or payment systems.
16 changes: 16 additions & 0 deletions promotion-dossier-export-guard/REQUIREMENT_MAP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Requirement Map

| Issue requirement | Implementation |
| --- | --- |
| Structured peer reviews and comments | Validates review visibility, anonymous/double-blind redaction, and semi-private export permission before dossier release. |
| Review history tracked on profiles | Ensures reviewer-safe history is exportable only when visibility rules allow it. |
| Contributor credits | Requires CRediT-style contribution evidence links and timestamps before institutional export. |
| Visible credit on researcher profiles and citation pages | Checks profile export purpose, opt-out state, and contributor consent. |
| Reputation scoring | Reviews score deltas and badge evidence freshness before reputation is used in promotion or grant packets. |
| Institutional reporting and promotion support | Produces deterministic RELEASE, REVIEW, and HOLD decisions for tenure, promotion, annual-review, and grant-report exports. |
| Reviewer-ready evidence | Demo script generates JSON, Markdown, SVG, transcript, and MP4 artifacts from synthetic dossier packets. |
| Safe contribution boundary | Uses synthetic records only; no live people, credentials, private profile stores, HR systems, or external APIs. |

## Distinct slice statement

This contribution focuses only on institution-facing reputation dossier export readiness. It does not implement general scoring, CRediT role validation, contributor attestation, workload equity, leaderboard privacy, abuse detection, probation/reinstatement, appeal evidence, or peer-review evidence recertification.
14 changes: 14 additions & 0 deletions promotion-dossier-export-guard/artifacts/demo-transcript.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Demo Transcript

1. Load four synthetic institution-facing reputation dossier packets.
2. Evaluate consent, opt-out state, anonymous review redaction, semi-private review authorization, credit evidence, badge freshness, and conflict notes.
3. Emit deterministic export decisions: RELEASE_DOSSIER, REVIEW_BEFORE_EXPORT, or HOLD_EXPORT.
4. Write JSON, Markdown, and SVG artifacts for reviewer replay.

## Demo Output

- Release: 1
- Review: 1
- Hold: 2
- Held dossiers: dossier-opt-out, dossier-blind-leak
- Review dossiers: dossier-stale-review
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Promotion Dossier Export Report

As of: 2026-06-18

## Summary

- Total dossiers: 4
- Release: 1
- Review: 1
- Hold: 2

## Dossier Decisions

| Researcher | Purpose | Recipient | Decision | Primary reason |
| --- | --- | --- | --- | --- |
| Dr. Lina Park | promotion | institutional-promotion-committee | RELEASE_DOSSIER | All export checks passed |
| Dr. Amara Singh | annual-review | department-chair | HOLD_EXPORT | CONTRIBUTOR_OPT_OUT: Researcher has opted out of institution-facing dossier export. |
| Dr. Theo Imani | grant-report | external-funder | HOLD_EXPORT | BLIND_REVIEW_IDENTITY_LEAK: Review review-blind-2 is anonymous but reviewer identity is not safely redacted. |
| Dr. Noura Bell | tenure | faculty-affairs | REVIEW_BEFORE_EXPORT | BADGE_EVIDENCE_STALE: Badge reproducibility-badge evidence is 550 days old. |

## Remediation Actions

### Dr. Lina Park
- Release dossier to the configured institution-facing recipient.

### Dr. Amara Singh
- Remove this dossier from the export batch or collect updated consent.

### Dr. Theo Imani
- Redact reviewer identity and regenerate the dossier.
- Exclude the restricted review or attach author export consent.
- Refresh badge evidence or annotate the dossier with stale-evidence status.
- Attach source reputation events before export.
- Replace internal conflict notes with a reviewer-safe export summary.

### Dr. Noura Bell
- Attach contribution evidence before using this credit in a dossier.
- Refresh badge evidence or annotate the dossier with stale-evidence status.
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
{
"asOf": "2026-06-18",
"policy": {
"evidenceFreshnessDays": 365,
"restrictedReviewRequiresAuthorConsent": true
},
"summary": {
"totalDossiers": 4,
"release": 1,
"review": 1,
"hold": 2,
"heldDossierIds": [
"dossier-opt-out",
"dossier-blind-leak"
],
"reviewDossierIds": [
"dossier-stale-review"
],
"topRisks": [
{
"dossierId": "dossier-opt-out",
"severity": "HOLD_EXPORT",
"code": "CONTRIBUTOR_OPT_OUT"
},
{
"dossierId": "dossier-blind-leak",
"severity": "HOLD_EXPORT",
"code": "BLIND_REVIEW_IDENTITY_LEAK"
},
{
"dossierId": "dossier-blind-leak",
"severity": "HOLD_EXPORT",
"code": "RESTRICTED_REVIEW_EXPORT_NOT_AUTHORIZED"
},
{
"dossierId": "dossier-blind-leak",
"severity": "REVIEW_BEFORE_EXPORT",
"code": "BADGE_EVIDENCE_STALE"
},
{
"dossierId": "dossier-blind-leak",
"severity": "REVIEW_BEFORE_EXPORT",
"code": "CONFLICT_NOTES_REQUIRE_REDACTION"
},
{
"dossierId": "dossier-blind-leak",
"severity": "REVIEW_BEFORE_EXPORT",
"code": "REPUTATION_DELTA_SOURCE_MISSING"
},
{
"dossierId": "dossier-stale-review",
"severity": "REVIEW_BEFORE_EXPORT",
"code": "BADGE_EVIDENCE_STALE"
},
{
"dossierId": "dossier-stale-review",
"severity": "REVIEW_BEFORE_EXPORT",
"code": "CREDIT_EVIDENCE_MISSING"
}
]
},
"results": [
{
"dossierId": "dossier-release",
"researcher": "Dr. Lina Park",
"purpose": "promotion",
"recipient": "institutional-promotion-committee",
"decision": "RELEASE_DOSSIER",
"exportSignals": {
"reviewCount": 2,
"creditCount": 2,
"badgeCount": 1,
"blindReviewCount": 1,
"restrictedReviewCount": 1
},
"evidence": {
"exportConsentAt": "2026-04-12",
"optOut": false,
"reputationSourceEventIds": [
"review-evidence-100",
"credit-data-221",
"badge-open-2026"
]
},
"reasons": [],
"actions": [],
"riskScore": 0
},
{
"dossierId": "dossier-opt-out",
"researcher": "Dr. Amara Singh",
"purpose": "annual-review",
"recipient": "department-chair",
"decision": "HOLD_EXPORT",
"exportSignals": {
"reviewCount": 1,
"creditCount": 1,
"badgeCount": 0,
"blindReviewCount": 0,
"restrictedReviewCount": 0
},
"evidence": {
"exportConsentAt": "2025-11-03",
"optOut": true,
"reputationSourceEventIds": [
"review-evidence-200"
]
},
"reasons": [
{
"severity": "HOLD_EXPORT",
"code": "CONTRIBUTOR_OPT_OUT",
"message": "Researcher has opted out of institution-facing dossier export."
}
],
"actions": [
"Remove this dossier from the export batch or collect updated consent."
],
"riskScore": 2
},
{
"dossierId": "dossier-blind-leak",
"researcher": "Dr. Theo Imani",
"purpose": "grant-report",
"recipient": "external-funder",
"decision": "HOLD_EXPORT",
"exportSignals": {
"reviewCount": 2,
"creditCount": 1,
"badgeCount": 1,
"blindReviewCount": 1,
"restrictedReviewCount": 2
},
"evidence": {
"exportConsentAt": "2026-05-08",
"optOut": false,
"reputationSourceEventIds": []
},
"reasons": [
{
"severity": "HOLD_EXPORT",
"code": "BLIND_REVIEW_IDENTITY_LEAK",
"message": "Review review-blind-2 is anonymous but reviewer identity is not safely redacted."
},
{
"severity": "HOLD_EXPORT",
"code": "RESTRICTED_REVIEW_EXPORT_NOT_AUTHORIZED",
"message": "Review review-semi-1 is semi-private and lacks author consent for export."
},
{
"severity": "REVIEW_BEFORE_EXPORT",
"code": "BADGE_EVIDENCE_STALE",
"message": "Badge trusted-reviewer evidence is 443 days old."
},
{
"severity": "REVIEW_BEFORE_EXPORT",
"code": "CONFLICT_NOTES_REQUIRE_REDACTION",
"message": "Conflict notes are present and must be redacted or summarized before export."
},
{
"severity": "REVIEW_BEFORE_EXPORT",
"code": "REPUTATION_DELTA_SOURCE_MISSING",
"message": "Reputation delta is present without source event ids."
}
],
"actions": [
"Redact reviewer identity and regenerate the dossier.",
"Exclude the restricted review or attach author export consent.",
"Refresh badge evidence or annotate the dossier with stale-evidence status.",
"Attach source reputation events before export.",
"Replace internal conflict notes with a reviewer-safe export summary."
],
"riskScore": 7
},
{
"dossierId": "dossier-stale-review",
"researcher": "Dr. Noura Bell",
"purpose": "tenure",
"recipient": "faculty-affairs",
"decision": "REVIEW_BEFORE_EXPORT",
"exportSignals": {
"reviewCount": 1,
"creditCount": 1,
"badgeCount": 1,
"blindReviewCount": 0,
"restrictedReviewCount": 0
},
"evidence": {
"exportConsentAt": "2026-02-01",
"optOut": false,
"reputationSourceEventIds": [
"review-evidence-401"
]
},
"reasons": [
{
"severity": "REVIEW_BEFORE_EXPORT",
"code": "BADGE_EVIDENCE_STALE",
"message": "Badge reproducibility-badge evidence is 550 days old."
},
{
"severity": "REVIEW_BEFORE_EXPORT",
"code": "CREDIT_EVIDENCE_MISSING",
"message": "CRediT role \"Writing - review and editing\" lacks an evidence id."
}
],
"actions": [
"Attach contribution evidence before using this credit in a dossier.",
"Refresh badge evidence or annotate the dossier with stale-evidence status."
],
"riskScore": 2
}
]
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading