entropy-check

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Entropy

Entropy

Sensor. Detect, grade, report. Never fix.
Install via npx:
bash
npx skills add fellowship-dev/dogfooded-skills/skills/ops/entropy-check
传感器:检测、评分、报告。绝不修复。
通过npx安装:
bash
npx skills add fellowship-dev/dogfooded-skills/skills/ops/entropy-check

When to Use

使用场景

  • Event-driven (PR merge): Triggered after a PR merges. Scans affected domains for doc staleness.
  • Weekly cron (full sweep): Runs against each product repo, updates QUALITY_SCORE.md with fresh grades.
  • Manual: When you suspect docs have drifted or want a current health snapshot before a refactor.
  • 事件驱动(PR合并后): PR合并后触发,扫描受影响领域的文档是否过时。
  • 每周定时任务(全面扫描): 针对每个产品仓库运行,更新QUALITY_SCORE.md文件,写入最新等级。
  • 手动触发: 当你怀疑文档已偏离代码现状,或在重构前需要当前的健康状况快照时使用。

What It Does

功能说明

Entropy is a read-only sensor. It computes domain quality grades from mechanical signals:
SignalWhat it measuresWeight
Doc coverageDoes
docs/code-structure.md
cover this domain?
Binary
Flow coverageFlowChad flow defined for critical paths?Binary (frontend repos only)
Staleness deltaDays since last code commit vs. last doc update>30d = stale
Open issuesIssues tagged to domain in GitHub>3 open = signal
Test coverageFrom coverage report if available<60% = signal
Hookshot coverageIs doc-coverage.json current vs docs?Staleness
Grade scale:
  • A — All applicable signals green
  • B — 1 applicable signal missing or yellow
  • C — 2 applicable signals missing
  • D — 3+ applicable signals missing
  • F — No docs at all for this domain
Inapplicable signals are excluded from the grade denominator. A repo with 4 applicable signals all passing = grade A.

Entropy是一个只读传感器,它通过机械信号计算领域质量等级:
信号测量内容权重
文档覆盖率
docs/code-structure.md
是否覆盖该领域?
二元(是/否)
流程覆盖率关键路径是否定义了FlowChad流程?二元(仅前端仓库适用)
过时差值上次代码提交与上次文档更新的间隔天数>30天 = 过时
未解决问题GitHub中标记到该领域的问题>3个未解决 = 异常信号
测试覆盖率若有覆盖率报告则读取数据<60% = 异常信号
Hookshot覆盖率doc-coverage.json与文档是否同步?过时状态
等级标准:
  • A — 所有适用信号均为绿色(正常)
  • B — 1个适用信号缺失或为黄色(警告)
  • C — 2个适用信号缺失
  • D — 3个及以上适用信号缺失
  • F — 该领域完全没有文档
不适用的信号不计入等级计算分母。例如,某个仓库有4个适用信号且全部达标,则等级为A。

Instructions

操作指南

0. Identify Target Repo

0. 确定目标仓库

bash
REPO_ROOT=$(git rev-parse --show-toplevel)
REPO_NAME=$(basename $(git remote get-url origin) .git)
ORG=$(git remote get-url origin | sed 's/.*github.com[:/]\([^/]*\).*/\1/')
FULL_REPO="$ORG/$REPO_NAME"
TODAY=$(date +%Y-%m-%d)
Read
QUALITY_SCORE.md
if it exists — this is the baseline to update. Read
ARCHITECTURE.md
if it exists — extract domain list. If neither exists, infer domains from directory structure (same logic as setup-harness).
bash
REPO_ROOT=$(git rev-parse --show-toplevel)
REPO_NAME=$(basename $(git remote get-url origin) .git)
ORG=$(git remote get-url origin | sed 's/.*github.com[:/]\([^/]*\).*/\1/')
FULL_REPO="$ORG/$REPO_NAME"
TODAY=$(date +%Y-%m-%d)
读取已有的
QUALITY_SCORE.md
文件——这是需要更新的基准文件。 读取
ARCHITECTURE.md
文件(若存在)——提取领域列表。 若两个文件都不存在,则从目录结构推断领域(逻辑与setup-harness相同)。

