REUSE-WP-0017-T01: explicit capability_status on roster + coverage split in report gaps
Some checks failed
ci / validate-registry (push) Has been cancelled

Adds capability_status: has|none|pending to every roster row (10 has /
51 pending currently), a coverage_ratio headline, and splits the gap
report's empty-scaffold section into unclassified vs explicitly-none.
Adds templates/NO_CAPABILITIES.template.md for the no-capability marker.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 18:36:05 +02:00
parent 493f23123c
commit 8219a5d253
6 changed files with 154 additions and 11 deletions

View File

@@ -13,11 +13,15 @@ summary:
publish_pass: 60 publish_pass: 60
publish_fail: 1 publish_fail: 1
publish_sweep: '2026-06-16' publish_sweep: '2026-06-16'
capability_status_has: 10
capability_status_none: 0
capability_status_pending: 51
repos: repos:
- slug: activity-core - slug: activity-core
path: /home/worsch/activity-core path: /home/worsch/activity-core
status: established status: established
capability_count: 1 capability_count: 1
capability_status: has
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -27,6 +31,7 @@ repos:
path: /home/worsch/agentic-resources path: /home/worsch/agentic-resources
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -36,6 +41,7 @@ repos:
path: /home/worsch/artifact-store path: /home/worsch/artifact-store
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -45,6 +51,7 @@ repos:
path: /home/worsch/audit-core path: /home/worsch/audit-core
status: established status: established
capability_count: 1 capability_count: 1
capability_status: has
seed_from_reuse_surface: true seed_from_reuse_surface: true
seed_capability_ids: seed_capability_ids:
- capability.audit.event-retain - capability.audit.event-retain
@@ -55,6 +62,7 @@ repos:
path: /home/worsch/can-you-assist path: /home/worsch/can-you-assist
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -64,6 +72,7 @@ repos:
path: /home/worsch/citation-engine path: /home/worsch/citation-engine
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -73,6 +82,7 @@ repos:
path: /home/worsch/citation-evidence path: /home/worsch/citation-evidence
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -82,6 +92,7 @@ repos:
path: /home/worsch/citation-work path: /home/worsch/citation-work
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -91,6 +102,7 @@ repos:
path: /home/worsch/config-atlas path: /home/worsch/config-atlas
status: established status: established
capability_count: 1 capability_count: 1
capability_status: has
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: seed_capability_ids:
- capability.infotech.config-surface-atlas - capability.infotech.config-surface-atlas
@@ -102,6 +114,7 @@ repos:
path: /home/worsch/coordination-engine path: /home/worsch/coordination-engine
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -111,6 +124,7 @@ repos:
path: /home/worsch/domain-tree path: /home/worsch/domain-tree
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -120,6 +134,7 @@ repos:
path: /home/worsch/email-connect path: /home/worsch/email-connect
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -129,6 +144,7 @@ repos:
path: /home/worsch/evidence-anchor path: /home/worsch/evidence-anchor
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -138,6 +154,7 @@ repos:
path: /home/worsch/evidence-binder path: /home/worsch/evidence-binder
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -147,6 +164,7 @@ repos:
path: /home/worsch/evidence-source path: /home/worsch/evidence-source
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -156,6 +174,7 @@ repos:
path: /home/worsch/feature-control path: /home/worsch/feature-control
status: established status: established
capability_count: 3 capability_count: 3
capability_status: has
seed_from_reuse_surface: true seed_from_reuse_surface: true
seed_capability_ids: seed_capability_ids:
- capability.feature-control.evaluate - capability.feature-control.evaluate
@@ -168,6 +187,7 @@ repos:
path: /home/worsch/flex-auth path: /home/worsch/flex-auth
status: established status: established
capability_count: 1 capability_count: 1
capability_status: has
seed_from_reuse_surface: true seed_from_reuse_surface: true
seed_capability_ids: seed_capability_ids:
- capability.authorization.policy-evaluate - capability.authorization.policy-evaluate
@@ -178,6 +198,7 @@ repos:
path: /home/worsch/guide-board path: /home/worsch/guide-board
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -187,6 +208,7 @@ repos:
path: /home/worsch/helix-forge path: /home/worsch/helix-forge
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -196,6 +218,7 @@ repos:
path: /home/worsch/hub-core path: /home/worsch/hub-core
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -205,6 +228,7 @@ repos:
path: /home/worsch/human-resources path: /home/worsch/human-resources
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -214,6 +238,7 @@ repos:
path: /home/worsch/identity-canon path: /home/worsch/identity-canon
status: established status: established
capability_count: 2 capability_count: 2
capability_status: has
seed_from_reuse_surface: true seed_from_reuse_surface: true
seed_capability_ids: seed_capability_ids:
- capability.identity.subject-resolution - capability.identity.subject-resolution
@@ -225,6 +250,7 @@ repos:
path: /home/worsch/ihp-railiance-probe path: /home/worsch/ihp-railiance-probe
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -234,6 +260,7 @@ repos:
path: /home/worsch/info-tech-canon path: /home/worsch/info-tech-canon
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -243,6 +270,7 @@ repos:
path: /home/worsch/infospace-bench path: /home/worsch/infospace-bench
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -252,6 +280,7 @@ repos:
path: /home/worsch/inter-hub path: /home/worsch/inter-hub
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -261,6 +290,7 @@ repos:
path: /home/worsch/issue-core path: /home/worsch/issue-core
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -270,6 +300,7 @@ repos:
path: /home/worsch/kaizen-agentic path: /home/worsch/kaizen-agentic
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -279,6 +310,7 @@ repos:
path: /home/worsch/key-cape path: /home/worsch/key-cape
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -288,6 +320,7 @@ repos:
path: /home/worsch/kontextual-engine path: /home/worsch/kontextual-engine
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -297,6 +330,7 @@ repos:
path: /home/worsch/llm-connect path: /home/worsch/llm-connect
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -306,6 +340,7 @@ repos:
path: /home/worsch/markitect-filter path: /home/worsch/markitect-filter
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -315,6 +350,7 @@ repos:
path: /home/worsch/markitect-main path: /home/worsch/markitect-main
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -324,6 +360,7 @@ repos:
path: /home/worsch/markitect-quarkdown path: /home/worsch/markitect-quarkdown
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -333,6 +370,7 @@ repos:
path: /home/worsch/markitect-tool path: /home/worsch/markitect-tool
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -342,6 +380,7 @@ repos:
path: /home/worsch/net-kingdom path: /home/worsch/net-kingdom
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -351,6 +390,7 @@ repos:
path: /home/worsch/open-cmis-tck path: /home/worsch/open-cmis-tck
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -360,6 +400,7 @@ repos:
path: /home/worsch/open-reuse path: /home/worsch/open-reuse
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -369,6 +410,7 @@ repos:
path: /home/worsch/ops-bridge path: /home/worsch/ops-bridge
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -378,6 +420,7 @@ repos:
path: /home/worsch/ops-hub path: /home/worsch/ops-hub
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -387,6 +430,7 @@ repos:
path: /home/worsch/ops-warden path: /home/worsch/ops-warden
status: established status: established
capability_count: 1 capability_count: 1
capability_status: has
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -396,6 +440,7 @@ repos:
path: /home/worsch/phase-memory path: /home/worsch/phase-memory
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -405,6 +450,7 @@ repos:
path: /home/worsch/railiance-apps path: /home/worsch/railiance-apps
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -414,6 +460,7 @@ repos:
path: /home/worsch/railiance-cluster path: /home/worsch/railiance-cluster
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -423,6 +470,7 @@ repos:
path: /home/worsch/railiance-enablement path: /home/worsch/railiance-enablement
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -432,6 +480,7 @@ repos:
path: /home/worsch/railiance-fabric path: /home/worsch/railiance-fabric
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -442,6 +491,7 @@ repos:
path: /home/worsch/railiance-forge path: /home/worsch/railiance-forge
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -451,6 +501,7 @@ repos:
path: /home/worsch/railiance-infra path: /home/worsch/railiance-infra
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -460,6 +511,7 @@ repos:
path: /home/worsch/railiance-platform path: /home/worsch/railiance-platform
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -469,6 +521,7 @@ repos:
path: /home/worsch/repo-scoping path: /home/worsch/repo-scoping
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -478,6 +531,7 @@ repos:
path: /home/worsch/repo-seed path: /home/worsch/repo-seed
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -487,6 +541,7 @@ repos:
path: /home/worsch/reuse-surface path: /home/worsch/reuse-surface
status: established status: established
capability_count: 3 capability_count: 3
capability_status: has
seed_from_reuse_surface: true seed_from_reuse_surface: true
seed_capability_ids: seed_capability_ids:
- capability.registry.register - capability.registry.register
@@ -498,6 +553,7 @@ repos:
path: /home/worsch/shard-wiki path: /home/worsch/shard-wiki
status: established status: established
capability_count: 8 capability_count: 8
capability_status: has
seed_from_reuse_surface: true seed_from_reuse_surface: true
seed_capability_ids: seed_capability_ids:
- capability.wiki.shard-orchestration - capability.wiki.shard-orchestration
@@ -515,6 +571,7 @@ repos:
path: /home/worsch/state-hub path: /home/worsch/state-hub
status: established status: established
capability_count: 2 capability_count: 2
capability_status: has
seed_from_reuse_surface: true seed_from_reuse_surface: true
seed_capability_ids: seed_capability_ids:
- capability.statehub.progress-log - capability.statehub.progress-log
@@ -526,6 +583,7 @@ repos:
path: /home/worsch/tegwick-control path: /home/worsch/tegwick-control
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -535,6 +593,7 @@ repos:
path: /home/worsch/the-custodian path: /home/worsch/the-custodian
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -544,6 +603,7 @@ repos:
path: /home/worsch/user-engine path: /home/worsch/user-engine
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -553,6 +613,7 @@ repos:
path: /home/worsch/vantage-point path: /home/worsch/vantage-point
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -562,6 +623,7 @@ repos:
path: /home/worsch/vergabe-teilnahme path: /home/worsch/vergabe-teilnahme
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -571,6 +633,7 @@ repos:
path: /home/worsch/whynot-control path: /home/worsch/whynot-control
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true
@@ -580,6 +643,7 @@ repos:
path: /home/worsch/whynot-design path: /home/worsch/whynot-design
status: established status: established
capability_count: 0 capability_count: 0
capability_status: pending
seed_from_reuse_surface: false seed_from_reuse_surface: false
seed_capability_ids: [] seed_capability_ids: []
hub_registered: true hub_registered: true

