Make install + surface read the registry's derived profileMembership/ capabilityClusters so a capability's tier drives what installs + surfaces. resolveProfile (when given the registry) unions capability skills for the profiles its tier implies before the requires: closure; resolveSurface merges capabilityClusters into the cluster map. bin/install.js, /gsd:surface, and the capability-state resolver all thread the registry. Shipped as a proven no-op: the UI capability is reconciled to tier:full (its skills were full-only in the hand-authored profiles), so it contributes only to the full profile (already the '*' sentinel) and core/standard are unchanged. Equivalence tests prove resolveProfile/resolveSurface/listSurface/staging/ capability-state are identical with vs without the registry; the core-alias staging path is verified equivalent (empty manifest → raw PROFILES.core). Closes #949 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -36,8 +36,12 @@ Parse the first token of $ARGUMENTS:
|
||||
|
||||
## list / status
|
||||
|
||||
Call `listSurface(runtimeConfigDir, manifest, CLUSTERS)` from
|
||||
`gsd-core/bin/lib/surface.cjs`. Display:
|
||||
Load the capability registry and call `listSurface(runtimeConfigDir, manifest, CLUSTERS, registry)` from
|
||||
`gsd-core/bin/lib/surface.cjs`. The registry is loaded via:
|
||||
```js
|
||||
const registry = require('gsd-core/bin/lib/capability-registry.cjs');
|
||||
```
|
||||
Display:
|
||||
|
||||
```
|
||||
Enabled (N skills, ~T tokens):
|
||||
@@ -67,8 +71,9 @@ Install profile: standard (from .gsd-profile)
|
||||
3. `writeSurface(runtimeConfigDir, surfaceState)`.
|
||||
4. Resolve and re-apply:
|
||||
```js
|
||||
const registry = require('gsd-core/bin/lib/capability-registry.cjs');
|
||||
const layout = resolveRuntimeArtifactLayout(runtime, runtimeConfigDir, scope);
|
||||
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS);
|
||||
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS, registry);
|
||||
```
|
||||
5. Confirm: "Surface updated to profile `<name>`. N skills enabled."
|
||||
|
||||
@@ -84,8 +89,9 @@ Valid cluster names: `core_loop`, `audit_review`, `milestone`, `research_ideate`
|
||||
3. Add cluster to `surfaceState.disabledClusters` (deduplicate).
|
||||
4. `writeSurface` → resolve layout → `applySurface`:
|
||||
```js
|
||||
const registry = require('gsd-core/bin/lib/capability-registry.cjs');
|
||||
const layout = resolveRuntimeArtifactLayout(runtime, runtimeConfigDir, scope);
|
||||
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS);
|
||||
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS, registry);
|
||||
```
|
||||
5. Confirm: "Disabled cluster `<cluster>`. N skills removed from surface."
|
||||
|
||||
@@ -97,8 +103,9 @@ Valid cluster names: `core_loop`, `audit_review`, `milestone`, `research_ideate`
|
||||
2. Remove cluster from `surfaceState.disabledClusters`.
|
||||
3. `writeSurface` → resolve layout → `applySurface`:
|
||||
```js
|
||||
const registry = require('gsd-core/bin/lib/capability-registry.cjs');
|
||||
const layout = resolveRuntimeArtifactLayout(runtime, runtimeConfigDir, scope);
|
||||
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS);
|
||||
applySurface(runtimeConfigDir, layout, manifest, CLUSTERS, registry);
|
||||
```
|
||||
4. Confirm: "Enabled cluster `<cluster>`. N skills added back to surface."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user