mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-21 16:27:18 +02:00
Preserve literal Pi validation commands through task creation
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
31d688e389
commit
e722b116f1
5 files changed
+40
-6
No files matched your search
@@ -5,6 +5,30 @@ set of release gates. Pi remains a candidate until every required gate passes.
|
||||
Keep behavioral qualification on the accepted fixtures. Do not expand it to
|
||||
widgets, images, Cursor or Copilot qualification. The existing draft stack must be reviewed in dependency order.
|
||||
|
||||
## Current delivery scope — 2026-10-08
|
||||
|
||||
The user narrowed this delivery to normal task completion and interactive
|
||||
controls. Accounting and the broad release matrix are deferred. The finish line
|
||||
is one real file edit, successful command validation, registered public download,
|
||||
Done and a succeeded native run; three follow-up turns with continuity; browser
|
||||
questions and answers; plan approval; same-turn steering and denial; Stop; and
|
||||
controller recovery with the original native question and run. Use the retained
|
||||
`b696e131ae32a82418e570b32f4727b5adb14e49` packages and cloud image, the approved
|
||||
Sonnet 4.6 fixture and low thinking. No local Docker, provider expansion, image
|
||||
rebuild, or accounting change is needed for this scope.
|
||||
|
||||
The first current-cloud file attempt, `pi-core-0-1791470050`, edited, validated,
|
||||
published and finished through the real product. Its strict definition-4 grade
|
||||
is failed: the public task description escaped the unfenced validation command
|
||||
as Markdown paragraph text; the first Bash invocation had a syntax error, then
|
||||
Pi repaired it and ran a second command. The exact post-edit and downloaded
|
||||
bytes match, production copy-back finalized, and the issue/run reached
|
||||
Done/succeeded. Do not change this grade or count it as qualification. All 41
|
||||
canonical files (91,468,056 bytes) are retained with archive SHA-256
|
||||
`065146a206da9f29b50999b5d931b54402edd5d30a516895a7ab8fb95e8a6029`;
|
||||
independent process and scratch cleanup pass. Definition 5 fences the unchanged
|
||||
command for literal Markdown paste; the one-command grader stays unchanged.
|
||||
|
||||
## Correct cloud memory-read authority — 2026-10-08
|
||||
|
||||
Frozen runtime/image `b696e131ae32a82418e570b32f4727b5adb14e49` passes all
|
||||
@@ -2409,7 +2433,7 @@ Keep rollout held until every release gate is proven.
|
||||
and supersede once the tested correction is frozen. No workflow edit, lockfile
|
||||
commit, new model, fallback key, merge or release occurs.
|
||||
|
||||
## Remaining work in order
|
||||
## Broader release follow-ups — deferred for current delivery
|
||||
|
||||
1. Cloud memory acceptance is complete for the frozen `b696e131ae32a82418e570b32f4727b5adb14e49`
|
||||
runtime/image and definition-22 harness `da8d4454ae165b557ff11730e9fe018c9b1cd9b9`.
|
||||
|
||||
@@ -391,8 +391,11 @@ requires one native edit lifecycle followed by exactly one successful native
|
||||
bash execution with the exact nonce-bound byte-validation command as its
|
||||
projected title and a validation marker. A marker-only echo cannot pass. Final bytes must
|
||||
match the fixture. The Pi task prompt explicitly forbids additional shell calls,
|
||||
including metadata commands, and supplies the expected post-edit byte size and
|
||||
hash for registration. Extra Bash calls fail the unchanged oracle even when the
|
||||
including metadata commands and repair attempts. It supplies the expected post-edit
|
||||
byte size and hash for registration. Extended definition 5 places the exact command in a
|
||||
fenced Bash block so the production Markdown editor preserves its operators and
|
||||
literal escapes. Definition 4's escaped-paragraph attempt keeps its failed grade.
|
||||
Extra Bash calls fail the unchanged oracle even when the
|
||||
edited file and downloadable artifact are correct. Extended definition 4 makes
|
||||
Pi's artifact title equal the exact filename required by the shared registered
|
||||
artifact check. Definition 3 attempts retain their original definitions and
|
||||
|
||||
@@ -1223,7 +1223,7 @@ export const runnerSuites: readonly RunnerSuiteFixture[] = [
|
||||
groups: ["native"], profiles: extendedHarnessProfiles, environments: runnerEnvironments,
|
||||
tasks: [...openRouterBreadthTasks, localIntegrityTasks[1]!, extendedHarnessFileTask],
|
||||
expectedMatrixSize: 30,
|
||||
definitionMetadata: { version: 4, qualification: "pending", scheduling: "explicit-only", admission: "host-exact-candidate-and-model", authenticatedDiscoveryDate: "2026-09-28", piFileEvidence: "seed-edit-single-execute-public-download-v2", piFileArtifactTitle: "exact-filename" },
|
||||
definitionMetadata: { version: 5, qualification: "pending", scheduling: "explicit-only", admission: "host-exact-candidate-and-model", authenticatedDiscoveryDate: "2026-09-28", piFileEvidence: "seed-edit-single-execute-public-download-v2", piFileArtifactTitle: "exact-filename", piFileCommandTransport: "fenced-bash-markdown-paste" },
|
||||
},
|
||||
{
|
||||
id: "instruction-persistence", label: "Instruction Persistence",
|
||||
|
||||
@@ -5,7 +5,7 @@ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { dirname, join } from "node:path";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { collectPiFileEvidence, gradePiCopyback, gradePiFileEvidence, piFileContract, seedPiFile } from "./pi-file-evidence.js";
|
||||
import { collectPiFileEvidence, gradePiCopyback, gradePiFileEvidence, piFileContract, piFilePrompt, seedPiFile } from "./pi-file-evidence.js";
|
||||
import { canonicalProviderEventsFromAcpxRuntimeEvent, createAcpxToolEventNormalizer } from "../../packages/paperclip-runner/src/provider-events.js";
|
||||
import { safeAcpxLocations } from "../../packages/paperclip-runner/src/drivers/acpx/safe-locations.js";
|
||||
import { classifyFailure } from "./failure-classifier.js";
|
||||
@@ -186,6 +186,13 @@ describe("Pi edit, validation and public artifact oracle", () => {
|
||||
await expect(validate()).rejects.toMatchObject({ code: 1 });
|
||||
} finally { await rm(root, { recursive: true, force: true }); }
|
||||
});
|
||||
it("pastes the literal validation command as Markdown code instead of escaped paragraph text", () => {
|
||||
const command = piFileContract("0123456789ab-1").validationCommand;
|
||||
const fenced = piFilePrompt("0123456789ab-1").match(/\n```bash\n([^\n]+)\n```\n/u);
|
||||
expect(fenced?.[1]).toBe(command);
|
||||
expect(fenced?.[1]).toContain("!==");
|
||||
expect(fenced?.[1]).not.toContain("!\\=\\=");
|
||||
});
|
||||
it("changes only Pi file prompts and keeps all four question methods", () => {
|
||||
const cells = runnerMatrix.filter(c => c.suite.id === "extended-harnesses" && c.task.id === "file-edit-validate");
|
||||
expect(cells).toHaveLength(6);
|
||||
|
||||
@@ -21,7 +21,7 @@ export function piFilePrompt(nonce: string) {
|
||||
const c = piFileContract(nonce);
|
||||
return [
|
||||
`The fixture has already created ${c.filename} in your execution workspace with exactly ${JSON.stringify(c.before)}. Read it, then use your native edit tool once to replace those bytes with exactly ${JSON.stringify(c.after)}. Do not substitute write, bash, or an API for the edit.`,
|
||||
`Run this exact native bash command exactly once, without an added shell prefix or suffix:\n${c.validationCommand}\nIt independently reads the file, fails on incorrect bytes, and prints the validation marker only after success. This is the only bash call allowed for this task; do not run any other shell commands.`,
|
||||
`Run this exact native bash command exactly once, without an added shell prefix or suffix:\n\`\`\`bash\n${c.validationCommand}\n\`\`\`\nIt independently reads the file, fails on incorrect bytes, and prints the validation marker only after success. This is the only bash call allowed for this task; do not run any other shell commands.`,
|
||||
`Deliver the edited text file as a downloadable attachment using the assigned register_deliverable semantic tool, with filename and workspace-relative contentRef ${c.filename}, contentType text/plain, byteSize ${c.byteSize}, sha256 ${c.sha256}, title ${c.filename}, and a fresh idempotencyKey. Use the supplied byteSize and sha256 for the exact validated post-edit bytes; do not run extra commands to obtain metadata. Wait for the real registration receipt. Do not upload a different file or claim publication from a disk path.`,
|
||||
`After successful validation and registration, call paperclip_finish with reportedWorkDisposition done, summary EXTENDED-FILE-${nonce}, the current completion contract revision and satisfied objective criterion, no remaining work, the actual validation command/result, and the registered artifact reference.`,
|
||||
`Wait for paperclip_finish to succeed, then emit exactly EXTENDED-FILE-${nonce} as your final response. Do not create unrelated files or work.`,
|
||||
|
||||
Reference in new issue
Block a user