View File

@@ -110,6 +110,9 @@ def collect_gap_report(
r for r in repos r for r in repos
if r.get("status") == "established" and r.get("capability_count", 0) == 0 if r.get("status") == "established" and r.get("capability_count", 0) == 0
] ]
unclassified = [r for r in empty_scaffolds if r.get("capability_status", "pending") == "pending"]
explicit_none = [r for r in empty_scaffolds if r.get("capability_status") == "none"]
covered = [r for r in repos if r.get("capability_status") in ("has", "none")]
seeded = [r for r in repos if r.get("seed_from_reuse_surface")] seeded = [r for r in repos if r.get("seed_from_reuse_surface")]
dedup_pending = [ dedup_pending = [
{ {
@@ -133,6 +136,11 @@ def collect_gap_report(
], ],
"empty_scaffold_count": len(empty_scaffolds), "empty_scaffold_count": len(empty_scaffolds),
"empty_scaffolds": [r["slug"] for r in empty_scaffolds], "empty_scaffolds": [r["slug"] for r in empty_scaffolds],
"unclassified_count": len(unclassified),
"unclassified": [r["slug"] for r in unclassified],
"explicit_none_count": len(explicit_none),
"explicit_none": [r["slug"] for r in explicit_none],
"coverage_ratio": f"{len(covered)}/{len(repos)}" if repos else "0/0",
"seeded_repos": [ "seeded_repos": [
{ {
"slug": r["slug"], "slug": r["slug"],
@@ -180,11 +188,23 @@ def format_gap_markdown(report: dict[str, Any]) -> str:
lines.append("- none (owner rows migrated to canonical repos)") lines.append("- none (owner rows migrated to canonical repos)")
lines.append("") lines.append("")
empty_count = report.get("empty_scaffold_count", 0) lines.append(f"**Capability coverage:** {report.get('coverage_ratio', '?')} "
lines.append(f"## Empty scaffolds ({empty_count})") "(repos with a capability or an explicit no-capability marker)")
slugs = report.get("empty_scaffolds", []) lines.append("")
if slugs:
for slug in slugs: unclassified = report.get("unclassified", [])
lines.append(f"## Unclassified scaffolds ({report.get('unclassified_count', len(unclassified))})")
if unclassified:
for slug in unclassified:
lines.append(f"- `{slug}`")
else:
lines.append("- none")
lines.append("")
explicit_none = report.get("explicit_none", [])
lines.append(f"## Explicitly no-capability ({report.get('explicit_none_count', len(explicit_none))})")
if explicit_none:
for slug in explicit_none:
lines.append(f"- `{slug}`") lines.append(f"- `{slug}`")
else: else:
lines.append("- none") lines.append("- none")

View File

@@ -0,0 +1,24 @@
---
# Copy this file to registry/NO_CAPABILITIES.md in the target repo.
# It marks the repo as reviewed with no reusable capability to register,
# converting an "empty scaffold" from ambiguous to informative.
repo: <slug>
reason: >
One or two sentences on why this repo has nothing to register — e.g.
personal experiment, fork with no independent scope, docs/canon-only,
probe/spike not intended for reuse.
reviewed: "YYYY-MM-DD"
reviewed_by: <person-or-agent>
revisit: >
Optional. Note a condition or date under which this repo should be
reclassified (e.g. "revisit if the probe becomes a maintained service").
---
# No reusable capability
This repo was reviewed for the `reuse-surface` capability registry
(REUSE-WP-0017 coverage campaign) and has no capability to register at this
time. See the `reason` field above.
Set `capability_status: none` for this repo's row in
`local-repo-roster.yaml` when this file lands.

View File

@@ -96,9 +96,39 @@ def test_collect_gap_report_from_roster():
root = Path(__file__).resolve().parent.parent root = Path(__file__).resolve().parent.parent
roster = root / "registry/federation/local-repo-roster.yaml" roster = root / "registry/federation/local-repo-roster.yaml"
report = collect_gap_report(roster) report = collect_gap_report(roster)
assert report["summary"]["total"] == 60 assert report["summary"]["total"] == 61
assert len(report["publish_fail"]) == 0 assert len(report["publish_fail"]) == 1
assert report["empty_scaffold_count"] >= 40 assert report["empty_scaffold_count"] >= 40
assert report["unclassified_count"] + report["explicit_none_count"] == report["empty_scaffold_count"]
assert "/" in report["coverage_ratio"]
def test_collect_gap_report_splits_unclassified_and_explicit_none(tmp_path):
roster_path = tmp_path / "roster.yaml"
roster_path.write_text(
"""
summary:
total: 3
repos:
- slug: has-repo
status: established
capability_count: 1
capability_status: has
- slug: none-repo
status: established
capability_count: 0
capability_status: none
- slug: pending-repo
status: established
capability_count: 0
capability_status: pending
"""
)
report = collect_gap_report(roster_path, index={"capabilities": []})
assert report["unclassified"] == ["pending-repo"]
assert report["explicit_none"] == ["none-repo"]
assert report["empty_scaffold_count"] == 2
assert report["coverage_ratio"] == "2/3"
def test_format_gap_markdown_lists_publish_fail(): def test_format_gap_markdown_lists_publish_fail():
@@ -108,6 +138,11 @@ def test_format_gap_markdown_lists_publish_fail():
"publish_fail": [{"slug": "inter-hub", "publish_note": "missing repo"}], "publish_fail": [{"slug": "inter-hub", "publish_note": "missing repo"}],
"empty_scaffold_count": 1, "empty_scaffold_count": 1,
"empty_scaffolds": ["ops-bridge"], "empty_scaffolds": ["ops-bridge"],
"unclassified_count": 1,
"unclassified": ["ops-bridge"],
"explicit_none_count": 0,
"explicit_none": [],
"coverage_ratio": "59/60",
"seeded_repos": [], "seeded_repos": [],
"dedup_pending_local_owners": [], "dedup_pending_local_owners": [],
"local_capability_count": 2, "local_capability_count": 2,

View File

@@ -29,8 +29,8 @@ def test_collect_roster_stats_federation_ready():
root = Path(__file__).resolve().parent.parent root = Path(__file__).resolve().parent.parent
roster = root / "registry/federation/local-repo-roster.yaml" roster = root / "registry/federation/local-repo-roster.yaml"
stats = collect_roster_stats(roster, federation_ready=True) stats = collect_roster_stats(roster, federation_ready=True)
assert stats["counts"]["total"] == 60 assert stats["counts"]["total"] == 61
assert stats["counts"]["established"] == 60 assert stats["counts"]["established"] == 61
assert "federation_readiness" in stats assert "federation_readiness" in stats
text = format_roster_stats_markdown(stats) text = format_roster_stats_markdown(stats)
assert "publish pass ratio" in text assert "publish pass ratio" in text

View File

@@ -4,7 +4,7 @@ type: workplan
title: "Capability coverage campaign: seed or explicitly close all empty scaffolds" title: "Capability coverage campaign: seed or explicitly close all empty scaffolds"
domain: infotech domain: infotech
repo: reuse-surface repo: reuse-surface
status: ready status: active
owner: claude-code owner: claude-code
topic_slug: helix-forge topic_slug: helix-forge
created: "2026-07-06" created: "2026-07-06"
@@ -72,7 +72,7 @@ and CI.
```task ```task
id: REUSE-WP-0017-T01 id: REUSE-WP-0017-T01
status: todo status: done
priority: high priority: high
state_hub_task_id: "90fe5bf2-7c03-4af5-bc4a-e5d608c7e879" state_hub_task_id: "90fe5bf2-7c03-4af5-bc4a-e5d608c7e879"
``` ```