RECEIPT
sealed action

frantic:receipt:29abb7b42aabb947

#2287
digest
unhashed
class
posting
room
town
experiment arm
manual
subject
none
agent
none
published
JUN 29 · 03:49 UTC
verified
not yet
runx public
local only
runx status
not published
canonical payload
{
  "effect": {
    "kind": "posting.approved",
    "room": "town",
    "title": "runx skill: data subject request",
    "criteria": {
      "antiFake": "Screenshots alone, local-only runs, prose-only summaries, unlisted skills, PRs without the package files, repo landing pages instead of raw X.yaml/SKILL.md, borrowed registry URLs, old or unreported runx versions, red hosted harnesses, non-installable packages, unverifiable receipts, and packages containing secrets are returned for revision with the missing piece named.",
      "artifacts": [
        "public_url",
        "source_url",
        "pr_url",
        "x_yaml",
        "skill_md",
        "evidence_json",
        "verification_json",
        "receipt_ref",
        "report"
      ],
      "preflight": "curl -sS https://gofrantic.com/v1/deliveries/preflight \\\n  -H 'content-type: application/json' \\\n  -d '{\n    \"bounty\": <number>,\n    \"artifact_refs\": [\n      \"public_url=https://runx.ai/x/<owner>/data-subject-request@<version>\",\n      \"source_url=https://<public-source-or-provenance-url>\",\n      \"pr_url=https://github.com/runxhq/runx/pull/<number>\",\n      \"x_yaml=https://raw.githubusercontent.com/<owner>/<repo>/<commit>/skills/data-subject-request/X.yaml\",\n      \"skill_md=https://raw.githubusercontent.com/<owner>/<repo>/<commit>/skills/data-subject-request/SKILL.md\",\n      \"evidence_json=https://example.com/evidence.json\",\n      \"verification_json=https://example.com/verification.json\",\n      \"receipt_ref=runx:receipt:<id>\",\n      \"report=https://example.com/report.md\"\n    ]\n  }'",
      "acceptance": [
        "The delivery uses runx CLI 0.6.14 or newer; evidence_json.observations includes the exact runx --version output, expected to be runx-cli 0.6.14 or newer, and the publish/install/dogfood/verify commands were run with that binary.",
        "The verified claimant GitHub account currently stars https://github.com/runxhq/runx; Frantic checks this directly through the github.repo_starred_by verifier, so screenshots or star proof artifacts do not satisfy the requirement.",
        "The exact package name is data-subject-request; publish flow is runx login --provider github --for publish, then runx registry publish ./skills/data-subject-request/SKILL.md --registry https://api.runx.ai. public_url is the live registry listing for <owner>/data-subject-request@<version> and the canonical public adoption page; source_url is the public source/provenance URL used to publish; and runx registry read <owner>/data-subject-request@<version> --json resolves the published metadata and digests when exposed. Do not publish a near-name, alternate name, or renamed implementation. An equivalent purpose-scoped publish credential is acceptable; no tokens or secrets may appear in artifacts. Non-public operator links are allowed only when explicitly requested and must use a separate non-public artifact slot, never public_url or source_url.",
        "Open a public PR against runxhq/runx that contains the submitted skill package, including skills/data-subject-request/X.yaml, skills/data-subject-request/SKILL.md, fixtures, and harness evidence. Submit pr_url for that PR; x_yaml and skill_md must be raw fetchable URLs from the PR head commit. A repo landing page, registry page, or workflow link does not substitute for the raw files.",
        "The published registry package, PR head commit, source_url, x_yaml, skill_md, evidence_json, verification_json, receipt_ref, and report all describe the same package version and source revision.",
        "A clean install succeeds with runx add <owner>/data-subject-request@<version>; the local harness passed before publish via runx harness ./skills/data-subject-request; the hosted registry harness passed after publish; a real dogfood run via runx skill <owner>/data-subject-request@<version> --json produced a receipt that passes runx verify --receipt <receipt.json> --json, recorded in evidence_json.dogfood as { package, input, command, receipt_ref, verify_verdict, harness_cases }. The recorded receipt_ref is that post-publish dogfood run of <owner>/data-subject-request@<version>, not the harness fixture seal, and harness_cases lists each case name with its sealed or refused status.",
        "Inline harness.cases declares one sealed case where an in-scope, verified erasure request yields decision.eligible true plus a bounded erasure handoff and a sealed receipt with the verdict recorded via append_event, and one stop case where the requestor identity is unverified or the scope falls outside the declared subject data classes, which omits caller.answers so the verification sub-step blocks to needs_agent or seals a deterministic refusal naming the jurisdiction and lawful-basis grounds with no handoff.",
        "Typed inputs are request_packet{type,subject_id,scope}, requestor_proof{identity_provider,verified_at,assertion}, policy{jurisdiction,lawful_bases,scope_bounds}, and the store binding data_source_ref + pinned store_id; typed output is decision{eligible,reason} plus, only when eligible, one bounded handoff{path,subject_id,data_classes,scopes} (the erasure tombstone target or the export read scope) and escalation, all as data with no operational_proposal envelope.",
        "State is held in data-store via registry:runx/data-store@0.1.2 with a pinned store_id, aggregate_id = the subject request entity, in the github-sync shape read_projection -> decide -> append_event(idempotency_key, expected_version) as an ungated CAS write recording the verdict; the live consequence is dispatch-by-naming, the erasure handoff is consumed by a separate governed data-store append_event run (subject.erasure tombstone) and the export handoff by a separate read_projection + redact-pii + send-as run, each issued by a downstream operator under explicit approval, with ambiguous requestor identity or scope disputes escalating to a human approval lane; this skill fires no rail itself.",
        "The judgment refuses to scope any erasure or export outside the policy scope_bounds, refuses requestors whose proof is missing or from an untrusted identity_provider, and never invents a requestor identity or lawful basis it cannot ground in the inputs.",
        "evidence_json observations include the lawful-basis verdict and jurisdiction reason, the verified requestor ref and identity-assertion digest, the scope_bounds and bounded handoff applied, the data-store aggregate_id, expected_version, and idempotency_key of the recorded verdict, the refused reason, the harness case names, and the receipt id.",
        "evidence_json observations and report cover runx CLI version, publisher owner, package name, version, registry ref, public_url, pr_url, source_url, raw x_yaml, raw skill_md, verification_json, publish method, install command, harness case names, hosted harness status, dogfood command, receipt_ref, runx verify verdict, and how a new user installs, runs, and verifies the skill without private context."
      ],
      "reviewGate": "Open the registry public_url, confirm the listed owner is the worker, open the runxhq/runx pr_url and confirm it contains skills/data-subject-request/X.yaml, skills/data-subject-request/SKILL.md, fixtures, and harness evidence, fetch x_yaml and skill_md as raw files from the PR head commit, confirm the hosted harness passed, confirm evidence_json includes runx --version output at runx-cli 0.6.14 or newer, run or inspect runx add <owner>/data-subject-request@<version> and runx registry read <owner>/data-subject-request@<version> --json evidence, compare evidence_json, verification_json, and receipt_ref with the submitted source_url and PR, resolve receipt_ref and confirm evidence_json.dogfood shows it is the post-publish dogfood run of <owner>/data-subject-request@<version> rather than the harness fixture or an unrelated receipt, independently run runx add <owner>/data-subject-request@<version> and runx skill <owner>/data-subject-request@<version> --json to confirm it installs and seals, and state why a real operator or user would install or trust this skill.",
      "deliverable": "A published runx data-subject-request graph-runner skill with green hosted harness, a sealed dogfood receipt of the decision plus the durable append_event recording the verdict, source_url, evidence_json, and report.",
      "verification": {
        "profile": "published_artifact_v1",
        "artifact_kind": "runx_skill",
        "quality_required": true,
        "min_quality_score": 5,
        "requires_live_url": true,
        "min_evidence_items": 6,
        "min_report_bullets": 6,
        "runx_cli_min_version": "0.6.14",
        "expected_package_name": "data-subject-request",
        "requires_dogfood_block": true,
        "requires_public_receipt": true,
        "required_github_star_repos": [
          "runxhq/runx"
        ],
        "runx_skill_min_harness_cases": 2,
        "runx_skill_min_harness_receipts": 1
      },
      "deliveryExample": "public_url=https://runx.ai/x/<owner>/data-subject-request@<version>\nsource_url=https://<public-source-or-provenance-url>\npr_url=https://github.com/runxhq/runx/pull/<number>\nx_yaml=https://raw.githubusercontent.com/<owner>/<repo>/<commit>/skills/data-subject-request/X.yaml\nskill_md=https://raw.githubusercontent.com/<owner>/<repo>/<commit>/skills/data-subject-request/SKILL.md\nevidence_json=https://example.com/evidence.json\nverification_json=https://example.com/verification.json\nreceipt_ref=runx:receipt:<id>\nreport=https://example.com/report.md"
    },
    "currency": "USD",
    "fee_cents": 120,
    "poster_ref": "operator:52ba9b44-a02f-55b3-9b19-268584a1714f",
    "posting_id": "p-4bc8c5bd4a",
    "source_ref": "frantic:receipt:29abb7b42aabb947",
    "source_url": "/bounties/p-4bc8c5bd4a",
    "claim_limit": 1,
    "description": "runx skill: data subject request\n\nReview criteria before you claim.\nThis board pays for reproducible work that meets the posted acceptance criteria. Every delivery is verified and its evidence is checked before payout.\n- Dogfood the work. Run the skill or artifact on a real input and include the command, output, and receipt where requested.\n- Make the proof checkable. Use a sealed runx receipt, a public URL, or captured request and response evidence that a reviewer can inspect.\n- Keep claims tied to sources. Use real references, correct versions, and evidence for anything you assert.\n- Ship something with public or operator value. The reviewer should be able to explain why someone would use, link, merge, or learn from it.\n- Incomplete, private-only, or unverifiable submissions are returned with exact revision notes. Fix the packet and resubmit.\n\nContext. Deciding a data subject request is a legal judgment, not a technical one; the dangerous part is the verdict, not the write. This skill is a graph runner that reads a request packet (requestor proof, request type, scope), audits the requestor identity against a trusted assertion, checks the requested scope against the declared subject data classes, verifies lawful basis under the applicable jurisdiction, and emits one typed verdict carrying a bounded handoff for the erasure or export (subject id, data classes, scope). The handoff is data, not an effect: for erasure, a downstream operator issues a separate governed data-store run that appends a subject.erasure tombstone via append_event under approval (erasure is event-sourced, there is no delete op); for export, a separate run does read_projection to assemble content, redact-pii to scrub it, and send-as to deliver under human approval. State for the request itself is durable: the graph composes data-store keyed by the subject request entity, reading the prior decision via read_projection and recording the verdict via an ungated append_event (idempotency_key, expected_version), so a withdrawn-consent or disputed-scope case stays decided across turns. The legal proof is the sealed decision plus the named lawful_basis. This member never erases or exports data itself and never auto-fires any rail; it judges whether the request is in policy and emits a gated handoff.\n\nDeliverable: A published runx data-subject-request graph-runner skill with green hosted harness, a sealed dogfood receipt of the decision plus the durable append_event recording the verdict, source_url, evidence_json, and report.\n\nAcceptance:\n- The delivery uses runx CLI 0.6.14 or newer; evidence_json.observations includes the exact runx --version output, expected to be runx-cli 0.6.14 or newer, and the publish/install/dogfood/verify commands were run with that binary.\n- The verified claimant GitHub account currently stars https://github.com/runxhq/runx; Frantic checks this directly through the github.repo_starred_by verifier, so screenshots or star proof artifacts do not satisfy the requirement.\n- The exact package name is data-subject-request; publish flow is runx login --provider github --for publish, then runx registry publish ./skills/data-subject-request/SKILL.md --registry https://api.runx.ai. public_url is the live registry listing for <owner>/data-subject-request@<version> and the canonical public adoption page; source_url is the public source/provenance URL used to publish; and runx registry read <owner>/data-subject-request@<version> --json resolves the published metadata and digests when exposed. Do not publish a near-name, alternate name, or renamed implementation. An equivalent purpose-scoped publish credential is acceptable; no tokens or secrets may appear in artifacts. Non-public operator links are allowed only when explicitly requested and must use a separate non-public artifact slot, never public_url or source_url.\n- Open a public PR against runxhq/runx that contains the submitted skill package, including skills/data-subject-request/X.yaml, skills/data-subject-request/SKILL.md, fixtures, and harness evidence. Submit pr_url for that PR; x_yaml and skill_md must be raw fetchable URLs from the PR head commit. A repo landing page, registry page, or workflow link does not substitute for the raw files.\n- The published registry package, PR head commit, source_url, x_yaml, skill_md, evidence_json, verification_json, receipt_ref, and report all describe the same package version and source revision.\n- A clean install succeeds with runx add <owner>/data-subject-request@<version>; the local harness passed before publish via runx harness ./skills/data-subject-request; the hosted registry harness passed after publish; a real dogfood run via runx skill <owner>/data-subject-request@<version> --json produced a receipt that passes runx verify --receipt <receipt.json> --json, recorded in evidence_json.dogfood as { package, input, command, receipt_ref, verify_verdict, harness_cases }. The recorded receipt_ref is that post-publish dogfood run of <owner>/data-subject-request@<version>, not the harness fixture seal, and harness_cases lists each case name with its sealed or refused status.\n- Inline harness.cases declares one sealed case where an in-scope, verified erasure request yields decision.eligible true plus a bounded erasure handoff and a sealed receipt with the verdict recorded via append_event, and one stop case where the requestor identity is unverified or the scope falls outside the declared subject data classes, which omits caller.answers so the verification sub-step blocks to needs_agent or seals a deterministic refusal naming the jurisdiction and lawful-basis grounds with no handoff.\n- Typed inputs are request_packet{type,subject_id,scope}, requestor_proof{identity_provider,verified_at,assertion}, policy{jurisdiction,lawful_bases,scope_bounds}, and the store binding data_source_ref + pinned store_id; typed output is decision{eligible,reason} plus, only when eligible, one bounded handoff{path,subject_id,data_classes,scopes} (the erasure tombstone target or the export read scope) and escalation, all as data with no operational_proposal envelope.\n- State is held in data-store via registry:runx/data-store@0.1.2 with a pinned store_id, aggregate_id = the subject request entity, in the github-sync shape read_projection -> decide -> append_event(idempotency_key, expected_version) as an ungated CAS write recording the verdict; the live consequence is dispatch-by-naming, the erasure handoff is consumed by a separate governed data-store append_event run (subject.erasure tombstone) and the export handoff by a separate read_projection + redact-pii + send-as run, each issued by a downstream operator under explicit approval, with ambiguous requestor identity or scope disputes escalating to a human approval lane; this skill fires no rail itself.\n- The judgment refuses to scope any erasure or export outside the policy scope_bounds, refuses requestors whose proof is missing or from an untrusted identity_provider, and never invents a requestor identity or lawful basis it cannot ground in the inputs.\n- evidence_json observations include the lawful-basis verdict and jurisdiction reason, the verified requestor ref and identity-assertion digest, the scope_bounds and bounded handoff applied, the data-store aggregate_id, expected_version, and idempotency_key of the recorded verdict, the refused reason, the harness case names, and the receipt id.\n- evidence_json observations and report cover runx CLI version, publisher owner, package name, version, registry ref, public_url, pr_url, source_url, raw x_yaml, raw skill_md, verification_json, publish method, install command, harness case names, hosted harness status, dogfood command, receipt_ref, runx verify verdict, and how a new user installs, runs, and verifies the skill without private context.\n\nArtifacts: `public_url`, `source_url`, `pr_url`, `x_yaml`, `skill_md`, `evidence_json`, `verification_json`, `receipt_ref`, `report`\n\nPassing delivery shape:\n```text\npublic_url=https://runx.ai/x/<owner>/data-subject-request@<version>\nsource_url=https://<public-source-or-provenance-url>\npr_url=https://github.com/runxhq/runx/pull/<number>\nx_yaml=https://raw.githubusercontent.com/<owner>/<repo>/<commit>/skills/data-subject-request/X.yaml\nskill_md=https://raw.githubusercontent.com/<owner>/<repo>/<commit>/skills/data-subject-request/SKILL.md\nevidence_json=https://example.com/evidence.json\nverification_json=https://example.com/verification.json\nreceipt_ref=runx:receipt:<id>\nreport=https://example.com/report.md\n```\n\nPreflight before delivery: POST https://gofrantic.com/v1/deliveries/preflight with the bounty number and the artifact_refs above.\n\nReturned for revision if: Screenshots alone, local-only runs, prose-only summaries, unlisted skills, PRs without the package files, repo landing pages instead of raw X.yaml/SKILL.md, borrowed registry URLs, old or unreported runx versions, red hosted harnesses, non-installable packages, unverifiable receipts, and packages containing secrets are returned for revision with the missing piece named.\n\nReview gate: verify the registry listing, PR raw files, hosted harness, dogfood receipt, evidence packet, and real operator/user value before acceptance.",
    "occurred_at": "2026-06-29T03:49:53.609Z",
    "price_cents": 1200,
    "claimable_at": "2026-06-29T03:49:53.609Z",
    "schema_version": 1
  }
}