Skip to content

docs(policy): contributor relationships and recourse, with the mechanism behind each claim - #9981

Merged
loopover-orb[bot] merged 1 commit into
mainfrom
docs/contributor-relationship-policy-9746
Jul 31, 2026
Merged

docs(policy): contributor relationships and recourse, with the mechanism behind each claim#9981
loopover-orb[bot] merged 1 commit into
mainfrom
docs/contributor-relationship-policy-9746

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

One page an outsider can be pointed to, covering both halves of the issue: the contributor-relationship (conflict-of-interest) policy, and recourse.

Every claim names its mechanism

That was the acceptance bar, and it is the part that took the time — each mechanism was read before being cited, not recalled:

Claim Enforced by
Uniform pipeline, no per-contributor overrides The gate's inputs contain no author-identity field. Where identity is read, it comes from the repo's own GitHub permissions at event time — priority-label-eligibility.ts, author-association.ts — never a maintained list of people.
Author-based label eligibility src/review/priority-label-eligibility.ts (#9737)
Open-window rule src/review/priority-eligibility-window.ts (#9738)
Verdict immutability REEVALUATION_REASONS' closed set, src/review/decision-record.ts (#9742)
Published parity metrics src/review/review-parity-rollups.ts (#9743), served under reviewParity at /v1/public/stats
Reversal detection recordReversalSignals, src/review/outcomes-wire.ts, published on /fairness

I verified the specifics rather than paraphrasing: the five REEVALUATION_REASONS values, the record id shape record:<owner/repo>#<pr>@<head sha>, and that reviewParity really does publish reevaluations and byReason.

Two things the page argues rather than asserts

Why immutability makes the recourse section honest. The set of re-evaluation causes is closed so that an outsider can count re-evaluations by cause without interpreting free text. That is also why on-demand re-evaluation cannot exist: re-running only the contested verdicts makes the published accuracy figure describe complaint volume instead of behaviour.

Why automatic detection beats an appeals queue. An appeals queue measures the mistakes somebody bothered to contest. Outcome confirmation measures the ones that actually happened — including the ones nobody complained about — and publishes the rate either way. Reopening a wrongly-closed PR is the signal; nothing needs filing.

Recourse, documented honestly

Per the issue's framing, this is a description of what exists, not an appeals process:

  1. Verify it yourself, offline — first, deliberately, because it does not depend on anyone agreeing with you.
  2. Wrong closes are detected without anyone filing anything.
  3. Resubmission is the remedy — not a workaround but a property of the ledger key: a new head SHA is a fresh verdict by definition, which the decision-record module states in as many words.
  4. No human appeals queue, with both structural reasons written down — timing (open issues are typically re-solved before an appeal could conclude) and selection.

Disclosure is called out as the exception

Disclosure is a process commitment, and the page says so explicitly rather than blending it in with the mechanical guarantees — it is the one item no mechanism enforces. It also notes why that matters less than it sounds: priority eligibility is decided by issue authorship read from GitHub, and the window applies to every PR regardless of author, so an undisclosed relationship still buys no elevated label eligibility.

Placement

Linked from the label policy page and from CONTRIBUTING.md, as the issue requires, and registered in the docs sidebar — docs-nav.test.tsx enforces a sidebar entry for every published .mdx, so an unregistered page fails CI.

Verification

  • docs:drift-check, ui:typecheck, ui:lint, typecheck, branding-drift:check green
  • ui:test green, including docs-nav.test.tsx (4 tests)

Closes #9746

…ism behind each claim

Two things that should be written down before anyone needs them -- how
contributor relationships are handled, and what recourse exists when a
contributor believes a verdict was wrong -- existed only in practice and
scattered discussion. This is the page to point at.

Every claim names what enforces it, because a policy whose enforcement cannot be
checked is a promise, and this project's whole posture is to publish fewer
promises and more mechanisms. Each mechanism was read before being cited:

  uniform pipeline    the gate's inputs contain no author identity field; where
                      identity IS read it comes from the repo's own GitHub
                      permissions at event time, never a maintained list --
                      priority-label-eligibility.ts, author-association.ts
  label eligibility   priority-label-eligibility.ts (#9737) and
                      priority-eligibility-window.ts (#9738), both already
                      documented in full on the label-policy page
  immutability        REEVALUATION_REASONS' closed set in decision-record.ts
                      (#9742), and why closed: so re-evaluations can be COUNTED
                      by cause without interpreting free text
  parity              review-parity-rollups.ts (#9743), published under
                      reviewParity at /v1/public/stats and recomputable from a
                      ledger export
  reversal detection  recordReversalSignals in outcomes-wire.ts, published on
                      /fairness

The recourse section is deliberately not an appeals process, and says so. It
documents what exists: offline verification first (it does not depend on anyone
agreeing with you), automatic detection of wrong closes via outcome confirmation
(stronger than an appeals queue -- it measures the mistakes that happened, not
the ones somebody contested), and resubmission, which is not a workaround but a
property of the ledger key: a record is `record:<repo>#<pr>@<head sha>`, so a
new head SHA is a fresh verdict by definition.

It also states plainly why no human appeals queue exists -- timing, since open
issues are typically re-solved before an appeal could conclude; and selection,
since re-running only contested verdicts makes the published accuracy figure
describe complaint volume rather than behaviour.

Disclosure is called out as the one item a mechanism does NOT enforce, rather
than being blended in with the ones that are. The rules above mean it needs no
elevated trust anyway: priority eligibility is decided by issue authorship read
from GitHub, and the window applies to every PR regardless of author.

Linked from the label-policy page and CONTRIBUTING, per the issue's placement
requirement, and registered in the docs sidebar (which docs-nav.test.tsx
enforces for every published page).

Closes #9746
@loopover-orb

loopover-orb Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Tip

✅ LoopOver review result - approve/merge recommended

Review updated: 2026-07-31 01:10:19 UTC

4 files · 1 AI reviewer · no blockers · readiness 98/100 · CI green · clean

✅ Suggested Action - Approve/Merge

  • safe to merge

Review summary
This is a docs-only PR adding a new contributor-relationships/recourse page, linking it into the docs nav, cross-linking from label-policy.mdx, and adding a short pointer in CONTRIBUTING.md. The content makes specific claims about mechanisms (file paths, function names, constant names) that I cannot verify against the actual src/ files since only docs and the nav component are in this diff — I can only confirm internal consistency (nav entry matches the new route slug, cross-links resolve to the right path) but not that the cited code (e.g. `REEVALUATION_REASONS`, `recordReversalSignals`, `priority-label-eligibility.ts`) actually behaves as described. The diff is well-formed and internally consistent, and CI passed.

Nits — 8 non-blocking
  • The docs-nav.tsx entry at apps/loopover-ui/src/components/site/docs-nav.tsx:110 adds a route but there's no test-path evidence for the nav change per the external brief — verify docs-nav tests (if any exist) cover the new entry or that route/link validity is otherwise checked in CI.
  • This page makes many specific technical claims (exact constant lists, file paths, published field names like `reviewParity.reevaluations`/`byReason`) that will silently go stale if the underlying code changes — consider a doc-drift check or at least flagging these as high-maintenance claims.
  • The MDX file at apps/loopover-ui/content/docs/contributor-relationships.mdx is large (166 lines) and heavy in structural markdown (tables, callouts) — worth a quick MDX lint/render check to confirm no syntax issues, though CI passing suggests the build already validated this.
  • Confirm during review that a maintainer with source access has verified the cited mechanisms (constant names, function names, file paths) against the actual src/ files, since this reviewer only has the diff and cannot check apps/loopover-api or src/review/* directly.
  • Consider whether this doc page should be covered by a link-checker or MDX build test to catch future drift between docs-nav.tsx entries and actual content files.
  • PR author also opened the linked issue — Link an issue that was opened by a different contributor, or provide a rationale for why this self-authored issue represents genuine discovery work.
  • Diff looks like trivial or whitespace-only churn — Reduce whitespace-only or formatting-only churn and keep the diff focused on substantive changes.
  • Code changes lack test evidence — Add focused regression tests or explain why existing coverage is sufficient.

Decision drivers

  • ✅ Code review — No blockers (1 reviewer)
  • ✅ Gate result — Passing (No configured blocker found.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ✅ Linked #9746
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (1 linked issue).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 9 registered-repo PR(s), 8 merged, 281 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 9 PR(s), 281 issue(s).
Improvement ℹ️ None detected risk: elevated · value: none · LLM: moderate
Linked issue satisfaction

Addressed
The PR adds a single dedicated docs page covering both the conflict-of-interest policy (uniform pipeline, label eligibility #9737, open window #9738, disclosure) and recourse (verify walkthrough, automatic reversal detection, resubmission remedy, and the stated rationale against a human appeals queue), with each claim tied to a named source file or endpoint, and links it from label-policy.mdx and

Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: Python, TypeScript, Ruby, Go, MDX, Shell, Solidity, JavaScript
  • Official Gittensor activity: 9 PR(s), 281 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Start here: Treat this as maintainer-lane context rather than normal contributor-lane activity.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
🧪 Chat with LoopOver

Ask LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.

  • @loopover ask &lt;question&gt; answers contribution-quality Q&A with source citations and freshness.
  • @loopover chat &lt;question&gt; answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @loopover mention with a real question is routed to the closest matching read-only command automatically — no exact syntax required.

Full command reference: https://loopover.ai/docs/loopover-commands

🧪 Experimental — new and may change.

Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/ desktop before /
before /
after /
after /
/ mobile before / (mobile)
before / (mobile)
after / (mobile)
after / (mobile)

Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy.

Scroll preview
Route Before (production) After (this PR's preview)
/ before / (scroll)
before / (scroll)
after / (scroll)
after / (scroll)

A short scroll-through clip (desktop) — click either thumbnail to open the full animation. Evidence for scroll-linked behavior a single screenshot can't show.

🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed


💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →.

Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.

  • Re-run LoopOver review

@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
loopover-ui 4a66bb4 Commit Preview URL

Branch Preview URL
Jul 31 2026, 01:05 AM

@codecov

codecov Bot commented Jul 31, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 29.3kB (0.37%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
loopover-ui 7.93MB 29.3kB (0.37%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: loopover-ui

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/add-scalar-classes-DDjfCmdf.js (New) 2.16MB 2.16MB 100.0% 🚀
assets/tanstack-vendor-B4wYxw3V.js (New) 955.9kB 955.9kB 100.0% 🚀
assets/docs.fumadocs-spike-api-reference-BzUzSCcK.js (New) 443.45kB 443.45kB 100.0% 🚀
assets/AgentScalarChatInterface.vue-Cmm8Z9Tg.js (New) 201.69kB 201.69kB 100.0% 🚀
assets/modal-28ZPNpaZ.js (New) 184.5kB 184.5kB 100.0% 🚀
assets/client-fyx5aFD1.js (New) 151.47kB 151.47kB 100.0% 🚀
assets/maintainer-panel-B3Nxsubx.js (New) 78.97kB 78.97kB 100.0% 🚀
assets/routes-DvTxgV4I.js (New) 35.88kB 35.88kB 100.0% 🚀
assets/contributor-relationships-D2uFXVFv.js (New) 28.36kB 28.36kB 100.0% 🚀
assets/owner-panel-BhDlQKHD.js (New) 28.26kB 28.26kB 100.0% 🚀
assets/app-oGH_l3N0.js (New) 25.82kB 25.82kB 100.0% 🚀
assets/ui-vendor-Dalv__Qm.js (New) 24.57kB 24.57kB 100.0% 🚀
assets/fairness-Bk2ReWBc.js (New) 23.13kB 23.13kB 100.0% 🚀
assets/miner-panel-DvvCmoxC.js (New) 20.49kB 20.49kB 100.0% 🚀
assets/api._op-89NTwRy6.js (New) 17.51kB 17.51kB 100.0% 🚀
assets/self-hosting-docs-audit-B706D2FX.js (New) 16.6kB 16.6kB 100.0% 🚀
assets/docs-client-loader-CTPDR9z8.js (New) 15.68kB 15.68kB 100.0% 🚀
assets/playground-panel-BQd6gQ92.js (New) 14.35kB 14.35kB 100.0% 🚀
assets/label-policy-3u9DYrAb.js (New) 12.21kB 12.21kB 100.0% 🚀
assets/app.audit-DqqjfP68.js (New) 10.22kB 10.22kB 100.0% 🚀
assets/app.config-generator-DS9h2j7d.js (New) 10.06kB 10.06kB 100.0% 🚀
assets/maintainers-B_h9da1m.js (New) 8.06kB 8.06kB 100.0% 🚀
assets/miners-0R8yxrxk.js (New) 7.91kB 7.91kB 100.0% 🚀
assets/agents-VhDVCmU7.js (New) 7.74kB 7.74kB 100.0% 🚀
assets/commands-panel-fs8UjAVS.js (New) 6.74kB 6.74kB 100.0% 🚀
assets/maintainer-workflow-Dtbi81cs.js (New) 6.52kB 6.52kB 100.0% 🚀
assets/docs-nav-BMopQLiP.js (New) 6.19kB 6.19kB 100.0% 🚀
assets/digest-panel-DWkh3UK5.js (New) 6.15kB 6.15kB 100.0% 🚀
assets/repos._owner._repo.quality-BH_M4B4R.js (New) 6.14kB 6.14kB 100.0% 🚀
assets/docs.index-Cl4nIzcC.js (New) 6.01kB 6.01kB 100.0% 🚀
assets/api.index-BEU9v7Zm.js (New) 4.7kB 4.7kB 100.0% 🚀
assets/docs-MXHfE3CR.js (New) 3.01kB 3.01kB 100.0% 🚀
assets/api-B0GGNKcP.js (New) 2.66kB 2.66kB 100.0% 🚀
assets/docs-page-BaC0ifOy.js (New) 2.14kB 2.14kB 100.0% 🚀
assets/table-CCHvUzMA.js (New) 1.75kB 1.75kB 100.0% 🚀
assets/app.workbench-CWWWevF9.js (New) 1.58kB 1.58kB 100.0% 🚀
assets/tabs-DidKU7EM.js (New) 1.39kB 1.39kB 100.0% 🚀
assets/app.repos-DZ79PcPW.js (New) 1.07kB 1.07kB 100.0% 🚀
assets/input-ImTG9lnD.js (New) 796 bytes 796 bytes 100.0% 🚀
assets/file-cog-Rv-3NvVT.js (New) 758 bytes 758 bytes 100.0% 🚀
assets/docs._slug-lWYWJVpK.js (New) 549 bytes 549 bytes 100.0% 🚀
assets/app.maintainer-BlAE6FSc.js (New) 502 bytes 502 bytes 100.0% 🚀
assets/app.owner-BGz730PG.js (New) 474 bytes 474 bytes 100.0% 🚀
assets/app.commands-Bl_6QcIe.js (New) 455 bytes 455 bytes 100.0% 🚀
assets/app.playground-CjKjHegm.js (New) 442 bytes 442 bytes 100.0% 🚀
assets/index-Bl91cJg5.js (New) 438 bytes 438 bytes 100.0% 🚀
assets/app.digest-DxW_DhIv.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/eye-off-CTOmKePG.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/app.miner-Bh1xZawr.js (New) 422 bytes 422 bytes 100.0% 🚀
assets/key-round-DI53oYHG.js (New) 355 bytes 355 bytes 100.0% 🚀
assets/bot-Cb-_QiSp.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/git-pull-request-arrow-BUpdlu4H.js (New) 321 bytes 321 bytes 100.0% 🚀
assets/list-checks--z4vc2qZ.js (New) 279 bytes 279 bytes 100.0% 🚀
assets/compass-CtfJb0wG.js (New) 251 bytes 251 bytes 100.0% 🚀
assets/history-bHZgolwN.js (New) 237 bytes 237 bytes 100.0% 🚀
assets/message-square-BeJRQ6-s.js (New) 233 bytes 233 bytes 100.0% 🚀
assets/lock-TLg1DF6R.js (New) 206 bytes 206 bytes 100.0% 🚀
assets/play-Cc_H2p2M.js (New) 190 bytes 190 bytes 100.0% 🚀
assets/circle-check-A4GlsMNE.js (New) 178 bytes 178 bytes 100.0% 🚀
assets/add-scalar-classes-DqBKw12A.js (Deleted) -2.16MB 0 bytes -100.0% 🗑️
assets/tanstack-vendor-DKjw4eLl.js (Deleted) -955.9kB 0 bytes -100.0% 🗑️
assets/docs.fumadocs-spike-api-reference-D_U0xijN.js (Deleted) -443.45kB 0 bytes -100.0% 🗑️
assets/AgentScalarChatInterface.vue-Bna5YUCh.js (Deleted) -201.69kB 0 bytes -100.0% 🗑️
assets/modal--7-Q8PHi.js (Deleted) -184.5kB 0 bytes -100.0% 🗑️
assets/client-DiEopHiu.js (Deleted) -151.47kB 0 bytes -100.0% 🗑️
assets/maintainer-panel-DgvMAke1.js (Deleted) -78.97kB 0 bytes -100.0% 🗑️
assets/routes-Cc1Gqjjk.js (Deleted) -35.88kB 0 bytes -100.0% 🗑️
assets/owner-panel-CBXHsdo5.js (Deleted) -28.26kB 0 bytes -100.0% 🗑️
assets/app-PtM0Dshx.js (Deleted) -25.82kB 0 bytes -100.0% 🗑️
assets/ui-vendor-BKgrotVh.js (Deleted) -24.57kB 0 bytes -100.0% 🗑️
assets/fairness-D416djCn.js (Deleted) -23.13kB 0 bytes -100.0% 🗑️
assets/miner-panel-CS4bTURZ.js (Deleted) -20.49kB 0 bytes -100.0% 🗑️
assets/api._op-DMum7Zmw.js (Deleted) -17.51kB 0 bytes -100.0% 🗑️
assets/self-hosting-docs-audit-aT0EngjA.js (Deleted) -16.6kB 0 bytes -100.0% 🗑️
assets/docs-client-loader-WPCHW3ND.js (Deleted) -15.51kB 0 bytes -100.0% 🗑️
assets/playground-panel-BpBx1wDB.js (Deleted) -14.35kB 0 bytes -100.0% 🗑️
assets/label-policy-BBNS6y7Y.js (Deleted) -11.51kB 0 bytes -100.0% 🗑️
assets/app.audit-B9fPhF94.js (Deleted) -10.22kB 0 bytes -100.0% 🗑️
assets/app.config-generator-Df0VqSF9.js (Deleted) -10.06kB 0 bytes -100.0% 🗑️
assets/maintainers-DON1eQ6R.js (Deleted) -8.06kB 0 bytes -100.0% 🗑️
assets/miners-DxL547n0.js (Deleted) -7.91kB 0 bytes -100.0% 🗑️
assets/agents-DWtbHt1m.js (Deleted) -7.74kB 0 bytes -100.0% 🗑️
assets/commands-panel-UzGT8SZn.js (Deleted) -6.74kB 0 bytes -100.0% 🗑️
assets/maintainer-workflow-mknoxnP7.js (Deleted) -6.52kB 0 bytes -100.0% 🗑️
assets/digest-panel-B2JBEDf-.js (Deleted) -6.15kB 0 bytes -100.0% 🗑️
assets/repos._owner._repo.quality-DyrpSbX6.js (Deleted) -6.14kB 0 bytes -100.0% 🗑️
assets/docs-nav-Dx1Po9cR.js (Deleted) -6.12kB 0 bytes -100.0% 🗑️
assets/docs.index-Dy6jB7Qf.js (Deleted) -6.01kB 0 bytes -100.0% 🗑️
assets/api.index-Dvm2kbl8.js (Deleted) -4.7kB 0 bytes -100.0% 🗑️
assets/docs-Bm2Dkekm.js (Deleted) -3.01kB 0 bytes -100.0% 🗑️
assets/api-CLpkEi3T.js (Deleted) -2.66kB 0 bytes -100.0% 🗑️
assets/docs-page-8sLajaYJ.js (Deleted) -2.14kB 0 bytes -100.0% 🗑️
assets/table-QUm18D5Y.js (Deleted) -1.75kB 0 bytes -100.0% 🗑️
assets/app.workbench-BW9zhRps.js (Deleted) -1.58kB 0 bytes -100.0% 🗑️
assets/tabs-BmzAY5Ur.js (Deleted) -1.39kB 0 bytes -100.0% 🗑️
assets/app.repos-DaO8oOPG.js (Deleted) -1.07kB 0 bytes -100.0% 🗑️
assets/input-6nXLRlX6.js (Deleted) -796 bytes 0 bytes -100.0% 🗑️
assets/file-cog-DB0NOqHr.js (Deleted) -758 bytes 0 bytes -100.0% 🗑️
assets/docs._slug-DwBSrfWV.js (Deleted) -549 bytes 0 bytes -100.0% 🗑️
assets/app.maintainer-Cn_E3tWI.js (Deleted) -502 bytes 0 bytes -100.0% 🗑️
assets/app.owner-B3VdT-Qt.js (Deleted) -474 bytes 0 bytes -100.0% 🗑️
assets/app.commands-C7vJ2UUY.js (Deleted) -455 bytes 0 bytes -100.0% 🗑️
assets/app.playground-DO6yL80B.js (Deleted) -442 bytes 0 bytes -100.0% 🗑️
assets/index-CDV0lvdd.js (Deleted) -438 bytes 0 bytes -100.0% 🗑️
assets/app.digest-mYFEHaWZ.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/eye-off-CBBnJLw3.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/app.miner-BjyvbkH4.js (Deleted) -422 bytes 0 bytes -100.0% 🗑️
assets/key-round-D_nNecCZ.js (Deleted) -355 bytes 0 bytes -100.0% 🗑️
assets/bot-BG9JsYVe.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/git-pull-request-arrow-DChPhqm1.js (Deleted) -321 bytes 0 bytes -100.0% 🗑️
assets/list-checks-Bo06tN4Z.js (Deleted) -279 bytes 0 bytes -100.0% 🗑️
assets/compass-dZcmrId7.js (Deleted) -251 bytes 0 bytes -100.0% 🗑️
assets/history-DeBPIPVM.js (Deleted) -237 bytes 0 bytes -100.0% 🗑️
assets/message-square-DjWduvq3.js (Deleted) -233 bytes 0 bytes -100.0% 🗑️
assets/lock-zS6pWogv.js (Deleted) -206 bytes 0 bytes -100.0% 🗑️
assets/play-Cmidilh3.js (Deleted) -190 bytes 0 bytes -100.0% 🗑️
assets/circle-check-Cxe6C9kD.js (Deleted) -178 bytes 0 bytes -100.0% 🗑️

@loopover-orb loopover-orb Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LoopOver approves — the gate is satisfied and CI is green.

@loopover-orb
loopover-orb Bot merged commit 910fa59 into main Jul 31, 2026
10 checks passed
@loopover-orb
loopover-orb Bot deleted the docs/contributor-relationship-policy-9746 branch July 31, 2026 01:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs(policy): contributor-relationship policy + recourse — one page, every claim linked to its mechanism

1 participant