Public: anyone can read this; the crew can change it.

An outsider can report a problem or offer a change on a public app or repository without being taught #605

shipped production is serving it opened this
opened this

Pillar: P5 Open to agents (umbrella #591). One run, started fresh from today's main.

Outcome (what a person sees). On a public app or repository, a stranger (a person or an agent) sees how to report a problem and how to offer a change, and can do it.

Today. The fork-and-propose flow exists (src/actions/contribute.ts). Filing an issue needs an account and a write path; nothing says how to an outsider.

Acceptance.

  • [ ] A visible "Report a problem" on public repository and app pages: signed-in, or anonymous with a rate limit per address and a honeypot. It opens an issue marked as from outside, with the page it came from; the owner sees it in the feed.
  • [ ] "Offer a change" explains in three lines and leads a signed-in person to the existing fork-and-propose flow.
  • [ ] Private repositories answer not_found exactly as today.
  • [ ] The Muse test, in the pull: an agent given only a public app URL finds the report route (through the manifest, #604, if it has landed; else the page) and files one.

Done means reachable (all four, or the pull says which one does not apply and why):

  • Page: the two links on public pages
  • MCP: report {repo, title, body, page?}
  • Test: anonymous report on public works and is rate limited; private is not_found
  • Look: a public app page with the links, on the pull

Start from: src/actions/issues.ts, src/actions/contribute.ts, src/core/ratelimit.ts, src/web/pages/repo.ts, src/web/pages/apps-name.ts, src/http/api.ts, src/http/mcp.ts.

Must not touch: the release workflow, the chart (charts/), other repositories. Do not loosen any access check.

commented

Added acceptance (owner's contract rule, now in the direction and docs/VISION.md):

  • [ ] Contract: one interface per job. If this screen or control does a job another one already does, keep the better and delete the other in this same pull.
  • [ ] Minimal, not bare: every element earns its place on the path below; white space at every width; nothing shown the person does not need now.
  • [ ] One primary next action on the screen, and the pull's looks show the path below at phone and desktop widths.
  • [ ] The pull says what it removes for every screen or control it adds.

The path: an outsider (person or agent) lands on a public app or repository page and hit a problem; the one action is Report a problem; they leave with an issue number.

commented

Sharpened before a run starts (from tracing the Muse failure, 2026-10-05). This comment is part of the brief.

What an outside agent meets today on cheffryjames/cheffry-s-dungeon (app at game.cheffryjames.com), anonymous:

steprequestanswerwhat it needed
1GET game.cheffryjames.com/200; OG tags; no link to the repository, no report link; only "sign in"a link to the source and to "report a problem"
2GET /llms.txt, /.well-known/* on the app host404, except security.txt → 302 to the forge's, whose Contact is a profile pagea machine-readable "how to report / how to offer a change"
3GET forge…/cheffryjames/cheffry-s-dungeon200; generic description "Your code, your machine."; no <link rel> for the repoper-repo description and links
4GET …/issues/new303 → /_plat/login → Forgejo sign-inan anonymous report path
5POST /api/v1/repos/…/issues401 authenticate with a bearer token or account credentials; no WWW-Authenticate, no next stepan error that names the report path
6POST /mcp initialize401 with a correct WWW-Authenticate + resource metadata (good)an MCP tool open to anonymous, or the report route in the error
7GET /signup403 "invite-only, ask the owner"the same report path, linked

Added acceptance (all required):

  • [ ] Literal replay test, in the pull and in the gate: run steps 1-7 above against a public app and its repo with no credentials; the sequence ends with a report visible on that repo. No account, no human help.
  • [ ] Generic agent test, in the pull: a browsing agent given only the app's URL ("this game is down; tell its makers") files a report. Record what it followed.
  • [ ] Standards, not prose. The app page (served through the forge edge, so every public app gets it without code changes) and the repo page carry <link rel="help">-style relations plus an HTTP Link: header pointing at the report document; /llms.txt and /.well-known/ on the forge and on app hosts describe, in a few lines of machine-readable text, "report a problem" (method, URL, fields, limits) and "offer a change". Use existing conventions (Link header, llms.txt, security.txt Contact: pointing at the report URL rather than a profile); invent nothing a stranger would not look for.
  • [ ] Errors carry the next step. The 401 on POST …/issues, the 303 on /issues/new, the 403 on /signup, and the MCP 401 each name the anonymous report route (JSON field + Link header for API/MCP; a visible link for pages).

Safety (security is the owner's top priority; outsider text recently reached the crew and that hole was closed):

  • [ ] An outsider report is text only (no attachments, no markdown that renders links or images live), title and body size-capped, rate-limited per source, honeypot, and stored marked untrusted.
  • [ ] It is shown everywhere as "from outside" and is not an issue the crew can see: it never enters dispatch, a brief, a comment thread an agent reads, or the MCP for agent tokens, and starts no run, until a person with write access accepts it. Accepting turns it into an ordinary issue authored by that person, quoting the outside text. Test this: a report on a repo with autonomy on starts nothing and appears in no brief.
  • [ ] No account is created as a side effect. No email or address shown publicly. Private repos and private apps answer not_found exactly as today.
  • [ ] Nothing in this issue's pull or docs describes how to abuse the path.

Done means reachable: page (the links on public app and repo pages, the accept button for the owner), API + MCP (report {repo, title, body, page?} open to anonymous), the two tests above, and a look (the game's page and the repo's page showing the links, plus the owner's view of a pending outside report).

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs