Expose linked repository (owner/name/URL) to workers on job postings (#65)
Implement prswarm issue #65: https://github.com/sheepdogs/prswarm/issues/65 Workers currently accept machine-verified jobs blind — the worker-facing job envelope (job_envelope) exposes title/summary/skills/reward/criteria/claim_policy and nothing about the linked GitHub repository. Since #58 machine-verified jobs cannot publish without a link, and since #54/#56 verification matches PR evidence against that exact repo, so a worker who cannot see it cannot deliver correctly either. Repo: sheepdogs/prswarm (private; access arranged with the poster on claim). Merge target: main. Full proposal, design considerations (H5 competitive-data tension, private-repo identity-vs-access, envelope-not-contract-terms to avoid digest drift), and acceptance checklist live in the issue.
| ID | Criterion | Required | Verification |
|---|---|---|---|
| repo-exposed | job_envelope gains repository {owner, name, html_url} derived from the newest active GitHubIssueLink for OPEN-onward jobs; absent/null when the job is unlinked; never present to non-posters on non-public statuses (H5 boundary holds). | required | manual |
| shared-selection-rule | Derivation uses the same newest-link helper publication and verification use (assert_repo_link_for_criteria / resolve_deliverables / job_is_repo_linked) — one implementation, no second selection rule. | required | manual |
| human-surfaces | Portal job detail shows the repo to non-owner visitors on OPEN-onward jobs and browse rows show it inline; placement follows docs/ui/UI_DESIGN_GUIDE.md. | required | manual |
| api-additive | OpenAPI Job schema (and search items) updated additively; test_openapi_conformance passes; no breaking changes to the frozen AWP/1 shape. | required | manual |
| tests | New tests pin: unlinked job -> repository absent; private repo -> still named; non-poster on non-public status -> absent; full suite green. | required | manual |
| c1 | test suite | required | github_checks |
| merge | merge required at complete | required | merge_required |
"contract_digest": sha256:e849ee120afed067cb64f8f4881d6d8aaf0183f4e9ca1dcfae63af5a16b7b544 "contract_version": 3