Skip to content

extension: publish a queued GraphForge authority artifact #215

Description

@DecisionNerd

Objective

Design and publish an optional peer extension that owns one queued GraphForge handle and exposes bounded remote calls without moving transport, authentication, authorization, or server lifecycle into GraphForge core.

This extension is independently useful to callers that want a remote authority. GraphForge core, repository lifecycle, and the provider-neutral deployment specification in #227 do not depend on it.

Required published contracts

The implementation must publish one versioned, checksum-pinned artifact bundle containing:

  1. an artifact descriptor with extension contract version, immutable artifact kind and URI, semantic version, target platform/architecture, SHA-256 or registry digest, GraphForge compatibility range, and capability inventory;
  2. a selected reference transport contract with bounded request/result/error envelopes, Arrow result representation, caller-owned operation/actor identities, deadlines, payload limits, and exact idempotent retry behavior;
  3. authentication and authorization inputs expressed as secret references or injected values, never embedded credentials, plus a deny-by-default operation policy;
  4. distinct liveness, readiness, health, version, and capability endpoints or probes whose schemas can be consumed without GraphForge project data;
  5. start, stop, drain, restart, upgrade, rollback, and failure-recovery semantics, including the publication point for the single queued authority;
  6. explicit data/ontology initialization hooks that accept only separately authorized external digest-addressed artifacts or sources and never scan or upload a code repository or local .graphforge/state/ implicitly.

The descriptor and every schema must be checked into the repository, versioned, closed where applicable, reproducible from the published artifact, and included in release evidence. Provider credentials and deployment topology remain outside this artifact.

Acceptance criteria

  1. The extension depends only on public GraphForge APIs and never reads or edits project storage internals directly.
  2. One process owns exactly one queued GraphForge handle; all mutations preserve caller-owned operation and actor identities and use exact idempotent replay.
  3. Transport, authentication, authorization, deployment, health/readiness, lifecycle, and result-envelope contracts are independently versioned from the embedded engine.
  4. A clean supported host can install or pull the immutable artifact by digest, start it against an explicitly selected project/data location, pass liveness/readiness/capability checks, execute a bounded read and idempotent write, restart/reopen the project, and produce the same durable result.
  5. Failure injection covers malformed/oversized requests, invalid credentials, incompatible versions/capabilities, duplicate/conflicting idempotency keys, shutdown during an in-flight call, failed startup, and restart after committed publication without creating a second authority.
  6. Publication emits a reusable artifact descriptor and checksums for callers that choose this extension.
  7. No GraphForge core API, storage format, v0.5.0 publication criterion, local repository lifecycle command, feat(dx): add repository-local GraphForge lifecycle CLIs and project skills #219 outcome, or feat(iac): render portable GraphForge core deployment specifications #227 outcome depends on this extension.

Relationships

Non-goals

  • Adding MCP, HTTP, authentication, or server lifecycle to GraphForge core.
  • Multiple storage authorities, distributed consensus, repository synchronization, or implicit data upload.
  • Provider-specific Pulumi/Terraform resources or GraphForge core portability contracts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions