Files
Jonathan Miller dd6e114c70
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Branch Policy Check / Verify merge target (pull_request) Has been cancelled
Universal: PR Check / Branch Policy (pull_request) Has been cancelled
PR RC Release / Build RC Release (pull_request) Has been cancelled
Universal: PR Check / Validate PR (pull_request) Has been cancelled
Branch Cleanup / Delete merged branch (pull_request) Has been cancelled
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || 'development' }}) (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
chore: move CLAUDE.md to .mokogitea/ directory
Also includes:
- Auto-sync manifest.xml to DB on push to default branch
- Wiki pages for custom fields, custom statuses, manifest settings
- Updated wiki home page with all current features

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-06 09:43:15 -05:00

137 lines
4.9 KiB
Markdown

# Custom Fields
Custom fields allow organizations to define structured metadata that appears in issue sidebars and repository settings across all repos in the organization.
## Overview
Custom fields are defined at the **organization level** in Org Settings > Custom Fields. Each field has a scope:
- **Issue scope** — appears in the issue sidebar for inline editing
- **Repo scope** — appears in Repository Settings > Metadata for repo-level values
## Field Types
| Type | Description | Example |
|------|-------------|---------|
| `text` | Free-form text input | "Affected Component" |
| `number` | Numeric input | "Story Points" |
| `date` | Date picker | "Due Date" |
| `dropdown` | Select from predefined options | "Priority: Low/Medium/High/Critical" |
| `checkbox` | Boolean toggle | "Requires QA" |
| `url` | URL input | "Design Link" |
## Org Settings
Navigate to **Organization Settings > Custom Fields** to manage field definitions.
Each field has:
| Field | Description |
|-------|-------------|
| Name | Display name |
| Scope | `issue` (sidebar) or `repo` (metadata) |
| Type | One of: text, number, date, dropdown, checkbox, url |
| Options | JSON array for dropdown options (e.g., `["Low","Medium","High"]`) |
| Description | Help text (shown as tooltip) |
| Sort Order | Controls display order |
| Is Active | Inactive fields are hidden from new forms but preserved on existing entities |
## Issue Sidebar
Issue-scoped fields appear in the sidebar between labels and milestones. Dropdown fields auto-submit on change. Text/number/date fields display their current value.
Each field renders as an inline form posting to:
```
POST /{owner}/{repo}/issues/{issue_id}/custom-fields/{field_id}
```
## Repository Metadata
Repo-scoped fields appear on the **Repository Settings > Metadata** page. All fields for the org are shown with their current values for the repository. Values are saved via form POST.
## Issue Template Integration
Custom fields can be pre-filled from issue template YAML frontmatter:
```yaml
name: Bug Report
about: Report a bug
custom_fields:
Priority: High
Affected Component: Backend
```
When a new issue is created from this template, the sidebar shows the custom fields with the specified defaults pre-selected.
## API
### Issue-Level Custom Fields
| Method | Path | Description |
|--------|------|-------------|
| GET | `/api/v1/repos/{owner}/{repo}/issues/{index}/custom-fields` | Get field values for an issue |
| PUT | `/api/v1/repos/{owner}/{repo}/issues/{index}/custom-fields` | Set field values (name-value map) |
### Repo-Level Metadata
| Method | Path | Description |
|--------|------|-------------|
| GET | `/api/v1/repos/{owner}/{repo}/metadata` | Get repo metadata field values |
| PUT | `/api/v1/repos/{owner}/{repo}/metadata` | Set repo metadata field values |
### Org-Level Definitions
| Method | Path | Description |
|--------|------|-------------|
| GET | `/api/v1/orgs/{org}/custom-fields` | List all field definitions |
| POST | `/api/v1/orgs/{org}/custom-fields` | Create a field definition |
| DELETE | `/api/v1/orgs/{org}/custom-fields/{id}` | Delete a field definition |
## Database
### Tables
**`custom_field_def`** — field definitions (org-level)
| Column | Type | Description |
|--------|------|-------------|
| id | bigint | Primary key |
| owner_id | bigint | Org ID (0 = legacy repo-level) |
| repo_id | bigint | 0 for org-level definitions |
| scope | varchar(10) | `issue` or `repo` |
| name | varchar | Field name |
| field_type | varchar(20) | text, number, date, dropdown, checkbox, url |
| description | text | Help text |
| options | text | JSON array for dropdown options |
| required | bool | Whether the field is required |
| sort_order | int | Display order |
| is_active | bool | Visibility flag |
**`custom_field_value`** — field values (per entity)
| Column | Type | Description |
|--------|------|-------------|
| id | bigint | Primary key |
| entity_id | bigint | Issue ID or Repo ID |
| entity_type | varchar(10) | `issue` or `repo` |
| field_id | bigint | FK to custom_field_def |
| value | text | The stored value |
### Cascade on Delete
When a field definition is deleted, all associated values in `custom_field_value` are also deleted.
## Relationship to Other Systems
| System | Relationship |
|--------|-------------|
| Update Server | Repo-scoped custom fields with specific names (Extension Name, Display Name, etc.) are read by the update feed generators as the highest-priority metadata source. |
| Manifest Settings | Manifest fields follow the moko-platform schema and are separate from custom fields. Custom fields are user-defined; manifest fields are standardized. |
| Issue Statuses | Custom statuses are a separate feature with their own dedicated table and UI, not implemented as custom fields. |
---
| Revision | Date | Author | Description |
|---|---|---|---|
| 1.0 | 2026-06-06 | Jonathan Miller (@jmiller) | Initial version |