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
23 changes: 23 additions & 0 deletions research-editor-authorship-governance/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Research Editor Authorship Governance

This module adds a focused real-time collaborative research editor slice for authorship, contribution, and submission approval governance. It is designed as a final submission gate for collaborative manuscripts.

## What it checks

- CRediT contribution role coverage
- Author approvals tied to the current manuscript hash
- Conflict-of-interest disclosure status
- Non-author contributors who edited content without acknowledgement
- Blocking comments and required suggestions that remain open
- Figure, table, and equation owner approvals
- Submission readiness actions and deterministic audit digest

## Run locally

```bash
npm run check
npm test
npm run demo
```

The sample data intentionally blocks submission because one author has not approved the current manuscript, a COI disclosure is missing, a non-author contributor is unresolved, and blocking editor review objects are still open.
25 changes: 25 additions & 0 deletions research-editor-authorship-governance/demo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"use strict";

const sampleBundle = require("./sample-data.json");
const {
analyzeAuthorshipGovernance,
} = require("./src/research-editor-authorship-governance");

const result = analyzeAuthorshipGovernance(sampleBundle);

console.log(`Manuscript: ${result.title}`);
console.log(`Target journal: ${result.targetJournal}`);
console.log(`Decision: ${result.decision}`);
console.log(`Audit digest: ${result.auditDigest}`);
console.log("");
console.log("Submission actions:");
for (const action of result.submissionActions) {
console.log(`- ${action}`);
}
console.log("");
console.log("Findings:");
for (const finding of result.findings) {
console.log(`- [${finding.severity}] ${finding.id}: ${finding.title}`);
console.log(` detail: ${finding.detail}`);
console.log(` remediation: ${finding.remediation}`);
}
Binary file not shown.
15 changes: 15 additions & 0 deletions research-editor-authorship-governance/docs/requirement-map.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Requirement Map

| Collaborative editor requirement | Implementation |
| --- | --- |
| Scientific document blocks | `manuscript.blocks` models sections, figures, and tables with owner and edit metadata. |
| Comments and suggestions | Blocking comments and required suggestions must be resolved before submission readiness. |
| Version history and approval | Author approvals are checked against the current manuscript hash, preventing stale approval reuse. |
| Task workflow | Findings produce actionable submission tasks such as collecting approvals, resolving suggestions, and reviewing contributors. |
| Collaboration governance | Non-author contributors who edited manuscript content are surfaced for authorship or acknowledgement review. |
| Publication readiness | CRediT role coverage, COI disclosures, and asset owner approvals are validated before journal export. |
| Auditability | Results include findings, actions, manuscript hash, and a deterministic `sha256` audit digest. |

## Demo Video

The PR includes `docs/authorship-governance-demo.mp4`, a real terminal walkthrough running the local check, test, and demo scripts.
12 changes: 12 additions & 0 deletions research-editor-authorship-governance/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "research-editor-authorship-governance",
"version": "1.0.0",
"description": "Authorship and submission approval governance for collaborative research editors.",
"main": "src/research-editor-authorship-governance.js",
"scripts": {
"check": "node --check src/research-editor-authorship-governance.js && node --check test.js && node --check demo.js",
"test": "node test.js",
"demo": "node demo.js"
},
"license": "MIT"
}
88 changes: 88 additions & 0 deletions research-editor-authorship-governance/sample-data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
{
"now": "2026-05-15T00:00:00.000Z",
"manuscript": {
"id": "ms-cell-atlas-submission",
"title": "Cross-lab validation of a cell atlas workflow",
"targetJournal": "Journal of Reproducible Biology",
"currentHash": "sha256:8c7f71060072b1a5f135ad78a11a6fcd3cb4000f4028720df6b99592dc401f4c",
"blocks": [
{
"id": "section-methods",
"type": "section",
"lastEditedBy": ["author-mira", "contrib-dan"]
},
{
"id": "fig-2",
"type": "figure",
"ownerAuthorId": "author-leo",
"lastEditedBy": ["author-leo"]
},
{
"id": "table-1",
"type": "table",
"ownerAuthorId": "author-mira",
"lastEditedBy": ["author-mira"]
}
]
},
"authors": [
{
"id": "author-mira",
"name": "Mira Chen",
"creditRoles": ["Conceptualization", "Methodology", "Writing - original draft"],
"approvals": [
{
"manuscriptHash": "sha256:8c7f71060072b1a5f135ad78a11a6fcd3cb4000f4028720df6b99592dc401f4c",
"status": "approved",
"approvedAt": "2026-05-14T10:00:00.000Z"
}
],
"coiDisclosure": {
"status": "submitted",
"submittedAt": "2026-05-14T09:00:00.000Z"
},
"assetApprovals": ["table-1"]
},
{
"id": "author-leo",
"name": "Leo Alvarez",
"creditRoles": ["Data curation", "Formal analysis"],
"approvals": [
{
"manuscriptHash": "sha256:old-draft",
"status": "approved",
"approvedAt": "2026-05-01T10:00:00.000Z"
}
],
"coiDisclosure": {
"status": "missing"
},
"assetApprovals": []
}
],
"contributors": [
{
"id": "contrib-dan",
"name": "Dan Reviewer",
"acknowledgementStatus": "unresolved"
}
],
"comments": [
{
"id": "comment-24",
"blockId": "section-methods",
"status": "open",
"blocking": true,
"text": "Clarify preprocessing parameter lock before submission."
}
],
"suggestions": [
{
"id": "suggestion-12",
"blockId": "fig-2",
"status": "open",
"requiredBeforeSubmission": true,
"text": "Add colorblind-safe legend labels."
}
]
}
Loading