1. Determine Signal Applicability

1. 确定信号适用性

Before grading, determine which signals apply to this repo. Record applicability for the report.
评分前,确定哪些信号适用于当前仓库,并在报告中记录适用性。

Frontend Detection (S2 FlowChad)

前端检测(S2 FlowChad)

bash
HAS_FRONTEND=false
if [ -f "$REPO_ROOT/package.json" ]; then
  grep -q '"next"\|"react"\|"vue"\|"angular"\|"svelte"' "$REPO_ROOT/package.json" && HAS_FRONTEND=true
fi
if [ -d "$REPO_ROOT/app" ] || [ -d "$REPO_ROOT/pages" ] || [ -d "$REPO_ROOT/src/components" ]; then
  HAS_FRONTEND=true
fi
If
HAS_FRONTEND=false
: S2 FlowChad is inapplicable — exclude from grade denominator.
bash
HAS_FRONTEND=false
if [ -f "$REPO_ROOT/package.json" ]; then
  grep -q '"next"\|"react"\|"vue"\|"angular"\|"svelte"' "$REPO_ROOT/package.json" && HAS_FRONTEND=true
fi
if [ -d "$REPO_ROOT/app" ] || [ -d "$REPO_ROOT/pages" ] || [ -d "$REPO_ROOT/src/components" ]; then
  HAS_FRONTEND=true
fi
HAS_FRONTEND=false
:S2 FlowChad 不适用 —— 不计入等级计算分母。

Hookshot Detection (S6)

Hookshot检测(S6)

bash
HOOKSHOT_EXISTS=false
git -C "$REPO_ROOT" log -1 --format="%ci" -- .claude/doc-coverage.json 2>/dev/null | grep -q . && HOOKSHOT_EXISTS=true
[ -f "$REPO_ROOT/.claude/doc-coverage.json" ] && HOOKSHOT_EXISTS=true
S6 is always applicable but the score message differs — see Signal 6 below.
bash
HOOKSHOT_EXISTS=false
git -C "$REPO_ROOT" log -1 --format="%ci" -- .claude/doc-coverage.json 2>/dev/null | grep -q . && HOOKSHOT_EXISTS=true
[ -f "$REPO_ROOT/.claude/doc-coverage.json" ] && HOOKSHOT_EXISTS=true
S6始终适用,但评分说明不同——见下方信号6的说明。

2. Determine Scope

2. 确定扫描范围

PR-triggered mode: Given a PR number, identify which files changed:
bash
undefined
PR触发模式: 给定PR编号,识别变更文件:
bash
undefined

Get changed files from PR

从PR获取变更文件

GH_TOKEN=$GH_TOKEN gh api repos/$FULL_REPO/pulls/{PR_NUMBER}/files
--jq '.[].filename'
Map each changed file to its domain using directory prefixes. Only grade domains with changes.

**Full sweep mode:** Grade all domains. Read domain list from `ARCHITECTURE.md` or infer.
GH_TOKEN=$GH_TOKEN gh api repos/$FULL_REPO/pulls/{PR_NUMBER}/files
--jq '.[].filename'
通过目录前缀将每个变更文件映射到对应的领域,仅对有变更的领域进行评分。

**全面扫描模式:** 对所有领域评分。从`ARCHITECTURE.md`读取领域列表或进行推断。

3. Per-Domain Grading

3. 逐领域评分

For each domain in scope:
针对每个范围内的领域:

Signal 1: Doc Coverage

信号1:文档覆盖率

bash
undefined
bash
undefined

Is this domain mentioned in docs/code-structure.md?

该领域是否在docs/code-structure.md中被提及?

grep -i "{domain_name}" $REPO_ROOT/docs/code-structure.md 2>/dev/null && echo "COVERED" || echo "MISSING"

Score: ✅ covered / ❌ missing
grep -i "{domain_name}" $REPO_ROOT/docs/code-structure.md 2>/dev/null && echo "COVERED" || echo "MISSING"

评分:✅ 已覆盖 / ❌ 未覆盖

Signal 2: FlowChad Coverage

信号2:FlowChad覆盖率

