feat: 新增 gitlink-research-fair 科研软件 FAIR 体检 Skill(子任务四) #5

Merged
yetja merged 11 commits from caoweiqiong/gitlink-cli:feat/gitlink-research-fair into master 2026-07-02 16:15:10 +08:00
7 changed files with 1300 additions and 0 deletions

View File

@ -0,0 +1,638 @@
# gitlink-research-fair Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Build a `gitlink-research-fair` Claude Code Skill that turns any GitLink research repo into a FAIR 体检报告卡 + auto-remediation PR + reproducibility certificate.
**Architecture:** Methodology-type Skill (pure Markdown + gitlink-cli calls, no Go). Report-card-centric: M1 FAIR Checker (5-axis rubric, reuses gitlink-license for license/security) + M2 KG + M3 OpenAlex provenance + M4 Remediation. Validated end-to-end on `songhui18/ICCV2021论文复现`.
**Tech Stack:** Markdown (SKILL.md/REFERENCE.md/examples), gitlink-cli (Go CLI, source build), Mermaid (KG viz), OpenAlex REST (optional enrichment).
**Source of truth:** `docs/superpowers/specs/2026-07-01-gitlink-research-fair-design.md` (read it first).
---
## Environment & Gotchas (engineer must know)
- **Branch:** already on `feat/gitlink-research-fair` (master is protected — never push master). Commit only your own files; leave pre-existing `D README_TASKB.md` / `D gitlink-cli.exe` / `?? dist/` untouched.
- **Binary:** use the go/bin source build. Verify: `gitlink-cli version``gitlink-cli dev`, and `gitlink-cli search --help` shows `+repos`. If commands like `file`/`member` are missing, run `go build -o gitlink-cli.exe .` in the repo root and use `./gitlink-cli.exe`.
- **Encoding (Windows):** gitlink-cli JSON contains Chinese. When parsing with Python, always set `PYTHONUTF8=1 PYTHONIOENCODING=utf-8`. Never inline Chinese inside `python -c "..."` on this shell (GBK-mangles it) — write a `.py` file instead.
- **Known GitLink CLI bug:** `file +tree --recursive true` returns empty on some repos. Workaround: `file +tree` top-level → `file +get --path <subdir>` recursively, or use `file +list`.
- **All examples use `--owner songhui18 --repo ICCV2021论文复现`** unless noted. 处方 (open PR) needs write access → **fork first** (`gitlink-cli repo +fork`); if fork/push fails, fall back to `--no-fork` (write materials to local files).
- **Verification commands** use `grep` (available in Git Bash). Expected outputs are illustrative; the check is "contains the key string".
---
## File Structure
| File | Responsibility |
|------|----------------|
| `skills/gitlink-research-fair/SKILL.md` | Entry doc: frontmatter, CRITICAL headers, command interface, 8-step pipeline, 5-axis rubric, report card template, remediation guardrails, certificate, KG/OpenAlex, error table |
| `skills/gitlink-research-fair/REFERENCE.md` | Deep reference: FAIR4RS per-principle mapping, scoring algorithm, KG schema (triples), OpenAlex fields, SWH-ID notes, **academic citation library**, honesty caveats (incl. 2 banned claims), live-probe findings |
| `skills/gitlink-research-fair/examples/research-fair-workflow.md` | Real walkthrough on songhui18: report card + remediation PR + certificate, with contrast run on a licensed repo |
| `skills/gitlink-research-fair/examples/img/` | Screenshots (GitLink web: opened PR) — optional but recommended for deliverable |
| `skills/README.md` | Add gitlink-research-fair row (科研辅助类) |
| `skills/gitlink-workflow/SKILL.md` | Optional cross-link |
---
## Task 1: Scaffold SKILL.md (frontmatter + CRITICAL headers)
**Files:**
- Create: `skills/gitlink-research-fair/SKILL.md`
- [ ] **Step 1: Create SKILL.md with frontmatter and CRITICAL headers**
Content (exact):
```markdown
---
name: gitlink-research-fair
version: 1.0.0
description: "科研软件 FAIR 体检:分析 GitLink 科研仓库的可发现/可访问/可互操作/可复用/可复现性,输出体检报告卡,自动开 PR 修复缺口并签发 SWH/commit 锚定的可复现证书。当用户需要评估科研仓库的 FAIR 性与可复现性、生成科研软件体检报告时触发。"
metadata:
requires:
bins: ["gitlink-cli"]
cliHelp: "gitlink-cli repo --help"
---
# gitlink-research-fair科研软件 FAIR 体检)
**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
**CRITICAL — 所有写操作(开修复 PR默认先预览、确认后再执行`--auto` 跳过预览但仍受护栏约束。**
**CRITICAL — 绝不自动 merge绝不 force-push处方只对 fork 开 PR绝不碰原仓库。**
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`GitHub CLI操作 GitLink 资源。**
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md)详细检查清单、评分算法、KG schema 与学术引用见 [`REFERENCE.md`](REFERENCE.md)。
```
- [ ] **Step 2: Verify frontmatter + CRITICAL lines**
Run: `head -20 skills/gitlink-research-fair/SKILL.md | grep -c -e "name: gitlink-research-fair" -e "description:" -e "CRITICAL"`
Expected: `6` (1 `name:` + 1 `description:` + 4 `CRITICAL` lines). If `<6`, fix.
- [ ] **Step 3: Commit**
```bash
git add skills/gitlink-research-fair/SKILL.md
git commit -m "feat(research-fair): scaffold SKILL.mdfrontmatter + CRITICAL 头)"
```
---
## Task 2: SKILL.md — 命令接口 + 8 步管道
**Files:**
- Modify: `skills/gitlink-research-fair/SKILL.md` (append after the 前置条件 line)
- [ ] **Step 1: Append 概述 + 命令接口 + 8 步管道 sections**
Append (exact content):
```markdown
## 概述
本 Skill 引导 AI 对任意 GitLink 科研仓库做结构化、有学术标准依据、低误报的"FAIR + 可复现性"诊断,产出**体检报告卡**,并对缺口**自动开 PR 修复**、用 **SWH/commit 锚定**签发**可复现证书**。许可证/安全子项**复用 `gitlink-license`**。四幕剧本v1诊断 → 处方 → 证书。
## 命令接口skill 约定参数,非 CLI flag
| 参数 | 默认 | 说明 |
|------|------|------|
| `--owner/--repo` | 自动从 cwd 解析 | 目标科研仓库 |
| `--lenses` | 全 5 轴 | 子集,如 `F,A,Repro` |
| `--auto` | 关 | 跳过预览直接开 PR仍受护栏 |
| `--no-fork` | 关 | 不开 PR处方物料落本地 |
| `--enrich` | 开 | 启用 OpenAlex 溯源(限流自动降级) |
| `--refresh` | 关 | 即使有旧报告哨兵也重评 |
## 管道8 步)
### ① 取上下文
`repo +info`(元数据/license/topics/has_dataset· `file +list`(关键文件清单)
### ② 深采
`file +get` 读 LICENSE/CITATION.cff/codemeta.json/README/requirements/Dockerfile · `release +list`(版本)· `commit +list`SHA· `issue/pr +list`(协作)· `member +list`(作者)
### ③ FAIR 评分M1
逐项评 5 轴(许可证/安全子项委托 `gitlink-license` 流程)→ `✓/✗/⚠/⊥` + 证据 + 置信度
### ④ KG 构建M2
四实体(Repo/Contributor/File/Commit)+Paper/Dataset/License 节点 → Mermaid 小图 + triples JSON
### ⑤ 溯源富集M3
从 README/CITATION 抽论文 → OpenAlex REST 反查作者/机构best-effort
### ⑥ 渲染报告卡hero
等级 + 雷达图 + 5 轴逐项表 + 处方摘要 + 证书栏 + KG 小图 + 溯源栏
### ⑦ 处方M4
`✗/⚠` 项生成 CITATION.cff/codemeta.json/LICENSE/复现章节 → 默认预览
### ⑧ 发布
确认后对 fork 开 PRPR body 带报告卡摘要)+ 出 SWH/commit 证书;内嵌哨兵
```
- [ ] **Step 2: Verify the pipeline + interface landed**
Run: `grep -c -e "管道8 步)" -e "命令接口" -e "### ⑧ 发布" skills/gitlink-research-fair/SKILL.md`
Expected: `3`
- [ ] **Step 3: Commit**
```bash
git add skills/gitlink-research-fair/SKILL.md
git commit -m "feat(research-fair): SKILL 命令接口 + 8 步管道"
```
---
## Task 3: SKILL.md — 5 轴 rubric 表
**Files:**
- Modify: `skills/gitlink-research-fair/SKILL.md` (append after 管道)
- [ ] **Step 1: Append the 5-axis rubric**
Append (exact):
```markdown
## 5 轴评分 Rubric
> 对标 **FAIR4RSNature Sci Data 2022+ howfairis 5 维**。诚实声明:这是**适配版**评分(社区尚无认证级自动校验器),不是官方认证。**FAIR ≠ 可复现**,故 Repro 单独成轴。逐条映射与证据见 [`REFERENCE.md`](REFERENCE.md)。
每项判定 `✓满足 / ✗缺失 / ⚠部分 / ⊥GitLink 无该字段(跳过并标注)`,附证据来源 + 置信度。
| 轴 | FAIR4RS 映射 | 检查项(证据) |
|----|--------------|----------------|
| **F 可发现** | F1/F2 | F1 清晰描述(repo desc ≥20 字) · F2 话题/关键词(topics) · F3 标准元数据(codemeta.json/.zenodo.json) |
| **A 可访问** | F1.2/R1.1 | A1 公开(is_public) · A2 有许可证(license_id/LICENSE)[gitlink-license] · A3 有版本发布(release tag) · A4 持久标识(commit SHA/SWH-ID) |
| **I 可互操作** | R1.1/I | I1 依赖清单(requirements/go.mod/package.json/environment.yml) · I2 许可证机器可读(SPDX/license_id) · I3 元数据标准格式(CITATION.cff/codemeta) |
| **R 可复用** | R1.2/R2 | R1 溯源/引用(CITATION.cff/README 引用) · R2 README 质量(安装+使用) · R3 源码声明[gitlink-license] · R4 无敏感泄露[gitlink-license] |
| **Repro 可复现** ⭐差异轴 | (独立于 FAIR | Rep1 环境锁(锁版本/Dockerfile) · Rep2 数据集说明(has_dataset/README 引用) · Rep3 复现步骤(README 章节) · Rep4 版本固定 · Rep5 入口可执行(main/Makefile/CLI) |
**评分**:轴分 = 满足项 / (总项 ⊥项)(⚠ 计 0.5);总评 = 5 轴均分(某轴全 ⊥ 则记 N/A 并排除);等级 **A🟢≥80 / B🟡60-79 / C🔴<60**。`confidence=low` 标"待人工确认",不进总评。
```
- [ ] **Step 2: Verify all 5 axes + scoring present**
Run: `grep -c -e "F 可发现" -e "A 可访问" -e "I 可互操作" -e "R 可复用" -e "Repro 可复现" -e "A🟢≥80" skills/gitlink-research-fair/SKILL.md`
Expected: `6`
- [ ] **Step 3: Commit**
```bash
git add skills/gitlink-research-fair/SKILL.md
git commit -m "feat(research-fair): SKILL 5 轴 FAIR rubric 表"
```
---
## Task 4: SKILL.md — 报告卡模板 + 处方护栏 + 证书 + KG/OpenAlex + 错误降级
**Files:**
- Modify: `skills/gitlink-research-fair/SKILL.md` (append after rubric)
- [ ] **Step 1: Append report card template**
Append (exact):
```markdown
## 报告卡格式hero 产出)
\`\`\`markdown
🏥 **gitlink-research-fair 科研软件体检报告**
**总体**<等级> <>/100F · A · I · R · Repro版本锚定commit <sha><release >
**范围**:检查 19 项✓N · ✗N · ⚠N · ⊥N跳过<原因>
### 五轴雷达
ASCII 或 Mermaid 雷达F/A/I/R/Repro
### 逐项
| 轴 | 项 | 状态 | 证据 |
|---|---|:---:|---|
| <> | <id 项名> | ✓/✗/⚠/⊥ | <gitlink-cli 证据> |
### 🔧 处方(可自动修复 N 项)
- [<><id>] <生成物>(从 <来源> 推断)
### 📜 可复现证书
锚定版本git+commit <sha> FAIR: <等级> Repro: <状态>
(完整 SWH-ID 需 swh-identify本次用 commit-SHA 锚定)
### 🔗 溯源OpenAlex
<作者/机构/载体 "未找到关联论文已跳过">
### 🧬 科研关系图KG
\`\`\`mermaid
<RepocontributesContributor · Repolicensed?? · RepohasDataset?>
\`\`\`
---
<!-- gitlink-research-fair v1 | repo:<owner>/<repo> | grade:<G> | sha:<head-sha> -->
*由 gitlink-research-fair skill 生成。*
\`\`\`
哨兵 `<!-- gitlink-research-fair v1 | repo | grade | sha -->` 用于幂等与"基于哪个 commit"标识。重跑检测旧哨兵 → 默认提议更新(`--refresh` 才覆盖);`sha` 不匹配 → 提示"报告已过期,建议重评"。
```
- [ ] **Step 2: Append 处方 + 护栏 + 证书 + KG/OpenAlex + 错误降级**
Append (exact):
```markdown
## 处方M4惊艳闭环
| 缺口 | 生成物 |
|------|--------|
| F3 缺 codemeta.json | 从 repo +info + README 生成 codemeta.json 草稿 |
| R1 缺 CITATION.cff | 从 README/作者生成 CITATION.cff 草稿 |
| A2 缺 license | 给 MIT / 木兰 PSL v2 模板(任选) |
| Rep1 缺依赖锁 | 从 import 扫描建议 requirements.txt |
| Rep3 缺复现章节 | 从入口/README 生成"复现"章节草稿 |
**安全护栏**:默认全量预览 → 确认 → 对 **fork** 开一个 PRPR body 带报告卡摘要);`--auto` 跳过预览但**永不 force-push、永不碰原仓库、永不自动 merge**`--no-fork` 物料落本地。所有写操作需认证。
## 证书SWH/commit 锚定)
用 HEAD commit SHA + release tag 锚定版本。若环境有 Python `swh.model` → 算完整 SWH-ID否则 `git+<commit-SHA>` 锚定,报告卡标注"完整 SWH-ID 需 swh-identify"。证书含仓库、锚定版本、FAIR 等级、Repro 状态、可引用条目(对标 ACM Artifact Badge。嵌报告卡证书栏。
## KG + OpenAlex支撑栏
- **KG**:四实体(Repo/Contributor/File/Commit)+Paper/Dataset/License关系 contributes-to/authored/depends-on/cites/licensed-under/version-at。输出 Mermaid 小图 + triples JSONschema 见 REFERENCE
- **OpenAlex**README/CITATION 抽论文 → REST `/works` 反查作者/机构/载体。降级:限流或抽不到 → 跳过,标注"未找到关联论文"。
## 错误处理与降级
| 情况 | 处理 |
|------|------|
| `file +tree --recursive` 返回空 | 手动递归子目录 |
| 无 LICENSE | A2 ✗,处方建议模板 |
| OpenAlex 限流/无果 | 跳过溯源栏标注 |
| `swh.model` 不可用 | commit-SHA 锚定 + 标注 |
| 仓库过大 | 抽样文件 + "部分审查"标注 |
| fork 失败/无写权限 | 处方物料落本地(`--no-fork` |
| 二进制是 npm 旧版 | 强制 `./gitlink-cli``go build` 重建 |
| 仓库私有/无权限 | 清晰错误,不发报告 |
| 报告/PR 发布失败 | 报告卡原文交用户手动粘贴 |
```
- [ ] **Step 3: Verify sentinel + key sections**
Run: `grep -c -e "gitlink-research-fair v1 | repo" -e "## 处方" -e "## 证书" -e "swh.model" skills/gitlink-research-fair/SKILL.md`
Expected: `4`
- [ ] **Step 4: Commit**
```bash
git add skills/gitlink-research-fair/SKILL.md
git commit -m "feat(research-fair): SKILL 报告卡模板+处方护栏+证书+KG/OpenAlex+错误降级"
```
---
## Task 5: REFERENCE.md — FAIR4RS 映射 + 评分算法 + KG schema + 引用库 + 诚实边界
**Files:**
- Create: `skills/gitlink-research-fair/REFERENCE.md`
- [ ] **Step 1: Create REFERENCE.md with all deep-reference sections**
Content (exact):
```markdown
# gitlink-research-fair 参考文档
> 本文件为 SKILL.md 的深度参考。评分细则、KG schema、OpenAlex/SWH 技术细节、学术引用库与诚实边界均在此。
## 一、FAIR4RS 逐条映射
| 原则 | 含义 | 本 Skill 检查项 | GitLink 证据 | 兜底(无字段时) |
|------|------|----------------|--------------|------------------|
| F1 | 全局唯一持久标识 | A4 持久标识 | repo identifier/URL + commit SHA | commit-SHA 锚定 |
| F1.2 | 版本级唯一标识 | A3 有版本发布 | `release +list` | ⊥(无 release 则 ✗) |
| F2 | 富元数据 | F1 描述/F2 topics/F3 codemeta | `repo +info` desc/topics`file +get` codemeta.json | README 抽取(标注推断) |
| R1.1 | 清晰可访问许可证 | A2/I2 | `repo +info` license_idLICENSE 文件 | gitlink-license 识别 |
| R1.2 | 详细溯源 | R1 | CITATION.cff/README 引用 | LLM 从 README 推断(标注) |
| R2 | 对其他软件的限定引用 | R3 | 源码 SPDX/依赖清单 | gitlink-license 维度4 |
## 二、评分算法
- 每项状态:`✓`(1) / `⚠`(0.5) / `✗`(0) / `⊥`(跳过,不计入分母)
- 轴分 = Σ状态值 / (轴内项数 ⊥项数) × 100
- 总评 = 各轴分均值(全 ⊥ 轴记 N/A 排除)
- 等级A🟢≥80 / B🟡60-79 / C🔴<60
- `confidence=low`:标注"待人工确认",不计入分子分母
## 三、可复现性 checklist独立于 FAIR
Rep1 环境锁requirements 锁版本/Dockerfile/environment.yml· Rep2 数据集说明has_dataset/README 引用/下载脚本)· Rep3 复现步骤README "运行/复现/Quick Start" 章节)· Rep4 版本固定release tag 或 commit 锚定)· Rep5 入口可执行main.py/train.py/Makefile/CLI
## 四、KG schematriples
实体Repo, Contributor, File, Commit, Paper, Dataset, License
关系(主谓宾三元组):
- (Contributor)—contributes-to→(Repo)
- (Contributor)—authored→(Paper)
- (Repo)—depends-on→(File/依赖)
- (Paper)—cites→(Paper)
- (Repo)—licensed-under→(License)
- (Repo)—version-at→(Commit)
- (Repo)—has→(Dataset)
输出:`triples.json`(数组 of {s,p,o}+ Mermaid `graph LR` 小图。
## 五、OpenAlex 字段
- 端点:`https://api.openalex.org/works?search=<title>` 2025-02 起 freemium建议带 `mailto` 参数走 polite pool
- 取字段:`authorships[].author.display_name`、`authorships[].institutions[].display_name`、`host_venue.display_name`(或 `primary_location.source.display_name`)、`concepts[].display_name`、`doi`
- 降级HTTP 429/无结果 → 报告卡溯源栏标"未找到关联论文"
## 六、SWH-ID 说明
- 完整 SWH-ID = `swh:1:dir:<hash>``swh:1:rev:<hash>`,基于 Merkle DAG`swh.model`Python计算或 `swh-identify`
- 环境无 `swh.model` 时:用 `git+<commit-SHA>` 作版本锚定,报告卡标注"完整 SWH-ID 需 swh-identify"
- commit SHA 来自 `commit +list`HEAD
## 七、学术引用库("信服"骨架,每条对抗式核验过)
| 支撑点 | 文献 |
|--------|------|
| 科研软件 FAIR 原则 F1/F1.2/F2/R1.1/R1.2/R2 可机器校验 | Barker et al. 2022, *Nature Scientific Data*, https://www.nature.com/articles/s41597-022-01710-x |
| 可复现性危机2024 ICLR/ICML/NeurIPS 仅 19.5% 提供官方代码 | PaperCoder, arXiv:2504.17192 (Table 9) |
| 结构化对比表/报告卡范式 | ORKG, Jaradeh et al. K-CAP 2019 |
| 仓库→RDF 知识图谱 schema13 实体/47 关系/794 万三元组) | LPWC, ISWC 2023 |
| SWH-ID 版本锚定Merkle DAG, git 兼容) | Di Cosmo et al. ICMS 2020, PMC7340894 |
| 作者/机构溯源用 OpenAlex REST | Priem et al. 2022, arXiv:2205.01833 |
| 仓库级 KG 问答(四实体+SZZ+Cypher, CoT 50%→90% | Repo-KG, arXiv:2412.03815 |
| 科研软件可复现徽章体系 | ACM Artifact Review Badging, https://www.acm.org/publications/policies/artifact-review-badging |
| 直接竞品 howfairis5 维,仅 GitHub | https://github.com/fair-software/howfairis |
| 战略时机PWC 不稳定 | TIB 博客 2025-10 "Papers With Code went offline"单一二手源pitch 前复核) |
## 八、诚实边界(不可过度宣称)
1. FAIR4RS 自称 **aspirational**;本 Skill 是**自建 checker**(社区尚无认证级校验器),不说"套用现成标准工具"。
2. **FAIRness ≠ 可复现性**FAIR 必要非充分)—— Repro 单独成轴。
3. OpenAlex 自 2025-02 起 freemium~$1/day、需 key、100 req/s—— 单仓演示够,批量控量。
4. **禁止使用两条已证伪论点**:①"MSR 六分类法"、②"FAIR 分高→被引更多"因果。
5. 文献多跑在 GitHub"在 GitLink 上复刻"是合理外推,须真机跑通闭环。
## 九、实测结论live probeTask 6 回填)
> 此节由 Task 6 在 `songhui18/ICCV2021论文复现` 真机验证后回填license 状态、README/requirements/releases/commit SHA、各轴实测分、fork→PR 链路是否可用、OpenAlex 是否命中。
```
- [ ] **Step 2: Verify citations + banned claims + sections**
Run: `grep -c -e "s41597-022-01710-x" -e "2504.17192" -e "禁止使用两条已证伪" -e "## 九、实测结论" skills/gitlink-research-fair/REFERENCE.md`
Expected: `4`
- [ ] **Step 3: Commit**
```bash
git add skills/gitlink-research-fair/REFERENCE.md
git commit -m "feat(research-fair): REFERENCEFAIR4RS映射+评分+KG schema+引用库+诚实边界)"
```
---
## Task 6: Live probe songhui18 — 回填 REFERENCE 实测结论
**Files:**
- Modify: `skills/gitlink-research-fair/REFERENCE.md` (§九 实测结论)
- [ ] **Step 1: Probe repo metadata + files**
Run (capture outputs):
```bash
gitlink-cli repo +info --owner songhui18 --repo ICCV2021论文复现 --format json > /tmp/rf_info.json
gitlink-cli file +list --owner songhui18 --repo ICCV2021论文复现 --format json > /tmp/rf_files.json
gitlink-cli release +list --owner songhui18 --repo ICCV2021论文复现 --format json > /tmp/rf_rel.json
gitlink-cli commit +list --owner songhui18 --repo ICCV2021论文复现 --page 1 --format json > /tmp/rf_commits.json
```
Expected: each file non-empty, valid JSON with `"ok": true`. If any errors, debug auth/binary first (see Environment & Gotchas).
- [ ] **Step 2: Extract ground truth (license/desc/topics/releases/README/requirements/commit SHA)**
Write `_probe.py` (UTF-8) and run with `PYTHONUTF8=1 PYTHONIOENCODING=utf-8 python _probe.py`:
```python
# -*- coding: utf-8 -*-
import json, glob
def load(p):
try:
raw=open(p,encoding='utf-8').read(); i=raw.find('{')
return json.loads(raw[i:]) if i>=0 else {}
except Exception as e:
return {'_err':str(e)}
info=load('/tmp/rf_info.json'); files=load('/tmp/rf_files.json')
rel=load('/tmp/rf_rel.json'); commits=load('/tmp/rf_commits.json')
d=info.get('data',info) if isinstance(info,dict) else {}
print('license_id:', d.get('license_id'))
print('desc_len:', len(d.get('description') or ''))
print('topics:', d.get('topics'))
print('has_dataset:', d.get('has_dataset'))
print('is_public:', d.get('is_public'))
# releases
rd=rel.get('data',rel) if isinstance(rel,dict) else {}
releases=rd.get('releases') or rd.get('project_releases') or []
print('releases:', len(releases) if isinstance(releases,list) else releases)
# files — look for key names
fd=files.get('data',files) if isinstance(files,dict) else {}
entries=fd.get('entries') or fd.get('files') or fd.get('trees') or []
names=[ (e.get('name') or e.get('path') or '') for e in entries ] if isinstance(entries,list) else []
key=['LICENSE','LICENSE.md','COPYING','README.md','README','requirements.txt','environment.yml','Dockerfile','Makefile','CITATION.cff','codemeta.json','.zenodo.json','go.mod','package.json']
print('present:', [k for k in key if any(k==n or n.endswith('/'+k) for n in names)])
print('absent :', [k for k in key if not any(k==n or n.endswith('/'+k) for n in names)])
# HEAD commit sha
cd=commits.get('data',commits) if isinstance(commits,dict) else {}
cl=cd.get('commits') or []
print('head_sha:', (cl[0].get('sha') if cl and isinstance(cl,list) else None))
```
Expected: prints real values (adapt field paths if GitLink nests differently — inspect raw JSON). Record: license state (expect absent), README/requirements present?, releases (expect 0), HEAD sha, has_dataset.
- [ ] **Step 3: Backfill REFERENCE §九 with real findings**
Replace the `> 此节由 Task 6...回填` line with real data: license state (expected: absent), README present?, requirements present?, releases count (expected: 0), HEAD commit SHA, has_dataset, and each axis's real ✓/✗ (preview the grade — expect B/C due to no license).
- [ ] **Step 4: Commit**
```bash
git add skills/gitlink-research-fair/REFERENCE.md
git commit -m "docs(research-fair): REFERENCE 回填 songhui18 实测结论"
```
---
## Task 7: Live run — 报告卡 + 处方 PRfork+ 证书
**Files:**
- (produces real artifacts; outputs captured into Task 8's examples doc)
- [ ] **Step 1: Produce the report card following SKILL.md**
Using Task 6 ground truth, walk the 8-step pipeline on `songhui18/ICCV2021论文复现`: score all 5 axes, build KG (Mermaid), try OpenAlex enrichment (search README for paper title/DOI → query api.openalex.org; if none, mark skipped), render the full report card with real values + sentinel + real commit SHA.
Expected: a complete Markdown report card with a real grade (B/C), real axis scores, real evidence per item.
- [ ] **Step 2: Fork + open remediation PR**
```bash
gitlink-cli repo +fork --owner songhui18 --repo ICCV2021论文复现 --format json
# clone the fork locally, add generated CITATION.cff + LICENSE + 复现章节, commit, push
# then:
gitlink-cli pr +create --owner <你的login> --repo ICCV2021论文复现 \
--head <你的login>:feat/fair-remediation --base master \
--title "Improve research FAIRness & reproducibility (gitlink-research-fair)" \
--body "<报告卡摘要>"
```
Expected: PR created with a numeric id. **Fallback**: if fork/push fails, use `--no-fork` — write CITATION.cff/LICENSE/复现章节 to a local `_remediation/` dir and note "fork 链路不可用,已降级本地物料" in the examples doc.
- [ ] **Step 3: Verify certificate + capture screenshot**
Confirm the certificate line in the report card has the real HEAD commit SHA (from Task 6) and grade. If `swh.model` importable in python, compute full SWH-ID; else keep `git+<sha>`. Capture a screenshot of the opened PR on GitLink web → save to `skills/gitlink-research-fair/examples/img/pr-songhui18.png` (recommended).
- [ ] **Step 4: Commit (artifacts/screenshots only)**
```bash
git add skills/gitlink-research-fair/examples/img/ # if screenshot captured
git commit -m "feat(research-fair): songhui18 实跑报告卡+处方PR+证书(截图)"
```
(No commit if --no-fork fallback and no screenshot — proceed to Task 8.)
---
## Task 8: examples/research-fair-workflow.md — 真实走查
**Files:**
- Create: `skills/gitlink-research-fair/examples/research-fair-workflow.md`
- [ ] **Step 1: Write the real walkthrough using Task 6+7 outputs**
Content skeleton (fill with REAL data from Tasks 6-7):
```markdown
# 示例:科研软件 FAIR 体检(真实数据)
> 基于 `songhui18/ICCV2021论文复现`论文复现合集19⭐于 2026-07-XX 实跑。
## Step 1取上下文真实输出摘要
- license_id: <实测> 描述: <长度> topics: <...> has_dataset: <...>
- 关键文件LICENSE=</> · README=<...> · requirements=<...> · CITATION.cff=<...> · releases=<N>
## Step 25 轴评分(真实)
| 轴 | 分 | 关键依据 |
|---|---|---|
| F | <> | ... |
| A | <> | 无 license → A2 ✗ |
| I | <> | ... |
| R | <> | ... |
| Repro | <> | ... |
**总体:<等级> <>/100**
## Step 3报告卡真实全文
< Task 7 报告卡全文含哨兵>
## Step 4处方 PR
<PR 链接 / --no-fork 降级说明>,含 CITATION.cff + LICENSE + 复现章节
## Step 5证书
锚定 commit <SHA>FAIR <等级>Repro <状态>
## 对照:有 license 仓库
`<对照仓库>`(有 license→ 预期 A 级,证明评分区分度。
## 关键结论
- "论文复现"仓库被"可复现性"工具体检:主题共振
- 无 license = 天然缺口,处方有活干
- 与 howfairis 差异GitLink 原生 + 自动修复 + 证书
```
- [ ] **Step 2: Verify real data (no placeholders)**
Run: `grep -E "TBD|TODO|<等级>|<分>|<实>|<实测>|<SHA>" skills/gitlink-research-fair/examples/research-fair-workflow.md`
Expected: no matches (all `<...>` placeholders filled with real data). If any remain, fill them from Tasks 6-7.
- [ ] **Step 3: Commit**
```bash
git add skills/gitlink-research-fair/examples/research-fair-workflow.md
git commit -m "feat(research-fair): examples songhui18 真实走查"
```
---
## Task 9: 对照仓库跑(证明评分区分度)
**Files:**
- Modify: `skills/gitlink-research-fair/examples/research-fair-workflow.md` (对照 section)
- [ ] **Step 1: Pick a licensed repo and run the pipeline**
Use `leejt/图神经网络快速开发测试工具` (has license_id=Y) — or `Edgedev/Edge深度学习框架`. Run `repo +info` + `file +list` to confirm it has a LICENSE, then score the 5 axes.
Expected: A2 = ✓ (has license) → A axis notably higher than songhui18; overall grade A (≥80) or clearly higher than songhui18's B/C.
- [ ] **Step 2: Fill the 对照 section with real contrast numbers**
Update the "对照:有 license 仓库" section with: repo name, its grade (expect A), and a one-line contrast ("songhui18 B/C无 licensevs 对照 A有 license→ 评分有区分度").
- [ ] **Step 3: Commit**
```bash
git add skills/gitlink-research-fair/examples/research-fair-workflow.md
git commit -m "docs(research-fair): 对照仓库证明评分区分度"
```
---
## Task 10: 注册 + README + workflow 链接 + 最终验收
**Files:**
- Modify: `skills/README.md`
- Modify: `skills/gitlink-workflow/SKILL.md` (optional cross-link)
- [ ] **Step 1: Register the skill (so Claude Code's Skill tool discovers it)**
Run: `bash scripts/setup-skills.sh` (creates the junction into `~/.claude/skills/`). Then verify discovery: `ls ~/.claude/skills/ | grep gitlink-research-fair`.
Expected: `gitlink-research-fair` listed.
- [ ] **Step 2: Add README row**
In `skills/README.md`, add to the 智能 Skills table (near gitlink-review):
```markdown
| **gitlink-research-fair** | 科研软件 FAIR 体检 | 5 轴 FAIR/可复现评分、报告卡、自动修复 PR、SWH/commit 可复现证书 |
```
Verify: `grep -c "gitlink-research-fair" skills/README.md``≥1`.
- [ ] **Step 3: (Optional) cross-link from gitlink-workflow**
In `skills/gitlink-workflow/SKILL.md`, under a research/repo-health context, add a line linking to `../gitlink-research-fair/SKILL.md`.
- [ ] **Step 4: Final acceptance check (spec §16)**
Verify each (run/read):
- [ ] `skills/gitlink-research-fair/` 三件套齐全SKILL.md + REFERENCE.md + examples/
- [ ] 5 轴 rubric 每项有证据来源 + 状态判定 + 兜底
- [ ] songhui18 真跑通:报告卡 + 处方 PR或 --no-fork 降级)+ 证书,有截图
- [ ] 对照仓库评分有区分度
- [ ] 边界(私有/空/无 README降级正确至少手动核对 SKILL 错误表覆盖)
- [ ] REFERENCE 含引用库 + 2 条禁用论点
- [ ] README 已登记
- [ ] **Step 5: Commit + final state**
```bash
git add skills/README.md skills/gitlink-workflow/SKILL.md
git commit -m "docs(research-fair): README 登记 + workflow 链接 + 注册"
git log --oneline -12
```
Expected: clean commit history on `feat/gitlink-research-fair`, all artifacts present. Then open a PR to master (per protected-branch workflow).

View File

@ -0,0 +1,249 @@
# 科研软件 FAIR 体检 Skillgitlink-research-fair设计
- **日期**2026-07-01
- **状态**:已批准,待编写实现计划
- **作者**CWQ + Claude
- **定位**:子任务四(应用 GitLink 辅助科研,加分项)——把 GitLink 科研仓库转化为"FAIR 体检报告卡 + 自动修复 + 可复现证书";纯 Markdown skillSKILL.md + REFERENCE.md + examples/),无需 Go 代码
- **架构中心**报告卡中心FAIR 体检报告为 hero 产出KG/处方/证书/OpenAlex 为其栏目)
---
## 1. 背景与目标
子任务四要求把 gitlink-cli 与学术科研结合,做一个"科研分析层"skill。gitlink-cli 现有 17 个 skill 都是**数据采集/运维型**issue/pr/search/user/pm/review/health/license/changelog/ci/repo/branch/release/triage/workflow/org/shared缺少把仓库数据**升维成科研洞察**的能力。
本 skill 填补该缺口:对任意 GitLink 科研仓库执行**结构化、有学术标准依据、低误报**的"FAIR + 可复现性"诊断,产出一张**体检报告卡**,并对发现的缺口**自动开 PR 修复**、用 **SWH/commit 锚定版本**签发**可复现证书**
**实用性目标**:评分有据(对标 FAIR4RS + howfairis、每项检查可追溯证据哪个 gitlink-cli 字段/文件)、缺口可执行修复(生成 CITATION.cff/codemeta.json/LICENSE/复现章节)、能在真实 GitLink 科研仓库跑通。
**创意性目标**:四幕剧本(**诊断 → 处方 → 证书**v1 不含排行)+ 中国代码托管平台**原生**的科研软件诊断(现有 howfairis/Codefair 只跑 GitHub+ 知识图谱 + OpenAlex 溯源。
## 2. 非目标YAGNI
- **不做多仓库 FAIR 排行榜**(第四幕"排行"留 v2
- 不做 CI/webhook 自动触发——按需由 agent 调用
- **绝不自动 merge** 修复 PR处方默认预览确认`--auto` 仅跳过预览
- **绝不 force-push、绝不碰原仓库**——处方只对 fork 开 PR
- 不修改 gitlink-cli 的 Go 代码——纯 skill 交付物
- 不重复 `gitlink-license` 已有能力——许可证/安全子项**委托复用**它
## 3. 关键决策(用户确认)
| 决策点 | 选择 | 理由 |
|--------|------|------|
| v1 范围 | 诊断 + 处方 + 证书(不做排行) | 保留最惊艳的"自动修复闭环",避开多仓库验证成本 |
| 验证仓库 | `songhui18/ICCV2021论文复现`(处方走 fork | "论文复现"主题与"可复现性"内核共振19⭐真实活跃无 license=现成缺口 |
| 架构中心 | 报告卡中心A 方案) | 最强"信服"载体FAIR4RS 逐项可核对);避免评委认知过载 |
| 许可证/安全支柱 | 复用 `gitlink-license` | 已有 4 维评分+模式库,不重复造 |
| 发表策略 | 默认预览、确认后开 PR`--auto` 跳过预览 | 沿用既有"先预览再执行"偏好 |
## 4. 学术依据与差异化("信服"骨架,每条对抗式核验过)
| 支撑点 | 文献(已核验) | 在 skill 中的用途 |
|--------|----------------|------------------|
| 科研软件 FAIR 原则有国际标准F1/F1.2/F2/R1.1/R1.2/R2 可逐条机器校验 | Barker et al. 2022, *Nature Sci Data* [s41597-022-01710-x]3-0 ✓×3 | 评分骨架 |
| 可复现性危机铁证2024 ICLR/ICML/NeurIPS 论文仅 19.5% 提供官方代码 | PaperCoder [arXiv:2504.17192] Table 92-0 ✓) | 开场"为什么重要"硬数据 |
| 结构化对比表/报告卡是有学术先例的成熟范式 | ORKG (K-CAP 2019)3-0 ✓) | 报告卡范式出处 |
| 仓库数据→RDF 知识图谱的实体/关系 schema 可借鉴13 实体/47 关系/794 万三元组) | LPWC, ISWC 20233-0 ✓) | KG 本体设计 |
| 版本锚定用 SWH-IDMerkle DAG + git 兼容哈希,本地可生成) | Di Cosmo et al. ICMS 2020 [PMC7340894]3-0 ✓) | 证书版本锚定 |
| 作者/机构溯源直接调 OpenAlex REST 反查(无需自建索引) | Priem et al. 2022 [arXiv:2205.01833]3-0 ✓) | 溯源富集 |
| 仓库级 KG 问答在真实仓库跑通(四实体+SZZ+CypherCoT 50%→90% | Repo-KG [arXiv:2412.03815]3-0 ✓) | KG+推理可行性基线 |
| 科研软件"可用+可复现"有现成徽章体系可对标 | ACM Artifact Badging [acm.org]5 核验) | 证书/徽章锚 |
| 直接竞品 howfairis5 维repository/license/registry/citation/checklist只跑 GitHub | fair-software/howfairis | 差异化GitLink 原生 |
**差异化叙事(必须咬死)***第一个原生跑在中国代码托管平台上、面向任意科研仓库的实时 FAIR+可复现性诊断 → 自动修复 → 证书闭环,纯 Agent Skill 形态。* 与 Software Heritage重存档、Papers With Code重列表、OpenAlex重文献、ASCL重天体软件正交。
**战略时机**:据 TIB 2025-10 博客 *Papers With Code went offline*PWC 出现下线/不稳定,社区在找替代——中国平台原生科研软件诊断工具是真空(⚠️ 单一二手源pitch 前自行复核 PWC 状态)。
**诚实边界(不可过度宣称)**
1. FAIR4RS 原文自称 **aspirational**F1.2/R1.1/R1.2/R2 可逐条校验,但"全自动合规验证器"社区仍在建SOMEF/FAIR EVA——本 skill 是**自建 checker**,这本身是贡献,不说"套用现成标准工具"。
2. **FAIRness ≠ 可复现性**FAIR 是必要非充分)——报告卡里 Repro **单独成轴**,不混为一谈。
3. OpenAlex 自 2025-02 起 freemium免费档 ~$1/day、需 API key、100 req/s——批量控量单仓演示够。
4. **两条已被证伪的论点禁止使用**:①"MSR 六分类法"、②"FAIR 分高→被引更多"的因果(研究已剔除)。
5. 文献多跑在 GitHub——"在 GitLink 上复刻"是合理外推,必须真机跑通闭环。
## 5. 文件清单与改动范围
| 文件 | 动作 | 内容 |
|------|------|------|
| `skills/gitlink-research-fair/SKILL.md` | 新增 | 主管道、5 轴 rubric、报告卡模板、处方护栏、证书、KG/OpenAlex、错误降级、命令接口 |
| `skills/gitlink-research-fair/REFERENCE.md` | 新增 | FAIR4RS 逐条映射表、评分算法、KG schema(triples)、OpenAlex 字段、SWH-ID 说明、**学术引用库**、诚实边界 |
| `skills/gitlink-research-fair/examples/research-fair-workflow.md` | 新增 | `songhui18/ICCV2021论文复现` 真实走查(报告卡+处方 PR+证书+截图) |
| `skills/README.md` | 修改 | 新增 gitlink-research-fair科研辅助类 |
| `skills/gitlink-workflow/SKILL.md` | 修改(可选) | 在合适处链回本 skill |
## 6. 命令接口
skill 由 agent 调用,参数(约定,非 CLI 子命令):
| 参数 | 默认 | 说明 |
|------|------|------|
| `--owner/--repo` | 自动从 cwd 解析 | 目标科研仓库 |
| `--lenses` | 全 5 轴 | 子集,如 `F,A,Repro` |
| `--auto` | 关 | 跳过预览直接开 PR仍受护栏不 force-push/不碰原仓/不 merge |
| `--no-fork` | 关 | 不开 PR处方物料落本地文件供手动处理 |
| `--enrich` | 开 | 启用 OpenAlex 溯源(限流则自动降级) |
| `--refresh` | 关 | 即使存在旧报告哨兵也重评 |
## 7. 数据流8 步管道)
```
① 取上下文 repo +info元数据/license/topics/has_dataset· file +list关键文件清单
② 深采 file +get 读 LICENSE/CITATION.cff/codemeta.json/README/requirements/Dockerfile ·
release +list版本· commit +listSHA· issue/pr +list协作· member +list作者
③ FAIR 评分 M1 逐项评 5 轴(许可证/安全子项委托 gitlink-license 流程)→ ✓/✗/⚠/⊥ + 证据 + 置信度
④ KG 构建 M2 四实体(Repo/Contributor/File/Commit)+Paper/Dataset/License 节点 → Mermaid 小图 + triples
⑤ 溯源富集 M3 从 README/CITATION 抽论文 → OpenAlex REST 反查作者/机构best-effort
⑥ 渲染报告卡 hero等级+雷达图+5 轴逐项表+处方摘要+证书栏+KG 小图+溯源栏
⑦ 处方 M4 对 ✗/⚠ 项生成 CITATION.cff/codemeta.json/LICENSE/复现章节 → 默认预览
⑧ 发布 确认后对 fork 开 PRPR body 带报告卡摘要)+ 出 SWH/commit 锚定证书;内嵌哨兵
```
每项检查的内部数据结构:
```json
{
"axis": "A", "id": "A2", "title": "有明确许可证",
"status": "✗", // ✓满足 | ✗缺失 | ⚠部分 | ⊥无字段(跳过)
"evidence": "repo +info.license_id 为空;根目录无 LICENSE 文件",
"confidence": "high", // high | medium | low
"fix": "建议添加 MIT 或木兰 PSL v2 LICENSE处方可自动生成"
}
```
## 8. 评分 Rubric核心
> 对标 **FAIR4RSNature Sci Data 2022+ howfairis 5 维**。诚实声明:这是**适配版**评分(社区尚无认证级自动校验器),不是官方认证。**FAIR ≠ 可复现**,故 Repro 单独成轴。
每项判定 `✓满足 / ✗缺失 / ⚠部分 / ⊥GitLink 无该字段(跳过并标注)`,附**证据来源** + 置信度。
| 轴 | FAIR4RS 映射 | 检查项(证据) |
|----|--------------|----------------|
| **F 可发现** | F1/F2 | F1 清晰描述(repo desc 非空且≥20 字) · F2 话题/关键词(topics) · F3 标准元数据(codemeta.json/.zenodo.json) |
| **A 可访问** | F1.2/R1.1 | A1 公开(is_public) · A2 有许可证(license_id/LICENSE)[gitlink-license] · A3 有版本发布(release tag) · A4 持久标识(commit SHA/SWH-ID) |
| **I 可互操作** | R1.1/I | I1 依赖清单(requirements/go.mod/package.json/environment.yml) · I2 许可证机器可读(SPDX/license_id) · I3 元数据标准格式(CITATION.cff/codemeta) |
| **R 可复用** | R1.2/R2 | R1 溯源/引用(CITATION.cff/README 引用) · R2 README 质量(安装+使用) · R3 源码声明[gitlink-license] · R4 无敏感泄露[gitlink-license] |
| **Repro 可复现** ⭐差异轴 | (独立于 FAIR | Rep1 环境锁(锁版本/Dockerfile) · Rep2 数据集说明(has_dataset/README 引用) · Rep3 复现步骤(README 章节) · Rep4 版本固定 · Rep5 入口可执行(main/Makefile/CLI) |
**评分算法**:轴分 = 满足项 / (总项 ⊥项)(⚠ 计 0.5);总评 = 5 轴均分 → 等级 **A🟢≥80 / B🟡60-79 / C🔴<60**。若某轴全部为 ⊥GitLink 无任何可用字段),该轴记 N/A 并从总评均分中排除。`⊥` 项在报告卡"范围"行注明"GitLink 无 X 字段,已跳过 N 项",不静默吞掉。`confidence=low` 的项标注"待人工确认",不进总评分计算。
## 9. 报告卡格式hero 产出)
```markdown
🏥 **gitlink-research-fair 科研软件体检报告**
**总体**B 🟡 64/100F 70 · A 50 · I 40 · R 80 · Repro 80版本锚定commit a1b2c3d无 release
**范围**:检查 19 项✓11 · ✗4 · ⚠2 · ⊥2跳过GitLink 无 codemeta 字段)
### 五轴雷达
Repro 80
/ \
R 80 F 70
\ /
I 40 —— A 50
### 逐项(节选)
| 轴 | 项 | 状态 | 证据 |
|---|---|:---:|---|
| A | A2 有许可证 | ✗ | license_id 空,根目录无 LICENSE |
| Repro | Rep3 复现步骤 | ⚠ | README 有"使用"但无完整复现流程 |
| F | F1 清晰描述 | ✓ | repo desc 详述 CV 顶会论文复现合集 |
### 🔧 处方(可自动修复 3 项)
- [R1] 生成 CITATION.cff从 README/作者推断)
- [A2] 添加 LICENSEMIT / 木兰 PSL v2 任选)
- [Rep3] 补"复现"章节(从入口推断)
### 📜 可复现证书
锚定版本git+commit a1b2c3d FAIR: B 🟡 Repro: ⚠ 部分可复现
(完整 SWH-ID 需 swh-identify本次用 commit-SHA 锚定)
### 🔗 溯源OpenAlex
未找到关联论文README 未含可识别 DOI/标题)— 已跳过
### 🧬 科研关系图KG
[Mermaid: Repo—contributes→Contributor×3 · Repo—licensed?—? · Repo—has→Dataset? ]
---
<!-- gitlink-research-fair v1 | repo:songhui18/ICCV2021论文复现 | grade:B | sha:a1b2c3d -->
*由 gitlink-research-fair skill 生成。*
```
哨兵 `<!-- gitlink-research-fair v1 | repo | grade | sha -->` 用于幂等与"基于哪个 commit"标识。
## 10. 处方模块M4惊艳闭环与安全护栏
对可自动修复的 ✗/⚠ 项生成物料:
| 缺口 | 生成物 |
|------|--------|
| F3 缺 codemeta.json | 从 repo +info + README 生成 codemeta.json 草稿 |
| R1 缺 CITATION.cff | 从 README/作者生成 CITATION.cff 草稿 |
| A2 缺 license | 给 MIT / 木兰 PSL v2 模板(任选) |
| Rep1 缺依赖锁 | 从 import 扫描建议 requirements.txt |
| Rep3 缺复现章节 | 从入口/README 生成"复现"章节草稿 |
**安全护栏**(沿用既有偏好):
- 默认全量预览 → 用户确认 → 对 **fork**`caoweiqiong/ICCV2021论文复现`)开一个 PRPR body 带报告卡摘要
- `--auto` 跳过预览,但**永不 force-push、永不碰原仓库、永不自动 merge**
- `--no-fork`:不开 PR物料落本地文件供手动处理
- 所有写操作需认证(遵循 `gitlink-shared`
## 11. 证书SWH/commit 锚定)
- 版本锚定HEAD commit SHA + release tag若有
- 若环境有 Python `swh.model` → 算完整 SWH-ID否则用 `git+<commit-SHA>` 锚定,报告卡标注"完整 SWH-ID 需 swh-identify"
- 证书内容仓库、锚定版本、FAIR 等级、Repro 状态、生成时间、可引用条目(对标 ACM Artifact Badge 的 Available/Functional 风格)
- 嵌入报告卡"证书栏";亦可单独输出可复制引用文本
## 12. KG + OpenAlex支撑栏非主角
- **KG**四实体Repo / Contributor / File / Commit+ Paper / Dataset / License 节点;关系 contributes-to / authored / depends-on / cites / licensed-under / version-at。输出 Mermaid 小图(报告卡内嵌)+ triples JSONREFERENCE 给 schema。借鉴 LPWC 实体/关系划分与 Repo-KG 四实体。
- **OpenAlex**:从 README/CITATION 抽论文标题/作者/DOI → REST `/works` 反查作者机构/发表载体/概念。降级freemium 限流或抽不到 → 跳过,标注"未找到关联论文",不影响主报告卡。
## 13. 错误处理与降级
| 情况 | 处理 |
|------|------|
| `file +tree --recursive` 返回空 | 手动递归子目录gitlink-license 已知坑) |
| 无 LICENSE | A2 ✗,处方建议模板 |
| OpenAlex 限流/无果 | 跳过溯源栏标注 |
| `swh.model` 不可用 | commit-SHA 锚定 + 标注 |
| 仓库过大 | 抽样文件 + "部分审查"标注 |
| fork 失败/无写权限 | 处方物料落本地文件供手动 PR |
| 二进制是 npm 旧版 | 强制 `./gitlink-cli` 或提示 `go build` 重建 |
| 仓库私有/无权限 | 清晰错误,不发报告 |
| 报告/PR 发布失败 | 报告卡原文交用户手动粘贴 |
## 14. 验证计划(真实数据)
主目标:**`songhui18/ICCV2021论文复现`**论文复现合集19⭐/17forkPython/CUDA/Jupyter无 license
验证项:
- [ ] 报告卡正确给出 B/C 级(因无 licenseA2 ✗5 轴评分有区分度
- [ ] 处方fork 后成功开 1 个 PRCITATION.cff + LICENSE + 复现章节PR body 含报告卡摘要
- [ ] 证书commit-SHA 锚定正确(若有 swh.model 则给完整 SWH-ID
- [ ] **对照**:跑一个有 license 的仓库(`leejt/图神经网络快速开发测试工具` 或 `Edgedev/Edge深度学习框架`)→ 预期 A 级,证明评分有区分度
- [ ] **边界**:私有仓 / 空仓 / 无 README → 降级正确,不崩溃
- [ ] OpenAlex 溯源:能抽到论文则富集,抽不到则标注降级
- [ ] KGMermaid 图 + triples JSON 正确生成
结果(真实输出 + 截图)写入 `examples/research-fair-workflow.md`
## 15. 风险与未决
- **GitLink 元数据粒度**FAIR4RS 某些条目(如 R2 限定引用、标准 codemetaGitLink 无专用字段 → 用 ⊥ 跳过 + 文件探测 + LLM 推断兜底,明确标注"推断 vs 已验证"。实现时需在真实仓库上确认哪些项可机器读取。
- **OpenAlex freemium 限额**2025-02 起;单仓演示够,批量需控量。
- **SWH-ID 完整性**:纯 Markdown+CLI 环境无 `swh.model` 时只能 commit-SHA 锚定;实现时探测依赖,降级已内建。
- **GitLink GraphQL/REST 粒度**Repo-KG 的 Cypher QA 需图数据库,本 skill **不引入图数据库**(纯 Mermaid+triplesKG 仅作可视化/溯源不做复杂问答YAGNI
- **处方 PR 真实性**:对 fork 开 PR 需 `gitlink-cli repo +fork` + 本地改文件 + push + `pr +create`;需实测 fork→PR 链路是否顺畅,不通则降级 `--no-fork`
## 16. 验收标准
1. `skills/gitlink-research-fair/` 三件套齐全,结构与 health/changelog/triage/review 等智能 skill 一致
2. 5 轴 rubric 每项有明确证据来源 + 状态判定 + 兜底规则
3. `songhui18/ICCV2021论文复现` 真实跑通:报告卡 + 处方 PR对 fork+ 证书,有截图
4. 对照仓库评分有区分度(有 license → A无 → B/C
5. 边界情况(私有/空/无 README降级正确
6. REFERENCE.md 含完整学术引用库 + 诚实边界(含 2 条禁用论点)
7. README 登记 gitlink-research-fair

View File

@ -162,6 +162,7 @@ skills/
| **gitlink-changelog** | Release Notes 自动生成 | 从 commit/PR/Issue 历史自动生成版本说明 |
| **gitlink-triage** | Issue 智能分拣 + 新人引导 | 自动分类、打标签、分配责任人、good-first-issue 引导 |
| **gitlink-review** | 智能代码审查 | 分析 PR diff多视角评审 + 对抗式自检,结构化 Review 意见自动评论 |
| **gitlink-research-fair** | 科研软件 FAIR 体检 | 5 轴 FAIR/可复现评分、体检报告卡、自动开 PR 修复缺口、SWH/commit 可复现证书 |
---

View File

@ -0,0 +1,105 @@
# gitlink-research-fair 参考文档
> 本文件为 SKILL.md 的深度参考。评分细则、KG schema、OpenAlex/SWH 技术细节、学术引用库与诚实边界均在此。
## 一、FAIR4RS 逐条映射
| 原则 | 含义 | 本 Skill 检查项 | GitLink 证据 | 兜底(无字段时) |
|------|------|----------------|--------------|------------------|
| F1 | 全局唯一持久标识 | A4 持久标识 | repo identifier/URL + commit SHA | commit-SHA 锚定 |
| F1.2 | 版本级唯一标识 | A3 有版本发布 | `release +list` | ✗(无 release tag |
| F2 | 富元数据 | F1 描述/F2 topics/F3 codemeta | `repo +info` desc/topics`file +get` codemeta.json | README 抽取(标注推断) |
| R1.1 | 清晰可访问许可证 | A2/I2 | `repo +info` license_idLICENSE 文件 | gitlink-license 识别 |
| R1.2 | 详细溯源 | R1 | CITATION.cff/README 引用 | LLM 从 README 推断(标注) |
| R2 | 对其他软件的限定引用 | R3 | 源码 SPDX/依赖清单 | gitlink-license 维度4 |
## 二、评分算法
- 每项状态:`✓`(1) / `⚠`(0.5) / `✗`(0) / `⊥`(跳过,不计入分母)
- 轴分 = Σ状态值 / (轴内项数 ⊥项数) × 100
- 总评 = 各轴分均值(全 ⊥ 轴记 N/A 排除)
- 等级A🟢≥80 / B🟡60-79 / C🔴<60
- `confidence=low`:标注"待人工确认",不计入分子分母
## 三、可复现性 checklist独立于 FAIR
Rep1 环境锁requirements 锁版本/Dockerfile/environment.yml· Rep2 数据集说明has_dataset/README 引用/下载脚本)· Rep3 复现步骤README "运行/复现/Quick Start" 章节)· Rep4 版本固定release tag 或 commit 锚定)· Rep5 入口可执行main.py/train.py/Makefile/CLI
## 四、KG schematriples
实体Repo, Contributor, File, Commit, Paper, Dataset, License
关系(主谓宾三元组):
- (Contributor)—contributes-to→(Repo)
- (Contributor)—authored→(Paper)
- (Repo)—depends-on→(File/依赖)
- (Paper)—cites→(Paper)
- (Repo)—licensed-under→(License)
- (Repo)—version-at→(Commit)
- (Repo)—has→(Dataset)
输出:`triples.json`(数组 of {s,p,o}+ Mermaid `graph LR` 小图。
## 五、OpenAlex 字段
- 端点:`https://api.openalex.org/works?search=<title>` 2025-02 起 freemium建议带 `mailto` 参数走 polite pool
- 取字段:`authorships[].author.display_name`、`authorships[].institutions[].display_name`、`host_venue.display_name`(或 `primary_location.source.display_name`)、`concepts[].display_name`、`doi`
- 降级HTTP 429/503/无结果 → 报告卡溯源栏标"未找到关联论文"
## 六、SWH-ID 说明
- 完整 SWH-ID = `swh:1:dir:<hash>``swh:1:rev:<hash>`,基于 Merkle DAG`swh.model`Python计算或 `swh-identify`
- 环境无 `swh.model` 时:用 `git+<commit-SHA>` 作版本锚定,报告卡标注"完整 SWH-ID 需 swh-identify"
- commit SHA 来自 `commit +list`HEAD
## 七、学术引用库("信服"骨架,每条对抗式核验过)
| 支撑点 | 文献 |
|--------|------|
| 科研软件 FAIR 原则 F1/F1.2/F2/R1.1/R1.2/R2 可机器校验 | Barker et al. 2022, *Nature Scientific Data*, https://www.nature.com/articles/s41597-022-01710-x |
| 可复现性危机2024 ICLR/ICML/NeurIPS 仅 19.5% 提供官方代码 | PaperCoder, arXiv:2504.17192 (Table 9) |
| 结构化对比表/报告卡范式 | ORKG, Jaradeh et al. K-CAP 2019 |
| 仓库→RDF 知识图谱 schema13 实体/47 关系/794 万三元组) | LPWC, ISWC 2023 |
| SWH-ID 版本锚定Merkle DAG, git 兼容) | Di Cosmo et al. ICMS 2020, PMC7340894 |
| 作者/机构溯源用 OpenAlex REST | Priem et al. 2022, arXiv:2205.01833 |
| 仓库级 KG 问答(四实体+SZZ+Cypher, CoT 50%→90% | Repo-KG, arXiv:2412.03815 |
| 科研软件可复现徽章体系 | ACM Artifact Review Badging, https://www.acm.org/publications/policies/artifact-review-badging |
| 直接竞品 howfairis5 维,仅 GitHub | https://github.com/fair-software/howfairis |
| 战略时机PWC 不稳定 | TIB 博客 2025-10 "Papers With Code went offline"单一二手源pitch 前复核) |
## 八、诚实边界(不可过度宣称)
1. FAIR4RS 自称 **aspirational**;本 Skill 是**自建 checker**(社区尚无认证级校验器),不说"套用现成标准工具"。
2. **FAIRness ≠ 可复现性**FAIR 必要非充分)—— Repro 单独成轴。
3. OpenAlex 自 2025-02 起 freemium~$1/day、需 key、100 req/s—— 单仓演示够,批量控量。
4. **禁止使用两条已证伪论点**:①"MSR 六分类法"、②"FAIR 分高→被引更多"因果。
5. 文献多跑在 GitHub"在 GitLink 上复刻"是合理外推,须真机跑通闭环。
## 九、实测结论live probe2026-07-01 于 songhui18/ICCV2021
**目标仓库**`songhui18/ICCV2021`(显示名"ICCV2021论文复现"URL identifier = `ICCV2021`**注意 CLI 要用 identifier 不是中文显示名**19⭐/17fork3328 文件17 个论文复现子目录,最后更新约 4 年前。
**关键事实**
- `license_id` = None**根目录无 LICENSE**20 个 LICENSE 全在子目录随上游代码)→ **A2 ✗**
- releases = 0无任何版本发布→ **A3 ✗ / Rep4 ✗**
- 根级文件仅 `README.md`;无根级 requirements.txt / CITATION.cff / codemeta.json / .zenodo.json
- CITATION.cff=0、codemeta.json=0、.zenodo.json=0 → **F3 ✗ / I3 ✗ / R1 ✗**
- requirements.txt 13 处仅子目录、Dockerfile 5、Makefile 3、main.py 13、train.py 16、test.py 15 → 子目录复现较完整,但**根级无统一依赖锁**
- `has_dataset` = False → **Rep2 ✗**
- topics = [python, jupyter notebook, cuda] → **F2 ✓**description 详尽≥20 字)→ **F1 ✓**
- HEAD commit SHA = `e14ac625752171fd46c90778cf5c7b000d05307b`
**5 轴实测分**F 67 · A 50 · I 17 · R 50 · Repro 40 → **总评 C 🔴 45/100**
| 轴 | 分 | 关键依据 |
|----|----|----------|
| F 可发现 | 67 | F1✓ 详尽描述 · F2✓ 3 topics · F3✗ 无 codemeta/.zenodo |
| A 可访问 | 50 | A1✓ 公开 · A2✗ 无仓库级 license · A3✗ 无 release · A4✓ commit SHA |
| I 可互操作 | 17 | I1⚠ 依赖散落子目录无根级锁 · I2✗ 无机器可读 license · I3✗ 无标准元数据 |
| R 可复用 | 50 | R1✗ 无 CITATION · R2⚠ 根 README 是论文列表缺统一用法 · R4✓ 无明显敏感泄露 |
| Repro 可复现 | 40 | Rep1⚠ 子目录 requirements 无根级锁 · Rep2✗ 无数据集说明 · Rep3⚠ 子目录有步骤无统一复现章 · Rep4✗ 无 release · Rep5✓ 入口齐全 |
**结论**:一个 19⭐ 的"论文复现"合集FAIR/可复现维度仅得 C——无仓库级 license、无 release、无 CITATION、无数据集说明、依赖散落子目录。**正好印证可复现性危机**2024 顶会仅 19.5% 提供官方代码)。处方空间大:补根级 LICENSE + CITATION.cff + 统一 requirements + 打 v1.0 release + README 复现章节。
> **fork→PR 链路Task 7 实测2026-07-01**:✅ 跑通。`repo +fork` → `branch +create feat/fair-remediation --from master``file +create` 建 4 文件LICENSE / CITATION.cff / codemeta.json / REPRODUCIBILITY.md`pr +create`**PR #1**`caoweiqiong/ICCV2021#1`openid 145336。**全程纯 API 建文件,无需克隆 3328 文件大仓**`file +create` 支持 `--branch`)。
> **OpenAlex 溯源Task 7 实测)**:⚠️ 匿名搜索被限流HTTP 503 *"rate-limited due to heavy load, use free API key"*),溯源栏降级跳过——**正好印证 freemium 边界(§八-3**skill 优雅降级、报告卡标注"未命中"。
> **SWH-IDTask 7 实测)**:环境无 `swh.model`,证书用 `git+commit e14ac62` 锚定(符合 §六降级)。

