Skip to content

fix(api): preserve CAS graph ownership in workspace publication #1222

Description

@DecisionNerd

A verified public-path blocker for #1218's mixed exploratory/qualified-route regression and #1213's permanent publishing-path assessment under #1194.

At main cddc04c, public resumable construction publishes a CAS graph/files participant. Calling GraphForge::adopt_ontology with an Advisory ontology then fails with PublicationFailed: graph/files v2 root must reference project objects, not a generation graph tree. Reproduced in the #1218 integration fixture before any typed-child construction or delta replay. workspace_ontology::publish_workspace_records_inner treats any graph/files participant as generation-tree ownership and selects parent.graph_tree_root(), despite preserving the CAS participant. Compact publication also requires a graph-object lease through CURRENT.

Searches for ontology/CAS and workspace publication/graph tree found no duplicate. #1219 repaired delta/compaction ownership; this is a distinct workspace publication caller. Two changes remain unmerged (#1218 and #1213), so this bounded blocker fits the three-change WIP limit.

Acceptance:

  • Given a graph published by public construction, Advisory ontology adoption with disjoint new type names (no retained-label promotion) and the existing workspace-record publication path preserve its declared graph ownership, authenticated graph inventory and payload identities. Select a generation tree only for a generation-owned participant; retain the CAS publication lease through CURRENT for CAS participants.
  • Preserve complete participant/capability state, semantic metadata, idempotency, parent-conflict checks and cancellation. Explicit candidate graph-tree transforms retain their own declared ownership. Do not copy/re-encode every graph payload to work around the mismatch.
  • Direct public construction → adoption → reopen evidence, with exact graph values and retained payload identity. Verify the lifecycle needed to append a newly qualified relationship to retained exploratory graph data; the edge replay/schema test remains owned by fix(storage): replay valid exploratory edge fragments without losing route semantics #1218.
  • Focused PR with deterministic ownership and resource evidence, relevant tests, exact-head required CI Gate, independent review and squash merge.

No Parquet policy/default change, compatibility/migration machinery, generic writer abstraction, or unrelated maintenance-facade refresh work. Native sub-issue of #1194, blocking #1194, #1218 and #1213. Existing issue bodies remain the canonical close gates.

Verified scope boundary: same-name ontology promotion rewrites graph authorities and is not an ownership-only workspace record change. A local public construction → adopt matching Node0 ontology reproduces a retained UUID manifest link-ownership failure; an experimental local control/run ownership change then exposes stale v4 ordinal authentication because adoption publishes workspace records before rewriting private graph authorities. Preserve this reproducer under #1221, which owns atomic complete graph/ordinal publication and reader refresh. #1222 must not claim to repair same-name promotion or weaken UUID guards.

The same ownership assumption also occurs in composition preflight: runtime_symbols reads current.graph_tree_root()/topology/runtime_catalog.parquet, returning an empty catalog for CAS and falsely reporting runtime_catalog_generation_drift even after reopen. Include authenticated manifest-selected CAS catalog loading (bounded to that catalog, not graph materialization) and preserve the genuine live-catalog drift rejection. Public composition preview/publication establishes the semantic bindings needed for qualified construction; simple adoption alone does not.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions