peregrine/docs/reference/forgejo-feedback-schema.md
pyr0ball 3458122537
Some checks failed
CI / test (push) Failing after 21s
fix: rename setup.sh → install.sh; four installer gaps from #71
- Rename setup.sh to install.sh (standardise with cf-orch installer pattern)
- Remove hardcoded dev-machine path from activate_git_hooks(); go straight
  to .githooks/ core.hooksPath fallback — the absolute path was only valid
  on the author's machine and surprised self-hosters
- Add capture_license_key(): optional CFG-XXXX-… prompt after setup_env(),
  writes CF_LICENSE_KEY + HEIMDALL_URL into .env when a valid key is entered
- Fix next-steps port: read STREAMLIT_PORT from .env instead of hardcoding
  8501 (Docker default is 8502; users who customise the port saw a wrong URL)
- Update .env.example: STREAMLIT_PORT=8502 (Docker default, not bare-metal 8501)
- Fix stale git clone URL in docs/getting-started/installation.md:
  git.circuitforge.io → git.opensourcesolarpunk.com/Circuit-Forge/peregrine
- Update all setup.sh references across manage.sh, Makefile, CONTRIBUTING.md,
  README.md, and docs/ to install.sh

Closes #71
2026-04-05 23:33:51 -07:00

4.6 KiB

Forgejo Feedback API — Schema & Bug Bot Setup

API Endpoints Used

Operation Method Endpoint
List labels GET /repos/{owner}/{repo}/labels
Create label POST /repos/{owner}/{repo}/labels
Create issue POST /repos/{owner}/{repo}/issues
Upload attachment POST /repos/{owner}/{repo}/issues/{index}/assets
Post comment POST /repos/{owner}/{repo}/issues/{index}/comments

Base URL: https://git.opensourcesolarpunk.com/api/v1


Issue Creation Payload

POST /repos/{owner}/{repo}/issues
{
  "title": "string",
  "body":  "markdown string",
  "labels": [1, 2, 3]   // array of label IDs (not names)
}

Response (201):

{
  "number": 42,
  "html_url": "https://git.opensourcesolarpunk.com/pyr0ball/peregrine/issues/42"
}

Issue Body Structure

The build_issue_body() function produces this markdown layout:

## 🐛 Bug | ✨ Feature Request | 💬 Other

<user description>

### Reproduction Steps          ← bug type only, when repro provided

<repro steps>

### Context

- **page:** Home
- **version:** v0.2.5-61-ga6d787f   ← from `git describe`; "dev" inside Docker
- **tier:** free | paid | premium
- **llm_backend:** ollama | vllm | claude_code | ...
- **os:** Linux-6.8.0-65-generic-x86_64-with-glibc2.39
- **timestamp:** 2026-03-06T15:58:29Z

<details>
<summary>App Logs (last 100 lines)</summary>

... log content (PII masked) ...


</details>

### Recent Listings             ← only when include_diag = True

- [Title @ Company](url)

---
*Submitted by: Name <email>*   ← only when attribution consent checked

Screenshot Attachment

Screenshots are uploaded as issue assets, then embedded inline via a follow-up comment:

### Screenshot

![screenshot](https://git.opensourcesolarpunk.com/attachments/<uuid>)

This keeps the issue body clean and puts the screenshot in a distinct comment.


Labels

Label Color Applied when
beta-feedback #0075ca Always
needs-triage #e4e669 Always
bug #d73a4a Type = Bug
feature-request #a2eeef Type = Feature Request
question #d876e3 Type = Other

Labels are looked up by name on each submission; missing ones are auto-created via _ensure_labels().


Bug Bot Account Setup

The token currently bundled in .env is pyr0ball's personal token. For beta distribution, create a dedicated bot account so the token has limited scope and can be rotated independently.

Why a bot account?

  • Token gets bundled in beta testers' .env — shouldn't be tied to the repo owner's account
  • Bot can be limited to issue write only (cannot push code, see private repos, etc.)
  • Token rotation doesn't affect the owner's other integrations

Steps (requires Forgejo admin panel — API admin access not available on this token)

  1. Create bot account at https://git.opensourcesolarpunk.com/-/admin/users/new

    • Username: peregrine-bot (or cf-bugbot)
    • Email: a real address you control (e.g. bot+peregrine@circuitforge.tech)
    • Set a strong password (store in your password manager)
    • Check "Prohibit login" if you want a pure API-only account
  2. Add as collaborator on pyr0ball/peregrine:

    • Settings → Collaborators → Add peregrine-bot with Write access
    • Write access is required to create labels; issue creation alone would need only Read+Comment
  3. Generate API token (log in as the bot, or use admin impersonation):

    • User Settings → Applications → Generate New Token
    • Name: peregrine-feedback
    • Scopes: issue (write) — no repo code access needed
    • Copy the token — it won't be shown again
  4. Update environment:

    FORGEJO_API_TOKEN=<new bot token>
    FORGEJO_REPO=pyr0ball/peregrine
    FORGEJO_API_URL=https://git.opensourcesolarpunk.com/api/v1
    

    Update both .env (dev machine) and any beta tester .env files.

  5. Verify the bot can create issues:

    curl -s -X POST https://git.opensourcesolarpunk.com/api/v1/repos/pyr0ball/peregrine/issues \
      -H "Authorization: token <bot-token>" \
      -H "Content-Type: application/json" \
      -d '{"title":"[TEST] bot token check","body":"safe to close","labels":[]}'
    

    Expected: HTTP 201 with number and html_url in response.

Future: Heimdall token management

Once Heimdall is live, the bot token should be served by the license server rather than bundled in .env. The app fetches it at startup using the user's license key → token is never stored on disk and can be rotated server-side. Track as a future Heimdall feature.