feat(runner): prepare held Pi 1 production admission

Replay the inactive Pi-only admission patch on the frozen Pi 1.0.0 source, preserving profile 11, its exact digest and all native closure inputs. Cursor and Copilot remain gated. This local preparation requires complete qualification and rebuilt normal-mode acceptance before activation.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-10-01 15:45:57 -05:00
1 parent 5eba61ece9
commit 89284e2905
27 files changed
+191 -52

No files matched your search

@@ -7562,7 +7562,7 @@ async function executePaperclipNativeSessionWithinScope(
}
if (
input.execution.provider.kind === "acpx" &&
["pi", "cursor", "copilot"].includes(input.execution.provider.agent) &&
["cursor", "copilot"].includes(input.execution.provider.agent) &&
!resolveAcpxQualification(input.execution.provider, process.env)
) {
throw new Error(
@@ -9579,7 +9579,7 @@ type RemoteProviderPackManifest = {
bridgeDigest: string;
acpxProfileDigests: typeof REMOTE_PROVIDER_PACK_PROFILE_DIGESTS;
candidateProviders?: Partial<Record<"cursor" | "copilot" | "pi", {
version: string; profileDigest: string; closureDigest: string; qualification: "pending";
version: string; profileDigest: string; closureDigest: string; qualification: "pending" | "qualified";
path: string; sha256: string;
}>>;
artifacts: {
@@ -9755,7 +9755,10 @@ export function readRemoteProviderPackManifest(
const expectedPath = `provider-assets/${provider}/${payload.target.platform}-${payload.target.architecture}`;
if (!["cursor", "copilot", "pi"].includes(provider) || !candidate
|| Object.keys(candidate).some(key => !["version", "profileDigest", "closureDigest", "qualification", "path", "sha256"].includes(key))
|| candidate.qualification !== "pending" || candidate.path !== expectedPath
// Inventory metadata never grants admission; local profile declarations do.
// Preserve shared packs built before Pi promotion for other qualified providers.
|| (candidate.qualification !== "pending" && !(provider === "pi" && candidate.qualification === "qualified"))
|| candidate.path !== expectedPath
|| typeof candidate.version !== "string" || !candidate.version || candidate.version.length > 120
|| !/^sha256:[a-f0-9]{64}$/.test(candidate.profileDigest)
|| !/^sha256:[a-f0-9]{64}$/.test(candidate.closureDigest)
@@ -12633,7 +12636,9 @@ async function createRunnerdBackendWithinSessionClaim(
? {
acpxAgent: input.execution.provider.agent,
// Read only the server operator environment, never agent/runtime env.
acpxCandidateProfile: resolveAcpxQualification(input.execution.provider, process.env),
acpxCandidateProfile: input.execution.provider.agent === "pi"
? undefined
: resolveAcpxQualification(input.execution.provider, process.env),
acpxPermissionMode: input.execution.provider.permissionMode,
acpxCursorMode: input.execution.provider.cursorMode,
acpxPermissionModePinned: