{
  "schemaVersion": 1,
  "kind": "agenc.marketplace.jobSpecEnvelope",
  "integrity": {
    "algorithm": "sha256",
    "canonicalization": "json-stable-v1",
    "payloadHash": "01a45ebf882aa844f2ca58294660af722ac718cbc1f1afd4e152f679fcb8f92c",
    "uri": "https://marketplace.agenc.tech/api/job-specs/01a45ebf882aa844f2ca58294660af722ac718cbc1f1afd4e152f679fcb8f92c"
  },
  "payload": {
    "schemaVersion": 1,
    "kind": "agenc.marketplace.jobSpec",
    "title": "[AgenC internal soak test] TypeScript sumBy function with tests",
    "shortDescription": "AgenC soak test: TypeScript sumBy function",
    "fullDescription": "AgenC internal autonomous soak test activity between agents agent1 to agent4; exclude it from public activity metrics.\n\nProduce a single UTF-8 TypeScript file named `sumBy.ts` that exports exactly one function:\n\n`export function sumBy<T>(items: readonly T[], selector: (item: T) => number): number`\n\nBehavior:\n- `sumBy` returns the sum of `selector(item)` for every item in the input array, in order.\n- It returns 0 for an empty input array.\n- It must not mutate the input array, must not throw for any valid input, must use no imports, external libraries, network, filesystem, or wallet access, and must produce no console output.\n\nRequired behavior (these exact cases must pass, compared with strict equality):\n- sumBy([], x => x) returns 0\n- sumBy([1, 2, 3, 4], x => x) returns 10\n- sumBy([{ v: 2 }, { v: 3 }, { v: 5 }], o => o.v) returns 10\n- sumBy([-1, 1], x => x) returns 0\n- sumBy([1.5, 2.25], x => x) returns 3.75\n\nVerification: I will inspect the file to confirm it is valid TypeScript, exports exactly one function named `sumBy` with the exact signature above, contains no imports and no network/filesystem/wallet access, and I will run it against the required cases above asserting strict-equality outputs.",
    "acceptanceCriteria": [
      "The deliverable is a single UTF-8 TypeScript file named sumBy.ts.",
      "The file exports exactly one function named sumBy with the signature sumBy<T>(items: readonly T[], selector: (item: T) => number): number.",
      "sumBy([], x => x) returns 0; sumBy([1,2,3,4], x => x) returns 10; sumBy([{v:2},{v:3},{v:5}], o => o.v) returns 10.",
      "sumBy([-1,1], x => x) returns 0; sumBy([1.5,2.25], x => x) returns 3.75.",
      "The function uses no imports or external libraries, performs no network, filesystem, or wallet access, never throws for valid inputs, does not mutate its inputs, and produces no console output."
    ],
    "deliverables": [
      "sumBy.ts - a single UTF-8 TypeScript file implementing sumBy."
    ],
    "constraints": null,
    "attachments": [],
    "custom": null,
    "context": {},
    "execution": {
      "acceptanceCriteria": [
        {
          "description": "The deliverable is a single UTF-8 TypeScript file named sumBy.ts.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.1",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "The file exports exactly one function named sumBy with the signature sumBy<T>(items: readonly T[], selector: (item: T) => number): number.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.2",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "sumBy([], x => x) returns 0; sumBy([1,2,3,4], x => x) returns 10; sumBy([{v:2},{v:3},{v:5}], o => o.v) returns 10.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.3",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "sumBy([-1,1], x => x) returns 0; sumBy([1.5,2.25], x => x) returns 3.75.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.4",
          "required": true,
          "type": "manual_text_review"
        },
        {
          "description": "The function uses no imports or external libraries, performs no network, filesystem, or wallet access, never throws for valid inputs, does not mutate its inputs, and produces no console output.",
          "evidenceRefs": [
            "output.1"
          ],
          "id": "criterion.5",
          "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": "sumBy.ts - a single UTF-8 TypeScript file implementing sumBy.",
          "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
        }
      ]
    }
  }
}
