# Community project readiness panel: copy specification

Version 1.0 · Project Keystone · 2026-08-13

## Outcome

The panel should answer four questions in one scan:

1. **Can people contribute now?**
2. **Which terms and license apply?**
3. **Is a real, active sponsor accountable for the project?**
4. **How does funding work—and what is not promised?**

Readiness is operational guidance, not a trust badge. “Ready” means the configured checks pass; it does not certify project quality, guarantee review, reserve funds, promise payment, or guarantee a grant.

## Evidence boundary

This specification was calibrated against the public agent-readiness response for Project Keystone on 2026-08-13. The response exposed four blocking checks and three warnings through stable codes. “Before” strings below are the observed API messages, not an assertion about every current UI surface. Proposed copy is designed to remain accurate for pass, fail, unknown, and not-applicable states.

## Information hierarchy and placement

### 1. Project header — compact summary

Place one status chip beside the project status:

- **Ready for contributions** — all blocking checks pass and intake is open.
- **Setup needs attention** — at least one warning fails, but no blocking check fails.
- **Not ready for contributions** — at least one blocking check fails or intake is closed.
- **Readiness unavailable** — the check result is stale or could not be loaded.

Do not use a bare “Ready” badge. The noun phrase tells people what the state applies to.

### 2. Contributor-facing readiness panel — below project summary, before opportunities

Use a four-row card in this order:

1. Contribution intake
2. Terms & license
3. Sponsor
4. Funding

Each row contains: status icon, plain-language heading, one-sentence consequence, “View details,” and an action only when the viewer can perform it. Contributors see explanations; sponsors and stewards may also see corrective actions.

### 3. Opportunity and contribution surfaces — contextual disclosure

- Above **Claim opportunity**, repeat intake status and the terms version that will be recorded.
- Above **Submit contribution**, state whether the opportunity is volunteer or paid and link to the governing terms.
- In any funding or grant module, keep the sponsor-managed / non-escrow disclosure adjacent to the amount or goal—not hidden behind an info icon.

### 4. Sponsor workspace — actionable detail

Place failed checks at the top, then warnings, then passed checks. Show who can fix each item and the exact destination of the action. Never show a disabled action to a contributor without explaining that a sponsor or steward must act.

## Before / after copy table

| Stable code | Observed API copy (“before”) | Proposed contributor copy (“after”) | Sponsor/steward action |
|---|---|---|---|
| `project_title_present` | Project title is present. | **Project details complete.** The project has a title people can identify. | **Edit project details** |
| `project_goal_present` | Project goal is present. | **Goal published.** Contributors can see the outcome this project is working toward. | **Edit project goal** |
| `sponsor_active` | Sponsor profile is active. | **Sponsor active.** {sponsorName} is the accountable project sponsor. | **View sponsor profile** |
| `active_project_terms` | Active project terms use a specific license posture. | **Terms and license published.** Contributions are governed by {termsLabel}, version {termsVersion}; license: {licenseLabel}. | **Review terms** / **Publish terms** |
| `sponsor_payout_ready` | Sponsor can receive router-compatible project funding. | **Sponsor funding route ready.** The sponsor can receive compatible project funding; this does not fund or reserve money for contributors. | **Manage funding route** |
| `funding_allocation_disclosure` | Funding-enabled projects disclose a sponsor-managed allocation plan. | **Allocation plan disclosed.** The sponsor explains how received project funds may be allocated. Allocations remain sponsor-managed unless a separate paid contract says otherwise. | **Edit allocation plan** |
| `funding_copy_uses_sponsor_managed_disclosure` | Funding copy avoids custody, escrow, locked-fund, and guaranteed payment or refund claims. | **Funding terms are explicit.** Project funding is sponsor-managed, not escrowed; contributions do not create a payment or refund guarantee. | **Review funding disclosure** |

The first two rows may live in an expanded “Project details” group; the four product-critical concepts—intake, terms/license, sponsor, and funding—must remain visible without expansion.

## State-specific copy deck

### Contribution intake

| State | Heading | Supporting copy | Primary action |
|---|---|---|---|
| Open | **Contributions open** | You can claim available opportunities or submit work under the active project terms. | **Browse opportunities** |
| Paused | **New contributions paused** | Existing reviews can continue, but the project is not accepting new claims or submissions. | **View project updates** |
| Closed | **Contribution intake closed** | The project is no longer accepting new work. Published contributions remain available to review. | **View contributions** |
| Unknown | **Intake status unavailable** | We could not confirm whether new contributions are being accepted. Check again before starting work. | **Retry status check** |

Sponsor correction for paused/closed states: **Manage contribution intake**.

### Terms and license posture

| State | Heading | Supporting copy | Primary action |
|---|---|---|---|
| Pass | **Terms and license published** | Contributions use {termsLabel}, version {termsVersion}; license: {licenseLabel}. | **Review terms** |
| Missing | **Terms required before contribution** | No active project terms are available. Do not claim or submit work until a sponsor or steward publishes them. | Contributor: **View project updates** · Sponsor: **Publish terms** |
| Unspecific license | **License choice required** | The active terms do not identify how submitted work may be reused. A sponsor or steward must select a specific license posture. | Sponsor: **Choose license posture** |
| Superseded | **Terms update pending** | A newer terms version exists but is not active. New work continues under {activeTermsVersion} until the update is published. | **Compare terms versions** |
| Unknown | **Terms status unavailable** | We could not verify the active terms or license. Check again before contributing. | **Retry status check** |

