OACP Runtime Launch Closure PRD
Status date: 2026-10-20
This is the canonical Grantex closure PRD for the OACP Shopify merchant runtime. Older Commerce V1 C6/C6W/C6X/C6Y documents are historical/internal compatibility records and are superseded for launch decisions by this OACP guide set.
Status On 2026-10-20
Merged to main and deployed
The OACP closure work landed in six pull requests on 2026-10-20 (#1790 Phase 1, #1791, #1792 Phase 2, #1793 Phase 3, #1794 Phase 4, #1795 Phase 5). A merge to main deploys the auth service; main at b9ef3f14 is deployed. What that code does:
Not yet turned on in production
Deployed code is not the same as a live path. On 2026-10-20:
- The production JWKS (
https://api.grantex.dev/.well-known/jwks.json) lists no oacp- key. Until an operator creates one, every artifact and mandate issuance in production answers 503 oacp_issuer_key_unavailable.
OACP_STATUS_LIST_PUBLIC_ENABLED is off: GET /status/oacp/:list is not served (it answers 401). Relying parties, including AgenticOrg, therefore refuse every artifact and mandate with revocation_status_unavailable.
OACP_PUBLIC_DISCOVERY_ISSUANCE_ENABLED, HTTP_SIGNATURE_DIRECTORY_ENABLED, REGISTRY_SCHEME_AGENT_IDS_ENABLED and AGENT_PASSPORT_KYA_TIER_ENABLED are at their default, off.
- AgenticOrg verifies Grantex artifacts before caching them (merged in AgenticOrg). Its arbiter and ledger, UCP / ACP surfaces, mandate client, payment executor and request-signing work are still in review in AgenticOrg, each behind its own flag that defaults off.
The turn-on order is in the operator runbook: first OACP issuer key, then OACP_STATUS_LIST_PUBLIC_ENABLED, then AgenticOrg.
Corrected Architecture
Grantex owns trust, protocol, policy, canonical OACP artifacts, mandates, verification, adapter governance, and the AgenticOrg service-token/tenant allowlist. AgenticOrg owns runtime, connectors, buyer surfaces, artifact cache, public catalog pages, buyer conversations, the purchase decision (its policy arbiter) and provider-owned handoff orchestration. Merchant systems remain source of record. Pine Labs Plural/P3P, POS, bank, and payment providers own execution.
Grantex must not become a toll booth for every buyer/seller interaction. AgenticOrg may answer non-binding buyer questions from valid cached artifacts and must refresh or refuse commitment-bound flows when artifacts, provider evidence, or merchant source state are stale. A purchase does call Grantex: for its mandates and for the countersignature of the arbiter’s decision.
Canonical Authority Route
POST /v1/commerce/oacp/c6z/authority-requests
Accepts:
- allowlisted AgenticOrg service token, or an operator of the same commerce tenant;
- tenant, merchant, seller agent scope;
- Shopify read-only connector evidence refs and counts;
- source observed timestamp and bounded freshness policy;
- requested 11 OACP artifact families;
- non-enablement flags, or the public discovery opt-in (
public_discovery_requested, namespace_attestation_ref, serving_host);
- optional
mandate_capability_evidence from the provider capability verifier.
Rejects or blocks:
- missing tenant/service-token allowlist;
- invalid token;
- stale evidence;
- raw Shopify/provider/POS payloads;
- secrets, credentials, checkout links, payment links, or raw provider callbacks;
- execution targets or certification/standardization claims.
Returns:
201 artifact_issuance_ready with 11 ES256-signed artifact families;
202 received when connector evidence is not yet attached;
403 service_tenant_not_allowed for non-allowlisted service tenant;
422 for unsafe, stale, malformed, or executable requests (recorded, with refusal_record_id);
503 oacp_issuer_key_unavailable when no OACP issuer key is active.
Every issued artifact must carry:
- source lineage;
- TTL seconds;
- freshness status and stale behavior;
- revocation posture;
- blocked and unsupported capabilities;
- non-sensitive evidence refs only;
- an ES256 detached JWS signature (
oacp-artifact+jws) and a Token Status List entry;
- no raw Shopify payloads;
- no raw provider payloads;
- no payment credentials;
- no connector secrets;
- no live checkout/payment/order/POS success claim.
The C6Z authority implementation lives in:
apps/auth-service/src/lib/commerce/oacp-runtime-vertical.ts
apps/auth-service/src/routes/commerce-oacp-runtime.ts
apps/auth-service/tests/commerce-c6z-runtime-artifact-authority.test.ts
Operator Provisioning
The full steps, including the production turn-on order, are in the operator runbook. In short:
- Create or rotate
COMMERCE_C6Z_AUTHORITY_SERVICE_TOKEN through the production secret path.
- Add the AgenticOrg tenant id to
COMMERCE_C6Z_AUTHORITY_SERVICE_TENANTS.
- Restart or redeploy the Grantex auth service with the updated secret and allowlist.
- Create the first OACP issuer key (
POST /v1/commerce/oacp/issuer-keys/rotate).
- Turn on
OACP_STATUS_LIST_PUBLIC_ENABLED.
- Run a fixture authority request for that tenant and confirm
artifact_count = 11, or record the exact blocker.
- Remove the tenant from the allowlist to roll back.
Example local smoke:
Closure Checklist
Validation Commands
With a disposable Postgres (AUDIT_INTEGRATION_DATABASE_URL), also run commerce-oacp-artifacts-postgres.integration.test.ts and commerce-oacp-mandates-postgres.integration.test.ts.
Launch Readiness Rule
Grantex is launch-ready for this vertical only when the production issuer key exists, the public status list is on, AgenticOrg has a real Shopify merchant/dev-store evidence run, and Grantex returns either valid 11-family artifacts that AgenticOrg verifies or an exact refusal through the canonical authority route, with no raw secrets or raw private payloads stored or logged. Public standards approval, ChatGPT/Gemini listing approval, WhatsApp/Telegram approval, Plural provider approval, and POS provider approval remain external blockers unless separately proven.
Ownership
Grantex is owned by Orchestrum Technologies LLP. Inventor and owner: Sanjeev Kumar. Ownership contact: sanjeev@orchestrum.in or mishra.sanjeev@gmail.com.Last modified on October 25, 2026