View File

@ -0,0 +1,152 @@
---
name: gitlink-research-fair
version: 1.0.0
description: "科研软件 FAIR 体检:分析 GitLink 科研仓库的可发现/可访问/可互操作/可复用/可复现性,输出体检报告卡,自动开 PR 修复缺口并签发 SWH/commit 锚定的可复现证书。当用户需要评估科研仓库的 FAIR 性与可复现性、生成科研软件体检报告时触发。"
metadata:
requires:
bins: ["gitlink-cli"]
cliHelp: "gitlink-cli repo --help"
---
# gitlink-research-fair科研软件 FAIR 体检)
**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
**CRITICAL — 所有写操作(开修复 PR默认先预览、确认后再执行`--auto` 跳过预览但仍受护栏约束。**
**CRITICAL — 绝不自动 merge绝不 force-push处方只对 fork 开 PR绝不碰原仓库。**
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`GitHub CLI操作 GitLink 资源。**
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md)详细检查清单、评分算法、KG schema 与学术引用见 [`REFERENCE.md`](REFERENCE.md)。
## 概述
本 Skill 引导 AI 对任意 GitLink 科研仓库做结构化、有学术标准依据、低误报的"FAIR + 可复现性"诊断,产出**体检报告卡**,并对缺口**自动开 PR 修复**、用 **SWH/commit 锚定**签发**可复现证书**。许可证/安全子项**复用 `gitlink-license`**。四幕剧本v1诊断 → 处方 → 证书。
## 命令接口skill 约定参数,非 CLI flag
| 参数 | 默认 | 说明 |
|------|------|------|
| `--owner/--repo` | 自动从 cwd 解析 | 目标科研仓库 |
| `--lenses` | 全 5 轴 | 子集,如 `F,A,Repro` |
| `--auto` | 关 | 跳过预览直接开 PR仍受护栏 |
| `--no-fork` | 关 | 不开 PR处方物料落本地 |
| `--enrich` | 开 | 启用 OpenAlex 溯源(限流自动降级) |
| `--refresh` | 关 | 即使有旧报告哨兵也重评 |
## 管道8 步)
### ① 取上下文
`repo +info`(元数据/license/topics/has_dataset· `file +list`(关键文件清单)
### ② 深采
`file +get` 读 LICENSE/CITATION.cff/codemeta.json/README/requirements/Dockerfile · `release +list`(版本)· `commit +list`SHA· `issue/pr +list`(协作)· `member +list`(作者)
### ③ FAIR 评分M1
逐项评 5 轴(许可证/安全子项委托 `gitlink-license` 流程)→ `✓/✗/⚠/⊥` + 证据 + 置信度
### ④ KG 构建M2
四实体(Repo/Contributor/File/Commit)+Paper/Dataset/License 节点 → Mermaid 小图 + triples JSON
### ⑤ 溯源富集M3
从 README/CITATION 抽论文 → OpenAlex REST 反查作者/机构best-effort
### ⑥ 渲染报告卡hero并落盘
等级 + 雷达图 + 5 轴逐项表 + 处方摘要 + 证书栏 + KG 小图 + 溯源栏。
**始终保存为本地文件** `report-cards/<owner>-<repo>-report-card.md`cwd 下,含哨兵)——报告卡是可归档/复查的核心产物,**无论后续是否开 PR 都必须落盘,绝不只在终端输出**。
### ⑦ 处方M4
`✗/⚠` 项生成 CITATION.cff/codemeta.json/LICENSE/复现章节 → 默认预览
### ⑧ 发布
报告卡已在 ⑥ 落盘(`report-cards/<owner>-<repo>-report-card.md`)。
- **fork 模式**:确认后对 fork 开 PRPR body 带报告卡摘要)+ 出 SWH/commit 证书
- **`--no-fork` 或 PR 失败**:报告卡已在本地,告知用户路径,可手动粘贴或提交
- 哨兵内嵌于报告卡(及 PR body若开
## 5 轴评分 Rubric
> 对标 **FAIR4RSNature Sci Data 2022+ howfairis 5 维**。诚实声明:这是**适配版**评分(社区尚无认证级自动校验器),不是官方认证。**FAIR ≠ 可复现**,故 Repro 单独成轴。逐条映射与证据见 [`REFERENCE.md`](REFERENCE.md)。
每项判定 `✓满足 / ✗缺失 / ⚠部分 / ⊥GitLink 无该字段(跳过并标注)`,附证据来源 + 置信度。
| 轴 | FAIR4RS 映射 | 检查项(证据) |
|----|--------------|----------------|
| **F 可发现** | F1/F2 | F1 清晰描述(repo desc ≥20 字) · F2 话题/关键词(topics) · F3 标准元数据(codemeta.json/.zenodo.json) |
| **A 可访问** | F1.2/R1.1 | A1 公开(is_public) · A2 有许可证(license_id/LICENSE)[gitlink-license] · A3 有版本发布(release tag) · A4 持久标识(commit SHA/SWH-ID) |
| **I 可互操作** | R1.1/I | I1 依赖清单(requirements/go.mod/package.json/environment.yml) · I2 许可证机器可读(SPDX/license_id) · I3 元数据标准格式(CITATION.cff/codemeta) |
| **R 可复用** | R1.2/R2 | R1 溯源/引用(CITATION.cff/README 引用) · R2 README 质量(安装+使用) · R3 源码声明[gitlink-license] · R4 无敏感泄露[gitlink-license] |
| **Repro 可复现** ⭐差异轴 | (独立于 FAIR | Rep1 环境锁(锁版本/Dockerfile) · Rep2 数据集说明(has_dataset/README 引用) · Rep3 复现步骤(README 章节) · Rep4 版本固定 · Rep5 入口可执行(main/Makefile/CLI) |
**评分**:轴分 = 满足项 / (总项 ⊥项)(⚠ 计 0.5);总评 = 5 轴均分(某轴全 ⊥ 则记 N/A 并排除);等级 **A🟢≥80 / B🟡60-79 / C🔴<60**。`confidence=low` 标"待人工确认",不进总评。
## 报告卡格式hero 产出)
````markdown
🏥 **gitlink-research-fair 科研软件体检报告**
**总体**<等级> <>/100F · A · I · R · Repro版本锚定commit <sha><release >
**范围**:检查 19 项✓N · ✗N · ⚠N · ⊥N跳过<原因>
### 五轴雷达
ASCII 或 Mermaid 雷达F/A/I/R/Repro
### 逐项
| 轴 | 项 | 状态 | 证据 |
|---|---|:---:|---|
| <> | <id 项名> | ✓/✗/⚠/⊥ | <gitlink-cli 证据> |
### 🔧 处方(可自动修复 N 项)
- [<><id>] <生成物>(从 <来源> 推断)
### 📜 可复现证书
锚定版本git+commit <sha> FAIR: <等级> Repro: <状态>
(完整 SWH-ID 需 swh-identify本次用 commit-SHA 锚定)
### 🔗 溯源OpenAlex
<作者/机构/载体 "未找到关联论文已跳过">
### 🧬 科研关系图KG
```mermaid
<RepocontributesContributor · Repolicensed?? · RepohasDataset?>
```
---
<!-- gitlink-research-fair v1 | repo:<owner>/<repo> | grade:<G> | sha:<head-sha> -->
*由 gitlink-research-fair skill 生成。*
````
哨兵 `<!-- gitlink-research-fair v1 | repo | grade | sha -->` 用于幂等与"基于哪个 commit"标识。重跑检测旧哨兵 → 默认提议更新(`--refresh` 才覆盖);`sha` 不匹配 → 提示"报告已过期,建议重评"。
## 处方M4惊艳闭环
| 缺口 | 生成物 |
|------|--------|
| F3 缺 codemeta.json | 从 repo +info + README 生成 codemeta.json 草稿 |
| R1 缺 CITATION.cff | 从 README/作者生成 CITATION.cff 草稿 |
| A2 缺 license | 给 MIT / 木兰 PSL v2 模板(任选) |
| Rep1 缺依赖锁 | 从 import 扫描建议 requirements.txt |
| Rep3 缺复现章节 | 从入口/README 生成"复现"章节草稿 |
**安全护栏**:默认全量预览 → 确认 → 对 **fork** 开一个 PRPR body 带报告卡摘要);`--auto` 跳过预览但**永不 force-push、永不碰原仓库、永不自动 merge**`--no-fork` 物料落本地。所有写操作需认证。
## 证书SWH/commit 锚定)
用 HEAD commit SHA + release tag 锚定版本。若环境有 Python `swh.model` → 算完整 SWH-ID否则 `git+<commit-SHA>` 锚定,报告卡标注"完整 SWH-ID 需 swh-identify"。证书含仓库、锚定版本、FAIR 等级、Repro 状态、可引用条目(对标 ACM Artifact Badge。嵌报告卡证书栏。
## KG + OpenAlex支撑栏
- **KG**:四实体(Repo/Contributor/File/Commit)+Paper/Dataset/License关系 contributes-to/authored/depends-on/cites/licensed-under/version-at。输出 Mermaid 小图 + triples JSONschema 见 REFERENCE
- **OpenAlex**README/CITATION 抽论文 → REST `/works` 反查作者/机构/载体。降级:限流或抽不到 → 跳过,标注"未找到关联论文"。
## 错误处理与降级
| 情况 | 处理 |
|------|------|
| `file +tree --recursive` 返回空 | 手动递归子目录 |
| 无 LICENSE | A2 ✗,处方建议模板 |
| OpenAlex 限流/无果 | 跳过溯源栏标注 |
| `swh.model` 不可用 | commit-SHA 锚定 + 标注 |
| 仓库过大 | 抽样文件 + "部分审查"标注 |
| fork 失败/无写权限 | 处方物料落本地(`--no-fork` |
| 二进制是 npm 旧版 | 强制 `./gitlink-cli``go build` 重建 |
| 仓库私有/无权限 | 清晰错误,不发报告 |
| 报告/PR 发布失败 | 报告卡已在 ⑥ 落盘,告知路径,用户可手动粘贴/提交 |

View File

@ -0,0 +1,154 @@
# 示例:科研软件 FAIR 体检(真实数据)
> 基于 `songhui18/ICCV2021`(显示名"ICCV2021论文复现"URL identifier=`ICCV2021`)于 2026-07-01 在 Claude Code 中实跑。
> 这是 19⭐/17fork 的 ICCV 2021 论文复现合集3328 文件、17 个论文复现子目录。
> 一个"**可复现性**"工具去体检一个"**论文复现**"合集——主题共振。
---
## Step 1取上下文真实输出摘要
| 项 | 实测值 |
|---|---|
| URL identifier | `ICCV2021`**CLI 用 identifier不是中文显示名** |
| `license_id` | `None`**根目录无 LICENSE**20 个 LICENSE 全在子目录随上游代码) |
| releases | `0`(无任何版本发布) |
| 根级文件 | 仅 `README.md` |
| CITATION.cff / codemeta.json / .zenodo.json | 均无 |
| requirements.txt | 13 处(**仅子目录,无根级依赖锁** |
| `has_dataset` | `False` |
| topics | python, jupyter notebook, cuda |
| description | 详尽≥20 字) |
| HEAD commit | `e14ac625752171fd46c90778cf5c7b000d05307b` |
> ⚠️ **关键踩坑**`gitlink-cli --repo` 必须传 `identifier=ICCV2021`;用中文显示名"ICCV2021论文复现"会返回 **404**。identifier 从 `search +repos` 结果取。
采集命令:
```bash
gitlink-cli repo +info --owner songhui18 --repo ICCV2021 --format json
gitlink-cli file +list --owner songhui18 --repo ICCV2021 --format json # 3328 文件扁平列表
gitlink-cli release +list --owner songhui18 --repo ICCV2021 --format json
gitlink-cli commit +list --owner songhui18 --repo ICCV2021 --page 1 --format json
```
## Step 25 轴评分(真实)
| 轴 | 分 | 关键依据 |
|---|---|---|
| F 可发现 | 67 | F1✓ 详尽描述 · F2✓ 3 topics · F3✗ 无 codemeta/.zenodo |
| A 可访问 | 50 | A1✓ 公开 · A2✗ **无仓库级 license** · A3✗ 无 release · A4✓ commit SHA |
| I 可互操作 | 17 | I1⚠ 依赖散落子目录无根级锁 · I2✗ 无机器可读 license · I3✗ 无标准元数据 |
| R 可复用 | 50 | R1✗ 无 CITATION · R2⚠ 根 README 是论文列表 · R4✓ 无明显敏感泄露 |
| Repro 可复现 | 40 | Rep1⚠ · Rep2✗ 无数据集说明 · Rep3⚠ · Rep4✗ 无 release · Rep5✓ 入口齐全 |
**总评C 🔴 45/100** —— 一个 19⭐ 的论文复现合集FAIR/可复现仅得 C。
## Step 3报告卡真实全文
````markdown
🏥 **gitlink-research-fair 科研软件体检报告**
**总体**C 🔴 45/100F 67 · A 50 · I 17 · R 50 · Repro 40版本锚定commit `e14ac62`(无 release
**范围**:检查 19 项✓6 · ✗8 · ⚠4 · ⊥1R3 源码声明委托 gitlink-license 未在本轮跑)
### 逐项(节选)
| 轴 | 项 | 状态 | 证据 |
|---|---|:---:|---|
| A | A2 有许可证 | ✗ | `license_id` 为空,根目录无 LICENSE20 个 LICENSE 全在子目录) |
| F | F3 标准元数据 | ✗ | 无 codemeta.json / .zenodo.json |
| I | I1 依赖清单 | ⚠ | requirements.txt 仅在 13 个子目录,无根级统一锁 |
| R | R1 溯源/引用 | ✗ | 无 CITATION.cff |
| R | R3 源码声明 | ⊥ | 委托 gitlink-license本轮未跑深度源码声明扫描 |
| Repro | Rep2 数据集说明 | ✗ | `has_dataset=False`README 无数据集说明 |
| Repro | Rep5 入口可执行 | ✓ | 子目录含 train.py×16 / main.py×13 / test.py×15 |
| F | F1 清晰描述 | ✓ | description 详尽描述 CV 顶会论文复现合集 |
### 🔧 处方(可自动修复 4 项)
- [A2] 添加 LICENSEMIT / 木兰 PSL v2
- [R1] 生成 CITATION.cff
- [F3/I3] 生成 codemeta.json
- [Rep3] 补 REPRODUCIBILITY.md 复现指南
### 📜 可复现证书
锚定版本:`git+commit e14ac625752171fd46c90778cf5c7b000d05307b` FAIR: C 🔴 Repro: ⚠ 部分可复现
(完整 SWH-ID 需 `swh-identify`;环境无 `swh.model`,本次用 commit-SHA 锚定)
### 🔗 溯源OpenAlex
⚠️ 未命中——匿名搜索被限流HTTP 503需 free API key已降级跳过符合 freemium 边界)。
### 🧬 科研关系图KG
```mermaid
graph LR
R[Repo: ICCV2021合集] -->|contributes-to| C1[Contributor: 宋辉/songhui18]
R -->|has| D{Dataset?}:::miss
R -->|licensed-under| L{License?}:::miss
R -->|version-at| H[commit e14ac62]
classDef miss fill:#fee,stroke:#c33;
```
---
<!-- gitlink-research-fair v1 | repo:songhui18/ICCV2021 | grade:C | sha:e14ac625 -->
*由 gitlink-research-fair skill 生成。*
````
## Step 4处方 PR真实闭环 ✅)
**全自动跑通**(无需克隆 3328 文件大仓,纯 API 建文件):
```bash
gitlink-cli repo +fork --owner songhui18 --repo ICCV2021 # → caoweiqiong/ICCV2021
gitlink-cli branch +create --owner caoweiqiong --repo ICCV2021 --name feat/fair-remediation --from master
gitlink-cli file +create --owner caoweiqiong --repo ICCV2021 --branch feat/fair-remediation \
--path LICENSE --message "Add MIT LICENSE (fix A2)" --content "$(cat LICENSE)"
# … 同样建 CITATION.cff / codemeta.json / REPRODUCIBILITY.md
gitlink-cli pr +create --owner caoweiqiong --repo ICCV2021 --head feat/fair-remediation --base master \
--title "Improve research FAIRness & reproducibility (gitlink-research-fair 处方)" \
-b "$(cat pr_body.md)"
```
**PR**https://www.gitlink.org.cn/caoweiqiong/ICCV2021/pulls/1 `pull_request_number: 1`, id `145336`, open
PR body 含体检报告卡摘要 + 修复表。新增 4 文件:
| 文件 | 修复项 | FAIR 原则 |
|------|--------|-----------|
| `LICENSE` | 补 MIT 许可证 | R1.1 / A2 |
| `CITATION.cff` | 补引用信息 | R1.2 / R1 |
| `codemeta.json` | 补标准元数据 | F2 / F3 / I3 |
| `REPRODUCIBILITY.md` | 补复现指南 | Rep3 |
**预期效果**:合并后 A2/F3/I3/R1/Rep3 由 ✗/⚠ → ✓,总分 **C 45 → B ~75**
## Step 5证书
- **锚定版本**`git+commit e14ac625752171fd46c90778cf5c7b000d05307b`HEAD无 release
- **SWH-ID**:环境无 `swh.model`,用 commit-SHA 锚定(完整 SWH-ID 需 `swh-identify`
- **结论**FAIR C 🔴 · Repro ⚠ 部分可复现 —— 可作为"待改进科研软件"的基线快照,供后续 release 后重评对比。
---
## 对照:有 license 的仓库(证明评分区分度)
`leejt/GraphGallery`图神经网络多框架开发工具Python有 license跑同一 rubric
| 轴 | songhui18/ICCV2021 | leejt/GraphGallery |
|---|---|---|
| F | 67 | 67 |
| A | **50**(无 license | **75**(✓ 根级 LICENSE |
| I | 17无根级依赖锁 | 67✓ 根级 requirements.txt + setup.py |
| R | 50 | 67 |
| Repro | 40 | 70✓ setup.py 可安装) |
| **总评** | **C 🔴 45** | **B 🟡 69** |
**区分度 +24 分**,主要由 **A2 license + I1/Rep1 打包可安装** 拉开。rubric 正确奖励"有 license + 可安装"的仓库。GraphGallery 仍缺 CITATION/release故是 B 非 A——评分诚实不虚高。
---
## 关键结论
1. **主题共振**:用"可复现性"工具体检"论文复现"合集——一个 19⭐ 的真实科研仓库竟只得 C**正好印证可复现性危机**2024 顶会仅 19.5% 提供官方代码)。
2. **闭环可用**fork → 建分支 → `file +create` 建修复文件 → 开 PR**全程纯 API、无需克隆大仓**,处方 PR 真实落地。
3. **诚实降级**OpenAlex 匿名限流(503)→溯源跳过;无 `swh.model`→commit-SHA 锚定——都是设计内的优雅降级,**不掩盖、不编造**。
4. **评分有区分度**C 45无 license 合集vs B 69有 license 工具rubric 行为正确。
5. **差异于 howfairis**GitLink 原生 + 报告卡 + **自动修复闭环** + SWH 证书 + OpenAlex 溯源howfairis 只跑 GitHub 且只打分不修复。

View File

@ -27,6 +27,7 @@ metadata:
> - Issue 智能分拣 → [`../gitlink-triage/SKILL.md`](../gitlink-triage/SKILL.md)
> - Release Notes 生成 → [`../gitlink-changelog/SKILL.md`](../gitlink-changelog/SKILL.md)
> - 项目健康报告 → [`../gitlink-health/SKILL.md`](../gitlink-health/SKILL.md)
> - 科研软件 FAIR 体检 → [`../gitlink-research-fair/SKILL.md`](../gitlink-research-fair/SKILL.md)
## 工作流 1PR 全流程