Repository navigation
rfc: named targets and CLI coherency - #675
Conversation
Managed queries and mutations can outlast the current 10-second deadline. Allow 30 seconds for connection and the complete response, retaining the 10-second connection limit, 8 MiB response bound, and no redirects or automatic retries. A timed-out mutation can have committed and must be reconciled before resubmission. Prepare the existing load and commit-read transports to use the same bounded response decoder. Managed load limits the exact UTF-8 request to 32 MiB and waits at most 300 seconds for its receipt. This PR does not activate managed routing for load or commit commands. Version-1 signed-grant fixtures retain their existing compatibility contract; they do not require other identity credentials to carry graph permissions. The implemented boundary is recorded in accepted RFC 0053. The broader named-connection proposal in #675 is not part of this change. Upcoming release notes are in v0.12; released v0.11 notes are unchanged. Validation at the rebased head: 14 focused managed unit tests and eight CLI routing tests passed, as did the canonical workspace/failpoint graph with CI's documented 16 MiB debug stack setting. Formatting, documentation checks, spelling and diff checks passed. All GitHub checks are green, including full workspace, GQ, AWS server, both RustFS suites and genuine-version upgrade/format checks. The initial local default-stack overflow in an unchanged cluster test was reproduced and passed with the existing CI setting; no source workaround was added.
Signed credentials currently duplicate graph/action permissions already held in policy. Version 2 credentials authenticate a principal for one cluster; the applied Cedar policy owns graph, schema and configuration permissions. Minimal discovery exposes every effective graph ID/name without granting access to data, schema or query definitions. The shared cluster API authorizes the complete configuration plan against current applied policy, repeats checks under the existing lock, and refuses candidate self-grants, changed bases and pending recovery. Initial policy installation uses an exact first-initialization boundary. The new recovery probe inspects bounded storage metadata without opening or repairing the graph. The CLI preserves complete typed HTTP errors for both `--json` and `--format json`. Denial regressions verify structured errors and unchanged graph snapshots/branch inventory. Compatibility: - Normal managed issuance uses identity-only credentials. Published version-1 restricted credentials remain an explicit OSS compatibility profile and are never silently upgraded. - Direct/static authentication and storage-holder entry points retain their contracts. - Existing policy files need an explicit `config_manage` rule before identity-authorized configuration execution. Public exhaustive policy matches need the new `ConfigManage`/`Cluster` variants. - This change introduces no stored graph format change. It does not implement the configuration proposal in #675. The accepted design is `docs/rfcs/2026-09-09-identity-credentials-and-applied-policy.md`. This PR builds on the merged bounded-transport change in #685. Validation: the JSON-format failure was reproduced before the fix; four focused remote CLI tests and six policy-enforcement cases pass. Formatting, documentation and link checks pass; recovery code and tests use current seam APIs. On the final head, canonical local workspace/failpoint tests pass (3,182 passed, 25 ignored), as do 149 GQT library and 14 runner-dispatch tests. Full workspace, GQ, DST, server AWS, both RustFS suites and format/upgrade CI pass. Locally unconfigured cloud/predecessor fixtures are qualified by their configured CI jobs.
|
The 0.13 audit leaves a smaller unresolved scope here. #878 replaced the deployment/CLI baseline, and #676 already covered part of the targeting problem. The draft must be rewritten before acceptance; it should not merge as written or be closed as implemented. Carry forward explicit managed data connections/profiles/aliases, independently selected endpoint/credential binding, and the tests that prove destination and credential choice. Keep #653 as its separate served-catalog feature. Rebase the design on the current v2 identity and |
|
@aaltshuler, a heads-up on a decision in #1017 that touches 0059. There is nothing for you to approve; I'd like you to have the reasoning before your next revision. #1017 now defines
Why. Studio has to add servers. Without a CLI writer it can only write Where #1017 follows 0059 as of When 0059 is accepted, it would help if its "no administration group" line named Details: Targets for clients in #1017. |
|
Heads-up: #1080 (draft) implements named targets on the format sketched here, as an additive first step for the graph access RFC (#1017, its "Targets" phase). Everything in it is provisional until this RFC accepts the serialized format, so please redirect anything that should change. What it reads: target_config_version: 1
defaults:
target: staging
targets:
local: {kind: direct, scope: graph, uri: file:///Users/me/company.omni}
ops: {kind: direct, scope: root, uri: s3://company-data/omnigraph, default_graph: knowledge}
staging: {kind: server, endpoint: https://staging.example, credential: staging, default_graph: knowledge}
public: {kind: server, endpoint: https://public.example, auth: anonymous}Choices worth your eye:
|
…inistration One release ships the target contract and removes every retired selector, routing section and their commands, with no compatibility adapters and no mixed-format operator file; `target import` converts a legacy file and `--quiet` is removed. `--target` also takes an inline address, a storage path or URI or a server endpoint, as a complete binding scoped from the command line alone. An inline server carries a token only under a configured owner's endpoint scope, an inline cloud URI captures its provider settings once for the invocation, `init URI` is the positional form and managed destinations stay named. `target list|show|add|remove|import` and `credential get` edit and read operator config and the credentials file; none selects a target or sets the default.
|
Pushed bf9bcce with three decisions from Ragnor:
The decision log records them, and the compatibility, test and rollout sections follow. #1080 implements the schema, validation, endpoint-bound credentials and administration commands for direct and server targets. |
Accept RFC 0059's breaking CLI target contract for 0.14.0: select one complete destination through
--target NAME|ADDRESS, otherwisedefaults.target, otherwise refuse. Keep--configfor source input, retaininit URI, and remove legacy selectors and routing through one explicittarget importmigration.The RFC defines endpoint-bound credentials, bootstrap and source-free recovery, canonical binding identity, target/credential protocol discovery, and captured provider settings shared by control storage and Lance. It updates the seven earlier RFCs whose routing sections this decision replaces. Existing command families remain; access reporting, local serving and the CLI MCP bridge are separate work.
This PR accepts the design only. Implementation remains in progress in #1090 and must complete its provider-boundary, protocol, reporting and current-main qualification before release. #1080 was closed in favor of that implementation.
Validation: documentation checker (350 Markdown files), AGENTS/document index checks, spelling checks on all changed documents, and
git diff --check. A separate coherence review found no documentation merge blocker. No runtime code changes or new runtime-test claims.