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
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>
137 lines
4.9 KiB
Markdown
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 |
|