feat(bounty): ServiceBounty + evaluator market — demand-side bounties with commit-reveal evaluation#634
Open
bussyjd wants to merge 2 commits into
Open
feat(bounty): ServiceBounty + evaluator market — demand-side bounties with commit-reveal evaluation#634bussyjd wants to merge 2 commits into
bussyjd wants to merge 2 commits into
Conversation
… with commit-reveal evaluation Squash of the eval-market series for review as one unit. Original commits (granular history available on request): dd8006e docs(plans): ServiceBounty + ANE marketplace design (no-slashing escrow) bd83124 feat: scaffold ServiceBounty v1 + dynamic task-type registry fab3737 fix: review fixes — reward payment envelope + CLI conventions e84b77f feat: servicebounty-controller reconcile + escrow seam + lifecycle CLI 2c75ea0 docs(plans): canonical evaluator-market section + research notes 132e65f feat: evaluator-ladder schema + spec.eval.mode verification gate 45e12ea feat: A2UI report variants + catalog negotiation in deliverable schema b295a8b feat: A2UI v1.0-candidate across the board 3889955 feat: admission hardening + poster-side CLI completeness ef55ae8 test: CRD<->Go parity test — and the pruning bug it caught b63a72d feat: benchlocal@v1 package + finetune@v1 staged (enabled:false) 7cb07a7 feat: bounty_report MCP tool — A2UI reports over the x402mcp seam 466671d feat: eval-market controller slice — commit-reveal quorum + self-bond 9af37c5 feat: evaluator enrollment + panel selection + OBOL eval-payment leg cfce4f3 feat: ERC-8004 Validation/Reputation wiring — calldata builders + reveal provenance
…lenames in justfile The generate target's singularization fallback turned 'servicebounties' into 'servicebountie-crd.yaml'; add explicit case entries so controller-gen output lands on the canonical filenames. Regenerated manifests pass the CRD<->Go parity and admission tests unchanged.
Contributor
|
We don't have any buyers with unfilled demands. What types of services do you anticipate here? I don't think any of our buyers and sellers need an escrow and evaluator yet. I suggest leaving this unmerged until I have a better understanding of who needs this |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stack position
PR 1 of 2 in the ServiceBounty stack. The real-money escrow leg follows in a stacked PR based on this branch. Independent of #632/#633 (skill marketplace / smoke agent) except for shared additive
internal/erc8004calldata builders — whichever merges second rebases trivially.What
A demand-side marketplace primitive: a poster publishes a
ServiceBountyCR ("do X for reward R"), a fulfiller agent claims and submits, and an evaluator market decides whether the work passes — with payment held in an escrow seam until the verdict.Core pieces:
internal/serviceoffercontroller/bounty*.go): lifecycle Open → Claimed → Submitted → Evaluating → Paid/Rejected, driven by annotation write-channels so agents interact with plain kubectl RBAC, never controller credentials.spec.eval.modegates payout on an evaluator verdict; opting out requires the explicit--dangerously-skip-verificationflag.sha256(score|salt|address)hashes, then reveals; median-of-k is the verdict; non-reveals are penalized as outliers. Quorum, reveal windows, and outlier bands are spec'd per bounty with sane defaults.EvaluatorEnrollmentCRD): Shadow → Probation → Full progression — shadow evaluators score without weight, probation carries a value cap and half pay, divergence from the median sets careers back. No staking, no slashing; sybil cost comes from the unpaid shadow period and self-bonds.bounty_reportMCP tool over the existing paid-MCP seam.benchlocal@v1enabled;finetune@v1staged behindenabled:false).internal/erc8004/{reputation,validation}.go): calldata builders + readers for the Reputation/Validation registries — evaluator verdicts can be grounded on-chain (operator-submitted; the controller never signs).obol bounty create|claim|submit|eval commit|eval reveal|status|...plus calldata derivation commands.Security invariants (test-pinned)
Why a squash commit
This squashes a 15-commit development series (list in the commit message) so the PR reviews as one coherent unit. Granular history is preserved locally and can be pushed on request.
Validation
Full unit + controller-test suite green (panel selection determinism, commit-reveal verdicts, ladder transitions, parity, admission). Design docs included under
plans/(bounty-ane-marketplace-design.md,evaluator-market-research-notes.md). The escrow PR stacked on top carries the end-to-end money-leg validation.🤖 Generated with Claude Code