Skip entirely if
HAS_FRONTEND=false
.
Record as "N/A — no frontend detected" in applicability table.
bash
undefined
HAS_FRONTEND=false
则完全跳过
,在适用性表格中记录为"N/A — 未检测到前端"。
bash
undefined

Only run if HAS_FRONTEND=true

仅当HAS_FRONTEND=true时运行

if [ "$HAS_FRONTEND" = "true" ]; then ls $REPO_ROOT/.flowchad/flows/ 2>/dev/null | grep -i "{domain_slug}" && echo "COVERED" || echo "MISSING" fi

Score (frontend only): ✅ has flow / ❌ no flow
if [ "$HAS_FRONTEND" = "true" ]; then ls $REPO_ROOT/.flowchad/flows/ 2>/dev/null | grep -i "{domain_slug}" && echo "COVERED" || echo "MISSING" fi

评分(仅前端):✅ 有流程定义 / ❌ 无流程定义

Signal 3: Staleness Delta

信号3:过时差值

Find the most recent code commit date for files in this domain:
bash
undefined
查找该领域文件的最近代码提交日期:
bash
undefined

Last commit touching domain files

最后一次修改领域文件的提交

git -C $REPO_ROOT log -1 --format="%ci" -- "{domain_directory_glob}" 2>/dev/null

Find the last update date for the domain's doc section:
```bash
git -C $REPO_ROOT log -1 --format="%ci" -- "{domain_directory_glob}" 2>/dev/null

查找该领域文档章节的最近更新日期:
```bash

Last commit touching docs/code-structure.md

最后一次修改docs/code-structure.md的提交

git -C $REPO_ROOT log -1 --format="%ci" -- docs/code-structure.md 2>/dev/null

Delta = days between last code commit and last doc update.
Score: ✅ delta ≤30 days / ⚠️ delta 31-60 days (yellow) / ❌ delta >60 days
git -C $REPO_ROOT log -1 --format="%ci" -- docs/code-structure.md 2>/dev/null

差值 = 上次代码提交与上次文档更新的间隔天数。
评分:✅ 差值 ≤30天 / ⚠️ 差值31-60天(黄色警告) / ❌ 差值>60天

Signal 4: Open Issues

信号4:未解决问题

bash
undefined
bash
undefined

Open issues tagged to this domain (use domain name as label or search term)

标记到该领域的未解决问题(使用领域名称作为标签或搜索词)

GH_TOKEN=$GH_TOKEN gh issue list --repo $FULL_REPO
--state open --search "{domain_name}"
--json number,title | jq length 2>/dev/null || echo "0"

Score: ✅ 0-3 open / ⚠️ 4-6 open (yellow) / ❌ >6 open
GH_TOKEN=$GH_TOKEN gh issue list --repo $FULL_REPO
--state open --search "{domain_name}"
--json number,title | jq length 2>/dev/null || echo "0"

评分:✅ 0-3个未解决 / ⚠️4-6个未解决(黄色警告) / ❌>6个未解决

Signal 5: Test Coverage

信号5:测试覆盖率

bash
undefined
bash
undefined

Look for coverage reports

查找覆盖率报告

ls $REPO_ROOT/coverage/ $REPO_ROOT/.nyc_output/ $REPO_ROOT/tmp/coverage/ 2>/dev/null cat $REPO_ROOT/coverage/index.html 2>/dev/null | grep -o '[0-9.]*%' | head -1
ls $REPO_ROOT/coverage/ $REPO_ROOT/.nyc_output/ $REPO_ROOT/tmp/coverage/ 2>/dev/null cat $REPO_ROOT/coverage/index.html 2>/dev/null | grep -o '[0-9.]*%' | head -1

Rails: simplecov

Rails项目:使用simplecov

cat $REPO_ROOT/coverage/.last_run.json 2>/dev/null | jq '.result.covered_percent'

If no coverage report is available → skip this signal (treat as neutral, not ❌).
Score: ✅ ≥80% / ⚠️ 60-79% / ❌ <60% (only when coverage data is available)
cat $REPO_ROOT/coverage/.last_run.json 2>/dev/null | jq '.result.covered_percent'

