fix: put the settings card on the Plugins page with a browser half
Release / release (push) Successful in 6s
Release / release (push) Successful in 6s
The `volatile()` markers made the Host serve the namespace, and that was as far as it went: the Plugins page does not build a card from a `Config` schema. It draws only what browser halves register into the slots it declares, which is why dsh-slopo, dsh-recall and dsh-context all ship a `client/` — and why this plugin, with two served fields, still showed nothing. The card registers into `plugins.bundle.config` while `configForms.whileServed` reports the namespace served. The two keys are deliberately different strings and that is the trap in the file: the settings document is filed under the profile entry id (`facet-policy`) while the card is keyed by the package name (`dsh-facet`). Every sibling plugin happens to name them identically. Binding the form to the wrong one yields a card that renders, saves, and writes nowhere, so `test/client.test.js` pins both, holds the card's field list to the schema's volatile fields, and refuses to register at all when the namespace is not served.
This commit is contained in:
1 parent
e860ac2989
commit
1be3a67b97
4 files changed
+563
-7
No files matched your search
@@ -188,12 +188,13 @@ Honest boundaries, because each one is a decision rather than an oversight:
|
||||
|
||||
Verified:
|
||||
|
||||
- 45 tests (`npm test`) over the scope algebra, the policy state, and the guard —
|
||||
including that containment is decided on canonical targets (a symlink inside
|
||||
the facet pointing outside it is refused), that a prefix is not a parent
|
||||
(`/a/room` does not contain `/a/roommate`), that a malformed tool call never
|
||||
makes the guard throw, and that every `facet` result satisfies the tool's own
|
||||
declared output schema.
|
||||
- 53 tests (`npm test`) over the scope algebra, the policy state, the guard, and
|
||||
the browser half — including that containment is decided on canonical targets
|
||||
(a symlink inside the facet pointing outside it is refused), that a prefix is
|
||||
not a parent (`/a/room` does not contain `/a/roommate`), that a malformed tool
|
||||
call never makes the guard throw, that a live `mode` edit decides the next call
|
||||
without the guard being remounted, and that every `facet` result satisfies the
|
||||
tool's own declared output schema.
|
||||
- The bundle's patch layers parse, merge and land correctly against the real
|
||||
profile: `dsh --profile web --patch ./cordis.patch.yml --patch
|
||||
./presets/facet.patch.yml --dump-config` shows `facet-policy`, `preset-facet`,
|
||||
@@ -263,14 +264,29 @@ it.
|
||||
|
||||
```
|
||||
index.js host row: the policy, published as ctx.facetPolicy
|
||||
client/client.js browser half: the settings card on the Plugins page
|
||||
lib/policy.js the stateful half — scope resolution, grants
|
||||
lib/scope.js the pure half — argument extraction, text, reasons
|
||||
lib/guard.js preset row: rule, binding, tool, pre-execute guard
|
||||
presets/facet.patch.yml the `facet` agent preset
|
||||
presets/standard-compaction.patch.yml optional: the same budget for `standard`
|
||||
test/ 45 tests
|
||||
test/ 53 tests
|
||||
```
|
||||
|
||||
`client/client.js` is a browser half rather than a module the host imports, and
|
||||
it is not optional decoration. The Plugins page does not build a card from a
|
||||
`Config` schema — it draws only what browser halves register into the slots it
|
||||
declares. `volatile()` on the host schema makes the namespace *servable*
|
||||
(`settings.describe()` drops an entry with none, and the card registers only
|
||||
while the namespace is served), but a schema alone puts nothing on the page.
|
||||
|
||||
The two keys in that file are deliberately different strings, and that is the
|
||||
easy mistake to make here: the settings **document** is filed under the profile
|
||||
entry id (`facet-policy`, the row's `id` in `cordis.patch.yml`) while the
|
||||
**card** is keyed by the package name (`dsh-facet`). Every sibling plugin
|
||||
happens to name them identically, so binding the form to the wrong one produces
|
||||
a card that renders, saves, and writes nowhere. `test/client.test.js` pins both.
|
||||
|
||||
## Also in this repository
|
||||
|
||||
- [`facet-preset.md`](../facet-preset.md) — the design note this was built from,
|
||||
|
||||
Reference in new issue
Block a user