Goal: close the pre-hoc→post-hoc loop so miners learn what's worth doing.
Scope: on merge, capture the outcome and compute a MINER-facing attribution ("this merged PR moved your readiness/score signals by X; here's why") using the same scoring snapshot, public-safe (no raw reward $/trust). Surface via MCP (decision-pack history / gittensory_pr_outcome) + the notification feed. Distinct from #543 (which calibrates the MODEL vs outcomes — this attributes outcomes to the CONTRIBUTOR).
Acceptance: a merged PR produces a public-safe, self-scoped outcome record the miner can retrieve.
Depends on: #543 patterns. Effort: M. Sub-issue of #529.
Inherits #525 cross-cutting AC: test:ci + 97% coverage; miner⊕maintainer access boundary (identity per-login, authority per-repo) + public-safe redaction (#542); advisory-first, no auto-merge/submit; no source upload from miner tooling. Part of #525.
Goal: close the pre-hoc→post-hoc loop so miners learn what's worth doing.
Scope: on merge, capture the outcome and compute a MINER-facing attribution ("this merged PR moved your readiness/score signals by X; here's why") using the same scoring snapshot, public-safe (no raw reward $/trust). Surface via MCP (decision-pack history /
gittensory_pr_outcome) + the notification feed. Distinct from #543 (which calibrates the MODEL vs outcomes — this attributes outcomes to the CONTRIBUTOR).Acceptance: a merged PR produces a public-safe, self-scoped outcome record the miner can retrieve.
Depends on: #543 patterns. Effort: M. Sub-issue of #529.
Inherits #525 cross-cutting AC:
test:ci+ 97% coverage; miner⊕maintainer access boundary (identity per-login, authority per-repo) + public-safe redaction (#542); advisory-first, no auto-merge/submit; no source upload from miner tooling. Part of #525.