Never label a generic “all rights reserved / no reuse” posture as missing if it is an explicit, valid choice. Display the actual posture in plain language.

### Sponsor readiness

| State | Heading | Supporting copy | Primary action |
|---|---|---|---|
| Active | **Sponsor active** | {sponsorName} is the accountable project sponsor. | **View sponsor profile** |
| Missing | **Sponsor required** | This project has no active sponsor to manage terms, intake, and project decisions. New contributions should remain blocked. | Sponsor/admin: **Assign sponsor** |
| Inactive | **Sponsor unavailable** | The assigned sponsor is not currently active. Project decisions and funding actions may be delayed. | Admin: **Resolve sponsor status** |
| Unknown | **Sponsor status unavailable** | We could not verify the assigned sponsor. Check again before relying on project decisions. | **Retry status check** |

Do not call a sponsor “verified” unless a separate, named verification process supports that claim.

### Funding disclosure

| State | Heading | Supporting copy | Primary action |
|---|---|---|---|
| Disabled | **No project funding enabled** | This project is not currently collecting project funding. Volunteer contributions do not create a payment claim. | **Learn how funding works** |
| Enabled, complete | **Sponsor-managed funding disclosed** | Received funds are managed by the sponsor under the published allocation plan. Funds are not held in project escrow. | **View allocation plan** |
| Enabled, plan missing | **Funding plan required** | Funding is enabled, but the sponsor has not published how received funds may be allocated. | Sponsor: **Publish allocation plan** |
| Route not ready | **Sponsor funding route unavailable** | The sponsor cannot currently receive compatible project funding through the platform. | Sponsor: **Manage funding route** |
| Grant history none | **No verified project grants yet** | No discretionary grants have been verified for this project. This does not predict future awards. | **How grants are verified** |
| Grant history present | **Verified grant activity available** | Review the verified grant record. Grants are discretionary and do not establish a payment promise for other contributions. | **View grant activity** |
| Unknown | **Funding status unavailable** | We could not load the project’s funding disclosure. Do not infer that funds are available or reserved. | **Retry status check** |

Required persistent disclosure whenever funding or grants are mentioned:

> Project funding is sponsor-managed, not escrowed. Contributions do not guarantee payment, reimbursement, or a grant. Any paid obligation requires separate explicit terms.

## Overall status logic

Use the most consequential verified state:

1. If any blocking check fails, show **Not ready for contributions**.
2. Else if intake is not open, show the exact intake label rather than “Ready.”
3. Else if any warning fails, show **Setup needs attention**; contribution may continue only when the failed warning does not change the work’s compensation or governing terms.
4. Else show **Ready for contributions**.
5. If blocking data is unavailable or stale beyond the product’s freshness threshold, show **Readiness unavailable**, not a cached success.

The detail panel must list every failed or unknown blocking check. Passed warnings must not inflate the overall status into a stronger claim.

## Actions and permissions

| Viewer | May see | May act |
|---|---|---|
| Public visitor | Status, consequence, public terms, sponsor, funding disclosure | View public details; browse opportunities |
| Contributor | All public detail plus terms version recorded on their work | Claim/submit when eligible; retry checks; view updates |
| Sponsor / steward | All detail plus failure causes and ownership | Publish terms, change intake, edit allocation, manage permitted sponsor settings |
| Admin | Platform and sponsor-assignment failures | Resolve moderation or sponsor assignment where authorized |

Action labels describe the destination, not a vague “Fix.” If the viewer lacks permission, replace the button with: **A sponsor or steward must complete this step.**

## Accessibility and localization requirements

- Pair icons and color with visible status text: **Passed**, **Action needed**, **Unavailable**, or **Not applicable**.
- Use a semantic heading for the panel and a list for checks; do not encode the state only in tooltips.
- When a recheck completes, announce only the changed summary in a polite live region.
- Put the consequence before the remediation action so screen-reader users understand why it matters.
- Keep headings under 40 characters where localization permits; do not concatenate sentence fragments in code.
- Localize full messages with named variables (`{sponsorName}`, `{termsVersion}`), and expose dates in the reader’s locale with an unambiguous machine timestamp.
- “View details” must have an accessible name that includes the row, such as “View funding details.”
- Preserve the last confirmed timestamp: **Checked {checkedAt}.**

## Empty, loading, stale, and error states

- Loading: **Checking project readiness…**
- No checks configured: **Readiness checks are not configured for this project.**
- Network/API error: **Readiness could not be checked. No project settings were changed.**
- Stale result: **Status may be outdated. Last confirmed {checkedAt}.**
- Recheck success with no change: **Readiness checked. No status changes.**

Never fall back from an error to “Ready.”

## Acceptance checklist

- All four critical concepts appear without expanding the panel.
- Failed blocking checks state the contributor consequence.
- Terms copy names both the version and license posture.
- Sponsor copy identifies accountability without claiming unsupported verification.
- Funding copy distinguishes sponsor management from escrow and from a paid obligation.
- Intake copy distinguishes open, paused, closed, and unknown.
- Viewer permissions determine action visibility.
- Every state works without color and includes a timestamp or freshness behavior.
- No string promises funding, payment, reimbursement, review, acceptance, or a grant.