若没有可用的覆盖率报告 → 跳过该信号(视为中性,而非❌)。
评分:✅ ≥80% / ⚠️60-79% / ❌<60%(仅当有覆盖率数据时)

Signal 6: Hookshot Coverage Staleness

信号6:Hookshot覆盖率过时状态

bash
COVERAGE_DATE=$(git -C $REPO_ROOT log -1 --format="%ci" -- .claude/doc-coverage.json 2>/dev/null)
DOCS_DATE=$(git -C $REPO_ROOT log -1 --format="%ci" -- docs/code-structure.md 2>/dev/null)
Distinguish two cases:
  • Hookshot not configured
    .claude/doc-coverage.json
    has never existed (no git history for it, file absent): Score: ❌ "Hookshot not configured — recommend setup"
  • Hookshot stale — file has existed (git history found) but docs were updated more recently: Compute delta days between COVERAGE_DATE and DOCS_DATE. Score: ⚠️ "Hookshot stale by {N} days"
  • Hookshot current — coverage was updated after or same day as docs: Score: ✅ "Hookshot current"
Detection logic:
bash
if [ -z "$COVERAGE_DATE" ] && [ ! -f "$REPO_ROOT/.claude/doc-coverage.json" ]; then
  # Never been set up
  S6_SCORE="❌"
  S6_NOTE="Hookshot not configured — recommend setup"
elif [ -n "$DOCS_DATE" ] && [ -n "$COVERAGE_DATE" ]; then
  # Both exist — compare dates
  DOCS_EPOCH=$(date -d "$DOCS_DATE" +%s 2>/dev/null || date -j -f "%Y-%m-%d %H:%M:%S %z" "$DOCS_DATE" +%s 2>/dev/null)
  COV_EPOCH=$(date -d "$COVERAGE_DATE" +%s 2>/dev/null || date -j -f "%Y-%m-%d %H:%M:%S %z" "$COVERAGE_DATE" +%s 2>/dev/null)
  STALE_DAYS=$(( (DOCS_EPOCH - COV_EPOCH) / 86400 ))
  if [ "$STALE_DAYS" -gt 0 ]; then
    S6_SCORE="⚠️"
    S6_NOTE="Hookshot stale by ${STALE_DAYS} days"
  else
    S6_SCORE="✅"
    S6_NOTE="Hookshot current"
  fi
else
  S6_SCORE="❌"
  S6_NOTE="Hookshot not configured — recommend setup"
fi
bash
COVERAGE_DATE=$(git -C $REPO_ROOT log -1 --format="%ci" -- .claude/doc-coverage.json 2>/dev/null)
DOCS_DATE=$(git -C $REPO_ROOT log -1 --format="%ci" -- docs/code-structure.md 2>/dev/null)
区分两种情况:
  • 未配置Hookshot ——
    .claude/doc-coverage.json
    从未存在(无git历史记录,文件不存在): 评分:❌ "未配置Hookshot — 建议设置"
  • Hookshot过时 —— 文件已存在(有git历史记录),但文档更新时间更近: 计算COVERAGE_DATE与DOCS_DATE的间隔天数。 评分:⚠️ "Hookshot已过时{N}天"
  • Hookshot同步 —— 覆盖率更新时间晚于或等于文档更新时间: 评分:✅ "Hookshot已同步"
检测逻辑:
bash
if [ -z "$COVERAGE_DATE" ] && [ ! -f "$REPO_ROOT/.claude/doc-coverage.json" ]; then
  # 从未设置过
  S6_SCORE="❌"
  S6_NOTE="Hookshot not configured — recommend setup"
elif [ -n "$DOCS_DATE" ] && [ -n "$COVERAGE_DATE" ]; then
  # 两者均存在 — 比较日期
  DOCS_EPOCH=$(date -d "$DOCS_DATE" +%s 2>/dev/null || date -j -f "%Y-%m-%d %H:%M:%S %z" "$DOCS_DATE" +%s 2>/dev/null)
  COV_EPOCH=$(date -d "$COVERAGE_DATE" +%s 2>/dev/null || date -j -f "%Y-%m-%d %H:%M:%S %z" "$COVERAGE_DATE" +%s 2>/dev/null)
  STALE_DAYS=$(( (DOCS_EPOCH - COV_EPOCH) / 86400 ))
  if [ "$STALE_DAYS" -gt 0 ]; then
    S6_SCORE="⚠️"
    S6_NOTE="Hookshot stale by ${STALE_DAYS} days"
  else
    S6_SCORE="✅"
    S6_NOTE="Hookshot current"
  fi
