Skip to content

Stack Encrypt refuses the JSON index in a data plan, so the Go SDK cannot seal a json_tree document #1349

Closed

Description

@coderdan

Background

The Go SDK runs the Rust engine inside a WebAssembly guest. Go never encrypts anything itself. It describes each field in a data plan (the field's name, its type and its index), and the engine does the work. This is ADR-0007 and design principle G1, and it is why every language produces the same bytes.

Problem

The engine refuses the JSON index in a data plan. IndexSpec::Json parses, and it then fails with Reason::JsonIndexPending, "the JSON index has no data-plan form yet" (packages/stack-encrypt/src/dynamic/kind.rs, dynamic/mod.rs). Only typed Rust can seal a json_tree document today. Go, and any future language SDK, cannot.

Proposal

  1. Admit IndexSpec::Json, with its options (sealed_root, ordered paths), in the data plan.
  2. Add a json source kind whose value is JSON text.
    • The engine parses it with serde_json, so number handling (2 == 2.0) and key handling stay in Rust.
    • It then seals the value through the same layout the typed path uses.
    • Opening returns JSON text.
  3. Teach the guest's EQL target resolver the family, so the json_tree types become producible.
  4. Tests:
    • A parity test: the same document gives the same terms through the data plan as through typed Rust, and each path opens what the other sealed.
    • The mutants gate on the changed lines.

Depends on the catalog issue.

Plan: docs/plans/2026-10-24-go-json-tree.md, step 2.

Metadata

Metadata

Assignees

Labels

SDKenhancementNew feature or requestneeds-triageMaintainer needs to evaluate the issuerustPull requests that update Rust code

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions