fix: preserve string and table Profile scope authoring (T-710)

Resolve MR sequence 5 profile_authoring_rejects_valid_string_scope_intents. Decodal 0.4 has no union constraint: retain an opaque scope range with non-materialized table completion hints so string intents remain valid. Keep shared Backend semantic validation authoritative for scope forms/types/unknown keys without changing persisted values or weakening worker/feature editor diagnostics.

Prove actual-provider native/WASM scalar/table, inline/import/patch, nested intent/deny_write/symlink_policy completion and evaluation invariance. Add real save/projection/Runtime scope equivalence and invalid-scope save non-loss coverage. Regenerated WASM artifact is byte-identical; the changed shape is transported via the fingerprint-bound Backend schema metadata.

Validation: root cargo check; config-source39; value_profiles4; unfiltered server643+11; worker-runtime340+17+17; server-api --features typescript77; wasm32 release/wasm-bindgen0.2.117/Binaryen132 -Oz; Deno39; deno task check0/0; fmt/diff checks. Logs target/t710-scope-{check,server,server-api,runtime}.log. No target/ref integration changes.
This commit is contained in:
2026-10-07 02:25:16 +09:00
parent 3558e4aae1
commit 61f0469986
5 changed files with 258 additions and 5 deletions
@@ -12,7 +12,11 @@ let
enabled = Bool; model = Model; reasoning = String;
threshold = Int; worker_max_turns = Int;
};
Scope = { intent = String; deny_write = [...String]; symlink_policy = String; };
# Profile scope accepts either a string intent or a table. Decodal 0.4 has
# no union range; keep this field opaque to constraint analysis and expose
# the table only as a completion hint. This shape is never materialized;
# actual scope forms, intent values and table fields are checked on save.
Scope = Unknown default { intent = String; deny_write = [...String]; symlink_policy = String; };
Profile = {
slug = String;
description = String;