else
  S6_SCORE="❌"
  S6_NOTE="Hookshot not configured — recommend setup"
fi

Compute Grade

计算等级

Collect only applicable signals. Count failing signals (❌) among applicable signals only:
APPLICABLE_SIGNALS = all signals minus inapplicable ones
FAILING = count of ❌ in APPLICABLE_SIGNALS
YELLOW = count of ⚠️ in APPLICABLE_SIGNALS
SCORE = FAILING + (YELLOW * 0.5), rounded up
  • SCORE = 0 → A
  • SCORE = 1 → B
  • SCORE = 2 → C
  • SCORE ≥ 3 → D
  • No docs at all → F
Example: repo with no frontend (S2 skipped), 5 applicable signals all green → grade A, not B.
仅收集适用信号,统计适用信号中的失败信号(❌)数量:
APPLICABLE_SIGNALS = 所有信号减去不适用的信号
FAILING = APPLICABLE_SIGNALS中❌的数量
YELLOW = APPLICABLE_SIGNALS中⚠️的数量
SCORE = FAILING + (YELLOW * 0.5),向上取整
  • SCORE = 0 → A
  • SCORE = 1 → B
  • SCORE = 2 → C
  • SCORE ≥3 → D
  • 完全无文档 → F
示例:无前端的仓库(跳过S2),5个适用信号全部达标 → 等级为A,而非B。

4. Update QUALITY_SCORE.md

4. 更新QUALITY_SCORE.md

Read the existing file. Update each graded domain's row. Add new domains if discovered. Preserve existing rows for domains not in scope (only update what was re-scanned).
markdown
undefined
读取现有文件,更新每个已评分领域的行。若发现新领域则添加。 保留未在扫描范围内的领域的现有行(仅更新重新扫描的内容)。
markdown
undefined

Domains

Domains

