generated from coulomb/repo-seed
Complete REUSE-WP-0003: registry CLI, docs alignment, and coverage
Align INTENT.md with delivered layout, add CapabilityRegistryConcept guide, extend schema with promotion_history, ship reuse-surface validate/query/export CLI, register three more helix_forge capabilities, and refresh SCOPE and gap analysis to reflect A3 tooling and D5/A3/C4/R2 self-assessment.
This commit is contained in:
21
.claude/ralph-loop.local.md
Normal file
21
.claude/ralph-loop.local.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
active: true
|
||||||
|
iteration: 1
|
||||||
|
session_id:
|
||||||
|
max_iterations: 20
|
||||||
|
completion_promise: "HEUREKA"
|
||||||
|
workplan_id: REUSE-WP-0003
|
||||||
|
workplan_file: /home/worsch/reuse-surface/workplans/REUSE-WP-0003-intent-scope-gap-closure.md
|
||||||
|
started_at: "2026-06-14T23:09:59Z"
|
||||||
|
---
|
||||||
|
|
||||||
|
Read the workplan at `/home/worsch/reuse-surface/workplans/REUSE-WP-0003-intent-scope-gap-closure.md`.
|
||||||
|
|
||||||
|
If every task has `status: done` AND frontmatter `status: done`:
|
||||||
|
run `rm -f .claude/ralph-loop.local.md` first (deactivates the loop so the stop hook exits cleanly),
|
||||||
|
then output <promise>HEUREKA</promise>.
|
||||||
|
|
||||||
|
Otherwise implement the next `todo` task as described in the workplan.
|
||||||
|
Set task `in_progress` when starting, `done` when complete.
|
||||||
|
When all tasks are done set frontmatter `status: done`.
|
||||||
|
|
||||||
32
AGENTS.md
32
AGENTS.md
@@ -103,29 +103,29 @@ curl -s -X PATCH "http://127.0.0.1:8000/tasks/<task_id>" \
|
|||||||
|
|
||||||
## Local Developer Workflow
|
## Local Developer Workflow
|
||||||
|
|
||||||
This repository is currently documentation-only. There is no package manifest,
|
The repository is primarily documentation-first with a small Python CLI for
|
||||||
runtime application, build system, executable test suite, or formatter/linter
|
registry validate, query, and export. There is no long-running service.
|
||||||
configuration checked in.
|
|
||||||
|
|
||||||
### Install
|
### Install
|
||||||
|
|
||||||
No install step is required for normal repository work.
|
```bash
|
||||||
|
python3 -m venv .venv
|
||||||
|
.venv/bin/pip install -e .
|
||||||
|
```
|
||||||
|
|
||||||
### Build
|
### Build
|
||||||
|
|
||||||
No build step exists. Treat Markdown, YAML, and workplan edits as source
|
No separate build step. Treat Markdown, YAML, and workplan edits as source
|
||||||
artifacts.
|
artifacts.
|
||||||
|
|
||||||
### Test / lint
|
### Test / lint
|
||||||
|
|
||||||
There is no project test runner or markdown linter configured yet. Use these
|
|
||||||
checks before closing a change:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Confirm the repository file inventory still looks intentional
|
# Registry validation (schema + index drift)
|
||||||
rg --files
|
.venv/bin/reuse-surface validate
|
||||||
|
|
||||||
# Catch whitespace errors in tracked and staged diffs
|
# Repository hygiene
|
||||||
|
rg --files
|
||||||
git diff --check
|
git diff --check
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -178,6 +178,10 @@ implementation reuse.
|
|||||||
# Fast discovery surface — read this first
|
# Fast discovery surface — read this first
|
||||||
cat registry/indexes/capabilities.yaml
|
cat registry/indexes/capabilities.yaml
|
||||||
|
|
||||||
|
# CLI discovery and export
|
||||||
|
.venv/bin/reuse-surface query --discovery-min D4
|
||||||
|
.venv/bin/reuse-surface export --format yaml
|
||||||
|
|
||||||
# Authoring template and schema
|
# Authoring template and schema
|
||||||
cat templates/capability-entry.template.md
|
cat templates/capability-entry.template.md
|
||||||
cat schemas/capability.schema.yaml
|
cat schemas/capability.schema.yaml
|
||||||
@@ -189,7 +193,7 @@ cat tools/README.md
|
|||||||
|
|
||||||
### Query workflow
|
### Query workflow
|
||||||
|
|
||||||
1. Read `registry/indexes/capabilities.yaml`.
|
1. Run `.venv/bin/reuse-surface query` with filters, or read the index directly.
|
||||||
2. Filter by `vector`, `tags`, `consumption_modes`, `domain`, or `summary`.
|
2. Filter by `vector`, `tags`, `consumption_modes`, `domain`, or `summary`.
|
||||||
3. Open only matching files under `registry/capabilities/`.
|
3. Open only matching files under `registry/capabilities/`.
|
||||||
4. Compare candidates using `discovery`, `external_evidence`, `availability`,
|
4. Compare candidates using `discovery`, `external_evidence`, `availability`,
|
||||||
@@ -205,7 +209,7 @@ cat tools/README.md
|
|||||||
`registry/capabilities/capability.<domain>.<name>.md`.
|
`registry/capabilities/capability.<domain>.<name>.md`.
|
||||||
3. Start at `D0 / A0 / C0 / R0` when evidence is minimal; keep gaps explicit.
|
3. Start at `D0 / A0 / C0 / R0` when evidence is minimal; keep gaps explicit.
|
||||||
4. Add the entry to `registry/indexes/capabilities.yaml`.
|
4. Add the entry to `registry/indexes/capabilities.yaml`.
|
||||||
5. Run the manual validation checklist in `registry/README.md`.
|
5. Run `.venv/bin/reuse-surface validate`.
|
||||||
|
|
||||||
### Promote a capability
|
### Promote a capability
|
||||||
|
|
||||||
@@ -225,7 +229,7 @@ cat tools/README.md
|
|||||||
| Identify current consumption mode | `availability` + index `consumption_modes` |
|
| Identify current consumption mode | `availability` + index `consumption_modes` |
|
||||||
| Record expectations and broken expectations | `external_evidence.completeness` |
|
| Record expectations and broken expectations | `external_evidence.completeness` |
|
||||||
| Record reliability evidence | `external_evidence.reliability` |
|
| Record reliability evidence | `external_evidence.reliability` |
|
||||||
| Search by maturity and availability | `indexes/capabilities.yaml` filters |
|
| Search by maturity and availability | `reuse-surface query` or index filters |
|
||||||
| Compare candidates | entry vectors + relations + README guidance |
|
| Compare candidates | entry vectors + relations + README guidance |
|
||||||
| Avoid duplicate capabilities | index search before add |
|
| Avoid duplicate capabilities | index search before add |
|
||||||
|
|
||||||
|
|||||||
34
INTENT.md
34
INTENT.md
@@ -205,10 +205,10 @@ maturity:
|
|||||||
|
|
||||||
external_evidence:
|
external_evidence:
|
||||||
completeness:
|
completeness:
|
||||||
current: C1
|
level: C1
|
||||||
confidence: low
|
confidence: low
|
||||||
reliability:
|
reliability:
|
||||||
current: R0
|
level: R0
|
||||||
confidence: low
|
confidence: low
|
||||||
|
|
||||||
discovery:
|
discovery:
|
||||||
@@ -239,28 +239,40 @@ evidence:
|
|||||||
|
|
||||||
## Initial Repository Role
|
## Initial Repository Role
|
||||||
|
|
||||||
The initial role of `reuse-surface` is to define and maintain the capability registry model, standards, schemas, examples, and reference tooling.
|
The initial role of `reuse-surface` is to define and maintain the capability
|
||||||
|
registry model, standards, schemas, examples, and reference tooling.
|
||||||
|
|
||||||
Likely early repository contents:
|
Current repository layout (authoritative for delivery):
|
||||||
|
|
||||||
```text
|
```text
|
||||||
reuse-surface/
|
reuse-surface/
|
||||||
├── INTENT.md
|
├── INTENT.md
|
||||||
├── README.md
|
├── SCOPE.md
|
||||||
├── standards/
|
├── AGENTS.md
|
||||||
|
├── specs/
|
||||||
|
│ ├── ProductRequirementsDocument.md
|
||||||
|
│ ├── UseCaseCatalog.md
|
||||||
│ └── CapabilityMaturityStandard.md
|
│ └── CapabilityMaturityStandard.md
|
||||||
├── registry/
|
|
||||||
│ ├── capabilities.yaml
|
|
||||||
│ └── examples/
|
|
||||||
├── schemas/
|
├── schemas/
|
||||||
│ └── capability.schema.json
|
│ └── capability.schema.yaml
|
||||||
|
├── templates/
|
||||||
|
│ └── capability-entry.template.md
|
||||||
|
├── registry/
|
||||||
|
│ ├── README.md
|
||||||
|
│ ├── capabilities/
|
||||||
|
│ └── indexes/
|
||||||
|
│ └── capabilities.yaml
|
||||||
├── docs/
|
├── docs/
|
||||||
│ ├── CapabilityRegistryConcept.md
|
│ ├── CapabilityRegistryConcept.md
|
||||||
│ └── CapabilityAssessmentGuide.md
|
│ └── IntentScopeGapAnalysis.md
|
||||||
└── tools/
|
└── tools/
|
||||||
└── README.md
|
└── README.md
|
||||||
```
|
```
|
||||||
|
|
||||||
|
See `SCOPE.md` for what is possible now versus planned. See
|
||||||
|
`docs/IntentScopeGapAnalysis.md` for tracked gaps between intent and delivered
|
||||||
|
scope.
|
||||||
|
|
||||||
## Success Criteria
|
## Success Criteria
|
||||||
|
|
||||||
`reuse-surface` is successful when it helps humans and agents:
|
`reuse-surface` is successful when it helps humans and agents:
|
||||||
|
|||||||
76
SCOPE.md
76
SCOPE.md
@@ -14,13 +14,14 @@ for reuse within this product boundary.
|
|||||||
## In Scope
|
## In Scope
|
||||||
|
|
||||||
- Maintain the capability maturity model, standards, schemas, registry formats,
|
- Maintain the capability maturity model, standards, schemas, registry formats,
|
||||||
sample entries, indexes, validation guidance, and agent instructions.
|
sample entries, indexes, validation guidance, CLI tooling, and agent
|
||||||
|
instructions.
|
||||||
- Keep `INTENT.md`, `specs/`, registry artifacts, and State Hub workplans
|
- Keep `INTENT.md`, `specs/`, registry artifacts, and State Hub workplans
|
||||||
aligned on the registry-first reuse boundary.
|
aligned on the registry-first reuse boundary.
|
||||||
- Support humans and agents as registry consumers through Markdown-first
|
- Support humans and agents as registry consumers through Markdown-first
|
||||||
authoring and machine-readable metadata.
|
authoring and machine-readable metadata.
|
||||||
- Record decisions, progress, and workplan status through State Hub.
|
- Record decisions, progress, and workplan status through State Hub.
|
||||||
- Verify changes with documentation review, `git diff --check`, and ADR-001
|
- Verify changes with `reuse-surface validate`, `git diff --check`, and ADR-001
|
||||||
consistency checks.
|
consistency checks.
|
||||||
|
|
||||||
## Out of Scope
|
## Out of Scope
|
||||||
@@ -34,53 +35,47 @@ for reuse within this product boundary.
|
|||||||
|
|
||||||
## What Is Possible Now
|
## What Is Possible Now
|
||||||
|
|
||||||
The MVP registry foundation is in place. Humans and agents can:
|
The MVP registry foundation plus CLI tooling (REUSE-WP-0003) is in place. Humans
|
||||||
|
and agents can:
|
||||||
|
|
||||||
- **Discover capabilities** via `registry/indexes/capabilities.yaml`
|
- **Discover capabilities** via `registry/indexes/capabilities.yaml` or
|
||||||
|
`reuse-surface query`
|
||||||
- **Add a new capability** at D0/A0/C0/R0 using
|
- **Add a new capability** at D0/A0/C0/R0 using
|
||||||
`templates/capability-entry.template.md`
|
`templates/capability-entry.template.md`
|
||||||
- **Promote capabilities** by updating front matter with evidence-backed
|
- **Promote capabilities** with evidence, optional `promotion_history`, and index
|
||||||
discovery, availability, completeness, and reliability levels
|
vector updates
|
||||||
- **Compare candidates** using maturity vectors, scope, relations, and consumer
|
- **Compare candidates** using maturity vectors, scope, relations, and consumer
|
||||||
guidance in entry files
|
guidance
|
||||||
- **Record expectations** through `external_evidence.completeness` and
|
- **Record expectations** through `external_evidence.completeness` and
|
||||||
`external_evidence.reliability` fields
|
`external_evidence.reliability`
|
||||||
- **Validate entries manually** using the checklist in `registry/README.md`
|
- **Validate entries automatically** with `reuse-surface validate`
|
||||||
against `schemas/capability.schema.yaml`
|
- **Export a machine-readable bundle** with `reuse-surface export`
|
||||||
- **Avoid duplicates** by searching the index before creating new entries
|
- **Avoid duplicates** by querying the index before creating new entries
|
||||||
|
|
||||||
These workflows satisfy the MVP acceptance criteria in
|
Registry tooling availability is **A3** (CLI). The registry product itself is
|
||||||
`specs/ProductRequirementsDocument.md` section 16 through manual, Git-friendly
|
still documentation-first for authoring; consumption combines Markdown entries,
|
||||||
authoring. There is no CLI, API, or automated validator yet.
|
the index, and CLI automation.
|
||||||
|
|
||||||
## What Is Not Possible Yet
|
## What Is Not Possible Yet
|
||||||
|
|
||||||
- Automated schema validation or registry export
|
|
||||||
- CLI query/filter commands
|
|
||||||
- Generated human-readable catalog site
|
- Generated human-readable catalog site
|
||||||
- Capability graph visualization
|
- Capability graph visualization
|
||||||
- Promotion history tracking or review workflows in tooling
|
- Automated duplicate/overlap detection
|
||||||
- Federation across repositories or organizations
|
- Federation across repositories or organizations
|
||||||
|
- CI integration or packaged releases beyond local `pip install -e .`
|
||||||
|
|
||||||
See `tools/README.md` for planned tooling that remains out of scope for the
|
See `tools/README.md` for command reference.
|
||||||
current MVP.
|
|
||||||
|
|
||||||
## Current State
|
## Current State
|
||||||
|
|
||||||
- Status: active MVP registry (documentation-only, A0 availability).
|
- Status: active MVP registry with CLI tooling.
|
||||||
- The repository has no package manifest, build system, runtime app, or
|
- Six helix_forge capabilities are registered in `registry/capabilities/`.
|
||||||
executable test suite. Registry consumption is informational: read, author,
|
- `reuse-surface` CLI provides `validate`, `query`, and `export` via
|
||||||
compare, and plan.
|
`pyproject.toml` and `reuse_surface/`.
|
||||||
- Three sample capabilities are registered in `registry/capabilities/`:
|
- `docs/CapabilityRegistryConcept.md` and `docs/IntentScopeGapAnalysis.md`
|
||||||
- `capability.registry.register` — D3 / A0 / C1 / R0
|
document onboarding and intent-scope tracking.
|
||||||
- `capability.feature-control.evaluate` — D5 / A4 / C3 / R3
|
- Finished workplans: `REUSE-WP-0001`, `REUSE-WP-0002`, `REUSE-WP-0003`.
|
||||||
- `capability.identity.vocabulary-canonicalize` — D4 / A0 / C2 / R0
|
- **Self-assessed vector:** `D5 / A3 / C4 / R2` (see gap analysis).
|
||||||
- `specs/` holds the product requirements, use case catalog, and maturity
|
|
||||||
standard. `schemas/`, `templates/`, `registry/`, and `tools/` hold the
|
|
||||||
registry authoring and validation surfaces.
|
|
||||||
- Bootstrap work (`REUSE-WP-0001`) and MVP registry foundation
|
|
||||||
(`REUSE-WP-0002`) are finished. The next work should expand registry coverage,
|
|
||||||
tighten validation, or add CLI tooling through new workplans.
|
|
||||||
|
|
||||||
## Repository Layout
|
## Repository Layout
|
||||||
|
|
||||||
@@ -89,32 +84,27 @@ reuse-surface/
|
|||||||
├── INTENT.md
|
├── INTENT.md
|
||||||
├── SCOPE.md
|
├── SCOPE.md
|
||||||
├── AGENTS.md
|
├── AGENTS.md
|
||||||
|
├── pyproject.toml
|
||||||
|
├── reuse_surface/
|
||||||
├── specs/
|
├── specs/
|
||||||
│ ├── ProductRequirementsDocument.md
|
|
||||||
│ ├── UseCaseCatalog.md
|
|
||||||
│ └── CapabilityMaturityStandard.md
|
|
||||||
├── schemas/
|
├── schemas/
|
||||||
│ └── capability.schema.yaml
|
|
||||||
├── templates/
|
├── templates/
|
||||||
│ └── capability-entry.template.md
|
|
||||||
├── registry/
|
├── registry/
|
||||||
│ ├── README.md
|
├── docs/
|
||||||
│ ├── capabilities/
|
|
||||||
│ └── indexes/
|
|
||||||
│ └── capabilities.yaml
|
|
||||||
├── tools/
|
├── tools/
|
||||||
│ └── README.md
|
|
||||||
└── workplans/
|
└── workplans/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Getting Oriented
|
## Getting Oriented
|
||||||
|
|
||||||
- Start with: INTENT.md
|
- Start with: INTENT.md
|
||||||
|
- Registry concept: docs/CapabilityRegistryConcept.md
|
||||||
- Intent vs scope gaps: docs/IntentScopeGapAnalysis.md
|
- Intent vs scope gaps: docs/IntentScopeGapAnalysis.md
|
||||||
- Product requirements: specs/ProductRequirementsDocument.md
|
- Product requirements: specs/ProductRequirementsDocument.md
|
||||||
- Use cases: specs/UseCaseCatalog.md
|
- Use cases: specs/UseCaseCatalog.md
|
||||||
- Maturity standard: specs/CapabilityMaturityStandard.md
|
- Maturity standard: specs/CapabilityMaturityStandard.md
|
||||||
- Registry index: registry/indexes/capabilities.yaml
|
- Registry index: registry/indexes/capabilities.yaml
|
||||||
- Registry guidance: registry/README.md
|
- Registry guidance: registry/README.md
|
||||||
|
- CLI reference: tools/README.md
|
||||||
- Agent instructions: AGENTS.md
|
- Agent instructions: AGENTS.md
|
||||||
- Workplans: workplans/
|
- Workplans: workplans/
|
||||||
129
docs/CapabilityRegistryConcept.md
Normal file
129
docs/CapabilityRegistryConcept.md
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
# Capability Registry Concept
|
||||||
|
|
||||||
|
**Repository:** `reuse-surface`
|
||||||
|
**Audience:** Humans onboarding to the registry
|
||||||
|
**Companion docs:** `INTENT.md`, `SCOPE.md`, `specs/CapabilityMaturityStandard.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. What problem this solves
|
||||||
|
|
||||||
|
Reusable capabilities are often scattered across repositories, documents,
|
||||||
|
prototypes, and services. Without a registry, teams and agents rediscover,
|
||||||
|
duplicate, and inconsistently assess the same behaviors.
|
||||||
|
|
||||||
|
`reuse-surface` makes capabilities **visible**, **comparable**, and **reusable**
|
||||||
|
for planning and implementation through a registry-first reuse layer.
|
||||||
|
|
||||||
|
> A capability that is not registered is invisible for registry-driven reuse.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Core principles
|
||||||
|
|
||||||
|
### Registry first
|
||||||
|
|
||||||
|
The registry is the boundary of practical reuse awareness. Analysis starts with
|
||||||
|
what is registered, not with everything that might exist informally.
|
||||||
|
|
||||||
|
### Reuse over inventory
|
||||||
|
|
||||||
|
The goal is capability reuse, not a complete inventory of all work products.
|
||||||
|
|
||||||
|
### Planning and implementation are different
|
||||||
|
|
||||||
|
- **Planning reuse** feeds primarily on **Discovery** maturity (D0–D7).
|
||||||
|
- **Implementation reuse** feeds primarily on **Availability** maturity (A0–A7).
|
||||||
|
|
||||||
|
A capability may be well researched (D5) but only informational (A0). Another
|
||||||
|
may be deployable (A4) but weakly bounded (D2). Compare both dimensions.
|
||||||
|
|
||||||
|
### Internal and external evidence stay separate
|
||||||
|
|
||||||
|
| Type | Dimensions | Question |
|
||||||
|
|---|---|---|
|
||||||
|
| Internal registry assessment | Discovery, Availability | How reusable is it for planning? How consumable is it? |
|
||||||
|
| External consumer evidence | Completeness, Reliability | Does scope satisfy intent? Does it behave well in use? |
|
||||||
|
|
||||||
|
Do not treat availability as reliability, or research depth as completeness.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Maturity vector
|
||||||
|
|
||||||
|
A compact summary:
|
||||||
|
|
||||||
|
```text
|
||||||
|
D5 / A4 / C3 / R3
|
||||||
|
```
|
||||||
|
|
||||||
|
Vectors are descriptive, not grades. A research vocabulary capability may
|
||||||
|
naturally target `D5 / A0 / C4 / R3`. A CLI tool may target `D5 / A3 / C5 / R5`.
|
||||||
|
|
||||||
|
Canonical level definitions: `specs/CapabilityMaturityStandard.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. How the artifacts fit together
|
||||||
|
|
||||||
|
```text
|
||||||
|
templates/capability-entry.template.md → authoring starting point
|
||||||
|
registry/capabilities/*.md → canonical entries (YAML front matter)
|
||||||
|
registry/indexes/capabilities.yaml → fast discovery index for agents
|
||||||
|
schemas/capability.schema.yaml → machine-readable entry contract
|
||||||
|
registry/README.md → validation and search guidance
|
||||||
|
tools/ → CLI validate, query, export
|
||||||
|
```
|
||||||
|
|
||||||
|
**Authoring flow**
|
||||||
|
|
||||||
|
1. Search the index for overlap.
|
||||||
|
2. Copy the template to `registry/capabilities/`.
|
||||||
|
3. Fill maturity and evidence fields explicitly.
|
||||||
|
4. Add an index row.
|
||||||
|
5. Validate with `reuse-surface validate`.
|
||||||
|
|
||||||
|
**Consumption flow**
|
||||||
|
|
||||||
|
1. Read `registry/indexes/capabilities.yaml`.
|
||||||
|
2. Filter by vector, tags, or consumption mode.
|
||||||
|
3. Open candidate entry files for scope, relations, and guidance.
|
||||||
|
4. Prefer planning reuse at D3+ and implementation reuse at A2+.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. What is manual vs automated today
|
||||||
|
|
||||||
|
See `SCOPE.md` for the live boundary. In summary:
|
||||||
|
|
||||||
|
| Activity | Mode |
|
||||||
|
|---|---|
|
||||||
|
| Discover capabilities | Index + `reuse-surface query` |
|
||||||
|
| Add or promote entries | Markdown authoring + index update |
|
||||||
|
| Validate shape | `reuse-surface validate` |
|
||||||
|
| Export for agents | `reuse-surface export` |
|
||||||
|
| Promotion history | Optional `promotion_history` in entries |
|
||||||
|
| Graph visualization, federation, CI gates | Not yet available |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. When to register a capability
|
||||||
|
|
||||||
|
Register when a bounded reusable behavior should be:
|
||||||
|
|
||||||
|
- discoverable for roadmap or architecture planning
|
||||||
|
- comparable to adjacent capabilities
|
||||||
|
- consumable through known artifacts (now or later)
|
||||||
|
- assessed with explicit evidence over time
|
||||||
|
|
||||||
|
Do not register one-off features, tickets, or internal code modules unless they
|
||||||
|
represent a reusable capability boundary.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Further reading
|
||||||
|
|
||||||
|
- Product requirements: `specs/ProductRequirementsDocument.md`
|
||||||
|
- Use cases: `specs/UseCaseCatalog.md`
|
||||||
|
- Intent vs delivered scope: `docs/IntentScopeGapAnalysis.md`
|
||||||
|
- Agent workflows: `AGENTS.md`
|
||||||
@@ -13,25 +13,21 @@ current delivered scope so future workplans can close them deliberately.
|
|||||||
|
|
||||||
`INTENT.md` describes the long-term capability registry product: a reuse surface
|
`INTENT.md` describes the long-term capability registry product: a reuse surface
|
||||||
that makes capabilities visible, assessable, and consumable across planning and
|
that makes capabilities visible, assessable, and consumable across planning and
|
||||||
implementation. `SCOPE.md` describes what the repository actually delivers today:
|
implementation. `SCOPE.md` describes what the repository actually delivers today: an MVP registry
|
||||||
an MVP registry foundation at **A0 availability** with manual, Markdown-first
|
with **A3 CLI tooling** (`validate`, `query`, `export`) atop Markdown-first
|
||||||
workflows.
|
authoring.
|
||||||
|
|
||||||
The two documents are **directionally aligned** on registry-first reuse, four
|
The two documents are **directionally aligned** on registry-first reuse, four
|
||||||
maturity dimensions, and human/agent consumers. The main gaps are:
|
maturity dimensions, and human/agent consumers. REUSE-WP-0003 closed the
|
||||||
|
priority gaps from section 8. Remaining gaps are primarily scale, automation,
|
||||||
|
and presentation concerns:
|
||||||
|
|
||||||
1. **Delivery depth** — INTENT promises eventual technical foundation and broad
|
1. **Planning analytics** — no gap reports, overlap detection, or catalog site.
|
||||||
planning/implementation support; SCOPE delivers informational tooling only.
|
2. **Reliability depth** — registry product dogfood evidence is early (R2).
|
||||||
2. **Structural drift** — INTENT's expected repository layout and entry shape
|
3. **Document cross-coverage** — SCOPE still carries operational detail INTENT
|
||||||
differ from the implemented layout and schema in small but important ways.
|
omits; INTENT success criteria are not fully enumerated in SCOPE.
|
||||||
3. **Evidence and operations** — INTENT emphasizes consumer evidence and
|
|
||||||
progress tracking; SCOPE has no reliability evidence, promotion history, or
|
|
||||||
automated validation yet.
|
|
||||||
4. **Document cross-coverage** — SCOPE operationalizes State Hub, MVP acceptance
|
|
||||||
criteria, and helix_forge domain context that INTENT does not mention; INTENT
|
|
||||||
carries success criteria and conceptual depth that SCOPE does not restate.
|
|
||||||
|
|
||||||
**Current reuse-surface vector (self-assessment):** `D4 / A0 / C3 / R0`
|
**Current reuse-surface vector (self-assessment):** `D5 / A3 / C4 / R2`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -256,18 +252,25 @@ own evidence (e.g. feature-control at R3).
|
|||||||
|
|
||||||
## 8. Priority Gap Closure Order
|
## 8. Priority Gap Closure Order
|
||||||
|
|
||||||
Recommended sequence for future workplans:
|
| Priority | Gap | Outcome | Status |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 1 | INTENT layout stale | INTENT layout aligned to delivered structure | Closed (WP-0003) |
|
||||||
|
| 2 | No automated validation | `reuse-surface validate` | Closed (WP-0003) |
|
||||||
|
| 3 | Thin registry coverage | Six helix_forge entries | Closed (WP-0003) |
|
||||||
|
| 4 | Missing concept docs | `docs/CapabilityRegistryConcept.md` | Closed (WP-0003) |
|
||||||
|
| 5 | No promotion history | `promotion_history` in schema/template | Closed (WP-0003) |
|
||||||
|
| 6 | Search/filter manual only | `reuse-surface query` | Closed (WP-0003) |
|
||||||
|
| 7 | No registry export | `reuse-surface export` | Closed (WP-0003) |
|
||||||
|
| 8 | Self-reliability evidence | `capability.registry.register` at R2; friction recorded | Closed (WP-0003) |
|
||||||
|
|
||||||
|
### Next recommended work
|
||||||
|
|
||||||
| Priority | Gap | Suggested outcome |
|
| Priority | Gap | Suggested outcome |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 1 | INTENT layout stale | Update INTENT "Initial Repository Role" to match `SCOPE.md` layout |
|
| 9 | Catalog site | Static browsable capability catalog (UC-RS-018) |
|
||||||
| 2 | No automated validation | CLI or script: validate entries against schema |
|
| 10 | Overlap detection | CLI or report for duplicate/overlapping capabilities |
|
||||||
| 3 | Thin registry coverage | Register additional helix_forge capabilities beyond 3 samples |
|
| 11 | CI validation | Run `reuse-surface validate` in CI on registry changes |
|
||||||
| 4 | Missing concept docs | Add `docs/CapabilityRegistryConcept.md` distilled from INTENT |
|
| 12 | Registry federation | Cross-repo capability index composition |
|
||||||
| 5 | No promotion history | Add `promotion_history` to schema or separate changelog |
|
|
||||||
| 6 | Search/filter manual only | CLI `query` with discovery/availability filters |
|
|
||||||
| 7 | No registry export | YAML/JSON bundle export for agents (UC-RS-019) |
|
|
||||||
| 8 | Self-reliability evidence | Dogfood registry; record friction as reliability evidence |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -286,3 +289,4 @@ Recommended sequence for future workplans:
|
|||||||
| Date | Change |
|
| Date | Change |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 2026-06-15 | Initial analysis after REUSE-WP-0002 completion |
|
| 2026-06-15 | Initial analysis after REUSE-WP-0002 completion |
|
||||||
|
| 2026-06-15 | REUSE-WP-0003 closed priority gaps 1–8; vector updated to D5/A3/C4/R2 |
|
||||||
21
pyproject.toml
Normal file
21
pyproject.toml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = ["setuptools>=68"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[project]
|
||||||
|
name = "reuse-surface"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Capability registry tooling for reuse-surface"
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.11"
|
||||||
|
dependencies = [
|
||||||
|
"jsonschema>=4.0",
|
||||||
|
"pyyaml>=6.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.scripts]
|
||||||
|
reuse-surface = "reuse_surface.cli:main"
|
||||||
|
|
||||||
|
[tool.setuptools.packages.find]
|
||||||
|
where = ["."]
|
||||||
|
include = ["reuse_surface*"]
|
||||||
@@ -74,7 +74,8 @@ Definitions live in `specs/CapabilityMaturityStandard.md`.
|
|||||||
|
|
||||||
### UC-RS-004 — Search by planning need
|
### UC-RS-004 — Search by planning need
|
||||||
|
|
||||||
1. Read `indexes/capabilities.yaml` and scan `summary`, `tags`, and `vector`.
|
1. Run `reuse-surface query --discovery-min D4` or read the index and scan
|
||||||
|
`summary`, `tags`, and `vector`.
|
||||||
2. Open candidate entries and review `discovery.intent`, `discovery.use_cases`,
|
2. Open candidate entries and review `discovery.intent`, `discovery.use_cases`,
|
||||||
and `discovery.includes`.
|
and `discovery.includes`.
|
||||||
3. Prefer entries with discovery `D3+` for roadmap work and `D5+` for MVP
|
3. Prefer entries with discovery `D3+` for roadmap work and `D5+` for MVP
|
||||||
@@ -131,6 +132,8 @@ or `generalizes` rather than creating silent duplicates.
|
|||||||
1. Attach evidence appropriate to the target level in
|
1. Attach evidence appropriate to the target level in
|
||||||
`specs/CapabilityMaturityStandard.md`.
|
`specs/CapabilityMaturityStandard.md`.
|
||||||
2. Update `maturity` and/or `external_evidence` with rationale and confidence.
|
2. Update `maturity` and/or `external_evidence` with rationale and confidence.
|
||||||
3. Update `availability.current_artifacts` when a new consumption mode appears.
|
3. Append a `promotion_history` record with `date`, `dimension`, `from`, `to`,
|
||||||
4. Refresh the index `vector` and run the validation checklist.
|
and `rationale` (optional `author`).
|
||||||
5. Set `status: reviewed` or `approved` when an assessor validates the entry.
|
4. Update `availability.current_artifacts` when a new consumption mode appears.
|
||||||
|
5. Refresh the index `vector` and run `reuse-surface validate`.
|
||||||
|
6. Set `status: reviewed` or `approved` when an assessor validates the entry.
|
||||||
111
registry/capabilities/capability.feature-control.rollout.md
Normal file
111
registry/capabilities/capability.feature-control.rollout.md
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
---
|
||||||
|
id: capability.feature-control.rollout
|
||||||
|
name: Feature Rollout Control
|
||||||
|
summary: Gradually expose features to subjects across tenants, domains, groups, or cohorts using rollout rules and staged availability.
|
||||||
|
owner: feature-control
|
||||||
|
status: draft
|
||||||
|
domain: helix_forge
|
||||||
|
tags:
|
||||||
|
- feature-control
|
||||||
|
- rollout
|
||||||
|
- planning
|
||||||
|
|
||||||
|
maturity:
|
||||||
|
discovery:
|
||||||
|
current: D4
|
||||||
|
target: D6
|
||||||
|
confidence: medium
|
||||||
|
rationale: >
|
||||||
|
Rollout is a distinct bounded behavior from single-point evaluation, with
|
||||||
|
research references in the feature-control domain and maturity standard.
|
||||||
|
availability:
|
||||||
|
current: A2
|
||||||
|
target: A4
|
||||||
|
confidence: low
|
||||||
|
rationale: >
|
||||||
|
Rollout logic may exist in source modules but is not yet consistently
|
||||||
|
exposed as a standalone SDK or API surface distinct from evaluate.
|
||||||
|
|
||||||
|
external_evidence:
|
||||||
|
completeness:
|
||||||
|
level: C2
|
||||||
|
name: Partial
|
||||||
|
confidence: low
|
||||||
|
basis: scope_vs_intent_and_consumer_expectations
|
||||||
|
satisfied_expectations:
|
||||||
|
- rollout concepts documented adjacent to feature evaluation
|
||||||
|
broken_expectations:
|
||||||
|
- no dedicated rollout artifact called out separately from evaluate
|
||||||
|
- percentage and cohort rollout variants not indexed independently
|
||||||
|
out_of_scope_expectations:
|
||||||
|
- billing-driven entitlements
|
||||||
|
reliability:
|
||||||
|
level: R1
|
||||||
|
name: Fragile
|
||||||
|
confidence: low
|
||||||
|
basis: consumer_quality_signals
|
||||||
|
known_reliability_risks:
|
||||||
|
- rollout behavior may be conflated with evaluate in consumer mental models
|
||||||
|
|
||||||
|
discovery:
|
||||||
|
intent: >
|
||||||
|
Control how features become available over time and across cohorts without
|
||||||
|
conflating rollout policy with authorization or billing.
|
||||||
|
includes:
|
||||||
|
- staged rollout rules
|
||||||
|
- cohort and context targeting for rollout
|
||||||
|
- explainable rollout state
|
||||||
|
excludes:
|
||||||
|
- one-time feature evaluation only
|
||||||
|
- authorization decisions
|
||||||
|
- billing entitlements
|
||||||
|
assumptions:
|
||||||
|
- feature evaluation capability exists for final availability decisions
|
||||||
|
use_cases:
|
||||||
|
- ucc.feature-control.domain-rollout
|
||||||
|
research_memos:
|
||||||
|
- specs/CapabilityMaturityStandard.md
|
||||||
|
|
||||||
|
availability:
|
||||||
|
current_level: A2
|
||||||
|
target_level: A4
|
||||||
|
current_artifacts:
|
||||||
|
- feature-control/packages/feature-control-sdk
|
||||||
|
target_artifacts:
|
||||||
|
- feature-control/services/feature-control-api
|
||||||
|
consumption_modes:
|
||||||
|
- source module
|
||||||
|
- SDK
|
||||||
|
|
||||||
|
relations:
|
||||||
|
depends_on:
|
||||||
|
- capability.feature-control.evaluate
|
||||||
|
supports: []
|
||||||
|
related_to:
|
||||||
|
- capability.feature-control.visibility
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
documentation:
|
||||||
|
- specs/CapabilityMaturityStandard.md
|
||||||
|
tests: []
|
||||||
|
consumer_feedback: []
|
||||||
|
bug_reports: []
|
||||||
|
incidents: []
|
||||||
|
|
||||||
|
consumer_guidance:
|
||||||
|
recommended_for:
|
||||||
|
- planning staged feature exposure separate from binary evaluation
|
||||||
|
not_recommended_for:
|
||||||
|
- simple on/off evaluation without rollout semantics
|
||||||
|
- entitlement or billing ownership
|
||||||
|
known_limitations:
|
||||||
|
- distinguish carefully from capability.feature-control.evaluate
|
||||||
|
---
|
||||||
|
|
||||||
|
# Feature Rollout Control
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Rollout governs how availability changes over time and across cohorts. It
|
||||||
|
complements evaluation, which answers whether a feature is available for a
|
||||||
|
subject in a context right now.
|
||||||
115
registry/capabilities/capability.identity.subject-resolution.md
Normal file
115
registry/capabilities/capability.identity.subject-resolution.md
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
---
|
||||||
|
id: capability.identity.subject-resolution
|
||||||
|
name: Identity Subject Resolution
|
||||||
|
summary: Resolve who or what is acting in a context by mapping principals, accounts, actors, and identifiers to a stable subject model.
|
||||||
|
owner: identity-canon
|
||||||
|
status: draft
|
||||||
|
domain: helix_forge
|
||||||
|
tags:
|
||||||
|
- identity
|
||||||
|
- subject
|
||||||
|
- architecture
|
||||||
|
|
||||||
|
maturity:
|
||||||
|
discovery:
|
||||||
|
current: D3
|
||||||
|
target: D5
|
||||||
|
confidence: medium
|
||||||
|
rationale: >
|
||||||
|
Subject/principal terminology is explored in identity-canon conflict maps
|
||||||
|
and conceptual model, but dedicated use-case grounding is incomplete.
|
||||||
|
availability:
|
||||||
|
current: A0
|
||||||
|
target: A4
|
||||||
|
confidence: low
|
||||||
|
rationale: >
|
||||||
|
Canon and research artifacts exist; no standalone resolver service or SDK
|
||||||
|
is registered yet.
|
||||||
|
|
||||||
|
external_evidence:
|
||||||
|
completeness:
|
||||||
|
level: C1
|
||||||
|
name: Fragmentary
|
||||||
|
confidence: low
|
||||||
|
basis: scope_vs_intent_and_consumer_expectations
|
||||||
|
satisfied_expectations:
|
||||||
|
- overloaded subject and principal terms are mapped as candidates
|
||||||
|
broken_expectations:
|
||||||
|
- no runtime resolver artifact
|
||||||
|
- canonical subject model not finalized across all actor types
|
||||||
|
out_of_scope_expectations:
|
||||||
|
- authentication protocol implementation
|
||||||
|
- credential storage
|
||||||
|
reliability:
|
||||||
|
level: R0
|
||||||
|
confidence: low
|
||||||
|
basis: consumer_quality_signals
|
||||||
|
known_reliability_risks:
|
||||||
|
- draft terminology may change during source-note backfill
|
||||||
|
|
||||||
|
discovery:
|
||||||
|
intent: >
|
||||||
|
Give planners and implementers a consistent subject concept for authorization,
|
||||||
|
feature control, tenancy, and agent workflows without collapsing product-specific
|
||||||
|
identity models.
|
||||||
|
includes:
|
||||||
|
- subject vs principal vs account distinctions
|
||||||
|
- actor type modeling
|
||||||
|
- identifier resolution concepts
|
||||||
|
excludes:
|
||||||
|
- authentication execution
|
||||||
|
- credential issuance
|
||||||
|
- directory provisioning
|
||||||
|
assumptions:
|
||||||
|
- vocabulary canonicalization supports but does not replace subject resolution
|
||||||
|
use_cases:
|
||||||
|
- UC-RS-004
|
||||||
|
research_memos:
|
||||||
|
- identity-canon/terminology/TerminologyConflictMap.md
|
||||||
|
- identity-canon/model/ConceptualModel.md
|
||||||
|
|
||||||
|
availability:
|
||||||
|
current_level: A0
|
||||||
|
target_level: A4
|
||||||
|
current_artifacts:
|
||||||
|
- identity-canon/model/ConceptualModel.md
|
||||||
|
- identity-canon/canon/CanonicalGlossary.md
|
||||||
|
target_artifacts:
|
||||||
|
- identity-canon/packages/subject-resolution-sdk
|
||||||
|
consumption_modes:
|
||||||
|
- informational
|
||||||
|
|
||||||
|
relations:
|
||||||
|
depends_on:
|
||||||
|
- capability.identity.vocabulary-canonicalize
|
||||||
|
supports:
|
||||||
|
- capability.feature-control.evaluate
|
||||||
|
- capability.statehub.workstream-coordinate
|
||||||
|
related_to: []
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
documentation:
|
||||||
|
- identity-canon/canon/CanonicalGlossary.md
|
||||||
|
- identity-canon/scenarios/ScenarioTests.md
|
||||||
|
tests: []
|
||||||
|
consumer_feedback: []
|
||||||
|
bug_reports: []
|
||||||
|
incidents: []
|
||||||
|
|
||||||
|
consumer_guidance:
|
||||||
|
recommended_for:
|
||||||
|
- architecture planning where subject/principal/account terms overlap
|
||||||
|
not_recommended_for:
|
||||||
|
- runtime authentication or token validation
|
||||||
|
- treating draft canon as finalized resolver behavior
|
||||||
|
known_limitations:
|
||||||
|
- resolver artifacts are not yet available
|
||||||
|
---
|
||||||
|
|
||||||
|
# Identity Subject Resolution
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Subject resolution defines how actors and identifiers map to a stable subject
|
||||||
|
concept for downstream capabilities such as feature evaluation and coordination.
|
||||||
|
Today this capability is planning-heavy (D3/A0).
|
||||||
@@ -20,34 +20,38 @@ maturity:
|
|||||||
registry model is bounded in INTENT.md, but concrete promotion workflows
|
registry model is bounded in INTENT.md, but concrete promotion workflows
|
||||||
are not yet grounded in registry artifacts.
|
are not yet grounded in registry artifacts.
|
||||||
availability:
|
availability:
|
||||||
current: A0
|
current: A3
|
||||||
target: A3
|
target: A3
|
||||||
confidence: medium
|
confidence: medium
|
||||||
rationale: >
|
rationale: >
|
||||||
Registration is currently manual through Markdown entries and the index.
|
Registration and maintenance are automatable through the reuse-surface CLI
|
||||||
A CLI validator/query tool would raise availability to A3.
|
for validate, query, and export workflows.
|
||||||
|
|
||||||
external_evidence:
|
external_evidence:
|
||||||
completeness:
|
completeness:
|
||||||
level: C1
|
level: C2
|
||||||
name: Fragmentary
|
name: Partial
|
||||||
confidence: low
|
confidence: medium
|
||||||
basis: scope_vs_intent_and_consumer_expectations
|
basis: scope_vs_intent_and_consumer_expectations
|
||||||
satisfied_expectations:
|
satisfied_expectations:
|
||||||
- capability IDs can be assigned in registry entries
|
- capability IDs can be assigned in registry entries
|
||||||
- maturity vectors can be recorded at registration time
|
- maturity vectors can be recorded at registration time
|
||||||
|
- CLI validate, query, and export support registry workflows
|
||||||
|
- promotion history can be recorded in entries
|
||||||
broken_expectations:
|
broken_expectations:
|
||||||
- no automated duplicate detection yet
|
- no automated duplicate detection yet
|
||||||
- no promotion history tracking yet
|
|
||||||
out_of_scope_expectations:
|
out_of_scope_expectations:
|
||||||
- hosting registered capabilities
|
- hosting registered capabilities
|
||||||
- enforcing implementation architecture
|
- enforcing implementation architecture
|
||||||
reliability:
|
reliability:
|
||||||
level: R0
|
level: R2
|
||||||
confidence: low
|
name: Tolerable
|
||||||
|
confidence: medium
|
||||||
basis: consumer_quality_signals
|
basis: consumer_quality_signals
|
||||||
known_reliability_risks:
|
known_reliability_risks:
|
||||||
- registry consistency depends on manual index maintenance
|
- index drift still possible if authors skip validate
|
||||||
|
- CLI requires local venv install
|
||||||
|
- schema ID pattern required a fix during WP-0003 dogfooding
|
||||||
|
|
||||||
discovery:
|
discovery:
|
||||||
intent: >
|
intent: >
|
||||||
@@ -72,17 +76,17 @@ discovery:
|
|||||||
- specs/ProductRequirementsDocument.md
|
- specs/ProductRequirementsDocument.md
|
||||||
|
|
||||||
availability:
|
availability:
|
||||||
current_level: A0
|
current_level: A3
|
||||||
target_level: A3
|
target_level: A3
|
||||||
current_artifacts:
|
current_artifacts:
|
||||||
- templates/capability-entry.template.md
|
- templates/capability-entry.template.md
|
||||||
- registry/indexes/capabilities.yaml
|
- registry/indexes/capabilities.yaml
|
||||||
target_artifacts:
|
- reuse_surface/cli.py
|
||||||
- tools/validate-registry
|
target_artifacts: []
|
||||||
- tools/query-registry
|
|
||||||
consumption_modes:
|
consumption_modes:
|
||||||
- informational
|
- informational
|
||||||
- markdown authoring
|
- markdown authoring
|
||||||
|
- cli
|
||||||
|
|
||||||
relations:
|
relations:
|
||||||
depends_on: []
|
depends_on: []
|
||||||
@@ -111,6 +115,26 @@ consumer_guidance:
|
|||||||
known_limitations:
|
known_limitations:
|
||||||
- manual index updates are required after adding an entry
|
- manual index updates are required after adding an entry
|
||||||
- duplicate detection is guidance-only in the MVP
|
- duplicate detection is guidance-only in the MVP
|
||||||
|
|
||||||
|
promotion_history:
|
||||||
|
- date: "2026-06-14"
|
||||||
|
dimension: discovery
|
||||||
|
from: D0
|
||||||
|
to: D1
|
||||||
|
rationale: Added name, summary, and registry-first intent from INTENT.md.
|
||||||
|
author: reuse-surface
|
||||||
|
- date: "2026-06-15"
|
||||||
|
dimension: discovery
|
||||||
|
from: D1
|
||||||
|
to: D3
|
||||||
|
rationale: Bounded scope with UC-RS-001 and MVP registry artifacts in specs/.
|
||||||
|
author: reuse-surface
|
||||||
|
- date: "2026-06-15"
|
||||||
|
dimension: availability
|
||||||
|
from: A0
|
||||||
|
to: A3
|
||||||
|
rationale: reuse-surface CLI shipped validate, query, and export commands.
|
||||||
|
author: reuse-surface
|
||||||
---
|
---
|
||||||
|
|
||||||
# Capability Registration
|
# Capability Registration
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
---
|
||||||
|
id: capability.statehub.workstream-coordinate
|
||||||
|
name: Workstream And Task Coordination
|
||||||
|
summary: Track active workstreams, tasks, progress, and consistency across domain repositories through a local-first coordination service.
|
||||||
|
owner: state-hub
|
||||||
|
status: draft
|
||||||
|
domain: helix_forge
|
||||||
|
tags:
|
||||||
|
- state-hub
|
||||||
|
- coordination
|
||||||
|
- workplans
|
||||||
|
|
||||||
|
maturity:
|
||||||
|
discovery:
|
||||||
|
current: D4
|
||||||
|
target: D5
|
||||||
|
confidence: medium
|
||||||
|
rationale: >
|
||||||
|
State Hub intent, scope, and ADR-001 workplan conventions are documented;
|
||||||
|
concrete agent workflows are still being standardized across repos.
|
||||||
|
availability:
|
||||||
|
current: A4
|
||||||
|
target: A6
|
||||||
|
confidence: medium
|
||||||
|
rationale: >
|
||||||
|
Consumers integrate through the State Hub HTTP API and custodian scripts.
|
||||||
|
Managed platform operation is the natural target for multi-repo agents.
|
||||||
|
|
||||||
|
external_evidence:
|
||||||
|
completeness:
|
||||||
|
level: C3
|
||||||
|
name: Functional Core
|
||||||
|
confidence: medium
|
||||||
|
basis: scope_vs_intent_and_consumer_expectations
|
||||||
|
satisfied_expectations:
|
||||||
|
- workstream and task tracking via HTTP API
|
||||||
|
- workplan file to database consistency sync
|
||||||
|
- progress event logging
|
||||||
|
broken_expectations:
|
||||||
|
- no native MCP server for all agent environments
|
||||||
|
out_of_scope_expectations:
|
||||||
|
- replacing git-backed workplan canon
|
||||||
|
- identity authority
|
||||||
|
reliability:
|
||||||
|
level: R2
|
||||||
|
name: Tolerable
|
||||||
|
confidence: low
|
||||||
|
basis: consumer_quality_signals
|
||||||
|
known_reliability_risks:
|
||||||
|
- depends on local hub availability and operator maintenance
|
||||||
|
|
||||||
|
discovery:
|
||||||
|
intent: >
|
||||||
|
Give agents and operators a live, queryable memory of work across domains
|
||||||
|
without replacing file-backed workplans and governance canon.
|
||||||
|
includes:
|
||||||
|
- workstream and task indexing
|
||||||
|
- progress and decision events
|
||||||
|
- repo consistency synchronization
|
||||||
|
- inbox and human-review flags
|
||||||
|
excludes:
|
||||||
|
- canon ownership
|
||||||
|
- task factory for all work origins
|
||||||
|
- identity authority
|
||||||
|
assumptions:
|
||||||
|
- workplans remain authoritative in git for ADR-001 repos
|
||||||
|
use_cases:
|
||||||
|
- UC-RS-013
|
||||||
|
research_memos:
|
||||||
|
- state-hub/INTENT.md
|
||||||
|
|
||||||
|
availability:
|
||||||
|
current_level: A4
|
||||||
|
target_level: A6
|
||||||
|
current_artifacts:
|
||||||
|
- state-hub/api/
|
||||||
|
- state-hub/scripts/consistency_check.py
|
||||||
|
target_artifacts:
|
||||||
|
- state-hub/platform/state-hub-service
|
||||||
|
consumption_modes:
|
||||||
|
- service API
|
||||||
|
- HTTP REST
|
||||||
|
|
||||||
|
relations:
|
||||||
|
depends_on: []
|
||||||
|
supports:
|
||||||
|
- capability.registry.register
|
||||||
|
related_to:
|
||||||
|
- capability.statehub.progress-log
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
documentation:
|
||||||
|
- state-hub/INTENT.md
|
||||||
|
- state-hub/AGENTS.md
|
||||||
|
tests: []
|
||||||
|
consumer_feedback: []
|
||||||
|
bug_reports: []
|
||||||
|
incidents: []
|
||||||
|
|
||||||
|
consumer_guidance:
|
||||||
|
recommended_for:
|
||||||
|
- cross-repo agent orientation and task status sync
|
||||||
|
- logging progress after workplan changes
|
||||||
|
not_recommended_for:
|
||||||
|
- storing canonical requirements or architecture canon
|
||||||
|
- assuming hub state overrides git workplan files
|
||||||
|
known_limitations:
|
||||||
|
- requires running State Hub locally or via tunnel
|
||||||
|
---
|
||||||
|
|
||||||
|
# Workstream And Task Coordination
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
State Hub provides live coordination for helix_forge repositories while
|
||||||
|
workplans remain file-backed. This entry represents the service/API consumption
|
||||||
|
mode for cross-repo agent work.
|
||||||
@@ -7,13 +7,13 @@ capabilities:
|
|||||||
- id: capability.registry.register
|
- id: capability.registry.register
|
||||||
name: Capability Registration
|
name: Capability Registration
|
||||||
summary: Register a new capability so it becomes visible for planning and implementation reuse.
|
summary: Register a new capability so it becomes visible for planning and implementation reuse.
|
||||||
vector: D3 / A0 / C1 / R0
|
vector: D3 / A3 / C2 / R2
|
||||||
domain: helix_forge
|
domain: helix_forge
|
||||||
status: draft
|
status: draft
|
||||||
owner: reuse-surface
|
owner: reuse-surface
|
||||||
path: registry/capabilities/capability.registry.register.md
|
path: registry/capabilities/capability.registry.register.md
|
||||||
tags: [registry, governance, meta]
|
tags: [registry, governance, meta]
|
||||||
consumption_modes: [informational, markdown authoring]
|
consumption_modes: [informational, markdown authoring, cli]
|
||||||
|
|
||||||
- id: capability.feature-control.evaluate
|
- id: capability.feature-control.evaluate
|
||||||
name: Feature Availability Evaluation
|
name: Feature Availability Evaluation
|
||||||
@@ -26,6 +26,17 @@ capabilities:
|
|||||||
tags: [feature-control, evaluation, sdk]
|
tags: [feature-control, evaluation, sdk]
|
||||||
consumption_modes: [SDK, service API]
|
consumption_modes: [SDK, service API]
|
||||||
|
|
||||||
|
- id: capability.feature-control.rollout
|
||||||
|
name: Feature Rollout Control
|
||||||
|
summary: Gradually expose features to subjects across tenants, domains, groups, or cohorts using rollout rules and staged availability.
|
||||||
|
vector: D4 / A2 / C2 / R1
|
||||||
|
domain: helix_forge
|
||||||
|
status: draft
|
||||||
|
owner: feature-control
|
||||||
|
path: registry/capabilities/capability.feature-control.rollout.md
|
||||||
|
tags: [feature-control, rollout, planning]
|
||||||
|
consumption_modes: [source module, SDK]
|
||||||
|
|
||||||
- id: capability.identity.vocabulary-canonicalize
|
- id: capability.identity.vocabulary-canonicalize
|
||||||
name: Identity Vocabulary Canonicalization
|
name: Identity Vocabulary Canonicalization
|
||||||
summary: Define and maintain an implementation-neutral vocabulary for identity-related concepts across overlapping domains.
|
summary: Define and maintain an implementation-neutral vocabulary for identity-related concepts across overlapping domains.
|
||||||
@@ -36,3 +47,25 @@ capabilities:
|
|||||||
path: registry/capabilities/capability.identity.vocabulary-canonicalize.md
|
path: registry/capabilities/capability.identity.vocabulary-canonicalize.md
|
||||||
tags: [identity, terminology, research]
|
tags: [identity, terminology, research]
|
||||||
consumption_modes: [informational]
|
consumption_modes: [informational]
|
||||||
|
|
||||||
|
- id: capability.identity.subject-resolution
|
||||||
|
name: Identity Subject Resolution
|
||||||
|
summary: Resolve who or what is acting in a context by mapping principals, accounts, actors, and identifiers to a stable subject model.
|
||||||
|
vector: D3 / A0 / C1 / R0
|
||||||
|
domain: helix_forge
|
||||||
|
status: draft
|
||||||
|
owner: identity-canon
|
||||||
|
path: registry/capabilities/capability.identity.subject-resolution.md
|
||||||
|
tags: [identity, subject, architecture]
|
||||||
|
consumption_modes: [informational]
|
||||||
|
|
||||||
|
- id: capability.statehub.workstream-coordinate
|
||||||
|
name: Workstream And Task Coordination
|
||||||
|
summary: Track active workstreams, tasks, progress, and consistency across domain repositories through a local-first coordination service.
|
||||||
|
vector: D4 / A4 / C3 / R2
|
||||||
|
domain: helix_forge
|
||||||
|
status: draft
|
||||||
|
owner: state-hub
|
||||||
|
path: registry/capabilities/capability.statehub.workstream-coordinate.md
|
||||||
|
tags: [state-hub, coordination, workplans]
|
||||||
|
consumption_modes: [service API, HTTP REST]
|
||||||
1
reuse_surface/__init__.py
Normal file
1
reuse_surface/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
"""Registry CLI for reuse-surface."""
|
||||||
192
reuse_surface/cli.py
Normal file
192
reuse_surface/cli.py
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
from jsonschema import Draft202012Validator
|
||||||
|
|
||||||
|
from reuse_surface.registry import (
|
||||||
|
CAPABILITIES_DIR,
|
||||||
|
INDEX_PATH,
|
||||||
|
ROOT,
|
||||||
|
capability_paths,
|
||||||
|
level_at_least,
|
||||||
|
load_index,
|
||||||
|
load_schema,
|
||||||
|
parse_front_matter,
|
||||||
|
parse_vector,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _check_index_drift(entry_paths: list[Path], index: dict[str, Any]) -> list[str]:
|
||||||
|
warnings: list[str] = []
|
||||||
|
indexed_paths = {item["path"] for item in index.get("capabilities", [])}
|
||||||
|
file_paths = {str(path.relative_to(ROOT)) for path in entry_paths}
|
||||||
|
for path in sorted(file_paths - indexed_paths):
|
||||||
|
warnings.append(f"index drift: entry file not indexed: {path}")
|
||||||
|
for path in sorted(indexed_paths - file_paths):
|
||||||
|
warnings.append(f"index drift: index references missing file: {path}")
|
||||||
|
return warnings
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_validate(args: argparse.Namespace) -> int:
|
||||||
|
schema = load_schema()
|
||||||
|
validator = Draft202012Validator(schema)
|
||||||
|
target = Path(args.path) if args.path else None
|
||||||
|
paths = capability_paths(target)
|
||||||
|
errors: list[str] = []
|
||||||
|
warnings: list[str] = []
|
||||||
|
|
||||||
|
for path in paths:
|
||||||
|
try:
|
||||||
|
data = parse_front_matter(path)
|
||||||
|
except ValueError as exc:
|
||||||
|
errors.append(str(exc))
|
||||||
|
continue
|
||||||
|
for error in sorted(validator.iter_errors(data), key=lambda e: e.path):
|
||||||
|
location = ".".join(str(part) for part in error.path) or "<root>"
|
||||||
|
errors.append(f"{path}: {location}: {error.message}")
|
||||||
|
|
||||||
|
if not target:
|
||||||
|
index = load_index()
|
||||||
|
warnings.extend(_check_index_drift(paths, index))
|
||||||
|
|
||||||
|
for warning in warnings:
|
||||||
|
print(f"warning: {warning}", file=sys.stderr)
|
||||||
|
for error in errors:
|
||||||
|
print(f"error: {error}", file=sys.stderr)
|
||||||
|
|
||||||
|
if errors:
|
||||||
|
return 1
|
||||||
|
print(f"ok: validated {len(paths)} capability entr{'y' if len(paths) == 1 else 'ies'}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def _matches_query(item: dict[str, Any], args: argparse.Namespace) -> bool:
|
||||||
|
vector = parse_vector(item["vector"])
|
||||||
|
if args.discovery_min and not level_at_least(
|
||||||
|
"discovery", vector["discovery"], args.discovery_min
|
||||||
|
):
|
||||||
|
return False
|
||||||
|
if args.availability_min and not level_at_least(
|
||||||
|
"availability", vector["availability"], args.availability_min
|
||||||
|
):
|
||||||
|
return False
|
||||||
|
if args.domain and item.get("domain") != args.domain:
|
||||||
|
return False
|
||||||
|
if args.tag and args.tag not in item.get("tags", []):
|
||||||
|
return False
|
||||||
|
if args.consumption_mode:
|
||||||
|
modes = [mode.lower() for mode in item.get("consumption_modes", [])]
|
||||||
|
if args.consumption_mode.lower() not in modes:
|
||||||
|
return False
|
||||||
|
if args.keyword:
|
||||||
|
haystack = " ".join(
|
||||||
|
[
|
||||||
|
item.get("id", ""),
|
||||||
|
item.get("name", ""),
|
||||||
|
item.get("summary", ""),
|
||||||
|
" ".join(item.get("tags", [])),
|
||||||
|
]
|
||||||
|
).lower()
|
||||||
|
if args.keyword.lower() not in haystack:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_query(args: argparse.Namespace) -> int:
|
||||||
|
index = load_index()
|
||||||
|
matches = [
|
||||||
|
item for item in index.get("capabilities", []) if _matches_query(item, args)
|
||||||
|
]
|
||||||
|
if not matches:
|
||||||
|
print("no matches")
|
||||||
|
return 0
|
||||||
|
for item in matches:
|
||||||
|
print(
|
||||||
|
f"{item['id']} {item['vector']} {item['path']}\n"
|
||||||
|
f" {item['summary']}"
|
||||||
|
)
|
||||||
|
print(f"\n{len(matches)} match{'es' if len(matches) != 1 else ''}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_export(args: argparse.Namespace) -> int:
|
||||||
|
index = load_index()
|
||||||
|
bundle: dict[str, Any] = {
|
||||||
|
"version": index.get("version", 1),
|
||||||
|
"domain": index.get("domain"),
|
||||||
|
"updated": index.get("updated"),
|
||||||
|
"capabilities": [],
|
||||||
|
}
|
||||||
|
errors: list[str] = []
|
||||||
|
|
||||||
|
for item in index.get("capabilities", []):
|
||||||
|
path = ROOT / item["path"]
|
||||||
|
try:
|
||||||
|
front_matter = parse_front_matter(path)
|
||||||
|
except ValueError as exc:
|
||||||
|
errors.append(str(exc))
|
||||||
|
continue
|
||||||
|
bundle["capabilities"].append(
|
||||||
|
{
|
||||||
|
"index": item,
|
||||||
|
"entry": front_matter,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
if errors:
|
||||||
|
for error in errors:
|
||||||
|
print(f"error: {error}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if args.format == "json":
|
||||||
|
print(json.dumps(bundle, indent=2, sort_keys=True))
|
||||||
|
else:
|
||||||
|
print(yaml.safe_dump(bundle, sort_keys=False))
|
||||||
|
print(
|
||||||
|
f"# exported {len(bundle['capabilities'])} capabilities",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def main(argv: list[str] | None = None) -> int:
|
||||||
|
parser = argparse.ArgumentParser(prog="reuse-surface")
|
||||||
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
||||||
|
|
||||||
|
validate = subparsers.add_parser("validate", help="validate capability entries")
|
||||||
|
validate.add_argument(
|
||||||
|
"path",
|
||||||
|
nargs="?",
|
||||||
|
help="optional capability markdown file; defaults to all entries",
|
||||||
|
)
|
||||||
|
validate.set_defaults(func=cmd_validate)
|
||||||
|
|
||||||
|
query = subparsers.add_parser("query", help="query capability index")
|
||||||
|
query.add_argument("--discovery-min")
|
||||||
|
query.add_argument("--availability-min")
|
||||||
|
query.add_argument("--domain")
|
||||||
|
query.add_argument("--tag")
|
||||||
|
query.add_argument("--consumption-mode")
|
||||||
|
query.add_argument("--keyword")
|
||||||
|
query.set_defaults(func=cmd_query)
|
||||||
|
|
||||||
|
export = subparsers.add_parser("export", help="export registry bundle")
|
||||||
|
export.add_argument(
|
||||||
|
"--format",
|
||||||
|
choices=["yaml", "json"],
|
||||||
|
default="yaml",
|
||||||
|
)
|
||||||
|
export.set_defaults(func=cmd_export)
|
||||||
|
|
||||||
|
args = parser.parse_args(argv)
|
||||||
|
return args.func(args)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
63
reuse_surface/registry.py
Normal file
63
reuse_surface/registry.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parent.parent
|
||||||
|
CAPABILITIES_DIR = ROOT / "registry" / "capabilities"
|
||||||
|
INDEX_PATH = ROOT / "registry" / "indexes" / "capabilities.yaml"
|
||||||
|
SCHEMA_PATH = ROOT / "schemas" / "capability.schema.yaml"
|
||||||
|
|
||||||
|
LEVEL_ORDERS = {
|
||||||
|
"discovery": ["D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7"],
|
||||||
|
"availability": ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7"],
|
||||||
|
"completeness": ["C0", "C1", "C2", "C3", "C4", "C5", "C6"],
|
||||||
|
"reliability": ["R0", "R1", "R2", "R3", "R4", "R5", "R6"],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def load_schema() -> dict[str, Any]:
|
||||||
|
with SCHEMA_PATH.open(encoding="utf-8") as handle:
|
||||||
|
return yaml.safe_load(handle)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_front_matter(path: Path) -> dict[str, Any]:
|
||||||
|
text = path.read_text(encoding="utf-8")
|
||||||
|
match = re.match(r"^---\n(.*?)\n---", text, re.DOTALL)
|
||||||
|
if not match:
|
||||||
|
raise ValueError(f"{path}: missing YAML front matter")
|
||||||
|
data = yaml.safe_load(match.group(1))
|
||||||
|
if not isinstance(data, dict):
|
||||||
|
raise ValueError(f"{path}: front matter must be a mapping")
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def capability_paths(target: Path | None = None) -> list[Path]:
|
||||||
|
if target is not None:
|
||||||
|
return [target]
|
||||||
|
return sorted(CAPABILITIES_DIR.glob("*.md"))
|
||||||
|
|
||||||
|
|
||||||
|
def load_index() -> dict[str, Any]:
|
||||||
|
with INDEX_PATH.open(encoding="utf-8") as handle:
|
||||||
|
return yaml.safe_load(handle)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_vector(vector: str) -> dict[str, str]:
|
||||||
|
parts = [part.strip() for part in vector.split("/")]
|
||||||
|
if len(parts) != 4:
|
||||||
|
raise ValueError(f"invalid vector: {vector}")
|
||||||
|
return {
|
||||||
|
"discovery": parts[0],
|
||||||
|
"availability": parts[1],
|
||||||
|
"completeness": parts[2],
|
||||||
|
"reliability": parts[3],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def level_at_least(dimension: str, current: str, minimum: str) -> bool:
|
||||||
|
order = LEVEL_ORDERS[dimension]
|
||||||
|
return order.index(current) >= order.index(minimum)
|
||||||
@@ -17,7 +17,7 @@ required:
|
|||||||
properties:
|
properties:
|
||||||
id:
|
id:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^capability\.[a-z0-9]+(\.[a-z0-9-]+)+$'
|
pattern: '^capability(\.[a-z][a-z0-9-]*)+$'
|
||||||
description: Stable reverse-domain capability identifier.
|
description: Stable reverse-domain capability identifier.
|
||||||
name:
|
name:
|
||||||
type: string
|
type: string
|
||||||
@@ -162,6 +162,10 @@ properties:
|
|||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
|
promotion_history:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/$defs/promotionRecord'
|
||||||
$defs:
|
$defs:
|
||||||
confidence:
|
confidence:
|
||||||
type: string
|
type: string
|
||||||
@@ -182,7 +186,7 @@ $defs:
|
|||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^capability\.[a-z0-9]+(\.[a-z0-9-]+)+$'
|
pattern: '^capability(\.[a-z][a-z0-9-]*)+$'
|
||||||
internalMaturityDimension:
|
internalMaturityDimension:
|
||||||
type: object
|
type: object
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
@@ -245,3 +249,24 @@ $defs:
|
|||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
|
promotionDimension:
|
||||||
|
type: string
|
||||||
|
enum: [discovery, availability, completeness, reliability]
|
||||||
|
promotionRecord:
|
||||||
|
type: object
|
||||||
|
additionalProperties: false
|
||||||
|
required: [date, dimension, from, to, rationale]
|
||||||
|
properties:
|
||||||
|
date:
|
||||||
|
type: string
|
||||||
|
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'
|
||||||
|
dimension:
|
||||||
|
$ref: '#/$defs/promotionDimension'
|
||||||
|
from:
|
||||||
|
type: string
|
||||||
|
to:
|
||||||
|
type: string
|
||||||
|
rationale:
|
||||||
|
type: string
|
||||||
|
author:
|
||||||
|
type: string
|
||||||
@@ -78,6 +78,15 @@ consumer_guidance:
|
|||||||
- describe unsafe or weak reuse scenarios
|
- describe unsafe or weak reuse scenarios
|
||||||
known_limitations:
|
known_limitations:
|
||||||
- list known gaps, risks, or missing evidence
|
- list known gaps, risks, or missing evidence
|
||||||
|
|
||||||
|
# Optional: append a row when a maturity dimension is promoted with evidence.
|
||||||
|
promotion_history: []
|
||||||
|
# - date: "2026-06-15"
|
||||||
|
# dimension: discovery
|
||||||
|
# from: D0
|
||||||
|
# to: D1
|
||||||
|
# rationale: Added intent, summary, and basic actors.
|
||||||
|
# author: capability-owner
|
||||||
---
|
---
|
||||||
|
|
||||||
# Example Capability
|
# Example Capability
|
||||||
|
|||||||
@@ -1,52 +1,64 @@
|
|||||||
# Registry Tools
|
# Registry Tools
|
||||||
|
|
||||||
Reference tooling for the capability registry. The MVP is document-first; this
|
CLI tooling for the capability registry, implemented in `reuse_surface/`.
|
||||||
directory documents validation and query workflows until executable tools land.
|
|
||||||
|
|
||||||
## Current MVP workflows
|
## Install
|
||||||
|
|
||||||
| Workflow | Location | Mode |
|
|
||||||
|---|---|---|
|
|
||||||
| Add capability | `templates/capability-entry.template.md` | manual |
|
|
||||||
| Discover capabilities | `registry/indexes/capabilities.yaml` | manual / agent |
|
|
||||||
| Validate entry shape | `registry/README.md` checklist | manual |
|
|
||||||
| Schema reference | `schemas/capability.schema.yaml` | manual |
|
|
||||||
| Maturity definitions | `specs/CapabilityMaturityStandard.md` | manual |
|
|
||||||
|
|
||||||
## Manual validation procedure
|
|
||||||
|
|
||||||
1. Open the capability entry Markdown file.
|
|
||||||
2. Compare YAML front matter against `schemas/capability.schema.yaml`.
|
|
||||||
3. Run the checklist in `registry/README.md`.
|
|
||||||
4. Confirm the index entry exists and the `vector` is current.
|
|
||||||
5. Confirm relation targets exist or are intentionally external.
|
|
||||||
|
|
||||||
## Planned tools (out of MVP scope)
|
|
||||||
|
|
||||||
Future CLI commands may include:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# validate one entry or the whole registry
|
python3 -m venv .venv
|
||||||
reuse-surface validate registry/capabilities/
|
.venv/bin/pip install -e .
|
||||||
|
|
||||||
# query by planning need, availability, or vector
|
|
||||||
reuse-surface query --discovery-min D4 --tag identity
|
|
||||||
|
|
||||||
# export machine-readable registry bundle
|
|
||||||
reuse-surface export --format yaml
|
|
||||||
```
|
```
|
||||||
|
|
||||||
These are documented here as targets only. Do not assume they exist yet.
|
## Commands
|
||||||
|
|
||||||
## Agent query pattern
|
### validate
|
||||||
|
|
||||||
Agents should start with the index, not individual entry files:
|
Validate one entry or the full registry against `schemas/capability.schema.yaml`
|
||||||
|
and warn on index drift.
|
||||||
|
|
||||||
1. Read `registry/indexes/capabilities.yaml`.
|
```bash
|
||||||
2. Filter by `vector`, `tags`, `consumption_modes`, or `summary`.
|
reuse-surface validate
|
||||||
3. Open only the candidate entry paths.
|
reuse-surface validate registry/capabilities/capability.registry.register.md
|
||||||
4. Before creating a new capability, search for overlap using the duplicate
|
```
|
||||||
guidance in `registry/README.md`.
|
|
||||||
|
### query
|
||||||
|
|
||||||
|
Filter the capability index by maturity, tags, domain, consumption mode, or keyword.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
reuse-surface query --discovery-min D4
|
||||||
|
reuse-surface query --availability-min A3
|
||||||
|
reuse-surface query --tag identity
|
||||||
|
reuse-surface query --consumption-mode cli
|
||||||
|
reuse-surface query --keyword rollout
|
||||||
|
```
|
||||||
|
|
||||||
|
### export
|
||||||
|
|
||||||
|
Export a machine-readable bundle combining index rows and parsed entry front matter.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
reuse-surface export
|
||||||
|
reuse-surface export --format json
|
||||||
|
```
|
||||||
|
|
||||||
|
## Export format
|
||||||
|
|
||||||
|
The export bundle includes:
|
||||||
|
|
||||||
|
- `version`, `domain`, `updated` from the index
|
||||||
|
- `capabilities[]` with `{ index, entry }` pairs
|
||||||
|
|
||||||
|
Stable IDs and maturity fields are preserved for agent consumption (UC-RS-019).
|
||||||
|
|
||||||
|
## Workflows
|
||||||
|
|
||||||
|
| Workflow | Command |
|
||||||
|
|---|---|
|
||||||
|
| Add capability | template + index update + `reuse-surface validate` |
|
||||||
|
| Discover capabilities | `reuse-surface query` or read the index |
|
||||||
|
| Validate entry shape | `reuse-surface validate` |
|
||||||
|
| Export for agents | `reuse-surface export --format json` |
|
||||||
|
|
||||||
## Related use cases
|
## Related use cases
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ type: workplan
|
|||||||
title: "Close intent-scope gaps: docs, tooling, and registry growth"
|
title: "Close intent-scope gaps: docs, tooling, and registry growth"
|
||||||
domain: helix_forge
|
domain: helix_forge
|
||||||
repo: reuse-surface
|
repo: reuse-surface
|
||||||
status: ready
|
status: finished
|
||||||
owner: codex
|
owner: codex
|
||||||
topic_slug: helix-forge
|
topic_slug: helix-forge
|
||||||
created: "2026-06-15"
|
created: "2026-06-15"
|
||||||
@@ -38,7 +38,7 @@ T01, T04 (documentation — parallel)
|
|||||||
|
|
||||||
```task
|
```task
|
||||||
id: REUSE-WP-0003-T01
|
id: REUSE-WP-0003-T01
|
||||||
status: todo
|
status: done
|
||||||
priority: high
|
priority: high
|
||||||
state_hub_task_id: "51c58b43-7b0f-4737-bf48-51efd6f50ead"
|
state_hub_task_id: "51c58b43-7b0f-4737-bf48-51efd6f50ead"
|
||||||
```
|
```
|
||||||
@@ -56,7 +56,7 @@ Close gap analysis item 1. Update `INTENT.md`:
|
|||||||
|
|
||||||
```task
|
```task
|
||||||
id: REUSE-WP-0003-T02
|
id: REUSE-WP-0003-T02
|
||||||
status: todo
|
status: done
|
||||||
priority: high
|
priority: high
|
||||||
state_hub_task_id: "570a036a-d310-4cb7-9812-594a7f4de904"
|
state_hub_task_id: "570a036a-d310-4cb7-9812-594a7f4de904"
|
||||||
```
|
```
|
||||||
@@ -76,7 +76,7 @@ Close gap analysis item 2 and UC-RS-023. Add a minimal Python CLI under
|
|||||||
|
|
||||||
```task
|
```task
|
||||||
id: REUSE-WP-0003-T03
|
id: REUSE-WP-0003-T03
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "2c59041d-6c27-4610-afc0-c83873e18b9b"
|
state_hub_task_id: "2c59041d-6c27-4610-afc0-c83873e18b9b"
|
||||||
```
|
```
|
||||||
@@ -96,7 +96,7 @@ illustrate a different planning or consumption profile than existing entries.
|
|||||||
|
|
||||||
```task
|
```task
|
||||||
id: REUSE-WP-0003-T04
|
id: REUSE-WP-0003-T04
|
||||||
status: todo
|
status: done
|
||||||
priority: high
|
priority: high
|
||||||
state_hub_task_id: "70077cfe-f5ca-4a61-97b2-81829a6b4565"
|
state_hub_task_id: "70077cfe-f5ca-4a61-97b2-81829a6b4565"
|
||||||
```
|
```
|
||||||
@@ -116,7 +116,7 @@ Do not duplicate the full maturity standard — link to `specs/` instead.
|
|||||||
|
|
||||||
```task
|
```task
|
||||||
id: REUSE-WP-0003-T05
|
id: REUSE-WP-0003-T05
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "22a3db94-21c7-44d6-8d77-5235f9f10537"
|
state_hub_task_id: "22a3db94-21c7-44d6-8d77-5235f9f10537"
|
||||||
```
|
```
|
||||||
@@ -135,7 +135,7 @@ over time (UC-RS-022). Requirements:
|
|||||||
|
|
||||||
```task
|
```task
|
||||||
id: REUSE-WP-0003-T06
|
id: REUSE-WP-0003-T06
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "1958f555-a3a6-46a8-84cd-c570d6706cb3"
|
state_hub_task_id: "1958f555-a3a6-46a8-84cd-c570d6706cb3"
|
||||||
```
|
```
|
||||||
@@ -154,7 +154,7 @@ queries in `registry/README.md` and `AGENTS.md`.
|
|||||||
|
|
||||||
```task
|
```task
|
||||||
id: REUSE-WP-0003-T07
|
id: REUSE-WP-0003-T07
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "6e595b66-ce73-4867-af79-5d0a43a0056d"
|
state_hub_task_id: "6e595b66-ce73-4867-af79-5d0a43a0056d"
|
||||||
```
|
```
|
||||||
@@ -171,7 +171,7 @@ the index and parsed front matter from all capability entries. Requirements:
|
|||||||
|
|
||||||
```task
|
```task
|
||||||
id: REUSE-WP-0003-T08
|
id: REUSE-WP-0003-T08
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "d876f449-68e3-4785-ba3c-7d91c4abbafc"
|
state_hub_task_id: "d876f449-68e3-4785-ba3c-7d91c4abbafc"
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user