All runbooks
runbookuapiredacted view

UAPI GLM 5.2 Storage Route Schema Impact 2026-06-22

GLM schema impact review for candidate storage routes across PlacementDecision, RunRecord, ResultPacket, GateRecord, and PolicyBundle.

Updated 2026-06-22·Freshness: Reference·Sensitive tokens or credentials were hidden before display.

UAPI GLM 5.2 Storage Route Schema Impact 2026-06-22

GLM schema impact review for candidate storage routes across PlacementDecision, RunRecord, ResultPacket, GateRecord, and PolicyBundle.

Promotion Metadata

  • Source feedback id: 145
  • Source feedback ids: 145
  • Promotion request id: 76
  • Feedback category: beneficial
  • Feedback source: codex-forge-storage-wave5-2026-06-22
  • Feedback created at: 2026-06-22T19:52:20.515836+00:00
  • Target slug: [REDACTED:high-entropy]
  • Review state: review
  • Reviewer note: AI lane auto-promoted redacted feedback into internal catalog context.

Source Feedback Body

Feedback 145

  • Product: uapi
  • Category: beneficial
  • Related slug: [REDACTED:high-entropy]
  • Source: codex-forge-storage-wave5-2026-06-22
  • Created at: 2026-06-22T19:52:20.515836+00:00

GLM 5.2 — Storage Route Schema Impact

Date: 2026-06-22 Lane: Unified storage schema impact (first wedge) Sources: forge-sn850x-storage-policy-gate-v0, codex-contract-decisions-v0-2, glm52-first-wedge-type-contract-pack, glm52-event-lineage-test-fixtures, agent-work-queue-v3-forge-storage. Authority: GLM Worker E artifact only. No codebase edits, no Explorer auth, no writes. Assumptions: Codex v0.2 fields stable. Storage route candidates are name-only.

Storage Route State

Forge SN850X at /mnt/skip_data is candidate_storage_only. Approved candidates: forge.storage.sn850x.skip_data, storage.fast.sn850x. No writes/exports/scratch use approved. Eight policy items must land before any use; this artifact addresses item #8 (UAPI representation in PlacementDecision and RunRecord).

Schema Impact

PlacementDecision

Not in v0.2 type pack. Adds: (a) Decision records which storage route (if any) placement targets, even when deny. (b) Placement Gate emits deny with explicit denied_reason when a job requests a route lacking approved PolicyBundle. Prevents silent fallback to local scratch.

New fields (sibling artifact): storage_route_id, mount_policy_ref, quota_ref, retention_policy_ref, evidence_ref, denied_reason.

RunRecord

Required by v3 queue. Must carry storage route chosen at placement so post-hoc audit can reconstruct where outputs were intended to land. Proposed lineage fields: - storage_route_id (copies PlacementDecision.storage_route_id) - placement_decision_ref (UUID) - mount_path (read-only informational; never used for write decisions) - policy_bundle_ref

Without these, audits cannot answer "which route did this run target?" if route is later renamed.

ResultPacket

Current lineage: adapter_id, route_candidate_id, gate_decision_id, correlation_id, submit_timestamp. route_candidate_id must be one of approved candidates. No new field required.

Constraint: Acceptance Gate should reject any ResultPacket whose route_candidate_id is not in approved candidate set. Proposed as new check #6 on existing five. Shape check, not write approval.

GateRecord

evidence_ref: Option<String> in v0.2. Storage policy gates (mount, quota, retention) must populate with stable URI to policy document. Example: policy://forge-sn850x/storage-policy-gate-v0#allowed-dirs.

Blocker from type pack: evidence_ref storage location undefined. This artifact proposes policy:// URI scheme resolved against PolicyBundle registry.

PolicyBundle

New concept. Versioned document answering the eight required-policy items from storage-policy-gate v0 for one route. Key fields: bundle_id, storage_route_id, version (semver), owner (#1), allowed_dirs (#2), quota_refs (#3), retention_refs (#4), audit_log_shape (#5), allowed_kinds (#6), export_allowed (#7), rollback_plan_ref (#9), status ∈ {candidate, approved, superseded, revoked}. Placement Gate must deny any job whose target route lacks status=approved. SN850X today: candidate only.

Cross-Type Invariants

  1. storage_route_id constant from PlacementDecision → RunRecord → ResultPacket.route_candidate_id → storage-gate GateRecord.evidence_ref.
  2. No type may carry storage_route_id not in approved candidate set.
  3. PolicyBundle.version captured at placement time so audits do not drift.

Blockers

  • PlacementDecision and RunRecord structs not in Codex v0.2 type pack.
  • evidence_ref storage location still undefined (Codex).
  • No approved PolicyBundle for SN850X; only candidate state.
  • Acceptance Check #6 (route_candidate_id whitelist) not yet blessed.

Next Handoff

→ Codex: bless PlacementDecision/RunRecord structs and Acceptance Check #6. → GLM Worker D: extend mock fixtures with a policy:// evidence_ref sample once URI scheme confirmed.

COMPLETE.