DomainGradeLast auditNotes
{domain}{grade}{TODAY}{brief note on what's missing, or "All signals green"}

Write the updated file. Commit with message: `chore: entropy scan — PR #{N} {title} [skip ci]` — the `[skip ci]` tag is **mandatory** to prevent triggering production deploys. Then append to the History section:
```markdown
| {TODAY} | {trigger: PR #{N} / weekly sweep / manual} | {N} domains scanned, {N} regressions, {N} improvements |
DomainGradeLast auditNotes
{domain}{grade}{TODAY}{简要说明缺失内容,或"所有信号正常"}

写入更新后的文件,提交信息为:`chore: entropy scan — PR #{N} {title} [skip ci]` —— `[skip ci]`标签**必须添加**,以避免触发生产部署。然后追加到History部分:
```markdown
| {TODAY} | {触发方式: PR #{N} / 每周扫描 / 手动} | {N}个领域已扫描,{N}个等级下降,{N}个等级提升 |

5. Signal Applicability Section

5. 信号适用性部分

Include a "Signal Applicability" table in every report output:
markdown
undefined
每份报告输出中都需包含"信号适用性"表格:
markdown
undefined

Signal Applicability

Signal Applicability

SignalApplicable?Reason
S1 Doc CoverageYes
S2 FlowChadNoNo frontend framework detected (bash/python scripts only)
S3 StalenessYes
S4 Open IssuesYes
S5 TestsYesNo test framework found — recommend adding bats for shell scripts
S6 HookshotYes

Populate the Reason column with specifics:
- S2 not applicable: "No frontend framework detected" + what was found (e.g., "bash/python scripts only", "Go/Rails repo")
- S2 applicable: list detected framework (e.g., "Next.js detected in package.json")
- S5 no data: "No coverage report found — signal skipped"
- S5 data found: leave Reason blank or note the coverage percentage
- S6: always applicable; Reason shows the hookshot status detail
SignalApplicable?Reason
S1 Doc CoverageYes
S2 FlowChadNoNo frontend framework detected (bash/python scripts only)
S3 StalenessYes
S4 Open IssuesYes
S5 TestsYesNo test framework found — recommend adding bats for shell scripts
S6 HookshotYes

填写Reason列的具体内容:
- S2不适用:"未检测到前端框架" + 实际检测结果(例如:"仅包含bash/python脚本"、"Go/Rails仓库")
- S2适用:列出检测到的框架(例如:"package.json中检测到Next.js")
- S5无数据:"未找到覆盖率报告 — 信号已跳过"
- S5有数据:Reason留空或注明覆盖率百分比
- S6:始终适用;Reason显示Hookshot的状态详情

6. Staleness Report

6. 过时报告

For any domain graded C, D, or F — or where grade regressed from previous — output a finding:
undefined
对于等级为C、D或F的领域,或等级下降的领域,输出发现结果:
undefined

Entropy Findings — {TODAY}

Entropy Findings — {TODAY}

Regressions (grade dropped)

Regressions (grade dropped)

  • {Domain}: {old grade} → {new grade} Missing: {list of failing signals} Last doc update: {date} Last code commit: {date} Delta: {N} days
  • {Domain}: {old grade} → {new grade} Missing: {失败信号列表} Last doc update: {date} Last code commit: {date} Delta: {N} days

Stable issues (same low grade)

Stable issues (same low grade)

  • {Domain}: {grade} (unchanged since {date}) Missing: {list}
  • {Domain}: {grade} (unchanged since {date}) Missing: {列表}

Improvements (grade improved)

Improvements (grade improved)

  • {Domain}: {old grade} → {new grade}
  • {Domain}: {old grade} → {new grade}

Clean (A or B)

Clean (A or B)

  • {Domain}: {grade}
undefined
  • {Domain}: {grade}
undefined

7. Imported Lib Drift (Architecture Check)

7. 导入库偏差(架构检查)

This check moved here from maintenance. It is an architecture signal, not an infra check.
Compare installed speckit commands against the source of truth (
fellowship-dev/spec-kit
):
bash
undefined
此检查已从维护模块移至此处,它属于架构信号,而非基础设施检查。
比较已安装的speckit命令与基准版本(
fellowship-dev/spec-kit
):
bash
undefined

Source of truth: fellowship-dev/spec-kit templates/commands/

基准版本:fellowship-dev/spec-kit templates/commands/

GH_TOKEN=$GH_TOKEN gh api repos/fellowship-dev/spec-kit/contents/templates/commands
--jq '.[].name' 2>/dev/null
GH_TOKEN=$GH_TOKEN gh api repos/fellowship-dev/spec-kit/contents/templates/commands
--jq '.[].name' 2>/dev/null

For each active repo with speckit installed:

针对每个已安装speckit的活跃仓库:

for repo in Lexgo-cl/rails-backend fellowship-dev/booster-pack fellowship-dev/farmesa-v2
fellowship-dev/mtg-lotr fellowship-dev/inbox-angel fellowship-dev/inbox-angel-worker; do echo "=== $repo ===" for cmd in specify plan tasks implement analyze checklist clarify; do SOURCE=$(GH_TOKEN=$GH_TOKEN gh api repos/fellowship-dev/spec-kit/contents/templates/commands/${cmd}.md
--jq '.sha' 2>/dev/null) INSTALLED=$(GH_TOKEN=$GH_TOKEN gh api repos/${repo}/contents/.claude/commands/speckit.${cmd}.md
--jq '.sha' 2>/dev/null) if [ "$SOURCE" != "$INSTALLED" ]; then echo " DRIFT: speckit.${cmd}.md (source: $SOURCE, installed: $INSTALLED)" fi done done

SHA mismatch = drift. Add drifted repos/commands to the staleness report.
Note: repos may have intentional customizations — flag for review, don't auto-fix.
**inbox-angel-worker exception**: speckit is installed locally and gitignored. Drift sync must be done locally on Spacestation.

Include drift findings in QUALITY_SCORE.md under a `## Tooling` section if any drift is found.
for repo in Lexgo-cl/rails-backend fellowship-dev/booster-pack fellowship-dev/farmesa-v2
fellowship-dev/mtg-lotr fellowship-dev/inbox-angel fellowship-dev/inbox-angel-worker; do echo "=== $repo ===" for cmd in specify plan tasks implement analyze checklist clarify; do SOURCE=$(GH_TOKEN=$GH_TOKEN gh api repos/fellowship-dev/spec-kit/contents/templates/commands/${cmd}.md
--jq '.sha' 2>/dev/null) INSTALLED=$(GH_TOKEN=$GH_TOKEN gh api repos/${repo}/contents/.claude/commands/speckit.${cmd}.md
--jq '.sha' 2>/dev/null) if [ "$SOURCE" != "$INSTALLED" ]; then echo " DRIFT: speckit.${cmd}.md (source: $SOURCE, installed: $INSTALLED)" fi done done

SHA不匹配 = 偏差。将存在偏差的仓库/命令添加到过时报告中。
注意:仓库可能有自定义修改——标记为需要审核,不要自动修复。
**inbox-angel-worker例外**:speckit为本地安装且已加入git忽略,偏差同步需在Spacestation本地完成。

若发现偏差,在QUALITY_SCORE.md的`## Tooling`部分添加偏差发现结果。

8. PR-Triggered Output

8. PR触发输出

When triggered by a PR merge event, output a comment-ready summary:
undefined
当由PR合并事件触发时,输出可直接作为评论的摘要:
undefined

Entropy Scan — PR #{N} merged

Entropy Scan — PR #{N} merged

Domains affected: {list}
DomainGradeChangeNotes
{domain}{grade}{→ or unchanged or ↑ or ↓}{note}
{If any regressions:} ⚠️ Doc staleness detected in: {domain list} Recommended: update docs/code-structure.md for these domains before the next PR in this area.

Include the Signal Applicability table (see step 5) at the end of the comment.
Domains affected: {list}
DomainGradeChangeNotes
{domain}{grade}{→ 无变化 / ↑ 提升 / ↓ 下降}{说明}
{若存在等级下降:} ⚠️ 检测到文档过时领域:{领域列表} 建议:在该领域的下一个PR前更新docs/code-structure.md。

在评论末尾添加信号适用性表格(见步骤5)。

9. Full Sweep Output (weekly cron)

9. 全面扫描输出(每周定时任务)

undefined
undefined

Entropy Weekly Sweep — {DATE}

Entropy Weekly Sweep — {DATE}

{N} domains across {REPO_NAME}
{N}个领域(来自{REPO_NAME}仓库)

Grades

Grades

{Full grade table}
{完整等级表格}

Signal Applicability

Signal Applicability

{Signal applicability table}
{信号适用性表格}

Action Items

Action Items

{Domains graded D or F → create a GitHub issue if one doesn't already exist}

For D/F domains, create a GitHub issue in the repo:
```bash
GH_TOKEN=$GH_TOKEN gh issue create \
  --repo $FULL_REPO \
  --title "Entropy: {domain} docs critically stale (grade {grade})" \
  --label "documentation" \
  --body "Domain **{domain}** scored **{grade}** in the weekly entropy scan.

**Missing signals:**
{list}

**Last code commit to this domain:** {date}
**Last doc update:** {date}

Fix: update \`docs/code-structure.md\` and run \`/hookshot\` to regenerate hooks."
Check for existing open issues before creating (dedup by title prefix).
{等级为D或F的领域 → 若不存在现有未解决问题,则创建GitHub issue}

对于等级为D/F的领域,在仓库中创建GitHub issue:
```bash
GH_TOKEN=$GH_TOKEN gh issue create \
  --repo $FULL_REPO \
  --title "Entropy: {domain} docs critically stale (grade {grade})" \
  --label "documentation" \
  --body "Domain **{domain}** 在每周Entropy扫描中获得**{grade}**等级。

**缺失信号:**
{列表}

**该领域最后一次代码提交:** {date}
**最后一次文档更新:** {date}

修复方案:更新\`docs/code-structure.md\`并运行\`/hookshot\`重新生成钩子。"
创建前检查是否存在现有未解决问题(通过标题前缀去重)。