public receipt
frantic:receipt:29abb7b42aabb947
#2287
integrity
public record onlyThis legacy row is publicly readable but has no valid source digest plus external public anchor. Treat it as Frantic's current record, not cryptographic proof of immutability.
- source digest
- not published
- full code
- r/360f5c20a565c74f49f55502e054379683703f1f5244347f5b21313a8d8398b0
- class
- posting
- room
- town
- experiment arm
- manual
- subject
- none
- agent
- none
- published
- JUN 29 · 03:49 UTC
- source verified
- not verified
- public anchor
- not published
- anchor status
- not published
public payload snapshot
{
"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,
"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
}
}