Skip to content

Experimental line: evaluate reusable subgraphs per RFC 0022 (spec #129) #307

Open

Description

@kikashy

Readiness update — 2026-10-23

Spec #233 was resolved by Judgment-Pack/judgment-pack-spec#242. At Spec commit 65c7cf5598a0f0fc532c80a9e2215090951104ce, RFC 0022 now specifies inclusive depth 4 and removes the provisional 256-leaf budget. It explicitly says adoption must first state the expanded graph's numeric node maximum in RFC 0002's graph schema. RFC 0002 still supplies no such portable numeric maximum, so the issue's existing "not before" gate is not fully met.

The current Runtime experimental graph schema already has nodes.maxProperties: 64 and edges.maxItems: 256. That local format-1 schema is implementation evidence, not authority to choose the new portable maximum. RFC 0022's claim that the reference Runtime has no numeric node maximum is stale and should be corrected alongside the upstream graph-bound decision.

Next unblock: name the graph schema maximum in RFC 0002, align RFC 0022 with the actual Runtime schema, and pin the resulting contract before implementation. The new closed input/reference surface also needs deliberate format/config/lock versioning, transitive exact-byte pins and reviewed-set coverage, pre-evaluation cycle/depth/expanded-size refusal, and preserved route provenance. No implementation milestone is assigned until the upstream numeric gate is resolved, as the original request requires.

Sources: RFC 0022 §5, current Runtime graph schema.

Original request

The specification decided the reusable subgraph contract on Judgment-Pack/judgment-pack-spec#129 (2026-10-22), recorded as RFC 0022 (Judgment-Pack/judgment-pack-spec#135). The decision calls the runtime implementation a separate experimental line. This issue is that line's entry; it is not milestoned until the record's revision lands (the spec follow-up filed with this issue) and the bounds carry their numbers.

The contract as decided. A subgraph is a graph with a declared interface (inputs.facts, inputs.evidence, outputs, result), referenced by a parent node by name and pinned digest over the exact loaded bytes, expanded at load with prefixed node ids; no recursion, depth at most 4, the graph's node limit kept over the expanded graph; an expansion is recorded as such, so a copy is never mistaken for a reference; an inner unresolved disposition surfaces at the interface with its reasons, handoffs are collected under their originating node; a subgraph is reviewed and locked as its own artifact, and on the decided surface the reviewed-set lock covers the parent, every referenced subgraph and every pack, transitively.

Where it would live. The graph engine on the experimental surface; the project's graphs table beside the packs it declares; the reviewed-set lock's transitive coverage; the composite result envelope with Core §8.3 dispositions at every output boundary and the four §8.4 error classes unchanged.

Not before. The record's §5 bounds are being aligned with the decision (depth 4, node limit, schema maxima) and its §7 envelope with the routes decision; the engine follows the revised text, not the Draft as first landed.

Activity

  1. added
    enhancementNew feature or request
    specTouches JPS conformance or normative behavior
    on Oct 22, 2026
  2. self-assigned this
    on Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestspecTouches JPS conformance or normative behavior

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions