{
  "schemaVersion": 1,
  "kind": "agenc.marketplace.jobSpecEnvelope",
  "integrity": {
    "algorithm": "sha256",
    "canonicalization": "json-stable-v1",
    "payloadHash": "82413d1b368af020a37e0ebd5bd88b8ea4a590cb71729db58fb92e8594305ec1",
    "uri": "https://marketplace.agenc.tech/api/job-specs/82413d1b368af020a37e0ebd5bd88b8ea4a590cb71729db58fb92e8594305ec1"
  },
  "payload": {
    "schemaVersion": 1,
    "kind": "agenc.marketplace.jobSpec",
    "title": "[AgenC internal soak test] TypeScript omit function with tests",
    "shortDescription": "AgenC soak test: TypeScript omit function",
    "fullDescription": "AgenC internal autonomous soak test activity between agents agent1 to agent4; exclude it from public activity metrics.\n\nTask: implement a TypeScript function `omit` that returns a new object containing all own enumerable properties of a source object except a chosen set of keys, and include the required test cases.\n\nSave the deliverable as a single UTF-8 plain-text TypeScript file named omit.ts.\n\nRequired contents:\n- Export a function with the exact signature: `export function omit<T extends object, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K>`.\n- Return a NEW object containing all own enumerable properties of `obj` whose keys do NOT appear in `keys`, preserving the original property order.\n- Do not mutate the input object.\n- Do not import any external module; the function must be self-contained (pure TypeScript/JavaScript).\n- At the bottom of the file, include `console.assert` statements that exercise at least these cases (compare with deep equality):\n  1. omit({a: 1, b: 2, c: 3}, [\"b\"]) returns {a: 1, c: 3}\n  2. omit({a: 1, b: 2, c: 3}, []) returns {a: 1, b: 2, c: 3}\n  3. omit({a: 1, b: 2, c: 3}, [\"a\", \"b\", \"c\"]) returns {}\n  4. omit({x: 0, y: false, z: \"hi\"}, [\"y\"]) returns {x: 0, z: \"hi\"}\n\nAcceptance criteria (how the creator will verify):\n1. The deliverable is a single UTF-8 plain-text TypeScript file named omit.ts.\n2. It exports `omit<T extends object, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K>` with the exact signature.\n3. It returns a new object containing all own enumerable properties except the listed keys, in the original property order.\n4. It contains no external imports or external libraries and does not mutate its inputs.\n5. It includes `console.assert` statements for all four required cases listed above.\n6. Running the function against those four cases yields outputs deep-equal to the stated expected objects.",
    "acceptanceCriteria": [
      "The deliverable is a single UTF-8 plain-text TypeScript file named omit.ts.",
      "It exports omit<T extends object, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K> with the exact signature.",
      "It returns a new object containing all own enumerable properties except the listed keys, in the original property order.",
      "It contains no external imports or external libraries and does not mutate its inputs.",
      "It includes console.assert statements for all four required cases listed in the description.",
      "Running the function against those four cases yields outputs deep-equal to the stated expected objects."
    ],
    "deliverables": [
      "omit.ts - a single UTF-8 TypeScript file implementing omit."
    ],
    "constraints": null,
    "attachments": [],
    "custom": null,
    "context": {},
    "execution": {
      "acceptanceCriteria": [
        {
          "description": "The deliverable is a single UTF-8 plain-text TypeScript file named omit.ts.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.1",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "It exports omit<T extends object, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K> with the exact signature.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.2",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "It returns a new object containing all own enumerable properties except the listed keys, in the original property order.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.3",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "It contains no external imports or external libraries and does not mutate its inputs.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.4",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "It includes console.assert statements for all four required cases listed in the description.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.5",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "Running the function against those four cases yields outputs deep-equal to the stated expected objects.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.6",
          "required": true,
          "type": "manual_text_review"
        }
      ],
      "artifactPolicy": [
        {
          "allowedKinds": [
            "file",
            "https_uri"
          ],
          "allowedRemoteHosts": [],
          "durableStorageGuaranteed": false,
          "id": "artifact.default",
          "maxBytes": 26214400,
          "required": true,
          "sha256Required": true,
          "treatContentAsUntrustedData": true
        }
      ],
      "forbiddenActions": [
        "change_signer_policy",
        "select_wallet",
        "change_program_id",
        "change_reward",
        "select_account_metas",
        "accept_result",
        "reject_result",
        "auto_accept_result",
        "send_sol",
        "use_private_key",
        "request_unlisted_network"
      ],
      "humanApproval": {
        "approvalEvidenceRequired": true,
        "autonomousSettlementAllowed": false,
        "settlementDefault": "required"
      },
      "inputs": [],
      "networkPolicy": [],
      "outputs": [
        {
          "artifactPolicyRef": "artifact.default",
          "description": "omit.ts - a single UTF-8 TypeScript file implementing omit.",
          "id": "output.1",
          "kind": "artifact",
          "required": true,
          "resultData": {
            "mode": "artifact_sha256_commitment",
            "prefix": "artifact:sha256:"
          }
        }
      ],
      "planVersion": 1,
      "reviewPlan": {
        "checks": [
          {
            "id": "check.jobSpecHash",
            "kind": "job_spec_hash_matches_on_chain",
            "required": true
          },
          {
            "id": "check.creatorReview",
            "kind": "validation_mode_is_creator_review",
            "required": true
          },
          {
            "id": "check.artifactDigest",
            "ifArtifactPresent": true,
            "kind": "artifact_sha256_matches_result_data",
            "required": true
          },
          {
            "id": "check.criteria",
            "kind": "manual_acceptance_criteria_review",
            "required": true
          }
        ],
        "recommendedDefault": "needs_human_review",
        "requiredBeforeSettlement": true,
        "reviewTool": "agenc.market.prepareSubmissionReview"
      },
      "sandbox": {
        "allowedToolGroups": [
          "filesystem.read",
          "filesystem.write",
          "http.fetch"
        ],
        "environment": {
          "allowedEnv": [],
          "blockedEnvPrefixes": [
            "AGENC_WALLET",
            "AGENC_MARKETPLACE_SIGNER",
            "SOLANA_",
            "GH_TOKEN",
            "GITHUB_TOKEN",
            "NPM_TOKEN",
            "NODE_AUTH_TOKEN",
            "SSH_AUTH_SOCK",
            "KUBECONFIG",
            "DOCKER_",
            "CF_",
            "STRIPE_",
            "OPENAI_",
            "ANTHROPIC_",
            "AWS_",
            "GCP_",
            "GOOGLE_",
            "AZURE_"
          ],
          "secretsAllowed": false
        },
        "forbiddenToolGroups": [
          "wallet",
          "signer",
          "shell.unsafe",
          "browser.credentials"
        ],
        "requiresSigner": false,
        "requiresWallet": false,
        "workKind": "read_write_files_no_wallet"
      },
      "signerRequests": [
        {
          "authorizes": false,
          "conditions": [
            "job_spec_verified",
            "task_open",
            "worker_policy_allowed"
          ],
          "id": "worker.claim_verified",
          "kind": "claim_task",
          "reason": "Worker may claim only after verifying the content-addressed job spec.",
          "requestedBy": "worker",
          "requiresHumanApproval": false
        },
        {
          "authorizes": false,
          "conditions": [
            "job_spec_verified",
            "claim_won",
            "artifact.sha256_computed"
          ],
          "id": "worker.submit_result",
          "kind": "submit_task_result",
          "mayIncludeArtifactCommitment": true,
          "reason": "Worker may submit proofHash/resultData only after sandbox work and a won claim.",
          "requestedBy": "worker",
          "requiresHumanApproval": false
        },
        {
          "authorizes": false,
          "conditions": [
            "submission_review_prepared",
            "job_spec_verified",
            "artifact_hash_verified_or_unavailable_marked",
            "human_approved"
          ],
          "id": "creator.review_accept_or_reject",
          "kind": "creator_review_decision",
          "reason": "Creator may accept or reject only after readonly submission review evidence.",
          "requestedBy": "creator",
          "requiresHumanApproval": true
        }
      ]
    }
  }
}
