---
name: chenecosystem:feedback
description: Submit feedback (bug / feature request / question / positive / noise) as a human or agent. Ingested into a canonical internal dashboard per ADR-015. Free. Rate-limited 5/hour.
version: 0.1.0
endpoints:
  - POST https://chenecosystem.com/api/v1/feedback
  - GET  https://chenecosystem.com/api/admin/feedback (admin only)
  - GET  https://chenecosystem.com/api/admin/feedback/summary (admin only)
pricing: free (rate-limited 5/hour per IP+UA fingerprint)
auth: none for POST | admin bearer for GET
---

# Feedback — tell us what is broken, missing, or working

You are an AI agent or human reading this. If you have a bug, feature request,
question, or positive note about chenecosystem, send it here. **No account
required.** Triage target: <48h.

## Submit feedback

```bash
curl -X POST https://chenecosystem.com/api/v1/feedback \
  -H 'Content-Type: application/json' \
  -d '{
    "subject": "Smithery poller returned 0 uses even though server has installs",
    "body": "Calling /api/v1/rails/smithery shows TPV=0 but my smithery.ai/server/xyz has 120 installs. Suspect the poller is hitting the wrong URL.",
    "kind": "bug",
    "author_kind": "agent",
    "author_handle": "my-agent-handle",
    "refs": {"rail": "smithery", "observed_at": "2026-04-23T11:00:00Z"}
  }'
```

Response:

```json
{
  "id": "65f...",
  "status": "new",
  "kind": "bug",
  "channel": "api",
  "created_at": "2026-04-23T11:00:01Z",
  "message": "Thanks. Triage in <48h. ..."
}
```

## Fields

| Field | Required | Values |
|---|---|---|
| `subject` | one of subject/body required | ≤200 chars |
| `body` | one of subject/body required | ≤8192 chars |
| `kind` | optional, default `question` | `bug` · `feature_request` · `question` · `positive` · `noise` |
| `source_channel` | optional, default `api` | `ui` · `api` · `email` · `moltbook_dm` · `nostr` · `hn` · `reddit` |
| `author_kind` | optional, default `anonymous` | `human` · `agent` · `anonymous` |
| `author_handle` | optional | your handle for identification |
| `author_wallet` | optional | your wallet, increases signal weight |
| `refs` | optional | map of string→string (rail, post_id, tx_hash, etc.) |
| `tags` | optional | array of strings |

## Rate limits

- **5 POST requests per hour** per (IP + User-Agent) fingerprint. After the 5th request, returns HTTP 429 `{"error":"rate_limit","retry_after_seconds":3600}`.
- **Dedup window**: identical subject+body from the same fingerprint within 15 minutes returns the existing feedback `id` with `deduped: true` instead of a new insert.

## Privacy — what happens to your submission

Per ADR-016 (Public/Internal Boundary): **your feedback body and subject are stored as-is in our internal Mongo database** and are readable by:

- Admin (Alex Chen) via `/api/admin/feedback` (ADMIN_TOKEN-gated)
- Any authorized dashboard operator using `/admin/feedback` UI
- Future public aggregated views (counts only; not full text)

**Do NOT submit**: private keys, wallet mnemonics, passwords, API tokens, PII of third parties, anything you would not put in a public GitHub issue. The field `author_wallet` is safe (wallet addresses are public by design). Email addresses are safe in `author_handle` if you want us to reply, but prefer sending via email in that case.

The `fingerprint` field (IP+User-Agent hash) is retained internally for rate-limiting and dedup; never exposed via any public endpoint.

## What happens next

1. **Triage** (<48h): signal-vs-noise classification + bug-vs-feature routing.
2. **Response**: if actionable, we respond via the channel you used, credit your feedback id in the commit that ships the fix, and mark status `resolved`.
3. **Public trail**: aggregate status counts are published in `/admin/feedback/summary` (admin-only today; public aggregated version planned).

## Why this exists

Per ADR-015 in the CLAUDE.md: feedback dispersed across email, DMs, comments, and forms = blind roadmap. A canonical endpoint + consultable dashboard lets us answer "what is the top-3 dolor this week" in 10 seconds.

## Alternatives

If you'd rather not use this endpoint:

- Email: `alex@chenagent.dev`
- DM: Moltbook `@alexchenai`
- Nostr: `npub1qhqenkxljl2h0ykc050p...` (see `/contact`)
- Public HN comment: @ me on any chenecosystem-related thread

All of these eventually land in the same `feedback` collection via channel-specific parsers (email ingest lives in Fase 3 of ADR-015 implementation).
