Harden federated compose against malformed member indexes (REUSE-WP-0020)

Repointing the production hub's 50 Gitea-hosted federation sources to Forgejo
ahead of the 2026-08-31 CoulombCore retirement took /v1/federated to HTTP 500.
One member index (evidence-binder) has capability rows with no `id`, and
compose_federated_index dereferenced item["id"] unguarded. Its Gitea copy was a
stale snapshot returning a non-mapping, so those rows had never been parsed.

A single malformed member index must not take down the whole endpoint. Extract
_read_index_entries(): unparseable YAML, a non-mapping body, an empty file, and
a non-list `capabilities` each degrade to a warning and an empty row list, and
rows without an `id` are skipped individually. A failed source stays listed with
count 0 so it remains visible to operators rather than silently disappearing.

Also fix wall-clock rot in tests/test_plan_check.py, which was already failing
at clean HEAD: three tests pinned the compose date to a literal that has now
aged past STALE_DAYS.

Add workplan REUSE-WP-0020 covering the full cutover.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-21 00:04:39 +02:00
parent fa1235474f
commit 0c6b1e2538
5 changed files with 403 additions and 16 deletions

View file

@ -1,7 +1,7 @@
# Composed federated capability index. Regenerate with:
# reuse-surface federation compose
version: 1
updated: '2026-07-07'
updated: '2026-08-21'
domain: helix_forge
collision_policy: warn
sources:
@ -66,7 +66,7 @@ sources:
url: https://forgejo.coulomb.social/coulomb/evidence-binder/raw/main/registry/indexes/capabilities.yaml
cache: registry/federation/cache/evidence-binder.yaml
- repo: evidence-source
count: 0
count: 1
url: https://forgejo.coulomb.social/coulomb/evidence-source/raw/main/registry/indexes/capabilities.yaml
cache: registry/federation/cache/evidence-source.yaml
- repo: feature-control
@ -309,9 +309,9 @@ capabilities:
source_index: registry/federation/cache/the-custodian.yaml
- id: capability.agents.kaizen-framework
name: Kaizen Agentic Framework
summary: AI agency framework providing 18 specialized deployable agent instruction
sets plus persistent, project-scoped memory and cross-agent coordination via a
Coach meta-agent.
summary: AI agency framework providing 20 deployable agent instruction sets, project
memory, metrics, role and engagement contracts, and scheduled preparation for
governed execution.
vector: D3 / A2 / C1 / R0
domain: agents
status: draft
@ -321,9 +321,13 @@ capabilities:
- agents
- memory
- coordination
- metrics
- scheduling
- engagements
consumption_modes:
- cli
- library import
- file contracts
source_repo: kaizen-agentic
source_url: https://forgejo.coulomb.social/coulomb/kaizen-agentic/raw/main/registry/indexes/capabilities.yaml
source_index: registry/federation/cache/kaizen-agentic.yaml
@ -372,9 +376,11 @@ capabilities:
name: Audit Event Retention
summary: Collect, normalize, retain, and search audit events with integrity evidence
across tenants.
vector: D4 / A2 / C2 / R1
domain: helix_forge
status: draft
joins: operations.audit
provision: data/capability/audit-core-operational.json
vector: D4 provision / A4 / C3 / R2
domain: infotech
status: production
owner: audit-core
path: registry/capabilities/capability.audit.event-retain.md
tags:
@ -382,6 +388,7 @@ capabilities:
- retention
- compliance
consumption_modes:
- http ingest
- source module
source_repo: audit-core
source_url: https://forgejo.coulomb.social/coulomb/audit-core/raw/main/registry/indexes/capabilities.yaml
@ -950,6 +957,27 @@ capabilities:
source_repo: open-reuse
source_url: https://forgejo.coulomb.social/coulomb/open-reuse/raw/main/registry/indexes/capabilities.yaml
source_index: registry/federation/cache/open-reuse.yaml
- id: capability.infotech.pdf-evidence-ingest
name: Headless PDF Evidence Ingest
summary: "Turns raw PDF bytes into an engine-shaped Document + DocumentRepresentation\
\ \u2014 SHA-256 fingerprint, canonical text, page map, and gap-free offset map\
\ \u2014 as a runtime-agnostic library with no viewer, persistence, or React coupling."
vector: D2 / A1 / C1 / R1
domain: infotech
status: draft
owner: evidence-source
path: registry/capabilities/capability.infotech.pdf-evidence-ingest.md
tags:
- pdf
- ingest
- fingerprint
- canonical-text
- evidence
consumption_modes:
- library import
source_repo: evidence-source
source_url: https://forgejo.coulomb.social/coulomb/evidence-source/raw/main/registry/indexes/capabilities.yaml
source_index: registry/federation/cache/evidence-source.yaml
- id: capability.infotech.repo-template
name: Coulomb Repository Template
summary: Bootstrap new git repositories with agent instructions, registry scaffold,