2026-06-16 01:12:34 +02:00
---
id: REUSE-WP-0013
type: workplan
title: "Registry establish, update, and stats with optional llm-connect assist"
domain: helix_forge
repo: reuse-surface
2026-06-16 01:21:01 +02:00
status: finished
2026-06-16 01:12:34 +02:00
owner: codex
topic_slug: helix-forge
created: "2026-06-16"
2026-06-16 01:21:01 +02:00
updated: "2026-06-17"
2026-06-16 01:13:02 +02:00
state_hub_workstream_id: "239a0077-8593-4dc7-918d-4c23895275f6"
2026-06-16 01:12:34 +02:00
---
2026-07-08 20:26:38 +02:00
> **Terminology note:** Historical text in this archived workplan may use the legacy term "workstream". The fleet term is **workplan** (`canon/standards/workplan-terminology-fleet_v0.1.md`).
2026-06-16 01:12:34 +02:00
# Registry establish, update, and stats with optional llm-connect assist
Follow-up to operator feedback and REUSE-WP-0012-T01 blocks
(`history/2026-06-16-hub-registration-blocks.md` ). Sibling repos cannot federate
until each publishes `registry/indexes/capabilities.yaml` ; today that requires
manual layout copy and authoring. This workplan adds **deterministic bootstrap
and analytics CLI** plus **optional llm-connect-backed discovery and refresh**
so domain repos can establish and maintain registries with low ceremony.
**Baseline vector:** `D5 / A4 / C5 / R3`
**Target vector after completion:** `D5 / A4 / C5 / R3` (tooling depth; no
product-vector promotion unless dogfood evidence warrants)
## Problem statement
| Pain | Today | Target |
|---|---|---|
| Bootstrap registry in sibling repo | Manual copy from reuse-surface | `reuse-surface establish` |
| Keep entries aligned with repo reality | Manual edits + validate | `reuse-surface update` |
| Portfolio / federation readiness view | `report cohorts` , manual curls | `reuse-surface stats` |
| Draft capability metadata from repo context | Agent improvisation | llm-connect structured extract |
## Design principles
1. **Deterministic first** — `stats` , `establish --scaffold` , and
`establish --publish-check` work without llm-connect or API keys.
2. **LLM optional** — `establish --discover` and `update --suggest` call
llm-connect HTTP (`POST /execute` ) or library adapter when configured.
3. **Dry-run default** — LLM and write paths require explicit `--apply` .
4. **Validate gate** — every `--apply` path ends with `reuse-surface validate`
(or fails with schema errors).
5. **Boundary** — reuse-surface does not embed provider keys; llm-connect owns
routing and credentials.
## Suggested execution order
```text
T01 stats (deterministic, unblocks observability)
→ T02 establish --scaffold (unblocks sibling publish path)
→ T03 establish --publish-check (verifies raw URL / federation readiness)
→ T04 llm-connect bridge + draft JSON schema
→ T05 establish --discover
→ T06 update (deterministic signals + optional LLM suggest)
→ T07 docs, tests, gap-analysis note
```
## Dependencies
| Dependency | Owner | Notes |
|---|---|---|
| llm-connect server or package | llm-connect | `LLM_CONNECT_URL` or editable install |
| Capability JSON schema | reuse-surface | `schemas/capability.schema.yaml` unchanged |
| Sibling repo apply | Domain owners | `establish` run in target repo checkout |
| Hub token | Operator | `hub register` remains separate post-publish |
## Proposed CLI surface
```bash
# Deterministic
reuse-surface stats
reuse-surface stats --format json --federation-ready
reuse-surface establish --scaffold --domain helix_forge [--path .]
reuse-surface establish --publish-check --raw-url < gitea-raw-url >
# LLM-assisted (optional backend)
export LLM_CONNECT_URL=http://127.0.0.1:8088
reuse-surface establish --discover [--path .] --dry-run
reuse-surface establish --discover --apply
reuse-surface update --capability < id > --dry-run
reuse-surface update --all --suggest-maturity --dry-run
reuse-surface update --from-git-since HEAD~5 --apply
```
---
## Add Registry Stats Command
```task
id: REUSE-WP-0013-T01
2026-06-16 01:21:01 +02:00
status: done
2026-06-16 01:12:34 +02:00
priority: high
2026-06-16 01:13:02 +02:00
state_hub_task_id: "98e65330-bfc7-4282-b372-d35542b899ce"
2026-06-16 01:12:34 +02:00
```
Deliver `reuse-surface stats` with deterministic aggregates:
- Capability count; maturity histogram (D/A/C/R bands)
- Entries at R0– R2 vs R3+; consumption mode counts
- Index vs entry vector drift count
- Federation readiness: local `sources.yaml` / index presence; optional
`--federation-ready` raw URL probe (HTTP status)
- Hub summary when `REUSE_SURFACE_URL` set (registration count)
Output: Markdown default, `--format json` . Pytest coverage. Document in
`tools/README.md` .
## Implement establish --scaffold
```task
id: REUSE-WP-0013-T02
2026-06-16 01:21:01 +02:00
status: done
2026-06-16 01:12:34 +02:00
priority: high
2026-06-16 01:13:02 +02:00
state_hub_task_id: "b8fedd87-d0d3-41b4-9af8-e36d52bfe1c5"
2026-06-16 01:12:34 +02:00
```
Bootstrap `registry/` in target repo (`--path` , default cwd):
- `registry/README.md` (pointer to reuse-surface schema and validate)
- `registry/capabilities/.gitkeep`
- `registry/indexes/capabilities.yaml` with `version` , `domain` , `capabilities: []`
- Refuse overwrite unless `--force`
- Print next steps: add entry, validate, merge to main, publish-check
No llm-connect dependency. Pytest with temp directory.
## Implement establish --publish-check
```task
id: REUSE-WP-0013-T03
2026-06-16 01:21:01 +02:00
status: done
2026-06-16 01:12:34 +02:00
priority: medium
2026-06-16 01:13:02 +02:00
state_hub_task_id: "2924d685-709f-4e28-886f-b363cd9c40b4"
2026-06-16 01:12:34 +02:00
```
Federation publish helper for sibling repo operators:
- `curl` -equivalent probe of `--raw-url` (status, content-type hint)
- Validate local index YAML if `--path` has `registry/indexes/capabilities.yaml`
- Report pass/fail with remediation tied to `docs/RegistryFederation.md`
- Exit non-zero on hard failures (non-200, invalid YAML)
## Add llm-connect Bridge And Draft Schema
```task
id: REUSE-WP-0013-T04
2026-06-16 01:21:01 +02:00
status: done
2026-06-16 01:12:34 +02:00
priority: high
2026-06-16 01:13:02 +02:00
state_hub_task_id: "650ebee5-b34b-4ed8-891d-d93aacebadd7"
2026-06-16 01:12:34 +02:00
```
Thin client boundary:
- `reuse_surface/llm_bridge.py` — `POST {LLM_CONNECT_URL}/execute` , parse JSON
from response content
- `schemas/registry-draft.schema.json` — structured draft shape (capability list
with id, name, summary, vector, tags, consumption_modes, discovery intent)
- Env: `LLM_CONNECT_URL` (default none); graceful error when missing on LLM paths
- Optional `pyproject.toml` extra: `llm` → `llm-connect` dependency
- Pytest with mocked HTTP (no live LLM in CI)
## Implement establish --discover
```task
id: REUSE-WP-0013-T05
2026-06-16 01:21:01 +02:00
status: done
2026-06-16 01:12:34 +02:00
priority: medium
2026-06-16 01:13:02 +02:00
state_hub_task_id: "b9154889-f538-4266-9918-b277f9a297be"
2026-06-16 01:12:34 +02:00
```
LLM-assisted bootstrap after `--scaffold` or on empty registry:
- Collect context files: `INTENT.md` , `SCOPE.md` , `README*` , `pyproject.toml` ,
`AGENTS.md` , top-level package dirs (configurable `--context-max-files` )
- Prompt template + schema-constrained JSON via llm-connect
- `--dry-run` : print proposed entries and index rows
- `--apply` : write `registry/capabilities/*.md` from template merge + index update;
run validate before success exit
- Document prompt assumptions and review checklist in `registry/README.md`
## Implement update Command
```task
id: REUSE-WP-0013-T06
2026-06-16 01:21:01 +02:00
status: done
2026-06-16 01:12:34 +02:00
priority: medium
2026-06-16 01:13:02 +02:00
state_hub_task_id: "b79558da-54b2-4712-91d2-b298c7cf2c40"
2026-06-16 01:12:34 +02:00
```
Refresh existing entries from repo signals:
**Deterministic (no LLM):**
- Index/entry vector mismatch detection
- New paths under `tests/` , CLI modules → suggest `evidence.tests` /
`availability.current_artifacts` additions
- `--apply` for safe deterministic patches only (explicit list in code)
**Optional LLM (`--suggest` , `--suggest-maturity` ):**
- Git diff or file snapshot → proposed `promotion_history` , evidence notes
- Always `--dry-run` unless `--apply` ; validate after apply
Targets: single `--capability` , `--all` , `--from-git-since <ref>` .
## Documentation, Tests, And Gap Note
```task
id: REUSE-WP-0013-T07
2026-06-16 01:21:01 +02:00
status: done
2026-06-16 01:12:34 +02:00
priority: low
2026-06-16 01:13:02 +02:00
state_hub_task_id: "a55a2f26-004e-4c20-90cb-49bed64a1291"
2026-06-16 01:12:34 +02:00
```
- `tools/README.md` — full command reference
- `docs/RegistryFederation.md` — link establish/publish-check to sibling onboarding
- `docs/IntentScopeGapAnalysis.md` — add priority **24** (registry bootstrap
tooling); mark open
- `SCOPE.md` — "What Is Possible Now" when T01– T03 ship (incremental)
- CI: `stats` informational step; no llm-connect in CI
- Total pytest increase; `reuse-surface validate` unchanged
---
## Acceptance
2026-06-16 01:21:01 +02:00
- [x] `reuse-surface stats` reports maturity and federation-readiness aggregates
- [x] `establish --scaffold` creates valid empty registry layout without overwrite accidents
- [x] `establish --publish-check` detects 303 vs 200 raw URL outcomes
- [x] llm-connect bridge works with mocked HTTP; fails clearly when URL unset
- [x] `establish --discover --dry-run` produces schema-valid draft JSON from fixture context
- [x] `update --dry-run` reports deterministic drift on sample repo
- [x] All new commands documented; gap priority 24 recorded
## Completion notes (2026-06-17)
- Modules: `stats.py` , `establish.py` , `registry_update.py` , `llm_bridge.py`
- Schema: `schemas/registry-draft.schema.json`
- `validate --root` for sibling repo validation after establish --apply
- 43 pytest tests; optional `pip install -e ".[llm]"` extra
2026-06-16 01:12:34 +02:00
## Out of scope
- Auto `hub register` (still operator step with token)
- Auto-merge LLM output without human review path
- Embedding similarity or overlap ML (keep `overlaps` token heuristic)
- llm-connect hosting or provider configuration inside reuse-surface
## Dogfood target
Run `establish --scaffold` and `establish --publish-check` against `state-hub`
checkout when available; optional `establish --discover` to seed
`capability.statehub.workstream-coordinate` from existing docs.