{"id":1189,"date":"2026-09-26T05:17:20","date_gmt":"2026-09-26T05:17:20","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1189"},"modified":"2026-09-26T05:17:23","modified_gmt":"2026-09-26T05:17:23","slug":"github-projects-complete-reference-guide-tutorial","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/github-projects-complete-reference-guide-tutorial\/","title":{"rendered":"GitHub Projects \u2014 Complete Reference Guide &amp; Tutorial"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Scope:<\/strong>&nbsp;Current&nbsp;<strong>GitHub Projects \/ Projects v2<\/strong>, not Projects (classic).<br><strong>Audience:<\/strong>&nbsp;Developers, DevOps engineers, engineering managers, product managers, project administrators, platform teams, and GitHub organization owners.<br><strong>Last verified:<\/strong>&nbsp;2026-09-26 against current GitHub documentation.<br><strong>Learning style:<\/strong>&nbsp;Concept -&gt; Why it matters -&gt; Hands-on steps -&gt; Example -&gt; Operational guidance.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">How to Use This Guide<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is both a&nbsp;<strong>tutorial<\/strong>&nbsp;and a&nbsp;<strong>reference manual<\/strong>. You can read it end-to-end, or jump directly to the section you need.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Basic (1-2):<\/strong>\u00a0Understand what Projects is and create your first project.<\/li>\n\n\n\n<li><strong>Fundamentals (3-5):<\/strong>\u00a0Learn items, fields, and GitHub metadata.<\/li>\n\n\n\n<li><strong>Essentials (6-13):<\/strong>\u00a0Master views, tables, boards, roadmaps, filters, iterations, and status tracking.<\/li>\n\n\n\n<li><strong>Intermediate (14-28):<\/strong>\u00a0Add workflows, insights, templates, permissions, documentation, linking, and planning patterns.<\/li>\n\n\n\n<li><strong>Advanced (29-59):<\/strong>\u00a0Automate with Actions, APIs and CLI; design organization-scale operating models; secure and govern Projects.<\/li>\n\n\n\n<li><strong>Complete Reference (60):<\/strong>\u00a0Use the final feature map as a revision\/checklist page.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Running Example Used Throughout<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine an organization named&nbsp;<code>acme-corp<\/code>&nbsp;with three repositories:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>acme-corp\/web\nacme-corp\/api\nacme-corp\/infra\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The organization creates one organization-level project:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Acme Platform Delivery\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended starter fields:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Field<\/th><th class=\"has-text-align-left\" data-align=\"left\">Type<\/th><th class=\"has-text-align-left\" data-align=\"left\">Example values<\/th><th class=\"has-text-align-left\" data-align=\"left\">Purpose<\/th><\/tr><\/thead><tbody><tr><td>Status<\/td><td>Single select<\/td><td>Todo, In Progress, In Review, Done<\/td><td>Workflow state<\/td><\/tr><tr><td>Priority<\/td><td>Single select<\/td><td>P0, P1, P2, P3<\/td><td>Business\/technical priority<\/td><\/tr><tr><td>Sprint<\/td><td>Iteration<\/td><td>Sprint 24, Sprint 25<\/td><td>Time-boxed planning<\/td><\/tr><tr><td>Estimate<\/td><td>Number<\/td><td>1, 2, 3, 5, 8<\/td><td>Capacity planning<\/td><\/tr><tr><td>Team<\/td><td>Single select<\/td><td>Web, API, Platform<\/td><td>Ownership<\/td><\/tr><tr><td>Start date<\/td><td>Date<\/td><td>2026-10-01<\/td><td>Roadmap start<\/td><\/tr><tr><td>Target date<\/td><td>Date<\/td><td>2026-10-15<\/td><td>Roadmap target<\/td><\/tr><tr><td>Release<\/td><td>Text or single select<\/td><td>2026.10<\/td><td>Release grouping<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">The Mental Model<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Repositories] --&gt; B&#91;Issues and Pull Requests]\n    B --&gt; C&#91;GitHub Project]\n    D&#91;Draft Issues] --&gt; C\n    C --&gt; E&#91;Fields]\n    C --&gt; F&#91;Views]\n    C --&gt; G&#91;Workflows]\n    C --&gt; H&#91;Insights]\n    F --&gt; I&#91;Table]\n    F --&gt; J&#91;Board]\n    F --&gt; K&#91;Roadmap]\n    G --&gt; L&#91;Built-in Automation]\n    G --&gt; M&#91;Actions and APIs]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The key idea is simple:&nbsp;<strong>Projects does not replace issues and pull requests. It organizes and enriches them for planning.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part I \u2014 BASIC<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">1. BASIC \u2014 GitHub Projects Foundations<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1.1 Introduction to GitHub Projects<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Projects is GitHub&#8217;s flexible planning and work-tracking system. A project can contain&nbsp;<strong>issues, pull requests, and draft issues<\/strong>, then add planning metadata and multiple views without duplicating the underlying work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A useful way to distinguish GitHub&#8217;s planning primitives is:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Tool<\/th><th class=\"has-text-align-left\" data-align=\"left\">Primary purpose<\/th><th class=\"has-text-align-left\" data-align=\"left\">Best use<\/th><\/tr><\/thead><tbody><tr><td>Issue<\/td><td>Track a unit of work, problem, request, or decision<\/td><td>Bug, feature, task, incident action<\/td><\/tr><tr><td>Pull request<\/td><td>Review and merge code changes<\/td><td>Implementation and review<\/td><\/tr><tr><td>Milestone<\/td><td>Group issues\/PRs toward a repository-level target<\/td><td>Release or phase<\/td><\/tr><tr><td>Project<\/td><td>Plan and visualize many work items with fields\/views<\/td><td>Backlog, sprint, roadmap, portfolio<\/td><\/tr><tr><td>Project update<\/td><td>Communicate project-level health<\/td><td>Executive\/status communication<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Projects vs Issues<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An&nbsp;<strong>issue<\/strong>&nbsp;represents work. A&nbsp;<strong>project<\/strong>&nbsp;represents a planning context around work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One issue can appear in multiple projects. Each project can add its own project-scoped field values. This is useful when, for example, the engineering project tracks&nbsp;<code>Sprint<\/code>&nbsp;while a company-wide project tracks&nbsp;<code>Strategic initiative<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Projects vs Pull Requests<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pull requests are code-review objects. Projects can include PRs directly and can also expose PR-related metadata such as reviewers and linked pull requests. A mature delivery project often tracks both the issue describing the work and the PR implementing it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Projects vs Milestones<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Milestones are comparatively lightweight and repository-oriented. Projects are richer and can span repositories. Use milestones for a release grouping when that model fits; use Projects for multidimensional planning, custom fields, multiple layouts, charts, and automation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Projects vs Projects (classic)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This guide covers&nbsp;<strong>current Projects<\/strong>, historically called&nbsp;<strong>Projects v2<\/strong>. Avoid learning workflows that depend on classic project-board columns\/cards. Current Projects is field-driven: the same underlying data can be rendered as a table, board, or roadmap.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Common Planning Use Cases<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Use case<\/th><th class=\"has-text-align-left\" data-align=\"left\">Recommended view\/model<\/th><\/tr><\/thead><tbody><tr><td>Product backlog<\/td><td>Table grouped\/sorted by Priority<\/td><\/tr><tr><td>Sprint planning<\/td><td>Iteration field + Board<\/td><\/tr><tr><td>Kanban<\/td><td>Board using Status as columns<\/td><\/tr><tr><td>Product roadmap<\/td><td>Roadmap using date\/iteration fields<\/td><\/tr><tr><td>Cross-repository delivery<\/td><td>Organization project + Repository field<\/td><\/tr><tr><td>Team capacity<\/td><td>Iteration + Estimate + Team\/Assignee grouping<\/td><\/tr><tr><td>Executive overview<\/td><td>Roadmap + project updates + insights<\/td><\/tr><tr><td>Release tracking<\/td><td>Milestone\/Release field + filtered saved view<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">1.2 GitHub Projects Core Concepts<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Concept<\/th><th class=\"has-text-align-left\" data-align=\"left\">Meaning<\/th><\/tr><\/thead><tbody><tr><td>Project<\/td><td>Planning container owned by a user or organization<\/td><\/tr><tr><td>Project item<\/td><td>A row\/card\/timeline item inside the project<\/td><\/tr><tr><td>Issue<\/td><td>Repository work item<\/td><\/tr><tr><td>Pull request<\/td><td>Repository code-change\/review item<\/td><\/tr><tr><td>Draft issue<\/td><td>Project-local idea that can later become an issue<\/td><\/tr><tr><td>Field<\/td><td>Metadata exposed in the project<\/td><\/tr><tr><td>Custom field<\/td><td>Project-defined text\/number\/date\/single-select\/iteration metadata<\/td><\/tr><tr><td>GitHub metadata<\/td><td>Native data such as Assignees, Labels, Milestone, Repository<\/td><\/tr><tr><td>View<\/td><td>Saved presentation\/configuration of project data<\/td><\/tr><tr><td>Table<\/td><td>Spreadsheet-style layout<\/td><\/tr><tr><td>Board<\/td><td>Column\/card layout<\/td><\/tr><tr><td>Roadmap<\/td><td>Timeline layout<\/td><\/tr><tr><td>Workflow<\/td><td>Automation that reacts to project\/item events<\/td><\/tr><tr><td>Insight<\/td><td>Chart based on project data<\/td><\/tr><tr><td>Template<\/td><td>Reusable project configuration<\/td><\/tr><tr><td>Project update<\/td><td>Project-level health\/date\/message update<\/td><\/tr><tr><td>Access<\/td><td>Read\/write\/admin permissions<\/td><\/tr><tr><td>Visibility<\/td><td>Public or private discoverability<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Important Principle: Data vs View<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Project Data] --&gt; B&#91;Items]\n    A --&gt; C&#91;Fields]\n    B --&gt; D&#91;Saved View 1: Backlog Table]\n    B --&gt; E&#91;Saved View 2: Sprint Board]\n    B --&gt; F&#91;Saved View 3: Roadmap]\n    C --&gt; D\n    C --&gt; E\n    C --&gt; F\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A view does&nbsp;<strong>not<\/strong>&nbsp;normally create a second copy of the work. It is another lens over the same project items and fields.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.3 Project Ownership<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects can be owned by a&nbsp;<strong>personal account<\/strong>&nbsp;or an&nbsp;<strong>organization<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">User-Owned Projects<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Useful for personal planning, prototypes, individual work, or repositories owned by your personal account.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Organization-Owned Projects<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Best for shared engineering\/product work because they support organization collaboration, teams, organization templates, base permissions, cross-repository planning, and governance.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Recommendation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For company\/team work, prefer&nbsp;<strong>organization-owned projects<\/strong>&nbsp;unless there is a specific reason to use a personal project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.4 Finding Projects<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects can surface from several places:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your profile&#8217;s\u00a0<strong>Projects<\/strong>\u00a0page.<\/li>\n\n\n\n<li>An organization&#8217;s\u00a0<strong>Projects<\/strong>\u00a0page.<\/li>\n\n\n\n<li>A repository&#8217;s\u00a0<strong>Projects<\/strong>\u00a0tab when a project is linked\/defaulted there.<\/li>\n\n\n\n<li>A team&#8217;s\u00a0<strong>Projects<\/strong>\u00a0page when linked to the team.<\/li>\n\n\n\n<li>Project search\/discovery pages and recent-project navigation.<\/li>\n\n\n\n<li>Direct project URLs.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For an organization-level project, a typical URL is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;github.com\/orgs\/acme-corp\/projects\/12\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The final number (<code>12<\/code>) is the&nbsp;<strong>project number<\/strong>, which is different from the GraphQL node ID.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. BASIC \u2014 Creating Projects<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">2.1 Project Creation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can start with a blank&nbsp;<strong>Table<\/strong>,&nbsp;<strong>Board<\/strong>, or&nbsp;<strong>Roadmap<\/strong>, or use a template.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Organization Project \u2014 UI Flow<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Open Organization] --&gt; B&#91;Projects]\n    B --&gt; C&#91;New project]\n    C --&gt; D{Choose source}\n    D --&gt;|Blank| E&#91;Table \/ Board \/ Roadmap]\n    D --&gt;|Template| F&#91;Built-in \/ Org \/ Recommended]\n    E --&gt; G&#91;Name project]\n    F --&gt; G\n    G --&gt; H&#91;Optional repository import]\n    H --&gt; I&#91;Create project]\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Practical Steps<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the GitHub organization.<\/li>\n\n\n\n<li>Select\u00a0<strong>Projects<\/strong>.<\/li>\n\n\n\n<li>Click\u00a0<strong>New project<\/strong>.<\/li>\n\n\n\n<li>Choose\u00a0<strong>Table<\/strong>,\u00a0<strong>Board<\/strong>,\u00a0<strong>Roadmap<\/strong>, or a template.<\/li>\n\n\n\n<li>Give the project a clear name, for example\u00a0<code>Acme Platform Delivery<\/code>.<\/li>\n\n\n\n<li>Optionally import items from a repository.<\/li>\n\n\n\n<li>Create the project.<\/li>\n\n\n\n<li>Open project\u00a0<strong>Settings<\/strong>\u00a0and add a short description and README.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Good Naming Pattern<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;team\/product&gt; \u2014 &lt;planning purpose&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Platform \u2014 Delivery\nMobile \u2014 Q4 Roadmap\nSecurity \u2014 Remediation Program\nPayments \u2014 Sprint Planning\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Description vs README<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Description:<\/strong>\u00a0one-sentence purpose.<\/li>\n\n\n\n<li><strong>README:<\/strong>\u00a0operating instructions and conventions.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example project README:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Purpose\nTrack delivery work across web, API, and infrastructure.\n\n## Working agreements\n- Every delivery item must have Status and Priority.\n- Sprint is assigned only after planning commitment.\n- P0\/P1 items require an owner.\n- Done items are automatically archived after the retention period.\n\n## Views\n- Backlog: prioritized uncommitted work\n- Current Sprint: execution board\n- Roadmap: delivery timeline\n- Risks: P0\/P1 work not Done\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2.2 Project Creation Sources<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Source<\/th><th class=\"has-text-align-left\" data-align=\"left\">When to use<\/th><\/tr><\/thead><tbody><tr><td>Blank Table<\/td><td>Start data-first; best default for setup<\/td><\/tr><tr><td>Blank Board<\/td><td>Team already thinks in workflow columns<\/td><\/tr><tr><td>Blank Roadmap<\/td><td>Timeline is the primary need<\/td><\/tr><tr><td>Built-in template<\/td><td>Fast start for common planning patterns<\/td><\/tr><tr><td>Organization template<\/td><td>Standardized internal workflow<\/td><\/tr><tr><td>Recommended template<\/td><td>Organization-curated preferred starting point<\/td><\/tr><tr><td>Existing project copy<\/td><td>Reuse a proven configuration<\/td><\/tr><tr><td>Import from repository<\/td><td>Seed the project with existing issues\/PRs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">When importing items from a repository during project creation, GitHub can designate that repository as the project&#8217;s&nbsp;<strong>default repository<\/strong>. A default repository makes issue creation from the project faster because the destination repo is preselected.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2.3 Copying Projects<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Copying a project is useful for repeated releases, programs, client engagements, or team setups.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A copied project can carry forward configuration such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Views.<\/li>\n\n\n\n<li>Custom fields.<\/li>\n\n\n\n<li>Draft issues and their field values if selected.<\/li>\n\n\n\n<li>Configured workflows, except auto-add workflows.<\/li>\n\n\n\n<li>Insights\/charts.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">It does&nbsp;<strong>not<\/strong>&nbsp;simply clone all original work items and access relationships. Treat a copy as&nbsp;<strong>configuration reuse<\/strong>, not as a full project backup.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Copy vs Template<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Need<\/th><th class=\"has-text-align-left\" data-align=\"left\">Prefer<\/th><\/tr><\/thead><tbody><tr><td>One-off clone of a working setup<\/td><td>Copy project<\/td><\/tr><tr><td>Organization-wide standard<\/td><td>Organization template<\/td><\/tr><tr><td>Curated creation experience<\/td><td>Recommended template<\/td><\/tr><tr><td>Versioned operating standard<\/td><td>Maintained template + documented change process<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part II \u2014 FUNDAMENTALS<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">3. FUNDAMENTALS \u2014 Project Items<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">3.1 Item Types<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects work with three main item types:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Issues<\/strong>\u00a0\u2014 real repository work items.<\/li>\n\n\n\n<li><strong>Pull requests<\/strong>\u00a0\u2014 code changes\/reviews.<\/li>\n\n\n\n<li><strong>Draft issues<\/strong>\u00a0\u2014 project-local ideas\/notes that can later be converted.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Choosing the Right Item Type<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Situation<\/th><th class=\"has-text-align-left\" data-align=\"left\">Use<\/th><\/tr><\/thead><tbody><tr><td>Work must be discussed, assigned, linked, searched in a repo<\/td><td>Issue<\/td><\/tr><tr><td>Code change is the planning object<\/td><td>Pull request<\/td><\/tr><tr><td>Idea is not ready for a repository yet<\/td><td>Draft issue<\/td><\/tr><tr><td>Backlog brainstorming session<\/td><td>Draft issue first, convert later<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">3.2 Adding Items<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can add work in several ways.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A. Search from the Project<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In the project&#8217;s add-item row, type&nbsp;<code>#<\/code>&nbsp;and choose a repository, then search for an issue or PR.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">B. Paste a URL<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Paste an issue\/PR URL into the add-item row:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;github.com\/acme-corp\/api\/issues\/418\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">C. Add from Repository<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use&nbsp;<strong>Add item from repository<\/strong>, select multiple items, and add them in bulk.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">D. Add from the Repository Issue\/PR List<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Select several issues or PRs -&gt;&nbsp;<strong>Projects<\/strong>&nbsp;-&gt; choose the destination project.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">E. Add from Inside an Issue or PR<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open the issue\/PR -&gt;&nbsp;<strong>Projects<\/strong>&nbsp;in the sidebar -&gt; select the project -&gt; optionally populate project fields.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">F. Command Palette<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On macOS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Command + K\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On Windows\/Linux:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Ctrl + K\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Search for&nbsp;<strong>Add items<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">G. Automatic Addition<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Configure the built-in&nbsp;<strong>Auto-add to project<\/strong>&nbsp;workflow. We cover this deeply in Chapter 15.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.3 Draft Issues<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Draft issues are excellent for planning workshops because they let you capture an idea without immediately choosing a repository.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example draft:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Title: Add regional failover runbook\nBody: Define RTO\/RPO, traffic cutover, database recovery, and rollback steps.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Typical lifecycle:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Idea] --&gt; B&#91;Draft Issue]\n    B --&gt; C&#91;Refine title\/body]\n    C --&gt; D&#91;Assign project fields]\n    D --&gt; E{Ready for engineering?}\n    E --&gt;|No| C\n    E --&gt;|Yes| F&#91;Convert to Issue]\n    F --&gt; G&#91;Choose repository]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When converting a draft issue, choose the repository that should own the resulting issue. After conversion, the item becomes a normal GitHub issue while staying represented in the project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.4 Creating Issues from Projects<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects can create repository issues without leaving the planning context.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the add control at the bottom of a table\/group\/board column.<\/li>\n\n\n\n<li>Choose\u00a0<strong>Create new issue<\/strong>.<\/li>\n\n\n\n<li>Select the destination repository.<\/li>\n\n\n\n<li>Enter title\/body and available metadata.<\/li>\n\n\n\n<li>Create the issue.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">A useful behavior: when creating an issue inside a grouped view, the group&#8217;s value can be applied automatically. For example, creating in the&nbsp;<code>In Progress<\/code>&nbsp;group can prepopulate the project&#8217;s Status as&nbsp;<code>In Progress<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.5 Editing Items<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects is designed for high-volume editing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inline Editing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Click field cells directly and change values.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bulk Editing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Select multiple rows\/cards, then apply a shared field value or action.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Drag-and-Drop Editing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When grouped by a field, dragging an item to another group changes that field value.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Group by: Priority\nMove issue from P2 group -&gt; P1 group\nResult: Priority becomes P1\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This makes the view itself an editing interface.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.6 Archiving Items<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Archive<\/strong>&nbsp;removes an item from normal project views while preserving its project context and custom-field data.&nbsp;<strong>Delete\/remove<\/strong>&nbsp;permanently removes the project item from the project.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Action<\/th><th class=\"has-text-align-right\" data-align=\"right\">Still visible in project views?<\/th><th class=\"has-text-align-right\" data-align=\"right\">Recoverable?<\/th><th class=\"has-text-align-right\" data-align=\"right\">Field context retained?<\/th><\/tr><\/thead><tbody><tr><td>Archive<\/td><td class=\"has-text-align-right\" data-align=\"right\">No<\/td><td class=\"has-text-align-right\" data-align=\"right\">Yes, restore<\/td><td class=\"has-text-align-right\" data-align=\"right\">Yes<\/td><\/tr><tr><td>Restore<\/td><td class=\"has-text-align-right\" data-align=\"right\">Yes<\/td><td class=\"has-text-align-right\" data-align=\"right\">N\/A<\/td><td class=\"has-text-align-right\" data-align=\"right\">Yes<\/td><\/tr><tr><td>Delete\/remove item<\/td><td class=\"has-text-align-right\" data-align=\"right\">No<\/td><td class=\"has-text-align-right\" data-align=\"right\">No project restoration<\/td><td class=\"has-text-align-right\" data-align=\"right\">No project membership<\/td><\/tr><tr><td>Close underlying issue<\/td><td class=\"has-text-align-right\" data-align=\"right\">Depends on view\/filter<\/td><td class=\"has-text-align-right\" data-align=\"right\">Issue can be reopened<\/td><td class=\"has-text-align-right\" data-align=\"right\">Project item remains unless archived\/removed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Use archiving as routine cleanup; reserve deletion for mistakes, duplicates, or true removal.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. FUNDAMENTALS \u2014 Project Fields<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">4.1 Field Fundamentals<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fields add structured planning metadata to project items.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are two broad classes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>GitHub-provided metadata<\/strong>\u00a0such as Assignees, Labels, Milestone, Repository, Type, Parent issue, Reviewers.<\/li>\n\n\n\n<li><strong>Custom project fields<\/strong>\u00a0you create for your planning model.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Current project custom-field types covered here are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Text.<\/li>\n\n\n\n<li>Number.<\/li>\n\n\n\n<li>Date.<\/li>\n\n\n\n<li>Single select.<\/li>\n\n\n\n<li>Iteration.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Field Design Rule<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Create a field only when you plan to&nbsp;<strong>filter, sort, group, slice, aggregate, automate, or report on it<\/strong>. If it is merely explanatory prose, it may belong in the issue body instead.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4.2 Text Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Text fields hold free-form metadata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Good uses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>External ticket ID.<\/li>\n\n\n\n<li>Release train identifier.<\/li>\n\n\n\n<li>Customer\/account reference.<\/li>\n\n\n\n<li>Short planning note.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bad uses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Priority (<code>single select<\/code>\u00a0is better).<\/li>\n\n\n\n<li>Estimate (<code>number<\/code>\u00a0is better).<\/li>\n\n\n\n<li>Target date (<code>date<\/code>\u00a0is better).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Field: External ID\nValue: INC-2026-00491\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4.3 Number Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Number fields support numeric planning and aggregation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Estimate = 5\nCost = 1200\nRisk score = 8\nExpected hours = 16\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Useful capabilities include numeric filtering and field sums.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example filters:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>estimate:&gt;=5\nestimate:1..3\nestimate:*..8\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use one estimation scale consistently. Mixing hours and story points in the same field destroys the meaning of totals.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4.4 Date Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Date fields enable deadline and roadmap behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical fields:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Start date\nTarget date\nDue date\nRelease date\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example filters:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>target-date:@today\ntarget-date:&gt;=@today\ntarget-date:@today..@today+7\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid creating several fields that mean almost the same thing. Define exactly what each date means in the README.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4.5 Single-Select Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Single-select fields are excellent for taxonomies.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example&nbsp;<code>Priority<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Option<\/th><th class=\"has-text-align-left\" data-align=\"left\">Meaning<\/th><\/tr><\/thead><tbody><tr><td>P0<\/td><td>Immediate \/ critical<\/td><\/tr><tr><td>P1<\/td><td>High priority<\/td><\/tr><tr><td>P2<\/td><td>Normal planned work<\/td><\/tr><tr><td>P3<\/td><td>Lower priority \/ opportunistic<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Other common fields:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Team.<\/li>\n\n\n\n<li>Severity.<\/li>\n\n\n\n<li>Workstream.<\/li>\n\n\n\n<li>Product area.<\/li>\n\n\n\n<li>Release readiness.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Single-select options can have names, colors, and descriptions. The description should define semantics, not restate the label.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4.6 Iteration Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Iteration fields represent repeating planning intervals such as sprints.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sprint 24: 2026-09-21 to 2026-10-04\nSprint 25: 2026-10-05 to 2026-10-18\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You configure:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start date.<\/li>\n\n\n\n<li>Duration in days or weeks.<\/li>\n\n\n\n<li>Naming.<\/li>\n\n\n\n<li>Future iterations.<\/li>\n\n\n\n<li>Optional breaks.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Relative filters make iteration fields especially powerful:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sprint:@previous\nsprint:@current\nsprint:@next\nsprint:@current..@current+3\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Why Iteration Is Better Than a Free-Text Sprint Field<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An iteration understands chronology. GitHub can reason about previous\/current\/next and display iterations on roadmaps. A text field cannot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4.7 Managing Custom Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical field lifecycle:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Need identified] --&gt; B&#91;Choose field type]\n    B --&gt; C&#91;Create field]\n    C --&gt; D&#91;Define semantics]\n    D --&gt; E&#91;Use in views\/workflows]\n    E --&gt; F&#91;Review usage]\n    F --&gt; G{Still useful?}\n    G --&gt;|Yes| E\n    G --&gt;|No| H&#91;Remove\/Delete carefully]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Before renaming or deleting a field:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check saved views.<\/li>\n\n\n\n<li>Check automation\/API scripts.<\/li>\n\n\n\n<li>Check charts.<\/li>\n\n\n\n<li>Check team documentation.<\/li>\n\n\n\n<li>Check whether a similar organization-level issue field should replace it.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. FUNDAMENTALS \u2014 GitHub Metadata Fields<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">5.1 Issue and Pull Request Metadata<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects can display native GitHub metadata such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Title.<\/li>\n\n\n\n<li>Assignees.<\/li>\n\n\n\n<li>Labels.<\/li>\n\n\n\n<li>Milestone.<\/li>\n\n\n\n<li>Repository.<\/li>\n\n\n\n<li>Status (project field).<\/li>\n\n\n\n<li>Issue\/PR state.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Understand the difference between&nbsp;<strong>native metadata<\/strong>&nbsp;and&nbsp;<strong>project metadata<\/strong>. A repository label is attached to the issue itself; a project custom field is normally scoped to that project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5.2 Issue Type<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organizations can use issue types to classify issues. GitHub provides default types such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bug\nTask\nFeature\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Organizations can customize issue types. The project can expose a&nbsp;<strong>Type<\/strong>&nbsp;field and use it in views\/filters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type:bug status:\"In Progress\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use issue types for stable semantic categories; do not recreate&nbsp;<code>Bug<\/code>,&nbsp;<code>Task<\/code>, and&nbsp;<code>Feature<\/code>&nbsp;as ordinary project single-select values unless you have a specific migration reason.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5.3 Parent and Sub-Issue Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub issue hierarchy can be exposed in Projects through:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Parent issue<\/strong>.<\/li>\n\n\n\n<li><strong>Sub-issue progress<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example filter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>parent-issue:acme-corp\/api#418\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is useful for work breakdown:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Initiative Issue] --&gt; B&#91;Feature Issue]\n    A --&gt; C&#91;Feature Issue]\n    B --&gt; D&#91;Task]\n    B --&gt; E&#91;Task]\n    C --&gt; F&#91;Task]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do not invent hierarchy purely with text prefixes like&nbsp;<code>[EPIC]<\/code>. Prefer real parent\/sub-issue relationships plus issue types where possible.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5.4 Pull Request Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Useful PR-related fields include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Linked pull requests.<\/li>\n\n\n\n<li>Reviewers.<\/li>\n\n\n\n<li>Pull request state.<\/li>\n\n\n\n<li>Merge\/closed status through native PR state.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A delivery view can therefore show:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Issue -&gt; Linked PR -&gt; Reviewer -&gt; Status\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is valuable for identifying work that is &#8220;implemented but waiting for review.&#8221;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5.5 Organization-Level Issue Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organization-level&nbsp;<strong>issue fields<\/strong>&nbsp;provide structured metadata that lives on the issue and remains consistent across projects in the organization. Current issue-field types include text, number, date, and single-select.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is different from a project custom field:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Characteristic<\/th><th class=\"has-text-align-left\" data-align=\"left\">Organization issue field<\/th><th class=\"has-text-align-left\" data-align=\"left\">Project custom field<\/th><\/tr><\/thead><tbody><tr><td>Scope<\/td><td>Organization issues<\/td><td>One project<\/td><\/tr><tr><td>Value follows issue across projects<\/td><td>Yes<\/td><td>No<\/td><\/tr><tr><td>Good for shared Priority\/Effort<\/td><td>Yes<\/td><td>Sometimes<\/td><\/tr><tr><td>Applies to PRs<\/td><td>No<\/td><td>Project fields can apply to project items generally<\/td><\/tr><tr><td>Governance owner<\/td><td>Organization<\/td><td>Project admins<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example Architecture<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use organization issue fields for metadata that should be globally consistent:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Priority\nEffort\nStart date\nTarget date\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use project-only fields for planning context that legitimately differs by project:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Program wave\nPortfolio lane\nLocal delivery confidence\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid having two fields named&nbsp;<code>Priority<\/code>&nbsp;with different meanings.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part III \u2014 ESSENTIALS<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">6. ESSENTIALS \u2014 Project Views<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">6.1 View Fundamentals<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A project can have multiple saved views. Each view can have its own:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Layout.<\/li>\n\n\n\n<li>Filter.<\/li>\n\n\n\n<li>Sort.<\/li>\n\n\n\n<li>Grouping.<\/li>\n\n\n\n<li>Slicing.<\/li>\n\n\n\n<li>Visible fields.<\/li>\n\n\n\n<li>Board column configuration.<\/li>\n\n\n\n<li>Roadmap dates\/markers.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example view set:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">View<\/th><th class=\"has-text-align-left\" data-align=\"left\">Layout<\/th><th class=\"has-text-align-left\" data-align=\"left\">Purpose<\/th><\/tr><\/thead><tbody><tr><td>Backlog<\/td><td>Table<\/td><td>Prioritize uncommitted work<\/td><\/tr><tr><td>Current Sprint<\/td><td>Board<\/td><td>Daily execution<\/td><\/tr><tr><td>My Work<\/td><td>Table<\/td><td>Personal workload<\/td><\/tr><tr><td>Roadmap<\/td><td>Roadmap<\/td><td>Timeline planning<\/td><\/tr><tr><td>Risks<\/td><td>Table<\/td><td>High-risk incomplete work<\/td><\/tr><tr><td>Done<\/td><td>Table<\/td><td>Recently completed work<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">6.2 Managing Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Common actions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create.<\/li>\n\n\n\n<li>Duplicate.<\/li>\n\n\n\n<li>Rename.<\/li>\n\n\n\n<li>Save changes.<\/li>\n\n\n\n<li>Reorder tabs.<\/li>\n\n\n\n<li>Delete.<\/li>\n\n\n\n<li>Share the view URL.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Saved vs Unsaved Changes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you change a saved view&#8217;s filter\/sort\/grouping, GitHub may mark the view as modified. Save the changes if the configuration should become the shared default.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A useful discipline is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Exploration = do not save\nTeam convention = save\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">6.3 Switching Layouts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The same project view can use:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Table<\/strong>\u00a0\u2014 dense editing\/analysis.<\/li>\n\n\n\n<li><strong>Board<\/strong>\u00a0\u2014 workflow\/card movement.<\/li>\n\n\n\n<li><strong>Roadmap<\/strong>\u00a0\u2014 timeline\/date planning.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Each saved view is independently configured. You do not need separate projects just to get separate layouts.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. ESSENTIALS \u2014 Table Layout<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">7.1 Table Fundamentals<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The table is the best place to configure and edit structured project data because it exposes rows and columns directly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use it for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Backlog grooming.<\/li>\n\n\n\n<li>Bulk metadata cleanup.<\/li>\n\n\n\n<li>Planning workshops.<\/li>\n\n\n\n<li>Capacity analysis.<\/li>\n\n\n\n<li>Audit\/review of fields.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">7.2 Table Customization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can show\/hide and reorder fields to make each table fit its audience.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Engineering table example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Title | Status | Assignees | Priority | Sprint | Estimate | Linked PRs\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Leadership table example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Title | Status | Team | Priority | Target date | Milestone\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The underlying project remains the same; only the visible representation changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7.3 Table Organization<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Group<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Group by: Priority\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This creates sections such as P0, P1, P2, P3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sort<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sort 1: Priority ascending\nSort 2: Target date ascending\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Slice<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Slicing opens a value selector that lets you quickly focus on one value at a time, such as Team or Sprint, without permanently rebuilding the view.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Field Sums<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For a numeric&nbsp;<code>Estimate<\/code>&nbsp;field, show sums per group to see capacity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sprint 24\n  API: 22 points\n  Web: 18 points\n  Platform: 13 points\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">7.4 Table Editing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dragging an item between groups updates the grouped field. Bulk selection makes table layout especially effective for backlog normalization.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example cleanup workflow:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Filter\u00a0<code>no:priority<\/code>.<\/li>\n\n\n\n<li>Select related items.<\/li>\n\n\n\n<li>Bulk-set Priority.<\/li>\n\n\n\n<li>Filter\u00a0<code>no:assignee<\/code>.<\/li>\n\n\n\n<li>Assign owners.<\/li>\n\n\n\n<li>Save a\u00a0<code>Triage<\/code>\u00a0view if this is a recurring process.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. ESSENTIALS \u2014 Board Layout<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">8.1 Board Fundamentals<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Board layout represents items as cards arranged into columns.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common Kanban board:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Todo -&gt; In Progress -&gt; In Review -&gt; Done\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Todo] --&gt; B&#91;In Progress]\n    B --&gt; C&#91;In Review]\n    C --&gt; D&#91;Done]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">8.2 Board Column Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A board&#8217;s columns can be based on an appropriate field such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Status.<\/li>\n\n\n\n<li>Single-select field.<\/li>\n\n\n\n<li>Iteration field.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">That means a board does not have to represent workflow state. It can represent releases, teams, or iterations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8.3 Board Configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Useful controls:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose the column field.<\/li>\n\n\n\n<li>Show\/hide columns.<\/li>\n\n\n\n<li>Reorder cards.<\/li>\n\n\n\n<li>Move one or multiple cards.<\/li>\n\n\n\n<li>Show selected fields on cards.<\/li>\n\n\n\n<li>Group horizontally for a swimlane-like effect.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Columns: Status\nHorizontal group: Team\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a team-by-status operating board.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8.4 Board Limits<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can set a&nbsp;<strong>column item limit<\/strong>&nbsp;as a work-in-progress signal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Important: the limit is&nbsp;<strong>informational<\/strong>, not a hard enforcement mechanism. Users and automation can still add cards beyond the limit; the UI highlights that the limit has been exceeded.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>In Progress limit = 5\nCurrent count = 8  -&gt; operational warning\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">8.5 Board Organization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can combine:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Filter.<\/li>\n\n\n\n<li>Sort.<\/li>\n\n\n\n<li>Slice.<\/li>\n\n\n\n<li>Horizontal grouping.<\/li>\n\n\n\n<li>Field sums.<\/li>\n\n\n\n<li>Item counts.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example sprint board:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Filter: sprint:@current\nColumns: Status\nGroup by: Team\nField sum: Estimate\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">8.6 Board Field Updates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dragging cards is not merely visual. When the board is driven by Status, Iteration, or another supported column field, moving the card updates that field.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This lets teams operate directly from the board during standups.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. ESSENTIALS \u2014 Roadmap Layout<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">9.1 Roadmap Fundamentals<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Roadmap layout places project items on a timeline using date or iteration fields.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use it for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Product roadmap.<\/li>\n\n\n\n<li>Release planning.<\/li>\n\n\n\n<li>Program sequencing.<\/li>\n\n\n\n<li>Team delivery windows.<\/li>\n\n\n\n<li>Quarterly\/annual visualization.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">9.2 Roadmap Dates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Choose the date or iteration fields used for start and target placement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Start date field: Start date\nTarget date field: Target date\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dragging an item on the timeline can adjust these values, turning roadmap planning into an interactive editing process.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9.3 Timeline Controls<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Common zoom levels:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Month.<\/li>\n\n\n\n<li>Quarter.<\/li>\n\n\n\n<li>Year.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Use month for delivery planning, quarter for product\/program planning, and year for portfolio-level communication.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9.4 Roadmap Markers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Markers can highlight important boundaries such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Iterations.<\/li>\n\n\n\n<li>Milestones.<\/li>\n\n\n\n<li>Dates associated with items.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Markers should represent shared reference points, not every minor date; too many markers make the roadmap unreadable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9.5 Roadmap Organization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Roadmap supports filtering, sorting, grouping, slicing, counts, and number-field sums.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example portfolio roadmap:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Group by: Team\nFilter: -status:Done\nZoom: Quarter\nMarkers: Milestones\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. ESSENTIALS \u2014 Filtering<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Filtering is one of the most important GitHub Projects skills because good saved views are mostly&nbsp;<strong>good filters plus a suitable layout<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">10.1 Project Filters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Basic field filter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>status:Done\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Multiple fields use logical AND:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>label:bug status:\"In Progress\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Multiple values for the same field can act like OR:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>label:bug,support\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Negation uses&nbsp;<code>-<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-status:Done\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10.2 Value Filters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Has a value:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>has:assignee\nhas:priority\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Missing a value:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>no:assignee\nno:priority\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Require a value using negation of&nbsp;<code>no:<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-no:priority\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10.3 Item Filters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>is:issue\nis:pr\nis:draft\nis:open\nis:closed\nis:merged\nis:issue is:open\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Close reason examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>reason:completed\nreason:\"not planned\"\nreason:reopened\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Updated-time examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>updated:@today\nupdated:@today-1d\nupdated:&gt;@today-1w\n-updated:@today\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10.4 Repository Filters<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>repo:acme-corp\/api\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For cross-repository projects, repository filters are foundational for team-specific views.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">10.5 People Filters<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>assignee:octocat\nassignee:@me\nreviewers:octocat\n-reviewers:@me\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10.6 Number Filters<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>estimate:&gt;5\nestimate:&gt;=5\nestimate:&lt;8\nestimate:&lt;=8\nestimate:1..5\nestimate:*..8\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10.7 Date Filters<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>target-date:2026-10-15\ntarget-date:&gt;=2026-10-01\ntarget-date:@today\ntarget-date:@today..@today+7\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10.8 Iteration Filters<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sprint:@previous\nsprint:@current\nsprint:@next\nsprint:&lt;@current\nsprint:@current..@current+3\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10.9 Text Filters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Exact field text:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>note:\"ready for release\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">General text search across titles\/text fields:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>API\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wildcard examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>title:API*\nlabel:*bug*\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10.10 Relationship Filters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Issue type:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type:bug\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Parent issue:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>parent-issue:acme-corp\/api#418\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Filter Recipes<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Goal<\/th><th class=\"has-text-align-left\" data-align=\"left\">Filter<\/th><\/tr><\/thead><tbody><tr><td>My open work<\/td><td><code>assignee:@me is:open<\/code><\/td><\/tr><tr><td>Current sprint<\/td><td><code>sprint:@current<\/code><\/td><\/tr><tr><td>Current sprint bugs<\/td><td><code>sprint:@current type:bug<\/code><\/td><\/tr><tr><td>Missing triage<\/td><td><code>no:assignee no:priority<\/code><\/td><\/tr><tr><td>API backlog<\/td><td><code>repo:acme-corp\/api -status:Done<\/code><\/td><\/tr><tr><td>High priority incomplete<\/td><td><code>priority:P0,P1 -status:Done<\/code><\/td><\/tr><tr><td>Upcoming week<\/td><td><code>target-date:@today..@today+7 -status:Done<\/code><\/td><\/tr><tr><td>Children of epic<\/td><td><code>parent-issue:acme-corp\/api#418<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">A Useful Constraint<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Projects supports OR-like matching for multiple values of the&nbsp;<strong>same field<\/strong>, but do not assume arbitrary cross-field Boolean expressions behave like a full query language. Design saved views around supported project filter semantics.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. ESSENTIALS \u2014 Sorting, Grouping and Slicing<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">11.1 Sorting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sort is about order.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Priority ascending\nTarget date ascending\nEstimate descending\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use multi-field sorting when the secondary sort adds real meaning.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1. Priority\n2. Target date\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">11.2 Grouping<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Grouping creates visual sections.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Good grouping fields:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Status.<\/li>\n\n\n\n<li>Priority.<\/li>\n\n\n\n<li>Team.<\/li>\n\n\n\n<li>Repository.<\/li>\n\n\n\n<li>Iteration.<\/li>\n\n\n\n<li>Assignee.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dragging between groups can update the grouped value.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11.3 Slicing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Slicing is an interactive focus mechanism. It is useful when you want a single saved view but need to switch rapidly between Team, Sprint, or Priority values.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Think of it as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Filter = permanently reduce the dataset for the view\nGroup = partition visible items\nSlice = temporarily focus on one field value\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">11.4 Field Aggregation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Number fields can be summed, and views can expose item counts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example capacity table:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Team<\/th><th class=\"has-text-align-right\" data-align=\"right\">Items<\/th><th class=\"has-text-align-right\" data-align=\"right\">Estimate sum<\/th><\/tr><\/thead><tbody><tr><td>API<\/td><td class=\"has-text-align-right\" data-align=\"right\">9<\/td><td class=\"has-text-align-right\" data-align=\"right\">22<\/td><\/tr><tr><td>Web<\/td><td class=\"has-text-align-right\" data-align=\"right\">7<\/td><td class=\"has-text-align-right\" data-align=\"right\">18<\/td><\/tr><tr><td>Platform<\/td><td class=\"has-text-align-right\" data-align=\"right\">5<\/td><td class=\"has-text-align-right\" data-align=\"right\">13<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Treat sums as indicators, not truth, unless the team uses a consistent estimation system.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. ESSENTIALS \u2014 Iteration and Sprint Management<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">12.1 Iteration Planning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A clean sprint model usually needs only:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sprint (Iteration)\nEstimate (Number)\nStatus (Single select)\nAssignee\/Team\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Planning flow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Prioritized Backlog] --&gt; B&#91;Select Sprint]\n    B --&gt; C&#91;Estimate Work]\n    C --&gt; D&#91;Check Capacity]\n    D --&gt; E&#91;Commit Sprint]\n    E --&gt; F&#91;Execute on Board]\n    F --&gt; G&#91;Review Done\/Carryover]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">12.2 Iteration Configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Configure:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sprint duration, for example 2 weeks.<\/li>\n\n\n\n<li>Start date.<\/li>\n\n\n\n<li>Iteration naming.<\/li>\n\n\n\n<li>Breaks such as company shutdown weeks.<\/li>\n\n\n\n<li>Future iterations.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If cadence changes, review saved views and planning conventions so teams do not silently interpret iterations differently.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12.3 Iteration Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended saved views:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Current Sprint: sprint:@current\nNext Sprint: sprint:@next\nPast Sprint: sprint:@previous\nFuture Planning: sprint:&gt;@current\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use Board for execution and Table for planning\/review.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12.4 Sprint Capacity<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A simple capacity model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Capacity = target estimate points per team per sprint\nCommitted = sum(Estimate where Sprint=current)\nRemaining = Capacity - Committed\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Projects can calculate the&nbsp;<strong>committed sum<\/strong>&nbsp;through field sums; your team provides the capacity rule.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not use capacity totals to compare engineers. Story points are a planning tool, not a productivity score.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. ESSENTIALS \u2014 Status and Workflow Tracking<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">13.1 Status Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical Status taxonomy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Todo\nIn Progress\nIn Review\nDone\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A minimal taxonomy is usually better than 12 subtle states. Every status should answer a clear operational question.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example definitions:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Status<\/th><th class=\"has-text-align-left\" data-align=\"left\">Definition<\/th><\/tr><\/thead><tbody><tr><td>Todo<\/td><td>Accepted into planning but work has not started<\/td><\/tr><tr><td>In Progress<\/td><td>Active implementation\/investigation<\/td><\/tr><tr><td>In Review<\/td><td>Awaiting code\/design\/QA review<\/td><\/tr><tr><td>Done<\/td><td>Team&#8217;s definition of done is satisfied<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">13.2 Workflow State<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub objects also have native states:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Issue: open \/ closed \/ reopened\nPull request: open \/ closed \/ merged \/ reopened\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These are not the same as your project&nbsp;<code>Status<\/code>&nbsp;field.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">13.3 Project State vs Issue State<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Issue state: Open\nProject Status: In Review\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That is perfectly valid.&nbsp;<code>In Review<\/code>&nbsp;is a planning state; the issue remains open until completion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Built-in project workflows can synchronize selected transitions such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Issue closed -&gt; Status = Done\nPR merged -&gt; Status = Done\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The next chapters cover these automations.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part IV \u2014 INTERMEDIATE<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">14. INTERMEDIATE \u2014 Built-In Project Workflows<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Projects includes built-in workflows that handle common synchronization tasks without requiring GitHub Actions or API code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">14.1 Workflow Management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open a project -&gt; project menu -&gt;&nbsp;<strong>Workflows<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For each built-in workflow you can typically:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inspect its trigger\/condition.<\/li>\n\n\n\n<li>Configure the action.<\/li>\n\n\n\n<li>Enable or disable it.<\/li>\n\n\n\n<li>Save and turn it on.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Two useful built-in behaviors are commonly enabled when a project is initialized:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Closed issues\/PRs can set project Status to\u00a0<code>Done<\/code>.<\/li>\n\n\n\n<li>Merged pull requests can set project Status to\u00a0<code>Done<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Built-In First, Custom Automation Second<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use this decision rule:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Automation requirement] --&gt; B{Built-in workflow handles it?}\n    B --&gt;|Yes| C&#91;Use built-in workflow]\n    B --&gt;|No| D{Needs repository event logic?}\n    D --&gt;|Yes| E&#91;GitHub Actions]\n    D --&gt;|No| F{Needs system integration or scale?}\n    F --&gt;|Yes| G&#91;API \/ GitHub App]\n    F --&gt;|No| H&#91;CLI \/ manual operation]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Built-in automation is easier to maintain because it does not introduce credentials, workflow files, or custom code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">14.2 Item Added Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical rule:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>When: Issue or pull request is added to project\nSet: Status = Todo\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This prevents newly added items from having no status.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A good pattern is to reserve&nbsp;<code>Todo<\/code>&nbsp;for accepted work. If your project also contains raw intake, consider an&nbsp;<code>Inbox<\/code>&nbsp;or&nbsp;<code>Triage<\/code>&nbsp;status instead.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">14.3 Item Closed Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical synchronization:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Issue\/PR closed -&gt; Status = Done\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Be careful with issues closed as&nbsp;<strong>not planned<\/strong>. Your reporting model may want to distinguish completed work from canceled\/rejected work instead of mapping everything to&nbsp;<code>Done<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">14.4 Pull Request Merged Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Common behavior:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PR merged -&gt; Status = Done\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is useful when pull requests are direct project items. If your project primarily tracks issues and PRs are only linked metadata, the issue&#8217;s completion rule may be more important.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">14.5 Item Reopened Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Reopened issues or PRs can be mapped back to an active status according to your team&#8217;s workflow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Issue reopened -&gt; Status = Todo\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If reopening usually means regression\/rework, you might choose a dedicated status such as&nbsp;<code>Reopened<\/code>&nbsp;only if it provides ongoing value. Avoid adding status values for rare edge cases.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">14.6 Status-to-Issue Automation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects can also drive native issue state in supported workflows, for example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Project Status becomes Done -&gt; close issue\nProject Status moves out of Done -&gt; reopen issue\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use bidirectional synchronization carefully. Decide which system is authoritative:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If engineers close issues in repository workflows, let issue state drive project status.<\/li>\n\n\n\n<li>If project operators control completion centrally, status-to-issue synchronization can fit.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid automation loops where multiple systems repeatedly overwrite each other.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. INTERMEDIATE \u2014 Automatic Item Addition<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">15.1 Auto-Add Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The built-in&nbsp;<strong>Auto-add to project<\/strong>&nbsp;workflow adds new or updated repository items when they match configured criteria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example requirement:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Automatically add any open bug from acme-corp\/api.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example filter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>is:issue is:open label:bug\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Important Behavior<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you enable auto-add, matching&nbsp;<strong>existing<\/strong>&nbsp;items are not necessarily backfilled merely because they already match. The workflow is designed to react as items are created or updated. Use bulk add\/import when you need an initial backfill.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">15.2 Auto-Add Configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the project.<\/li>\n\n\n\n<li>Open\u00a0<strong>Workflows<\/strong>.<\/li>\n\n\n\n<li>Select\u00a0<strong>Auto-add to project<\/strong>.<\/li>\n\n\n\n<li>Click\u00a0<strong>Edit<\/strong>.<\/li>\n\n\n\n<li>Choose the repository.<\/li>\n\n\n\n<li>Enter the filter.<\/li>\n\n\n\n<li>Save and enable the workflow.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The auto-add filter supports a subset of the full project filter syntax. Common supported qualifiers include:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>is:\nlabel:\nreason:\nassignee:\nno:\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example recipes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>is:issue is:open label:roadmap\nis:pr label:needs-review\nis:issue -label:wontfix\nis:issue no:assignee\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Plan Limits<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The maximum number of auto-add workflows is plan-dependent. Treat this as a constrained resource. Prefer broad, understandable workflows over dozens of nearly identical rules.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">15.3 Auto-Add Management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can duplicate an auto-add workflow and point the copy at another repository or filter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example cross-repository design:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Workflow 1: acme-corp\/web   -&gt; label:delivery\nWorkflow 2: acme-corp\/api   -&gt; label:delivery\nWorkflow 3: acme-corp\/infra -&gt; label:delivery\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When your project spans many repositories, GitHub Actions or an App may scale better than maintaining many per-repository built-in auto-add rules.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. INTERMEDIATE \u2014 Automatic Archiving<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">16.1 Auto-Archive Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Auto-archive keeps active views focused by archiving items that meet selected criteria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A practical retention rule might be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>is:closed updated:&lt;@today-30d\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or a policy based on merged\/closed items and age.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The auto-archive workflow supports a restricted filter set, including item state\/close reason and updated-time criteria.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why Archive Instead of Delete?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Archive preserves project field context and allows restoration. This is ideal for normal completion cleanup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">16.2 Archive Management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A healthy project lifecycle is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Active] --&gt; B&#91;Done]\n    B --&gt; C&#91;Retention Window]\n    C --&gt; D&#91;Archived]\n    D --&gt; E{Needed again?}\n    E --&gt;|Yes| F&#91;Restore]\n    E --&gt;|No| G&#91;Remain archived]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use manual\/bulk archive for one-time cleanup and automatic archiving for steady-state hygiene.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. INTERMEDIATE \u2014 Project Insights<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">17.1 Insights Fundamentals<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Insights turns project data into charts. It is useful for operational visibility, workload distribution, status composition, and progress communication.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A chart is only as reliable as the fields behind it. If half your issues have no Priority, a Priority chart is incomplete by design.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">17.2 Creating Charts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical flow:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open project\u00a0<strong>Insights<\/strong>.<\/li>\n\n\n\n<li>Create a new chart.<\/li>\n\n\n\n<li>Name it clearly.<\/li>\n\n\n\n<li>Apply a chart filter if needed.<\/li>\n\n\n\n<li>Configure layout\/axes\/grouping.<\/li>\n\n\n\n<li>Save changes.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Example chart names:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Current Sprint by Status\nOpen P0\/P1 by Team\nEstimate by Team\nWork by Repository\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">17.3 Chart Configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Common controls include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Layout\/chart type.<\/li>\n\n\n\n<li>X-axis field.<\/li>\n\n\n\n<li>Optional Group by field.<\/li>\n\n\n\n<li>Y-axis aggregation when number fields are used.<\/li>\n\n\n\n<li>Filter.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Filter: sprint:@current\nX-axis: Status\nGroup by: Team\nY-axis: Sum of Estimate\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">17.4 Numeric Aggregations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For number fields, supported chart calculations can include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Count.<\/li>\n\n\n\n<li>Sum.<\/li>\n\n\n\n<li>Average.<\/li>\n\n\n\n<li>Minimum.<\/li>\n\n\n\n<li>Maximum.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Use&nbsp;<strong>Count<\/strong>&nbsp;for item volume and&nbsp;<strong>Sum<\/strong>&nbsp;for additive metrics such as estimates. Be cautious with averages of story points; they often say little about delivery health.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">17.5 Insight Use Cases<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Question<\/th><th class=\"has-text-align-left\" data-align=\"left\">Example chart<\/th><\/tr><\/thead><tbody><tr><td>Where is work stuck?<\/td><td>Count by Status<\/td><\/tr><tr><td>Which priorities dominate?<\/td><td>Count by Priority<\/td><\/tr><tr><td>Is sprint load balanced?<\/td><td>Sum Estimate grouped by Team<\/td><\/tr><tr><td>Which repo carries most work?<\/td><td>Count by Repository<\/td><\/tr><tr><td>Who is overloaded?<\/td><td>Count\/Sum by Assignee, interpreted carefully<\/td><\/tr><tr><td>Is the roadmap risk-heavy?<\/td><td>P0\/P1 incomplete by Target date<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Insights is a lightweight project reporting layer, not a replacement for a full analytics warehouse when you need historical cycle-time, lead-time, or complex cross-project BI.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. INTERMEDIATE \u2014 Project Templates<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">18.1 Built-In Templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub provides templates for common project patterns. Use them when they are close to your desired operating model and then simplify them if needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A template should reduce setup cost, not force a team into fields it does not understand.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">18.2 Organization Templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organization templates let you standardize:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fields.<\/li>\n\n\n\n<li>Views.<\/li>\n\n\n\n<li>Draft issues.<\/li>\n\n\n\n<li>Configured workflows, with auto-add exceptions.<\/li>\n\n\n\n<li>Insights.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A project admin can mark an organization-owned project as a template, subject to organization permissions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Template Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Engineering Delivery Template\n  Views:\n    - Triage\n    - Backlog\n    - Current Sprint\n    - Roadmap\n  Fields:\n    - Status\n    - Priority\n    - Sprint\n    - Estimate\n    - Team\n  Workflows:\n    - Set Todo when added\n    - Set Done when closed\n    - Set Done when PR merged\n  Insights:\n    - Sprint by Status\n    - Estimate by Team\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">18.3 Recommended Templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organization owners can curate a limited set of recommended templates so users see preferred standards first during project creation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use recommendations for officially supported operating models, not every experimental template.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">18.4 Template Lifecycle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Treat a template like a product:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Design] --&gt; B&#91;Pilot]\n    B --&gt; C&#91;Publish template]\n    C --&gt; D&#91;Teams adopt]\n    D --&gt; E&#91;Collect feedback]\n    E --&gt; F&#91;Revise standard]\n    F --&gt; C\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Because existing projects do not magically inherit every later template change, document version changes and provide a migration path for material field\/status changes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">19. INTERMEDIATE \u2014 Project Updates<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">19.1 Status Updates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Project updates communicate high-level state separately from individual item status.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A project update can include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Project health\/status.<\/li>\n\n\n\n<li>Start date.<\/li>\n\n\n\n<li>Target date.<\/li>\n\n\n\n<li>Markdown message.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example update:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>### Weekly update\nAPI migration is on track. Web rollout moved by three days because browser regression testing found two P1 issues.\n\n- API: complete\n- Web: 80%\n- Infra: complete\n- Decision needed: approve phased rollout by Friday\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">19.2 Project Health<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical health statuses include concepts such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>On track\nAt risk\nOff track\nComplete\nInactive\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Define the criteria in your project README. For example:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Health<\/th><th class=\"has-text-align-left\" data-align=\"left\">Internal definition example<\/th><\/tr><\/thead><tbody><tr><td>On track<\/td><td>Current plan remains achievable<\/td><\/tr><tr><td>At risk<\/td><td>Material risk exists but recovery plan is plausible<\/td><\/tr><tr><td>Off track<\/td><td>Target cannot be met without replan\/scope\/date change<\/td><\/tr><tr><td>Complete<\/td><td>Project objective is completed<\/td><\/tr><tr><td>Inactive<\/td><td>Work intentionally paused\/not currently active<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">19.3 Update History<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Project updates form a history of project-level communication. Stakeholders with appropriate access can review the latest update and prior updates, and can subscribe to updates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use updates for decision-quality summaries, not as a duplicate of the board.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">19.4 Project-Level Planning Dates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Project start\/target dates describe the&nbsp;<strong>overall project<\/strong>. Item-level date fields describe individual work items. Keep these concepts separate.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">20. INTERMEDIATE \u2014 Project README and Documentation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Every serious shared project should explain how to use it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended README structure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Acme Platform Delivery\n\n## Purpose\nTrack committed and candidate delivery work across web, API, and infrastructure.\n\n## Scope\nIncluded: customer-facing platform delivery.\nExcluded: internal support requests and ad-hoc incidents.\n\n## Field definitions\n- Status: execution state.\n- Priority: P0-P3 according to impact\/urgency policy.\n- Sprint: committed delivery iteration.\n- Estimate: team-relative planning points.\n\n## Definition of Done\n1. Implementation merged.\n2. Required tests pass.\n3. Documentation updated when applicable.\n4. Rollout\/verification complete.\n\n## View definitions\n- Triage: missing owner or priority.\n- Backlog: prioritized uncommitted work.\n- Current Sprint: sprint execution board.\n- Roadmap: incomplete work with planning dates.\n\n## Automation\n- Added items -&gt; Todo.\n- Closed items -&gt; Done.\n- Done older than retention period -&gt; archived.\n\n## Ownership\nProject admins: Platform PM + Engineering Manager.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Documentation Rule<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If a new team member cannot explain the difference between&nbsp;<code>Priority<\/code>,&nbsp;<code>Severity<\/code>,&nbsp;<code>Status<\/code>, and&nbsp;<code>Type<\/code>&nbsp;after reading the README, the metadata model is under-documented.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">21. INTERMEDIATE \u2014 Project Visibility<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">21.1 Visibility Types<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects can be:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Private<\/strong>\u00a0\u2014 visible only to people with sufficient project access.<\/li>\n\n\n\n<li><strong>Public<\/strong>\u00a0\u2014 visible on the internet.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Critical Security Detail<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Public project visibility does&nbsp;<strong>not<\/strong>&nbsp;grant repository access. If a project references items from a private repository, viewers who lack repository permission cannot see the private content simply because the project itself is public.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, project-level metadata and structure can still reveal planning information. Treat public visibility as a deliberate publishing decision.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">21.2 Visibility Management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Project admins\/organization owners can control visibility according to organization policy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before changing a project to public, review:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Project title\/README.<\/li>\n\n\n\n<li>Custom field names and values.<\/li>\n\n\n\n<li>Status updates.<\/li>\n\n\n\n<li>Linked repository information.<\/li>\n\n\n\n<li>Draft issues.<\/li>\n\n\n\n<li>Strategic dates.<\/li>\n\n\n\n<li>Customer\/product codenames.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">22. INTERMEDIATE \u2014 Project Access and Permissions<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">22.1 Permission Levels<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organization projects commonly work with these roles:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Role<\/th><th class=\"has-text-align-left\" data-align=\"left\">Capability summary<\/th><\/tr><\/thead><tbody><tr><td>No access<\/td><td>No direct project access through base role<\/td><\/tr><tr><td>Read<\/td><td>View the project<\/td><\/tr><tr><td>Write<\/td><td>View and edit project content<\/td><\/tr><tr><td>Admin<\/td><td>Edit and manage project settings\/access<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Repository permissions still matter. Project access does not automatically grant access to private repository items.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">22.2 Organization Access<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An organization project can use a&nbsp;<strong>base role<\/strong>&nbsp;for organization members and then add team or individual access.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Base role: Read\nengineering-team: Write\nproduct-team: Write\nproject-admins: Admin\noutside collaborators: Explicit only\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is usually safer and easier to maintain than granting individuals ad hoc write access one by one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">22.3 User Project Access<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">User-owned projects can invite collaborators and grant project roles, but do not provide the same organization governance model as organization-owned projects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">22.4 Permission Administration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use least privilege:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stakeholder who only needs visibility -> Read.<\/li>\n\n\n\n<li>Contributor who manages items\/fields -> Write.<\/li>\n\n\n\n<li>Small set of project maintainers -> Admin.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Do not grant Admin merely because someone needs to move cards.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">23. INTERMEDIATE \u2014 Linking Projects<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">23.1 Repository Linking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Linking a project to a repository makes it discoverable from that repository&#8217;s&nbsp;<strong>Projects<\/strong>&nbsp;tab.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Only relevant projects owned by the same user\/organization can be linked in this way.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Default Repository<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A project can have a default repository. New issues created from the project can then default to that repository.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use this when one repository owns most work. For a truly balanced multi-repository project, be careful that the default does not cause accidental issue creation in the wrong repo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">23.2 Team Linking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Linking a project to a team improves discoverability and can grant team project access according to GitHub&#8217;s team-link behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A team page then becomes a useful entry point for:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Team -&gt; Projects -&gt; Delivery project -&gt; Saved views\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">23.3 Cross-Repository Planning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An organization project can combine work from many repositories.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Acme Platform Delivery] --&gt; B&#91;web issues\/PRs]\n    A --&gt; C&#91;api issues\/PRs]\n    A --&gt; D&#91;infra issues\/PRs]\n    A --&gt; E&#91;shared roadmap]\n    A --&gt; F&#91;shared sprint view]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use the Repository field as a natural dimension for filtering\/grouping and reporting.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">24. INTERMEDIATE \u2014 Project Lifecycle Management<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A project itself has a lifecycle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical states\/actions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Create -&gt; Active -&gt; Close -&gt; Reopen (if needed) -&gt; Delete (rare)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Close vs Delete<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Close<\/strong>\u00a0when the project is no longer active but should remain available as historical context.<\/li>\n\n\n\n<li><strong>Delete<\/strong>\u00a0only when the project is disposable, erroneous, or deliberately being permanently removed.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">End-of-Project Checklist<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Post final project update.<\/li>\n\n\n\n<li>Mark overall health\/status complete as appropriate.<\/li>\n\n\n\n<li>Archive or retain finished items according to policy.<\/li>\n\n\n\n<li>Export data if required for records.<\/li>\n\n\n\n<li>Remove unnecessary automation credentials\/workflows.<\/li>\n\n\n\n<li>Close the project.<\/li>\n\n\n\n<li>Keep documentation readable for future audit\/reference.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">25. INTERMEDIATE \u2014 Exporting Project Data<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Current GitHub Projects view export downloads&nbsp;<strong>TSV (tab-separated values)<\/strong>&nbsp;data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical flow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Project view -&gt; View menu -&gt; Export view data\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Why the Distinction Matters<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Many tutorials casually say &#8220;CSV export,&#8221; but the current GitHub UI exports a&nbsp;<code>.tsv<\/code>&nbsp;view. Most spreadsheet\/data tools can open TSV directly or convert it to CSV.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example shell conversion:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python - &lt;&lt;'PY'\nimport csv\n\nwith open('project.tsv', newline='', encoding='utf-8') as src, \\\n     open('project.csv', 'w', newline='', encoding='utf-8') as dst:\n    reader = csv.reader(src, delimiter='\\t')\n    writer = csv.writer(dst)\n    writer.writerows(reader)\nPY\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Export Use Cases<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Offline analysis.<\/li>\n\n\n\n<li>Audit snapshots.<\/li>\n\n\n\n<li>Ad-hoc reporting.<\/li>\n\n\n\n<li>Spreadsheet sharing.<\/li>\n\n\n\n<li>Loading project data into a BI\/data pipeline.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Remember that exported data is a snapshot, not a live integration.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">26. INTERMEDIATE \u2014 Project Command Palette<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The project command palette speeds up keyboard-driven operations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open it with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>macOS: Command + K\nWindows\/Linux: Ctrl + K\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Examples of tasks you can discover\/launch from the palette include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add items.<\/li>\n\n\n\n<li>Filter-related actions.<\/li>\n\n\n\n<li>View operations.<\/li>\n\n\n\n<li>Field\/item operations exposed by the current UI.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Do not memorize every command. Memorize the launcher and search by intent.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">27. INTERMEDIATE \u2014 Keyboard and Productivity Features<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">High-throughput project management depends on reducing repetitive clicks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Useful patterns include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inline editing.<\/li>\n\n\n\n<li>Multi-select.<\/li>\n\n\n\n<li>Bulk edits.<\/li>\n\n\n\n<li>Drag-and-drop.<\/li>\n\n\n\n<li>Command palette.<\/li>\n\n\n\n<li>Quick item creation.<\/li>\n\n\n\n<li>Saved views.<\/li>\n\n\n\n<li>Direct view URLs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Multi-Select Mindset<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of editing 30 items individually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Filter -&gt; Select matching rows -&gt; Bulk update -&gt; Verify\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Filter: sprint:@next no:priority\nSelect all relevant items\nSet Priority = P2\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use bulk operations deliberately; a fast mistake is still a mistake.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">28. INTERMEDIATE \u2014 Project Planning Patterns<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This chapter combines the primitives into practical operating models.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">28.1 Backlog Management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Layout: Table\nFilter: -status:Done no:sprint\nGroup by: Priority\nSort: Priority, then Target date\nFields: Type, Priority, Estimate, Team, Assignee\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Backlog workflow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Intake] --&gt; B&#91;Triage]\n    B --&gt; C&#91;Prioritized Backlog]\n    C --&gt; D&#91;Sprint \/ Release Commitment]\n    D --&gt; E&#91;Execution]\n    E --&gt; F&#91;Done]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">28.2 Sprint Planning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sprint field: Iteration\nExecution view: Board\nFilter: sprint:@current\nColumns: Status\nGroup by: Team\nField sum: Estimate\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Planning steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Start from prioritized backlog.<\/li>\n\n\n\n<li>Assign Sprint to candidate work.<\/li>\n\n\n\n<li>Confirm estimates and owners.<\/li>\n\n\n\n<li>Check field sums\/capacity.<\/li>\n\n\n\n<li>Resolve over-commitment.<\/li>\n\n\n\n<li>Save the sprint view.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">28.3 Kanban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Layout: Board\nColumns: Status\nWIP limits: Selected active columns\nNo required iteration\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kanban is continuous flow. Avoid forcing sprint concepts into the model if the team does not use time boxes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">28.4 Roadmap<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Layout: Roadmap\nStart: Start date\nTarget: Target date\nGroup by: Team or Workstream\nMarkers: Milestones\nZoom: Quarter\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Roadmap items should represent decision-relevant work. A roadmap with hundreds of tiny tasks becomes a Gantt-shaped backlog rather than a strategy view.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">28.5 Portfolio Tracking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A portfolio project can combine multiple repositories\/teams with fields such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Strategic initiative\nTeam\nWorkstream\nPriority\nTarget quarter\nHealth\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer a separate portfolio project only when portfolio metadata or access differs materially from team delivery projects. Do not duplicate all fields and manually synchronize them without a clear need.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part V \u2014 ADVANCED AUTOMATION, APIs, SECURITY &amp; GOVERNANCE<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">29. ADVANCED \u2014 GitHub Actions + Projects<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Actions is useful when a project update must react to repository events or when the built-in project workflows are not expressive enough.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A good rule is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Built-in workflow can do it?  -&gt; Use the built-in workflow.\nRepository event + custom rule? -&gt; Consider GitHub Actions.\nCross-system\/business logic?     -&gt; Consider an App or external automation.\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">29.1 Projects Automation with Actions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical triggers include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>issues<\/code>\u00a0\u2014 issue opened, labeled, closed, reopened, assigned.<\/li>\n\n\n\n<li><code>pull_request<\/code>\u00a0\u2014 PR opened, converted to ready-for-review, closed, merged.<\/li>\n\n\n\n<li><code>workflow_dispatch<\/code>\u00a0\u2014 manual automation.<\/li>\n\n\n\n<li><code>schedule<\/code>\u00a0\u2014 periodic cleanup or governance checks.<\/li>\n\n\n\n<li>release\/deployment events \u2014 update release-oriented metadata.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Automation Architecture<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;GitHub Event] --&gt; B&#91;GitHub Actions Workflow]\n    B --&gt; C{What is needed?}\n    C --&gt;|Add item| D&#91;actions\/add-to-project]\n    C --&gt;|Update fields| E&#91;gh project or GraphQL API]\n    C --&gt;|Complex integration| F&#91;GitHub App \/ External Service]\n    D --&gt; G&#91;GitHub Project]\n    E --&gt; G\n    F --&gt; G\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Example: Automatically Add Labeled Issues to a Project<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Authentication matters. The repository-scoped&nbsp;<code>GITHUB_TOKEN<\/code>&nbsp;is not sufficient for accessing organization\/user Projects. Use a token with appropriate Projects access, preferably a GitHub App installation token for organization automation or an appropriately scoped PAT where suitable.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>name: Add roadmap issues to project\n\non:\n  issues:\n    types: &#91;opened, labeled]\n\njobs:\n  add-to-project:\n    if: contains(github.event.issue.labels.*.name, 'roadmap')\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Add issue to GitHub Project\n        uses: actions\/add-to-project@v2\n        with:\n          project-url: https:\/\/github.com\/orgs\/acme-corp\/projects\/7\n          github-token: ${{ secrets.PROJECT_TOKEN }}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use the built-in&nbsp;<strong>Auto-add to project<\/strong>&nbsp;workflow instead when a filter such as&nbsp;<code>label:roadmap<\/code>&nbsp;already expresses the requirement. The Action is more useful when additional repository logic is required.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">29.2 Common Automation Patterns<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Pattern<\/th><th class=\"has-text-align-left\" data-align=\"left\">Example trigger<\/th><th class=\"has-text-align-left\" data-align=\"left\">Action<\/th><\/tr><\/thead><tbody><tr><td>Add project item<\/td><td>Issue gets&nbsp;<code>roadmap<\/code>&nbsp;label<\/td><td>Add issue to project<\/td><\/tr><tr><td>Set priority<\/td><td>Issue gets&nbsp;<code>severity:critical<\/code><\/td><td>Set&nbsp;<code>Priority = P0<\/code><\/td><\/tr><tr><td>Set Status<\/td><td>Deployment succeeds<\/td><td>Set&nbsp;<code>Status = Released<\/code><\/td><\/tr><tr><td>Set date<\/td><td>Release created<\/td><td>Set target\/release date<\/td><\/tr><tr><td>Assign iteration<\/td><td>Issue receives sprint label<\/td><td>Set Iteration field<\/td><\/tr><tr><td>Archive old work<\/td><td>Scheduled job<\/td><td>Archive matching completed items<\/td><\/tr><tr><td>Cross-repository intake<\/td><td>Events in many repositories<\/td><td>Add to shared organization project<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example: Event \u2192 Rule \u2192 Project Field<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sequenceDiagram\n    participant Dev as Developer\n    participant GH as GitHub Issue\n    participant GA as GitHub Actions\n    participant API as Projects API\n    participant P as Project\n\n    Dev-&gt;&gt;GH: Add severity:critical label\n    GH-&gt;&gt;GA: issues.labeled event\n    GA-&gt;&gt;API: Resolve project\/item\/field IDs\n    GA-&gt;&gt;API: Set Priority = P0\n    API-&gt;&gt;P: Persist field value\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">29.3 Authentication<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The four terms below are easy to confuse:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Credential<\/th><th class=\"has-text-align-left\" data-align=\"left\">Good fit<\/th><th class=\"has-text-align-left\" data-align=\"left\">Important note<\/th><\/tr><\/thead><tbody><tr><td><code>GITHUB_TOKEN<\/code><\/td><td>Repository-scoped Actions work<\/td><td>Do not assume it can access organization\/user Projects<\/td><\/tr><tr><td>Classic PAT<\/td><td>Scripts\/CLI where policy permits<\/td><td>GraphQL Projects commonly needs&nbsp;<code>read:project<\/code>&nbsp;for read and&nbsp;<code>project<\/code>&nbsp;for write<\/td><\/tr><tr><td>Fine-grained PAT<\/td><td>Endpoint-specific REST automation<\/td><td>Check the exact endpoint&#8217;s Projects permission requirements<\/td><\/tr><tr><td>GitHub App installation token<\/td><td>Organization-scale automation<\/td><td>Preferred for controlled, revocable, least-privilege integrations<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Secure Token Pattern<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Secret store\n   |\n   v\nGitHub Actions secret \/ App token\n   |\n   v\nShort-lived workflow execution\n   |\n   +--&gt; Project API\n   |\n   +--&gt; No token printed in logs\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do not:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>hard-code PATs in workflow YAML;<\/li>\n\n\n\n<li>echo access tokens;<\/li>\n\n\n\n<li>give automation organization-wide permissions when one project is enough;<\/li>\n\n\n\n<li>use a personal long-lived token for a business-critical integration without a lifecycle plan.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">30. ADVANCED \u2014 GraphQL API for Projects<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub&#8217;s GraphQL API exposes the current Projects model as&nbsp;<strong><code>ProjectV2<\/code><\/strong>. GraphQL is still the most expressive API surface when you need rich discovery of Projects objects, node IDs, field configurations, and mutations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">30.1&nbsp;<code>ProjectV2<\/code>&nbsp;API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The API frequently works with two identifiers:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Project number<\/strong>\u00a0\u2014 the human-facing number in URLs, such as\u00a0<code>7<\/code>.<\/li>\n\n\n\n<li><strong>Node ID<\/strong>\u00a0\u2014 the opaque GraphQL ID used by most mutations.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;github.com\/orgs\/acme-corp\/projects\/7\n                                      ^\n                                project number\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The normal automation flow is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Know owner + project number] --&gt; B&#91;Query ProjectV2]\n    B --&gt; C&#91;Get project node ID]\n    C --&gt; D&#91;Query fields\/items]\n    D --&gt; E&#91;Get item\/field\/option IDs]\n    E --&gt; F&#91;Run mutation]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">30.2 Project Queries<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Fetch an Organization Project and Its Fields<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>query($login: String!, $number: Int!) {\n  organization(login: $login) {\n    projectV2(number: $number) {\n      id\n      number\n      title\n      url\n      fields(first: 50) {\n        nodes {\n          ... on ProjectV2Field {\n            id\n            name\n            dataType\n          }\n          ... on ProjectV2SingleSelectField {\n            id\n            name\n            options {\n              id\n              name\n            }\n          }\n          ... on ProjectV2IterationField {\n            id\n            name\n            configuration {\n              iterations {\n                id\n                title\n                startDate\n                duration\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run it with GitHub CLI:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh api graphql \\\n  -f query='query($login:String!,$number:Int!){\n    organization(login:$login){\n      projectV2(number:$number){id number title url}\n    }\n  }' \\\n  -F login='acme-corp' \\\n  -F number=7\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Read Project Items<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>query($login: String!, $number: Int!) {\n  organization(login: $login) {\n    projectV2(number: $number) {\n      items(first: 100) {\n        nodes {\n          id\n          type\n          content {\n            ... on Issue {\n              number\n              title\n              url\n            }\n            ... on PullRequest {\n              number\n              title\n              url\n            }\n            ... on DraftIssue {\n              title\n            }\n          }\n        }\n      }\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For larger projects, implement GraphQL pagination rather than assuming&nbsp;<code>first: 100<\/code>&nbsp;is the whole project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">30.3 Project Mutations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Common current mutations include operations to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>create, update, close\/reopen, and delete a project;<\/li>\n\n\n\n<li>manage project collaborators;<\/li>\n\n\n\n<li>add issues\/PRs or draft issues;<\/li>\n\n\n\n<li>update or clear item field values;<\/li>\n\n\n\n<li>move\/reorder, archive, or delete items;<\/li>\n\n\n\n<li>create\/update\/delete fields;<\/li>\n\n\n\n<li>create\/update views;<\/li>\n\n\n\n<li>link\/unlink repositories and teams;<\/li>\n\n\n\n<li>manage project templates and status updates.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Update Project Metadata<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>mutation {\n  updateProjectV2(\n    input: {\n      projectId: \"PROJECT_ID\"\n      title: \"Acme Platform Delivery\"\n      public: false\n      shortDescription: \"Cross-repository platform delivery\"\n      readme: \"# Delivery Project\\n\\nTeam operating guide.\"\n    }\n  ) {\n    projectV2 {\n      id\n      title\n      public\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">30.4 Project Item Mutations<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Add an Existing Issue or PR<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>mutation {\n  addProjectV2ItemById(\n    input: {\n      projectId: \"PROJECT_ID\"\n      contentId: \"ISSUE_OR_PR_NODE_ID\"\n    }\n  ) {\n    item {\n      id\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Important:<\/strong>&nbsp;adding an item and changing its project field value are separate operations. First add the item; then use the returned project-item ID in the update mutation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Update a Text Field<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>mutation {\n  updateProjectV2ItemFieldValue(\n    input: {\n      projectId: \"PROJECT_ID\"\n      itemId: \"PROJECT_ITEM_ID\"\n      fieldId: \"FIELD_ID\"\n      value: { text: \"Payments workstream\" }\n    }\n  ) {\n    projectV2Item {\n      id\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Update a Number Field<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>mutation {\n  updateProjectV2ItemFieldValue(\n    input: {\n      projectId: \"PROJECT_ID\"\n      itemId: \"PROJECT_ITEM_ID\"\n      fieldId: \"ESTIMATE_FIELD_ID\"\n      value: { number: 5 }\n    }\n  ) {\n    projectV2Item { id }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Update a Date Field<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>mutation {\n  updateProjectV2ItemFieldValue(\n    input: {\n      projectId: \"PROJECT_ID\"\n      itemId: \"PROJECT_ITEM_ID\"\n      fieldId: \"TARGET_DATE_FIELD_ID\"\n      value: { date: \"2026-10-15\" }\n    }\n  ) {\n    projectV2Item { id }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Update a Single-Select Field<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Single-select fields use the&nbsp;<strong>option ID<\/strong>, not the display text.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mutation {\n  updateProjectV2ItemFieldValue(\n    input: {\n      projectId: \"PROJECT_ID\"\n      itemId: \"PROJECT_ITEM_ID\"\n      fieldId: \"PRIORITY_FIELD_ID\"\n      value: { singleSelectOptionId: \"P0_OPTION_ID\" }\n    }\n  ) {\n    projectV2Item { id }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Update an Iteration Field<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>mutation {\n  updateProjectV2ItemFieldValue(\n    input: {\n      projectId: \"PROJECT_ID\"\n      itemId: \"PROJECT_ITEM_ID\"\n      fieldId: \"ITERATION_FIELD_ID\"\n      value: { iterationId: \"ITERATION_ID\" }\n    }\n  ) {\n    projectV2Item { id }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Clear a Field Value<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>mutation {\n  clearProjectV2ItemFieldValue(\n    input: {\n      projectId: \"PROJECT_ID\"\n      itemId: \"PROJECT_ITEM_ID\"\n      fieldId: \"FIELD_ID\"\n    }\n  ) {\n    projectV2Item { id }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Project Field vs Issue\/PR Metadata<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>updateProjectV2ItemFieldValue<\/code>&nbsp;is for project-item fields. It does&nbsp;<strong>not<\/strong>&nbsp;replace issue\/PR mutations for native metadata such as Assignees, Labels, Milestone, or Repository.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Need to change a value] --&gt; B{Where does the value live?}\n    B --&gt;|Project field| C&#91;updateProjectV2ItemFieldValue]\n    B --&gt;|Issue \/ PR property| D&#91;Issue \/ PR GraphQL mutation]\n    C --&gt; E&#91;Project item metadata]\n    D --&gt; F&#91;Canonical Issue \/ PR metadata]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">30.5 Project Field Mutations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A project automation may create or update custom fields, but treat schema changes like application schema changes: review them, name fields consistently, and avoid creating duplicates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical field mutation lifecycle:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>createProjectV2Field\n       |\n       v\nupdateProjectV2Field\n       |\n       v\ndeleteProjectV2Field\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Before deleting a field, understand the reporting and automation impact because its values disappear with the field.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">30.6 Linking APIs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects can be linked to repositories and teams for discoverability. API automation can manage these relationships for standardized project provisioning.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example use case:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Create project template copy\n        |\n        +--&gt; Link web repository\n        +--&gt; Link api repository\n        +--&gt; Link infra repository\n        +--&gt; Link platform team\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">30.7 Template APIs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At organization scale, template-related API operations are useful when you provision many consistent projects. Template governance should still happen at the organizational level; API automation should not become an excuse to create hundreds of nearly identical but unmanaged projects.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">31. ADVANCED \u2014 REST API for Projects<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Current GitHub REST documentation includes Projects endpoints for projects, items, draft items, fields, and views. This is important because older tutorials often state that current Projects are \u201cGraphQL only.\u201d That statement is no longer generally correct.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">REST support is evolving. Verify the endpoint-specific token requirements, API version, and object support before standardizing production automation.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">31.1 Project Endpoints<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">REST endpoints support operations around user and organization projects, including listing and retrieving projects.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A generic authenticated request pattern is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl --request GET \\\n  --url 'https:\/\/api.github.com\/ORG_OR_USER_PROJECT_ENDPOINT' \\\n  --header 'Accept: application\/vnd.github+json' \\\n  --header 'Authorization: Bearer YOUR_TOKEN' \\\n  --header 'X-GitHub-Api-Version: 2026-03-10'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do not copy an endpoint path from an old blog without checking the current REST documentation; Projects REST paths and supported operations have changed over time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">31.2 Item Endpoints<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The REST Projects API includes operations for project items, such as listing, adding, retrieving, updating, deleting, and view-oriented item retrieval where supported.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">REST item automation is useful when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>your integration is already REST-first;<\/li>\n\n\n\n<li>the operation maps cleanly to a documented REST endpoint;<\/li>\n\n\n\n<li>your security platform manages fine-grained REST permissions more easily.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">GraphQL remains attractive when you need many connected Project objects in one response.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">31.3 Draft Item Endpoints<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Draft items can be created in current Projects through REST endpoints where documented for the relevant project owner type.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drafts are useful for planning before deciding which repository should own the eventual issue.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Portfolio idea] --&gt; B&#91;Draft item]\n    B --&gt; C{Ready for engineering?}\n    C --&gt;|No| B\n    C --&gt;|Yes| D&#91;Convert\/create repository issue]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">31.4 Field Endpoints<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">REST field endpoints can expose project field information and supported field-management operations. Be careful to distinguish:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>project custom fields;<\/li>\n\n\n\n<li>GitHub-provided Project fields;<\/li>\n\n\n\n<li>issue fields owned by the organization;<\/li>\n\n\n\n<li>native issue\/PR metadata.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">They can look similar in a table but have different ownership and mutation rules.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">31.5 View Endpoints<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Current REST documentation also includes Project view operations. Views are configuration, not copies of project data: an item belongs to the project and can appear in many views.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">REST vs GraphQL Decision Table<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Need<\/th><th class=\"has-text-align-left\" data-align=\"left\">Prefer<\/th><\/tr><\/thead><tbody><tr><td>Simple documented CRUD endpoint<\/td><td>REST<\/td><\/tr><tr><td>Rich nested Project object discovery<\/td><td>GraphQL<\/td><\/tr><tr><td>Existing REST enterprise integration<\/td><td>REST<\/td><\/tr><tr><td>Need exact ProjectV2 node IDs\/field configuration in one query<\/td><td>GraphQL<\/td><\/tr><tr><td>Shell-first admin task<\/td><td><code>gh project<\/code><\/td><\/tr><tr><td>Event-driven repository automation<\/td><td>Actions + CLI\/API<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">32. ADVANCED \u2014 GitHub CLI and Projects<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub CLI provides a dedicated&nbsp;<code>gh project<\/code>&nbsp;command family, making it the simplest automation layer for many administrator and developer workflows.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">32.1 Authentication<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check your current authentication:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh auth status\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add the minimum classic-token Projects scope used by&nbsp;<code>gh project<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh auth refresh -s project\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For read-only API scripts, GitHub&#8217;s GraphQL Projects documentation also documents&nbsp;<code>read:project<\/code>; the&nbsp;<code>gh project<\/code>&nbsp;command family itself states&nbsp;<code>project<\/code>&nbsp;as its minimum required scope.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">32.2 Discover Projects<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><em># List organization projects<\/em>\ngh project list --owner acme-corp\n\n<em># Include closed projects<\/em>\ngh project list --owner acme-corp --closed\n\n<em># View project 7 in the browser<\/em>\ngh project view 7 --owner acme-corp --web\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">32.3 Create and Edit a Project<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project create \\\n  --owner acme-corp \\\n  --title 'Acme Platform Delivery'\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project edit 7 \\\n  --owner acme-corp \\\n  --description 'Cross-repository platform delivery' \\\n  --visibility PRIVATE\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">32.4 Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">List fields:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project field-list 7 --owner acme-corp\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create a number field:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project field-create 7 \\\n  --owner acme-corp \\\n  --name 'Estimate' \\\n  --data-type NUMBER\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create a single-select field:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project field-create 7 \\\n  --owner acme-corp \\\n  --name 'Priority' \\\n  --data-type SINGLE_SELECT \\\n  --single-select-options 'P0,P1,P2,P3'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">At the time of this guide,&nbsp;<code>gh project field-create<\/code>&nbsp;advertises&nbsp;<code>TEXT<\/code>,&nbsp;<code>SINGLE_SELECT<\/code>,&nbsp;<code>DATE<\/code>, and&nbsp;<code>NUMBER<\/code>. Do not assume every UI field type can be created with that CLI command.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">32.5 Items<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Add an issue:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project item-add 7 \\\n  --owner acme-corp \\\n  --url 'https:\/\/github.com\/acme-corp\/api\/issues\/42'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create a draft item:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project item-create 7 \\\n  --owner acme-corp \\\n  --title 'Evaluate next authentication provider' \\\n  --body 'Discovery item for Q4 planning.'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">List items using Project filter syntax:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project item-list 7 \\\n  --owner acme-corp \\\n  --query 'assignee:@me -status:Done'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Update a field by friendly names:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project item-edit 7 \\\n  --owner acme-corp \\\n  --url 'https:\/\/github.com\/acme-corp\/api\/issues\/42' \\\n  --field 'Status' \\\n  --value 'In Progress'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Update using machine-friendly IDs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project item-edit \\\n  --id 'PROJECT_ITEM_ID' \\\n  --project-id 'PROJECT_ID' \\\n  --field-id 'ESTIMATE_FIELD_ID' \\\n  --number 5\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Clear a field:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project item-edit \\\n  --id 'PROJECT_ITEM_ID' \\\n  --project-id 'PROJECT_ID' \\\n  --field-id 'FIELD_ID' \\\n  --clear\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Archive an item:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project item-archive 7 \\\n  --owner acme-corp \\\n  --id 'PROJECT_ITEM_ID'\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">32.6 Repository and Team Linking<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Link to a repository<\/em>\ngh project link 7 \\\n  --owner acme-corp \\\n  --repo acme-corp\/api\n\n<em># Link to a team<\/em>\ngh project link 7 \\\n  --owner acme-corp \\\n  --team platform\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">32.7 Scripted Project Management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A common script discovers IDs once, then updates many items:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PROJECT_ID=$(gh project view 7 --owner acme-corp --format json --jq '.id')\n\nSTATUS_FIELD_ID=$(gh project field-list 7 \\\n  --owner acme-corp \\\n  --format json \\\n  --jq '.fields&#91;] | select(.name == \"Status\") | .id')\n\nprintf 'Project: %s\\nStatus field: %s\\n' \"$PROJECT_ID\" \"$STATUS_FIELD_ID\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For reliable production scripts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>use JSON output instead of parsing formatted tables;<\/li>\n\n\n\n<li>fail when IDs are missing or duplicated;<\/li>\n\n\n\n<li>quote shell variables;<\/li>\n\n\n\n<li>make operations idempotent;<\/li>\n\n\n\n<li>log identifiers, not credentials.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">33. ADVANCED \u2014 GitHub Apps and Projects<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A GitHub App is usually the strongest foundation for organization-owned automation because it separates the automation identity from an employee account and can use short-lived installation access tokens.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">33.1 Authentication Model<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sequenceDiagram\n    participant S as Automation Service\n    participant A as GitHub App\n    participant G as GitHub\n    participant P as Project API\n\n    S-&gt;&gt;A: Create signed app JWT\n    A-&gt;&gt;G: Request installation token\n    G--&gt;&gt;A: Short-lived installation token\n    A--&gt;&gt;S: Token\n    S-&gt;&gt;P: Call Projects API\n    P--&gt;&gt;S: Result\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">33.2 Projects Permissions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When designing the App, grant only the Projects permissions and related repository\/organization permissions required by the operation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Read dashboard integration\n  -&gt; Project read permission\n\nProject field automation\n  -&gt; Project write permission\n\nAutomation also labels issues\n  -&gt; Add the corresponding Issues permission\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Project access does not magically grant permission to all private repository contents referenced by project items. Permission design must consider both the&nbsp;<strong>project object<\/strong>&nbsp;and the underlying&nbsp;<strong>issue\/PR repositories<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">33.3 Installation Access Tokens<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Benefits include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>short lifetime;<\/li>\n\n\n\n<li>revocable App installation;<\/li>\n\n\n\n<li>organization-controlled identity;<\/li>\n\n\n\n<li>narrower permission model than a broad personal token;<\/li>\n\n\n\n<li>clearer audit ownership.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">33.4 Integration Pattern<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Webhook \/ Schedule] --&gt; B&#91;GitHub App Service]\n    B --&gt; C&#91;Validate Event]\n    C --&gt; D&#91;Get Installation Token]\n    D --&gt; E&#91;Query Project]\n    E --&gt; F&#91;Apply Business Rule]\n    F --&gt; G&#91;Mutation \/ REST Update]\n    G --&gt; H&#91;Structured Audit Log]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use a GitHub App when the automation is shared, business-critical, multi-repository, or expected to live longer than the individual who first built it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">34. ADVANCED \u2014 Project Security<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Projects aggregate planning information from many repositories, so a project can expose organizational intent even when code remains protected.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">34.1 Threat Model<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Potentially sensitive project data includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>unreleased product names;<\/li>\n\n\n\n<li>vulnerability remediation plans;<\/li>\n\n\n\n<li>incident follow-ups;<\/li>\n\n\n\n<li>customer names;<\/li>\n\n\n\n<li>acquisition\/partnership work;<\/li>\n\n\n\n<li>internal priorities and dates;<\/li>\n\n\n\n<li>staffing\/ownership metadata.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Public\/Over-shared Project] --&gt; B&#91;Roadmap Exposure]\n    A --&gt; C&#91;Priority Exposure]\n    A --&gt; D&#91;Internal Naming Exposure]\n    E&#91;Over-privileged Token] --&gt; F&#91;Unauthorized Updates]\n    G&#91;Leaked Automation Secret] --&gt; F\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">34.2 Least Privilege Checklist<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Area<\/th><th class=\"has-text-align-left\" data-align=\"left\">Secure default<\/th><\/tr><\/thead><tbody><tr><td>Visibility<\/td><td>Private unless public planning is intentional<\/td><\/tr><tr><td>Human access<\/td><td>Read for observers; Write only for editors<\/td><\/tr><tr><td>Admin<\/td><td>Small owner\/admin group<\/td><\/tr><tr><td>App\/token<\/td><td>Minimum Projects + repo permissions<\/td><\/tr><tr><td>Secrets<\/td><td>Store in GitHub encrypted secrets or approved secret manager<\/td><\/tr><tr><td>Logs<\/td><td>Never print tokens; avoid unnecessary sensitive payloads<\/td><\/tr><tr><td>Outside collaborators<\/td><td>Explicit review<\/td><\/tr><tr><td>Templates<\/td><td>Do not embed real confidential draft items<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">34.3 Public Project Exposure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A public project can be viewable on the Internet, but a viewer still needs access to underlying private repository content to see those private items. Do not rely on that boundary as your only confidentiality control: project-level fields, draft issues, titles, documentation, or updates may themselves reveal sensitive planning data.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">34.4 Automation Credential Security<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer this order for organization automation:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GitHub App installation token\n        &gt;\nshort-lived or narrowly scoped managed token\n        &gt;\nlong-lived personal credential\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The final choice depends on the supported API and your organization&#8217;s authentication policy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Secret Handling Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>permissions:\n  contents: read\n\njobs:\n  project-update:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Run project automation\n        env:\n          GH_TOKEN: ${{ secrets.PROJECT_TOKEN }}\n        run: |\n          gh project item-list 7 --owner acme-corp --format json &gt;\/tmp\/items.json\n          # Never: echo \"$GH_TOKEN\"\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">35. ADVANCED \u2014 Organization Governance<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Organization governance answers a different question from project administration:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">How do we make many projects understandable and safe across teams?<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">35.1 Governance Layers<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Organization Policy] --&gt; B&#91;Templates]\n    A --&gt; C&#91;Base Permissions]\n    A --&gt; D&#91;Issue Field Taxonomy]\n    A --&gt; E&#91;Visibility Rules]\n    B --&gt; F&#91;Team Projects]\n    C --&gt; F\n    D --&gt; F\n    E --&gt; F\n    F --&gt; G&#91;Purpose-Specific Views]\n    F --&gt; H&#91;Automation]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">35.2 Recommended Organization Standards<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Governance area<\/th><th class=\"has-text-align-left\" data-align=\"left\">Example standard<\/th><\/tr><\/thead><tbody><tr><td>Status<\/td><td>Backlog, Ready, In Progress, In Review, Done<\/td><\/tr><tr><td>Priority<\/td><td>P0, P1, P2, P3<\/td><\/tr><tr><td>Estimate<\/td><td>Numeric field with documented scale<\/td><\/tr><tr><td>Iteration<\/td><td>One named Sprint field per delivery project<\/td><\/tr><tr><td>Visibility<\/td><td>Private by default<\/td><\/tr><tr><td>Template<\/td><td>Approved Engineering Delivery template<\/td><\/tr><tr><td>Ownership<\/td><td>At least two project admins<\/td><\/tr><tr><td>Archive<\/td><td>Auto-archive stale completed items<\/td><\/tr><tr><td>README<\/td><td>Required operating rules<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">35.3 Base Permissions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Set organization base project permission deliberately. Then layer explicit access through teams and named individuals.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Organization members: Read\nDelivery team:         Write\nProject maintainers:   Admin\nOutside collaborators: No access unless explicitly required\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The correct policy depends on how open internal planning is, but broad write\/admin access should be intentional rather than accidental.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">35.4 Project Creation and Templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When many teams independently invent Status, Priority, and Sprint schemas, reporting becomes expensive. Organization templates should standardize the 80% common model while leaving room for team-specific views and a small number of local fields.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">35.5 Team and Outside-Collaborator Access<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Review these separately:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Can the person see the project?<\/li>\n\n\n\n<li>Can the person edit project fields\/views?<\/li>\n\n\n\n<li>Can the person see the underlying private issue\/PR?<\/li>\n\n\n\n<li>Can the person administer the project?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Those are not the same capability.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">36. ADVANCED \u2014 Enterprise Governance<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Enterprise governance sits above organization-level conventions and focuses on policy consistency, security boundaries, supportability, and feature availability across organizations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">36.1 GitHub Enterprise Cloud vs GitHub Enterprise Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do not assume a GitHub.com tutorial maps one-for-one to every GitHub Enterprise Server (GHES) version.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Always verify:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>whether the Projects feature exists in your GHES version;<\/li>\n\n\n\n<li>the available API surface;<\/li>\n\n\n\n<li>field\/workflow\/view support;<\/li>\n\n\n\n<li>limits;<\/li>\n\n\n\n<li>authentication behavior;<\/li>\n\n\n\n<li>organization\/enterprise policy controls.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Enterprise Standard] --&gt; B&#91;Organization A]\n    A --&gt; C&#91;Organization B]\n    A --&gt; D&#91;Organization C]\n    B --&gt; E&#91;Team Projects]\n    C --&gt; F&#91;Team Projects]\n    D --&gt; G&#91;Team Projects]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">36.2 Enterprise Governance Questions<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Question<\/th><th class=\"has-text-align-left\" data-align=\"left\">Why it matters<\/th><\/tr><\/thead><tbody><tr><td>Who may create organization projects?<\/td><td>Prevent unmanaged sprawl<\/td><\/tr><tr><td>Which templates are approved?<\/td><td>Standardize planning models<\/td><\/tr><tr><td>What is the default visibility?<\/td><td>Protect roadmap metadata<\/td><\/tr><tr><td>Who can install automation Apps?<\/td><td>Control machine identities<\/td><\/tr><tr><td>Which token types are allowed?<\/td><td>Reduce credential risk<\/td><\/tr><tr><td>How long is completed project data retained?<\/td><td>Lifecycle\/compliance<\/td><\/tr><tr><td>Which fields must be standardized?<\/td><td>Portfolio reporting<\/td><\/tr><tr><td>What works on the deployed GHES version?<\/td><td>Avoid unsupported design<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">36.3 Automation Policy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A mature enterprise separates automation into tiers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tier 1  Built-in Project workflows\nTier 2  Repository GitHub Actions\nTier 3  Shared GitHub App \/ platform automation\nTier 4  External portfolio\/data platform integration\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use the lowest tier that meets the requirement. Every higher tier increases credential, maintenance, and observability responsibilities.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part VI \u2014 ADVANCED PROJECT ARCHITECTURE &amp; PLANNING<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">37. ADVANCED \u2014 Advanced Field Architecture<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A field architecture is the vocabulary of your planning system. Good architecture lets people answer questions without creating a new field for every meeting.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">37.1 Shared Metadata Strategy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start with questions, not fields:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Question<\/th><th class=\"has-text-align-left\" data-align=\"left\">Candidate field<\/th><\/tr><\/thead><tbody><tr><td>What stage is this in?<\/td><td>Status<\/td><\/tr><tr><td>How important is it?<\/td><td>Priority<\/td><\/tr><tr><td>How large is it?<\/td><td>Estimate \/ Effort<\/td><\/tr><tr><td>Who owns the workstream?<\/td><td>Team<\/td><\/tr><tr><td>What business area is affected?<\/td><td>Product Area<\/td><\/tr><tr><td>When will we work on it?<\/td><td>Sprint \/ Iteration<\/td><\/tr><tr><td>When should it finish?<\/td><td>Target Date<\/td><\/tr><tr><td>Which release carries it?<\/td><td>Release<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Recommended Core Model<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Status       single-select \/ built-in Status\nPriority     single-select or organization issue field\nEstimate     number\nTeam         single-select or organization issue field\nWorkstream   single-select\nStart Date   date\nTarget Date  date\nSprint       iteration\nRelease      single-select\/text only if Milestone is not the right model\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">37.2 Status Taxonomy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid statuses that encode multiple dimensions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Good:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Backlog -&gt; Ready -&gt; In Progress -&gt; In Review -&gt; Done\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Problematic:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Backend P1 In Progress\nFrontend Blocked\nReady for Sprint 24\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The problematic values mix team, priority, state, and iteration into one field.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Backlog] --&gt; B&#91;Ready]\n    B --&gt; C&#91;In Progress]\n    C --&gt; D&#91;In Review]\n    D --&gt; E&#91;Done]\n    C --&gt; F&#91;Blocked]\n    F --&gt; C\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Blocked<\/code>&nbsp;can be a Status when the team wants it to interrupt the flow, but for many organizations a separate blocker\/dependency signal is cleaner because an item may be both \u201cIn Progress\u201d and blocked.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">37.3 Priority Taxonomy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A four-value scheme is usually enough:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Priority<\/th><th class=\"has-text-align-left\" data-align=\"left\">Meaning<\/th><\/tr><\/thead><tbody><tr><td>P0<\/td><td>Immediate\/critical<\/td><\/tr><tr><td>P1<\/td><td>High<\/td><\/tr><tr><td>P2<\/td><td>Normal<\/td><\/tr><tr><td>P3<\/td><td>Low \/ opportunistic<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Document whether P0 represents business priority, operational severity, or both. If incidents already have a Severity field, do not make Priority secretly duplicate Severity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">37.4 Effort Taxonomy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Two common models:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Model A: Number field -&gt; 1, 2, 3, 5, 8, 13\nModel B: Single-select -&gt; XS, S, M, L, XL\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use number fields when you want sums\/capacity analysis. Use categorical sizes when precision would be false confidence.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">37.5 Team, Workstream and Product Area<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These fields answer different questions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Team         = who owns it?\nWorkstream   = which delivery stream does it belong to?\nProduct Area = what part of the product does it affect?\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Item<\/th><th class=\"has-text-align-left\" data-align=\"left\">Team<\/th><th class=\"has-text-align-left\" data-align=\"left\">Workstream<\/th><th class=\"has-text-align-left\" data-align=\"left\">Product Area<\/th><\/tr><\/thead><tbody><tr><td>Add passkey login<\/td><td>Identity<\/td><td>Authentication Modernization<\/td><td>Account<\/td><\/tr><tr><td>Rotate DB credentials<\/td><td>Platform<\/td><td>Security Hardening<\/td><td>Infrastructure<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">37.6 Date Architecture<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use dates intentionally:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Start Date  = planned start of meaningful work\nTarget Date = planned completion \/ delivery target\nDue Date    = only create separately if it means something materially different\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Too many date fields create contradictory schedules.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">37.7 Sprint, Quarter and Release<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer GitHub&#8217;s&nbsp;<strong>Iteration<\/strong>&nbsp;field for recurring sprints. A quarter can be represented by dates, a single-select field, or a higher-level planning model depending on reporting needs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not use a single-select field named&nbsp;<code>Sprint<\/code>&nbsp;if the team actually needs iteration arithmetic such as&nbsp;<code>@current<\/code>,&nbsp;<code>@next<\/code>, and configured iteration breaks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">37.8 Organization Issue Fields vs Project Custom Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If a value should remain consistent wherever an issue appears in the organization, consider an&nbsp;<strong>organization-level issue field<\/strong>. If the value is specific to one project&#8217;s planning context, use a&nbsp;<strong>project field<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Need structured metadata] --&gt; B{Should the value be canonical on the issue across projects?}\n    B --&gt;|Yes| C&#91;Organization issue field]\n    B --&gt;|No| D&#91;Project custom field]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A project can currently use up to&nbsp;<strong>50 total fields<\/strong>, including system and issue fields, so field design is also a capacity decision.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">37.9 Field Naming Conventions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer names that survive team changes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Priority          \u2713\nTarget Date       \u2713\nWorkstream        \u2713\nPlatform Priority \u2717 unless intentionally platform-specific\nRajesh Status     \u2717 person-specific taxonomy\nQ4 Sprint Name    \u2717 date encoded into schema\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">38. ADVANCED \u2014 Work Breakdown and Hierarchy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Issues supports parent\/sub-issue relationships, allowing multiple levels of hierarchy. Projects can surface parent relationships and sub-issue progress for planning.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">38.1 Conceptual Hierarchy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Many teams use vocabulary like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Initiative\n  \u2514\u2500\u2500 Epic\n       \u2514\u2500\u2500 Feature \/ Story\n            \u2514\u2500\u2500 Task \/ Bug\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub does not require you to use those exact product-management words. Model the hierarchy with Issues and issue types that match your organization.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Initiative: Modernize Authentication] --&gt; B&#91;Epic: Passkeys]\n    A --&gt; C&#91;Epic: Session Security]\n    B --&gt; D&#91;Feature: WebAuthn enrollment]\n    B --&gt; E&#91;Feature: Recovery flow]\n    D --&gt; F&#91;Task: API endpoint]\n    D --&gt; G&#91;Task: UI enrollment]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">38.2 Parent Issues and Sub-Issues<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use parent\/sub-issue relationships when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>work has real decomposition;<\/li>\n\n\n\n<li>progress at the parent matters;<\/li>\n\n\n\n<li>child issues deserve separate ownership\/discussion;<\/li>\n\n\n\n<li>the hierarchy should remain visible outside one Project.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Do not create child issues merely to mimic checklist lines.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">38.3 Sub-Issue Progress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sub-issue progress gives a useful roll-up signal, but do not confuse item count with effort. Completing 8 tiny sub-issues out of 10 does not always mean the parent is 80% of the effort complete.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">38.4 Issue Types<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Default issue types include concepts such as Task, Bug, and Feature, and organizations can define custom issue types. Use types to describe&nbsp;<strong>what the issue is<\/strong>, not where it currently sits in the workflow.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Type:   Bug\nStatus: In Progress\nPriority: P1\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These dimensions should remain independent.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">38.5 Dependencies<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Issues also supports&nbsp;<strong>blocked by \/ blocking<\/strong>&nbsp;relationships.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Database schema change] --&gt;|blocks| B&#91;API migration]\n    B --&gt;|blocks| C&#91;Frontend rollout]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Issue dependencies describe execution ordering; parent\/sub-issues describe decomposition. They are not interchangeable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">38.6 Cross-Project Hierarchy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because hierarchy lives on Issues, a parent and child can appear in different Projects. This is powerful for portfolio models, but establish clear ownership so two projects do not independently change the same canonical planning metadata.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">39. ADVANCED \u2014 Capacity and Workload Planning<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Projects gives you useful building blocks for capacity planning, but it is not a full workforce\/resource-planning suite. Use estimates and field sums as decision support, not as mathematical certainty.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">39.1 Basic Capacity Model<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Sprint capacity = team's planned point\/effort budget\nCommitted load  = sum(Estimate) for current iteration\nRemaining room  = capacity - committed load\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Team<\/th><th class=\"has-text-align-right\" data-align=\"right\">Capacity<\/th><th class=\"has-text-align-right\" data-align=\"right\">Current Sprint Estimate<\/th><th class=\"has-text-align-left\" data-align=\"left\">Signal<\/th><\/tr><\/thead><tbody><tr><td>Platform<\/td><td class=\"has-text-align-right\" data-align=\"right\">34<\/td><td class=\"has-text-align-right\" data-align=\"right\">31<\/td><td>Near capacity<\/td><\/tr><tr><td>API<\/td><td class=\"has-text-align-right\" data-align=\"right\">40<\/td><td class=\"has-text-align-right\" data-align=\"right\">46<\/td><td>Over plan<\/td><\/tr><tr><td>Web<\/td><td class=\"has-text-align-right\" data-align=\"right\">32<\/td><td class=\"has-text-align-right\" data-align=\"right\">25<\/td><td>Room remains<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">39.2 Project Setup<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Fields:\n  Iteration = Sprint\n  Number    = Estimate\n  Team      = owning team\n\nView:\n  Filter    = sprint:@current\n  Group by  = Team\n  Field sum = Estimate\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Estimated Backlog] --&gt; B&#91;Assign Current Iteration]\n    B --&gt; C&#91;Group by Team]\n    C --&gt; D&#91;Sum Estimate]\n    D --&gt; E{Within Capacity?}\n    E --&gt;|Yes| F&#91;Commit]\n    E --&gt;|No| G&#91;De-scope \/ Rebalance]\n    G --&gt; B\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">39.3 Assignee Workload<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A workload view can group by Assignee and sum Estimate. Use it to spot obvious overload, not to rank individual productivity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Better question:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201cDoes one person own too much committed work?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Poor question:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201cWho produced the most story points?\u201d<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">39.4 Iteration Workload<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Roadmap and table views can help compare upcoming iterations. Be careful with carry-over work: if unfinished work moves sprint-to-sprint, your historical data may tell a different story than the current field value alone.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">39.5 Capacity Anti-Patterns<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>treating story points as hours;<\/li>\n\n\n\n<li>comparing teams with different estimation scales;<\/li>\n\n\n\n<li>overfilling sprints because the arithmetic fits;<\/li>\n\n\n\n<li>counting unestimated work as zero effort;<\/li>\n\n\n\n<li>using assignee totals as performance scores.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">40. ADVANCED \u2014 Portfolio and Program Management<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">An organization-level Project can act as a portfolio or program view across teams and repositories.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">40.1 Portfolio Data Model<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended fields:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Strategic Initiative\nWorkstream\nOwning Team\nPriority\nHealth\nStart Date\nTarget Date\nQuarter\nRelease \/ Milestone\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use issue hierarchy to keep portfolio items at a useful level of abstraction.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Company Objective] --&gt; B&#91;Initiative: Identity Modernization]\n    A --&gt; C&#91;Initiative: Cost Reduction]\n    B --&gt; D&#91;Platform Epic]\n    B --&gt; E&#91;Web Epic]\n    B --&gt; F&#91;Mobile Epic]\n    D --&gt; G&#91;Delivery Issues in Repo]\n    E --&gt; H&#91;Delivery Issues in Repo]\n    F --&gt; I&#91;Delivery Issues in Repo]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">40.2 Multi-Team Project<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A single organization Project can include items from many repositories and teams. Useful views include:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">View<\/th><th class=\"has-text-align-left\" data-align=\"left\">Layout<\/th><th class=\"has-text-align-left\" data-align=\"left\">Filter \/ grouping<\/th><\/tr><\/thead><tbody><tr><td>Executive roadmap<\/td><td>Roadmap<\/td><td>Group by Strategic Initiative<\/td><\/tr><tr><td>Team delivery<\/td><td>Board<\/td><td>Slice\/Filter Team<\/td><\/tr><tr><td>Risks<\/td><td>Table<\/td><td><code>priority:P0,P1 -status:Done<\/code>&nbsp;plus risk metadata<\/td><\/tr><tr><td>Quarter plan<\/td><td>Roadmap<\/td><td>Target dates within quarter<\/td><\/tr><tr><td>Current execution<\/td><td>Board<\/td><td><code>sprint:@current<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">40.3 Project Health<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Portfolio-level health should be explicit through Project updates or a clearly governed health field on higher-level items.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid inferring \u201cgreen\u201d simply because many issues are closed. A project can complete many low-risk tasks and still miss the critical path.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">40.4 Cross-Project Coordination<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use separate team Projects when teams need distinct workflows\/access, and a portfolio Project when leadership needs a shared strategic view. Do not duplicate every delivery issue into every portfolio project by default.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">41. ADVANCED \u2014 Advanced Roadmap Planning<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Roadmap views become useful when they communicate decisions, not when they reproduce every task on a timeline.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">41.1 Long-Range Planning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A simple model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Now      -&gt; current committed work\nNext     -&gt; likely next work\nLater    -&gt; direction with lower certainty\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For date-oriented roadmaps, configure Start Date and Target Date fields and use quarter\/year zoom for higher-level planning.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">41.2 Grouping Strategies<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Choose one grouping that answers the audience&#8217;s question:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Group by Team       -&gt; Who is delivering?\nGroup by Workstream -&gt; What stream is progressing?\nGroup by Priority   -&gt; What is strategically important?\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">41.3 Milestone and Iteration Markers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Markers add context to the timeline:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>release milestones;<\/li>\n\n\n\n<li>sprint boundaries;<\/li>\n\n\n\n<li>important dates;<\/li>\n\n\n\n<li>item-specific date markers.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">They help readers compare planned work with external commitments.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">41.4 Quarterly and Annual Planning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Example roadmap field set:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Field<\/th><th class=\"has-text-align-left\" data-align=\"left\">Purpose<\/th><\/tr><\/thead><tbody><tr><td>Start Date<\/td><td>Planned start<\/td><\/tr><tr><td>Target Date<\/td><td>Planned end<\/td><\/tr><tr><td>Team<\/td><td>Ownership<\/td><\/tr><tr><td>Priority<\/td><td>Strategic ordering<\/td><\/tr><tr><td>Milestone<\/td><td>Release marker<\/td><\/tr><tr><td>Workstream<\/td><td>Program grouping<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">41.5 Dependencies on a Roadmap<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Issues can represent&nbsp;<code>blocked by<\/code>&nbsp;\/&nbsp;<code>blocking<\/code>&nbsp;dependencies. Treat these as execution relationships. Do not assume the Project roadmap behaves like a full Gantt product with automatically scheduled dependency connector lines and critical-path calculations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use dependencies to answer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>What cannot start yet?\nWhat work is holding another issue?\nWhich prerequisite must be watched?\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">42. ADVANCED \u2014 Advanced Kanban Design<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A board should make flow problems obvious within seconds.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">42.1 Workflow Columns<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Example engineering flow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Backlog | Ready | In Progress | In Review | Ready to Deploy | Done\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do not add a column for every tiny activity. More columns mean more transition overhead and less signal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">42.2 WIP Limits<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A WIP limit communicates a desired maximum for a column. In Projects, treat the displayed limit as a&nbsp;<strong>planning signal<\/strong>, not a hard policy gate that prevents another card from entering the column.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>In Progress: limit 6\nIn Review:   limit 4\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If Review is constantly above its limit, the problem may be reviewer capacity rather than developer throughput.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">42.3 Swimlane-Style Grouping<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use board grouping to create horizontal sections:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Columns: Status\nGroup:   Team\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <code>            Ready | In Progress | Review | Done\nPlatform       3          2           1       8\nAPI            4          3           2      11\nWeb            2          4           1       9\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">42.4 Purpose-Specific Boards<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Board<\/th><th class=\"has-text-align-left\" data-align=\"left\">Columns<\/th><th class=\"has-text-align-left\" data-align=\"left\">Extra organization<\/th><\/tr><\/thead><tbody><tr><td>Sprint board<\/td><td>Status<\/td><td>Filter&nbsp;<code>sprint:@current<\/code><\/td><\/tr><tr><td>Priority board<\/td><td>Priority<\/td><td>Group by Team<\/td><\/tr><tr><td>Release board<\/td><td>Status<\/td><td>Filter milestone\/release<\/td><\/tr><tr><td>Backlog board<\/td><td>Priority<\/td><td>Filter Status=Backlog\/Ready<\/td><\/tr><tr><td>Team board<\/td><td>Status<\/td><td>Filter specific Team<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">42.5 Flow Optimization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Watch for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cards aging in one status;<\/li>\n\n\n\n<li>review queues growing;<\/li>\n\n\n\n<li>too much simultaneous work;<\/li>\n\n\n\n<li>many unowned cards;<\/li>\n\n\n\n<li>large batches entering Done only at sprint end.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A board is valuable because it exposes system behavior, not because moving cards is visually satisfying.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">43. ADVANCED \u2014 Advanced View Architecture<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A mature Project has one data model and several purpose-specific views.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;One Project Data Set] --&gt; B&#91;Executive Roadmap]\n    A --&gt; C&#91;Engineering Sprint Board]\n    A --&gt; D&#91;Product Backlog]\n    A --&gt; E&#91;Team View]\n    A --&gt; F&#91;Personal Work]\n    A --&gt; G&#91;Risk View]\n    A --&gt; H&#91;Done \/ Archive View]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">43.1 Executive Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>higher-level items;<\/li>\n\n\n\n<li>roadmap layout;<\/li>\n\n\n\n<li>initiative\/workstream grouping;<\/li>\n\n\n\n<li>target dates and health;<\/li>\n\n\n\n<li>minimal operational noise.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">43.2 Engineering Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>current iteration;<\/li>\n\n\n\n<li>status board;<\/li>\n\n\n\n<li>assignee and estimate visible;<\/li>\n\n\n\n<li>repository\/team context;<\/li>\n\n\n\n<li>PR\/review state where useful.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">43.3 Product Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>backlog and discovery items;<\/li>\n\n\n\n<li>issue type;<\/li>\n\n\n\n<li>priority;<\/li>\n\n\n\n<li>product area\/workstream;<\/li>\n\n\n\n<li>target release\/date.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">43.4 Personal Workload View<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Example filter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>assignee:@me -status:Done\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then group by Status or Iteration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">43.5 Risk View<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Risk views should be rule-based where possible. Example concepts:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>High priority + not Done\nPast target date\nBlocked work\nUnassigned committed items\nItems in current iteration without estimate\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Some require metadata that Projects does not calculate automatically; create only the minimum fields\/automation needed for meaningful risk detection.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">43.6 Done\/Archive Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Completed work should remain discoverable without crowding delivery views. Use filters and auto-archive rather than deleting useful history.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">44. ADVANCED \u2014 Reporting and Analytics Patterns<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Project reporting should answer a decision question.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">44.1 Reporting Matrix<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Question<\/th><th class=\"has-text-align-left\" data-align=\"left\">Useful view\/chart<\/th><\/tr><\/thead><tbody><tr><td>Where is work stuck?<\/td><td>Status distribution + board<\/td><\/tr><tr><td>Who\/which team owns work?<\/td><td>Group by Team\/Assignee<\/td><\/tr><tr><td>Are we overcommitted?<\/td><td>Iteration filtered field sums<\/td><\/tr><tr><td>What is high priority?<\/td><td>Priority distribution\/table<\/td><\/tr><tr><td>Which repo carries load?<\/td><td>Group\/chart by Repository<\/td><\/tr><tr><td>How much effort is planned?<\/td><td>Sum Estimate<\/td><\/tr><tr><td>What changed strategically?<\/td><td>Project update history<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">44.2 Progress Dashboard Pattern<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Project Fields] --&gt; B&#91;Saved Views]\n    A --&gt; C&#91;Insights Charts]\n    A --&gt; D&#91;Project Updates]\n    B --&gt; E&#91;Operational Decisions]\n    C --&gt; E\n    D --&gt; F&#91;Stakeholder Communication]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">44.3 Delivery Reporting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid equating&nbsp;<code>Done item count<\/code>&nbsp;with delivered value. Complement status charts with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>target\/milestone outcomes;<\/li>\n\n\n\n<li>high-priority completion;<\/li>\n\n\n\n<li>blocked work;<\/li>\n\n\n\n<li>release\/deployment facts;<\/li>\n\n\n\n<li>qualitative Project updates.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">44.4 Historical Analytics<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects is primarily an operational planning tool. If you need long-term trend analysis, complex lead-time calculations, or enterprise BI, export\/API-sync project data into an analytics system rather than overloading Project charts.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">45. ADVANCED \u2014 Cross-Repository Project Design<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">One of current Projects&#8217; strongest capabilities is planning across repositories.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">45.1 Example Architecture<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Organization Project: Acme Platform Delivery]\n    B&#91;web repo]\n    C&#91;api repo]\n    D&#91;infra repo]\n    E&#91;docs repo]\n\n    B --&gt; A\n    C --&gt; A\n    D --&gt; A\n    E --&gt; A\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">45.2 Repository Field<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use the built-in Repository metadata to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>filter one component;<\/li>\n\n\n\n<li>group work by codebase;<\/li>\n\n\n\n<li>compare workload distribution;<\/li>\n\n\n\n<li>build repository-specific stakeholder views.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example filters:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>repo:acme-corp\/web\nrepo:acme-corp\/api status:\"In Progress\"\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">45.3 Auto-Add Across Repositories<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use multiple built-in auto-add workflows, subject to your plan&#8217;s workflow limits, when items should enter the project based on repository-specific filters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>web   -&gt; label:platform\napi   -&gt; label:platform\ninfra -&gt; label:platform\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If logic becomes complex or spans many organizations\/repositories, central App automation may be easier to govern than many duplicated Actions workflows.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">45.4 Default Repository<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Set a default repository when project-created issues should normally land in one repository. In a genuinely cross-repository program, teach users to verify the destination repository rather than blindly accepting the default.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">45.5 Design Rule<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do not create one Project per repository merely because repositories are separate. Create Projects around&nbsp;<strong>planning boundaries<\/strong>: teams, programs, products, releases, or portfolios.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">46. ADVANCED \u2014 Automation Architecture<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Automation should reduce manual bookkeeping while preserving clear ownership and predictable behavior.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">46.1 Automation Layers<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TB\n    A&#91;Built-in Project Workflows]\n    B&#91;GitHub Actions]\n    C&#91;GitHub CLI Scripts]\n    D&#91;GraphQL \/ REST API]\n    E&#91;GitHub App]\n    F&#91;External Systems]\n\n    A --&gt; G&#91;GitHub Project]\n    B --&gt; C\n    B --&gt; D\n    C --&gt; G\n    D --&gt; G\n    E --&gt; D\n    F --&gt; E\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">46.2 When to Use Which Layer<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Requirement<\/th><th class=\"has-text-align-left\" data-align=\"left\">Best starting point<\/th><\/tr><\/thead><tbody><tr><td>Set Done when issue closes<\/td><td>Built-in workflow<\/td><\/tr><tr><td>Auto-add matching repo issues<\/td><td>Built-in auto-add<\/td><\/tr><tr><td>One-off admin script<\/td><td><code>gh project<\/code><\/td><\/tr><tr><td>Repository event + custom logic<\/td><td>GitHub Actions<\/td><\/tr><tr><td>Rich object discovery\/update<\/td><td>GraphQL<\/td><\/tr><tr><td>Existing REST integration<\/td><td>REST API<\/td><\/tr><tr><td>Long-lived organization integration<\/td><td>GitHub App<\/td><\/tr><tr><td>BI\/ITSM sync<\/td><td>App\/external service<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">46.3 Event-Driven vs Scheduled<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Event-driven:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Issue labeled -&gt; update priority immediately\nPR merged     -&gt; update release status immediately\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Scheduled:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Every day -&gt; detect stale unowned work\nEvery week -&gt; generate governance report\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer events when GitHub already emits the fact you need. Use schedules for reconciliation and conditions that require scanning state.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">46.4 Idempotency<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every custom automation should be safe to run more than once.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Every run creates another duplicate draft item.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Good:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Find existing item -&gt; compare desired value -&gt; update only if needed.\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">46.5 Observability<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For business-critical automation, record:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>event\/request ID;<\/li>\n\n\n\n<li>project\/item IDs;<\/li>\n\n\n\n<li>action attempted;<\/li>\n\n\n\n<li>result;<\/li>\n\n\n\n<li>non-secret error details;<\/li>\n\n\n\n<li>retry outcome.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Do not make a planning system dependent on automation nobody can diagnose.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part VII \u2014 ADVANCED INTEGRATIONS, ADMINISTRATION &amp; REFERENCE<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">47. ADVANCED \u2014 Project Integration with GitHub Issues<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Issues are the primary durable planning objects for most work tracked in Projects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">47.1 Issue Creation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can create an issue from a Project or create it in a repository and add it to the Project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CLI example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh issue create \\\n  --repo acme-corp\/api \\\n  --title 'Add token rotation endpoint' \\\n  --body 'Implement the API required by the authentication rollout.' \\\n  --type Task \\\n  --project 'Acme Platform Delivery'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When creating from Projects, select the correct destination repository\u2014especially in cross-repository projects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">47.2 Issue Metadata<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Useful native issue metadata includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Assignees;<\/li>\n\n\n\n<li>Labels;<\/li>\n\n\n\n<li>Milestone;<\/li>\n\n\n\n<li>Issue Type;<\/li>\n\n\n\n<li>State \/ close reason;<\/li>\n\n\n\n<li>Parent\/sub-issue relationships;<\/li>\n\n\n\n<li>dependencies;<\/li>\n\n\n\n<li>organization issue fields where enabled.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These are canonical issue properties rather than ordinary project-scoped custom fields.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">47.3 Issue Type<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use Issue Type to describe the nature of the work:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bug\nFeature\nTask\nCustom organization types\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do not duplicate this with a Project single-select field called&nbsp;<code>Work Type<\/code>&nbsp;unless the two truly mean different things.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">47.4 Parent Issues and Sub-Issues<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CLI examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Create a child under parent issue 100<\/em>\ngh issue create \\\n  --repo acme-corp\/api \\\n  --title 'Implement WebAuthn challenge endpoint' \\\n  --parent 100\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Add an existing issue as a sub-issue<\/em>\ngh issue edit 100 \\\n  --repo acme-corp\/api \\\n  --add-sub-issue 123\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use the Project&#8217;s Parent issue and Sub-issue progress metadata to build hierarchy-oriented views.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">47.5 Dependencies<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CLI examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Issue 140 is blocked by issue 123<\/em>\ngh issue edit 140 \\\n  --repo acme-corp\/api \\\n  --add-blocked-by 123\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dependencies answer&nbsp;<strong>ordering\/blocking<\/strong>&nbsp;questions; sub-issues answer&nbsp;<strong>decomposition<\/strong>&nbsp;questions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">47.6 Organization Issue Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organization issue fields are designed for consistent metadata across an organization&#8217;s repositories and projects. Their values live on the issue and remain consistent across Projects.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use them for organization-wide concepts such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Priority\nEffort\nCustomer\nTarget date\nProduct area\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Project custom fields remain appropriate for project-local concepts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Synchronization Model<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Issue] --&gt; B&#91;Organization Issue Field Value]\n    B --&gt; C&#91;Project A]\n    B --&gt; D&#91;Project B]\n    A --&gt; E&#91;Project A Local Field]\n    A --&gt; F&#91;Project B Local Field]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The organization field value is shared. Project-local values can differ by project.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">48. ADVANCED \u2014 Project Integration with Pull Requests<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Pull requests can be project items, and Projects can surface PR-specific metadata to connect planning with code review.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">48.1 PRs as Project Items<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A PR can be added directly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project item-add 7 \\\n  --owner acme-corp \\\n  --url 'https:\/\/github.com\/acme-corp\/api\/pull\/88'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Direct PR tracking is useful for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>release readiness;<\/li>\n\n\n\n<li>review queues;<\/li>\n\n\n\n<li>migration programs;<\/li>\n\n\n\n<li>dependency upgrades;<\/li>\n\n\n\n<li>security remediation.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">48.2 PR State and Review Metadata<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Relevant metadata includes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PR state: Open \/ Closed \/ Merged\nReviewers\nLinked pull requests\nReview status where exposed\nRepository\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Issue + PR Relationship<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A useful model is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Issue: User-visible requirement] --&gt; B&#91;Linked PR]\n    B --&gt; C&#91;Review]\n    C --&gt; D&#91;Merge]\n    D --&gt; E&#91;Built-in workflow can mark project work Done]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do not always add both an issue and its PR to the same delivery view. That can double-count work. Add PRs directly when the PR itself is the thing stakeholders need to track, or create a dedicated review\/release view.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">48.3 PR Automation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Typical rules:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PR opened             -&gt; add to release project\nPR ready for review   -&gt; set Status = In Review\nPR merged             -&gt; built-in workflow sets Status = Done\nPR closed unmerged    -&gt; apply team-specific handling\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer built-in merge\/close workflows where they meet the requirement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">48.4 Deployment and Release Tracking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects can coordinate implementation metadata, but deployment truth usually comes from Actions\/deployment environments\/release systems. If you copy deployment state into a Project field, automate it from the source of truth rather than relying on manual updates.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">49. ADVANCED \u2014 Project Integration with Milestones<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Milestones and Projects complement each other.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">49.1 When Milestones Fit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Milestones work well for a repository-oriented target such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>v3.2 release\nPublic Beta\nSecurity Hardening Phase 1\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Projects add richer planning around the work assigned to those milestones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">49.2 Useful Project Operations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>show the Milestone field;<\/li>\n\n\n\n<li>filter by milestone;<\/li>\n\n\n\n<li>group items by milestone;<\/li>\n\n\n\n<li>use milestone markers on roadmaps where supported;<\/li>\n\n\n\n<li>create release-specific views.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example conceptual filter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>milestone:\"v3.2\" -status:Done\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">49.3 Milestone vs Release Custom Field<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer the native Milestone when repository milestones are already your release source of truth. Create a custom Release field when you need organization-level semantics that a repository milestone cannot represent cleanly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid maintaining both manually with the same meaning.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">50. ADVANCED \u2014 Project Integration with Teams<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Teams provide a natural access and ownership boundary for organization Projects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">50.1 Team Linking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Linking a Project to a team improves discoverability and gives the team access according to GitHub&#8217;s team\/project behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CLI example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project link 7 \\\n  --owner acme-corp \\\n  --team platform\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">50.2 Team Visibility vs Team Ownership Field<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These are different:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Linked Team      = GitHub relationship\/discoverability\/access\nTeam field value = planning metadata on an item\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A project may be linked to the Platform team while individual items have&nbsp;<code>Team = Web<\/code>,&nbsp;<code>API<\/code>, or&nbsp;<code>Platform<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">50.3 Team-Based Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>View: Platform Delivery\nFilter: team:Platform        # if Team is a filterable field with this value\nLayout: Board\nColumns: Status\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For Project filter syntax, use the exact field name\/value exposed in your project rather than assuming a built-in&nbsp;<code>team:<\/code>&nbsp;qualifier exists for your custom Team field.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">50.4 Team Workload<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Group by Team and sum Estimate to support sprint\/program planning. Use capacity conversations to rebalance ownership, not to score teams.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">51. ADVANCED \u2014 Project Integration with Repositories<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Repositories remain the home of Issues and Pull Requests; Projects organize those objects across planning contexts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">51.1 Repository Linking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A linked Project can surface from a repository&#8217;s Projects area, improving discoverability.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gh project link 7 \\\n  --owner acme-corp \\\n  --repo acme-corp\/api\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">51.2 Default Repository<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A default repository streamlines creating issues from the Project. It is a convenience, not an ownership rule.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">51.3 Importing and Adding Repository Items<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Common approaches:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Repository import during project creation\nBulk add from repository\nSearch\/add individual issues and PRs\nAuto-add workflow\nCLI\/API automation\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">51.4 Repository Filters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>repo:acme-corp\/api\nrepo:acme-corp\/infra is:issue\nrepo:acme-corp\/web -status:Done\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">51.5 Cross-Repository Project Rule<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Repository boundaries should not force planning boundaries. A single product feature may require work in&nbsp;<code>web<\/code>,&nbsp;<code>api<\/code>,&nbsp;<code>infra<\/code>, and&nbsp;<code>docs<\/code>; one organization Project can show the complete delivery picture.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">52. ADVANCED \u2014 Project Templates at Scale<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Templates turn good project design into reusable organization infrastructure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">52.1 Template Portfolio<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A mature organization may maintain a small curated set:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Template<\/th><th class=\"has-text-align-left\" data-align=\"left\">Purpose<\/th><\/tr><\/thead><tbody><tr><td>Engineering Delivery<\/td><td>Standard backlog + sprint execution<\/td><\/tr><tr><td>Product Roadmap<\/td><td>Strategic roadmap planning<\/td><\/tr><tr><td>Release<\/td><td>Release readiness across repos<\/td><\/tr><tr><td>Bug Management<\/td><td>Severity\/priority triage<\/td><\/tr><tr><td>Platform Migration<\/td><td>Multi-repository migration<\/td><\/tr><tr><td>Program Portfolio<\/td><td>Initiative-level coordination<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid dozens of near-identical templates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">52.2 What to Standardize<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A template should intentionally define:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>fields and option taxonomies;<\/li>\n\n\n\n<li>views;<\/li>\n\n\n\n<li>configured built-in workflows that can be copied;<\/li>\n\n\n\n<li>insights\/charts;<\/li>\n\n\n\n<li>README\/instructions;<\/li>\n\n\n\n<li>optional safe example draft items.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Remember that copied\/template projects do not necessarily carry every relationship or all automation configuration. In particular, design post-creation steps for repository\/team links, permissions, and auto-add workflows where needed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">52.3 Recommended Templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organizations can curate a limited set of recommended templates so users start from approved patterns rather than inventing a project model each time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">52.4 Template Versioning Strategy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub project templates do not behave like a software package manager that automatically upgrades every project created from them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use a lightweight governance model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Template README version: v3\nField standard: 2026-Q3\nOwner: Platform PMO\nChange log: link to governance repository\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When the template changes, decide whether existing Projects should migrate. Do not assume they inherit changes automatically.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">53. ADVANCED \u2014 Project Administration<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Project administration is the operating discipline that keeps a Project trustworthy after its initial setup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">53.1 Administrative Areas<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Area<\/th><th class=\"has-text-align-left\" data-align=\"left\">Admin question<\/th><\/tr><\/thead><tbody><tr><td>Settings<\/td><td>Is the title\/description\/README current?<\/td><\/tr><tr><td>Visibility<\/td><td>Is public\/private still appropriate?<\/td><\/tr><tr><td>Access<\/td><td>Who has read\/write\/admin?<\/td><\/tr><tr><td>Fields<\/td><td>Are any duplicates or unused fields present?<\/td><\/tr><tr><td>Views<\/td><td>Are saved views purposeful and named?<\/td><\/tr><tr><td>Workflows<\/td><td>Are automations enabled and correct?<\/td><\/tr><tr><td>Insights<\/td><td>Do charts answer real questions?<\/td><\/tr><tr><td>Links<\/td><td>Are repositories\/teams still relevant?<\/td><\/tr><tr><td>Updates<\/td><td>Is project health communicated?<\/td><\/tr><tr><td>Lifecycle<\/td><td>Should the project be closed or deleted?<\/td><\/tr><tr><td>Export<\/td><td>Is external reporting\/recovery required?<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">53.2 Monthly Admin Review<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; ] Remove obsolete collaborators\n&#91; ] Review public visibility\n&#91; ] Check stale auto-add rules\n&#91; ] Archive old completed items\n&#91; ] Remove unused fields\/views\n&#91; ] Validate template\/version conventions\n&#91; ] Review Project README\n&#91; ] Confirm at least two admins for important projects\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">53.3 Close vs Delete<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Close a Project when the work is complete but history remains useful. Delete only when the Project itself should no longer exist and organizational policy allows it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">54. ADVANCED \u2014 Project Data Model<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Understanding the data model prevents many API and reporting mistakes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">54.1 Conceptual Model<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>classDiagram\n    class ProjectV2 {\n      id\n      number\n      title\n      public\n      closed\n    }\n    class ProjectV2Item {\n      id\n      type\n    }\n    class Issue\n    class PullRequest\n    class DraftIssue\n    class ProjectField\n    class FieldValue\n    class View\n    class Workflow\n    class Insight\n    class StatusUpdate\n    class RepositoryLink\n    class TeamLink\n\n    ProjectV2 \"1\" --&gt; \"many\" ProjectV2Item\n    ProjectV2Item --&gt; Issue\n    ProjectV2Item --&gt; PullRequest\n    ProjectV2Item --&gt; DraftIssue\n    ProjectV2 \"1\" --&gt; \"many\" ProjectField\n    ProjectV2Item \"1\" --&gt; \"many\" FieldValue\n    ProjectV2 \"1\" --&gt; \"many\" View\n    ProjectV2 \"1\" --&gt; \"many\" Workflow\n    ProjectV2 \"1\" --&gt; \"many\" Insight\n    ProjectV2 \"1\" --&gt; \"many\" StatusUpdate\n    ProjectV2 --&gt; RepositoryLink\n    ProjectV2 --&gt; TeamLink\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">54.2 Critical Distinctions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Content ID vs Project Item ID<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you add Issue&nbsp;<code>#42<\/code>&nbsp;to a Project:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Issue node ID          = identity of the issue\nProject item ID        = identity of its membership in this Project\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Field-value mutations target the&nbsp;<strong>project item ID<\/strong>, not simply the issue number.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Project Number vs Node ID<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Project number = human-facing URL\/reference\nProject node ID = API identity used in GraphQL mutations\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Field Configuration vs Field Value<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Priority field          = schema\/configuration\nP1 option               = field option\nItem's Priority = P1    = field value\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Views Are Not Data Copies<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A View contains presentation\/query configuration. Items and field values belong to the Project data model and can appear in multiple views.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">55. ADVANCED \u2014 Project API Authentication and Permissions<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Authentication is part of the API design, not a final deployment detail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">55.1 Authentication Options<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Method<\/th><th class=\"has-text-align-left\" data-align=\"left\">Typical use<\/th><\/tr><\/thead><tbody><tr><td>GitHub CLI login<\/td><td>Human\/admin scripts<\/td><\/tr><tr><td>Classic PAT<\/td><td>GraphQL\/CLI where policy permits<\/td><\/tr><tr><td>Fine-grained PAT<\/td><td>REST endpoints with explicit permission support<\/td><\/tr><tr><td>GitHub App installation token<\/td><td>Organization production automation<\/td><\/tr><tr><td><code>GITHUB_TOKEN<\/code><\/td><td>Repository Actions; do not assume Project access<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">55.2 GraphQL Projects Scopes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For classic PAT-based GraphQL Projects access, GitHub documents:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>read:project -&gt; query\/read Projects\nproject      -&gt; write\/mutate Projects\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The exact permissions for a GitHub App or fine-grained token should be selected from the current Projects permission model and the other resources your automation touches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">55.3 Permission Matrix Example<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Automation action<\/th><th class=\"has-text-align-left\" data-align=\"left\">Project access<\/th><th class=\"has-text-align-left\" data-align=\"left\">Possible additional access<\/th><\/tr><\/thead><tbody><tr><td>Read project items<\/td><td>Read<\/td><td>Underlying repo read if private content needed<\/td><\/tr><tr><td>Update custom field<\/td><td>Write<\/td><td>None beyond Project if no repo object modified<\/td><\/tr><tr><td>Add label to issue<\/td><td>Project + issue access as applicable<\/td><td>Issues write<\/td><\/tr><tr><td>Merge PR<\/td><td>Project access not enough<\/td><td>Pull requests\/contents as required<\/td><\/tr><tr><td>Read private repo item details<\/td><td>Project visibility not enough<\/td><td>Repository permission<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">55.4 Least-Privilege Flow<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Define operation] --&gt; B&#91;List Project permission needed]\n    B --&gt; C&#91;List repository\/org resource permissions needed]\n    C --&gt; D&#91;Choose identity type]\n    D --&gt; E&#91;Issue shortest\/narrowest usable credential]\n    E --&gt; F&#91;Test denied operations too]\n    F --&gt; G&#91;Deploy and audit]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">55.5 Authentication Failure Checklist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When an API call fails:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1. Is the token valid?\n2. Does it include Projects read\/write access?\n3. Is SSO authorization required and satisfied?\n4. Can the identity access the organization\/project?\n5. Can it access the underlying private repository item?\n6. Is the API endpoint supported by this token type?\n7. Is the API\/version header current for the REST endpoint?\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">56. ADVANCED \u2014 Project Limits and Constraints<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Limits change over time and can differ between GitHub.com plans and GitHub Enterprise Server versions. Treat this section as a design checkpoint and verify GitHub&#8217;s current documentation before building near a boundary.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">56.1 High-Impact Current Limits<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As verified for this guide:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Resource<\/th><th class=\"has-text-align-left\" data-align=\"left\">Current documented limit \/ rule<\/th><\/tr><\/thead><tbody><tr><td>Project items<\/td><td>Up to&nbsp;<strong>50,000<\/strong>&nbsp;items across active views and archive<\/td><\/tr><tr><td>Total fields in a Project<\/td><td>Up to&nbsp;<strong>50<\/strong>, including issue fields and system fields<\/td><\/tr><tr><td>Organization issue fields<\/td><td>Up to&nbsp;<strong>25<\/strong>&nbsp;per organization<\/td><\/tr><tr><td>Single-select organization issue-field options<\/td><td>Up to&nbsp;<strong>100<\/strong><\/td><\/tr><tr><td>Recommended organization templates<\/td><td>Up to&nbsp;<strong>6<\/strong>&nbsp;recommended templates<\/td><\/tr><tr><td>Auto-add workflows \u2014 Free<\/td><td><strong>1<\/strong><\/td><\/tr><tr><td>Auto-add workflows \u2014 Pro<\/td><td><strong>5<\/strong><\/td><\/tr><tr><td>Auto-add workflows \u2014 Team<\/td><td><strong>5<\/strong><\/td><\/tr><tr><td>Auto-add workflows \u2014 Enterprise Cloud<\/td><td><strong>20<\/strong><\/td><\/tr><tr><td>Auto-add workflows \u2014 Enterprise Server<\/td><td><strong>20<\/strong>&nbsp;(verify your GHES version)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">56.2 Functional Constraints to Remember<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Auto-Add Filter Subset<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Auto-add does not accept every Project filter qualifier. Current supported categories include a subset such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>is:\nlabel:\nreason:\nassignee:\nno:\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Design the rule in the UI and test it rather than assuming a complex saved-view filter can be pasted unchanged.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Auto-Add Is Not Historical Backfill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Enabling an auto-add workflow does not automatically import all existing matching items merely because they already satisfy the filter. The workflow acts when items are created or updated and match the rule. Backfill existing work separately when required.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Board WIP Limits Are Signals<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Treat column limits as visible WIP guidance rather than enforcement that blocks card movement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">API Rate Limits<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">GraphQL and REST calls are subject to GitHub rate limiting. Bulk automation should paginate, cache stable IDs where appropriate, avoid unnecessary polling, and handle retry\/rate-limit responses.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Layout\/Field Restrictions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Not every field can drive every layout feature. Examples include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Roadmap positioning requires date\/iteration semantics.<\/li>\n\n\n\n<li>Board columns are designed around suitable fields such as Status\/single-select\/iteration.<\/li>\n\n\n\n<li>CLI field creation does not necessarily expose every field type available in the web UI\/API.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">56.3 Scale Strategy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do not solve a 50,000-item boundary by deleting history randomly. Better strategies include:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Auto-archive completed work\nClose completed projects\nSplit planning by real program\/team boundary\nExport\/sync long-term analytics externally\nAvoid adding irrelevant items in the first place\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">57. ADVANCED \u2014 Migration and Legacy Projects<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Projects (classic)<\/strong>&nbsp;is historical. GitHub sunset Projects (classic), with removal announced for&nbsp;<strong>April 1, 2025 UTC<\/strong>. In 2026, new designs should target current GitHub Projects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">57.1 Concept Mapping<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Projects (classic) concept<\/th><th class=\"has-text-align-left\" data-align=\"left\">Current Projects concept<\/th><\/tr><\/thead><tbody><tr><td>Board\/card-centric project<\/td><td>Field-driven Project<\/td><\/tr><tr><td>Column<\/td><td>Often&nbsp;<code>Status<\/code>&nbsp;or another board column field<\/td><\/tr><tr><td>Note card<\/td><td>Draft issue<\/td><\/tr><tr><td>One board layout<\/td><td>Multiple saved Table\/Board\/Roadmap views<\/td><\/tr><tr><td>Card movement automation<\/td><td>Built-in workflows + field updates<\/td><\/tr><tr><td>Classic Project API types<\/td><td><code>ProjectV2<\/code>&nbsp;\/ current REST Projects APIs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">57.2 Why Migration Is Not Only Visual<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Current Projects changes the planning model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Classic: Card is primarily positioned in a board column.\nCurrent: Item has structured fields; views render those fields differently.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A direct \u201ccopy columns exactly\u201d migration can preserve old limitations instead of improving the planning model.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">57.3 Migration Review Checklist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For legacy documentation\/scripts\/integrations, look for:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; ] ProjectCard \/ ProjectColumn GraphQL types\n&#91; ] addProjectCard \/ moveProjectCard mutations\n&#91; ] Classic REST endpoints\n&#91; ] Automation tied to board columns\n&#91; ] Documentation saying Projects v2 is GraphQL-only\n&#91; ] Old screenshots\/UI instructions\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace them with current Projects concepts and APIs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">57.4 Migration Design Steps<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Inventory legacy model] --&gt; B&#91;Map columns to fields\/status]\n    B --&gt; C&#91;Define current views]\n    C --&gt; D&#91;Rebuild automation]\n    D --&gt; E&#91;Validate permissions]\n    E --&gt; F&#91;Validate API\/CLI scripts]\n    F --&gt; G&#91;Document operating model]\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">58. ADVANCED \u2014 Project Best Practices<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">These practices keep a Project understandable months after launch.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">58.1 Make the Project a Planning Source of Truth<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Decide what the Project is authoritative for:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sprint commitment?   Yes\nPriority?            Yes, if governance says so\nIssue description?   No \u2014 lives on the Issue\nCode review state?   No \u2014 lives on the PR\nDeployment truth?    Usually deployment system\/Actions\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">58.2 Standardize Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use a small, documented field set. Reuse organization issue fields when a value needs cross-project consistency.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">58.3 Standardize Status<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A shared Status vocabulary improves automation, reporting, and onboarding.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">58.4 Use Purpose-Specific Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One view should answer one audience question. Prefer 6 useful views over 25 nearly identical tabs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">58.5 Automate Mechanical State<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Good automation candidates:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Auto-add matching work\nSet initial Status\nSet Done on close\/merge\nArchive stale completed work\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Humans should spend time on prioritization and decisions, not clerical movement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">58.6 Manage Iterations Deliberately<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Configure duration, cadence, names, and breaks. Use&nbsp;<code>@current<\/code>\/<code>@next<\/code>&nbsp;filters so saved views advance with the calendar instead of needing weekly edits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">58.7 Publish Project Health<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use Project updates for stakeholder communication instead of forcing executives to infer health from card counts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">58.8 Control Access<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Review public visibility, base permissions, team access, outside collaborators, and automation credentials.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">58.9 Document the Operating Model<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every important Project should explain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Purpose\nScope\nField meanings\nStatus definitions\nView meanings\nAutomation rules\nOwnership\nArchive\/lifecycle policy\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">58.10 Clean Up<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Archive completed work, close obsolete Projects, delete unused fields\/views, and retire stale automation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">59. ADVANCED \u2014 Common Project Anti-Patterns<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Knowing what&nbsp;<em>not<\/em>&nbsp;to do prevents most long-term Project problems.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.1 Too Many Custom Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Symptom:<\/strong>&nbsp;every stakeholder request creates another column.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Result:<\/strong>&nbsp;incomplete values, contradictory metadata, unusable tables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fix:<\/strong>&nbsp;require a decision question for every new field.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.2 Duplicate Status Fields<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Status\nEngineering Status\nDelivery Status\nPM Status\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Unless these represent genuinely different dimensions, they create ambiguity. Prefer one workflow Status and separate fields for distinct concepts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.3 Duplicate Projects<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Two teams create separate Projects containing the same work because they need different views.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fix:<\/strong>&nbsp;first ask whether one Project with two saved views solves the problem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.4 Excessive Manual Updates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If closing an issue requires someone to manually set&nbsp;<code>Status = Done<\/code>, enable the appropriate built-in workflow.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.5 Unclear Ownership<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Projects with no admin\/maintainer become stale. Assign clear owners and at least one backup for business-critical planning.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.6 Unsaved View Changes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A user carefully creates a filter\/grouping but does not save the view. Others continue seeing the old configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fix:<\/strong>&nbsp;teach the visual \u201cview modified\u201d state and&nbsp;<strong>Save changes<\/strong>&nbsp;behavior.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.7 Overly Complex Filtering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A filter nobody can explain is not a reliable process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Break complex stakeholder needs into named views with clear purpose.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.8 Poor Template Governance<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Copying an old template forever multiplies bad fields and workflows. Assign owners and review template versions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.9 Missing Archive Strategy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A Project becomes slow to navigate conceptually because years of completed work remain mixed with active work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use filters plus auto-archive while retaining history.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.10 Mixing Backlog and Completed Work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A default view with 5,000 Done items and 80 active items hides the work that matters.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.11 Uncontrolled Public Visibility<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Public roadmap metadata can reveal plans even when private repository issue bodies remain hidden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.12 Over-Broad Write Access<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When everyone can restructure fields\/views\/workflows, nobody can rely on the model.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.13 Inconsistent Iteration Usage<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If half the team uses Sprint and half uses milestone labels, capacity and current-sprint views will be incomplete.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">59.14 Manual Workflows Where Automation Fits<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Automate deterministic state changes. Keep judgment-based decisions\u2014priority, risk, scope\u2014with people.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">60. COMPLETE REFERENCE \u2014 GitHub Projects Feature Areas<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use this section as a revision checklist, implementation audit, or course syllabus map.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">60.1 Feature Map<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Area<\/th><th class=\"has-text-align-left\" data-align=\"left\">What to know<\/th><th class=\"has-text-align-right\" data-align=\"right\">Covered in<\/th><\/tr><\/thead><tbody><tr><td>Learning about Projects<\/td><td>Purpose, concepts, ownership, discovery<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><\/tr><tr><td>Creating projects<\/td><td>Blank layouts, templates, repository import<\/td><td class=\"has-text-align-right\" data-align=\"right\">2<\/td><\/tr><tr><td>Copying projects<\/td><td>Reusable configuration and copy caveats<\/td><td class=\"has-text-align-right\" data-align=\"right\">2<\/td><\/tr><tr><td>Managing items<\/td><td>Issues, PRs, drafts, edit\/archive\/delete<\/td><td class=\"has-text-align-right\" data-align=\"right\">3<\/td><\/tr><tr><td>Fields<\/td><td>Custom field types and lifecycle<\/td><td class=\"has-text-align-right\" data-align=\"right\">4<\/td><\/tr><tr><td>GitHub metadata<\/td><td>Native issue\/PR metadata<\/td><td class=\"has-text-align-right\" data-align=\"right\">5<\/td><\/tr><tr><td>Views<\/td><td>Saved view architecture<\/td><td class=\"has-text-align-right\" data-align=\"right\">6, 43<\/td><\/tr><tr><td>Table<\/td><td>Group\/sort\/filter\/slice\/sums<\/td><td class=\"has-text-align-right\" data-align=\"right\">7<\/td><\/tr><tr><td>Board<\/td><td>Kanban, card movement, WIP guidance<\/td><td class=\"has-text-align-right\" data-align=\"right\">8, 42<\/td><\/tr><tr><td>Roadmap<\/td><td>Timeline\/date\/iteration planning<\/td><td class=\"has-text-align-right\" data-align=\"right\">9, 41<\/td><\/tr><tr><td>Filtering<\/td><td>Qualifiers, negation, relative dates\/iterations<\/td><td class=\"has-text-align-right\" data-align=\"right\">10<\/td><\/tr><tr><td>Sorting\/Grouping\/Slicing<\/td><td>Data organization<\/td><td class=\"has-text-align-right\" data-align=\"right\">11<\/td><\/tr><tr><td>Iterations<\/td><td>Sprint configuration and capacity<\/td><td class=\"has-text-align-right\" data-align=\"right\">12, 39<\/td><\/tr><tr><td>Status\/state<\/td><td>Project Status vs issue\/PR state<\/td><td class=\"has-text-align-right\" data-align=\"right\">13<\/td><\/tr><tr><td>Built-in workflows<\/td><td>Status sync, close\/reopen, add\/archive<\/td><td class=\"has-text-align-right\" data-align=\"right\">14-16<\/td><\/tr><tr><td>Insights<\/td><td>Charts and numeric aggregation<\/td><td class=\"has-text-align-right\" data-align=\"right\">17, 44<\/td><\/tr><tr><td>Templates<\/td><td>Built-in\/org\/recommended\/scale governance<\/td><td class=\"has-text-align-right\" data-align=\"right\">18, 52<\/td><\/tr><tr><td>Project updates<\/td><td>Health and stakeholder updates<\/td><td class=\"has-text-align-right\" data-align=\"right\">19<\/td><\/tr><tr><td>README\/docs<\/td><td>Operating documentation<\/td><td class=\"has-text-align-right\" data-align=\"right\">20<\/td><\/tr><tr><td>Visibility<\/td><td>Public\/private behavior<\/td><td class=\"has-text-align-right\" data-align=\"right\">21, 34<\/td><\/tr><tr><td>Access<\/td><td>Read\/write\/admin, teams\/individuals<\/td><td class=\"has-text-align-right\" data-align=\"right\">22<\/td><\/tr><tr><td>Linking<\/td><td>Repositories and teams<\/td><td class=\"has-text-align-right\" data-align=\"right\">23, 50, 51<\/td><\/tr><tr><td>Lifecycle<\/td><td>Close\/reopen\/delete\/cleanup<\/td><td class=\"has-text-align-right\" data-align=\"right\">24, 53<\/td><\/tr><tr><td>Export<\/td><td>TSV\/offline analysis<\/td><td class=\"has-text-align-right\" data-align=\"right\">25<\/td><\/tr><tr><td>Command palette<\/td><td>Keyboard-driven commands<\/td><td class=\"has-text-align-right\" data-align=\"right\">26<\/td><\/tr><tr><td>Productivity<\/td><td>Bulk editing and navigation<\/td><td class=\"has-text-align-right\" data-align=\"right\">27<\/td><\/tr><tr><td>Planning patterns<\/td><td>Backlog, sprint, Kanban, roadmap, portfolio<\/td><td class=\"has-text-align-right\" data-align=\"right\">28<\/td><\/tr><tr><td>GitHub Actions<\/td><td>Event-driven project automation<\/td><td class=\"has-text-align-right\" data-align=\"right\">29<\/td><\/tr><tr><td>GraphQL<\/td><td><code>ProjectV2<\/code>&nbsp;queries\/mutations<\/td><td class=\"has-text-align-right\" data-align=\"right\">30<\/td><\/tr><tr><td>REST API<\/td><td>Current Projects REST surface<\/td><td class=\"has-text-align-right\" data-align=\"right\">31<\/td><\/tr><tr><td>GitHub CLI<\/td><td><code>gh project<\/code>&nbsp;administration<\/td><td class=\"has-text-align-right\" data-align=\"right\">32<\/td><\/tr><tr><td>GitHub Apps<\/td><td>Production machine identity<\/td><td class=\"has-text-align-right\" data-align=\"right\">33<\/td><\/tr><tr><td>Security<\/td><td>Least privilege and exposure<\/td><td class=\"has-text-align-right\" data-align=\"right\">34<\/td><\/tr><tr><td>Organization governance<\/td><td>Standards\/templates\/base access<\/td><td class=\"has-text-align-right\" data-align=\"right\">35<\/td><\/tr><tr><td>Enterprise governance<\/td><td>Multi-org policy\/version differences<\/td><td class=\"has-text-align-right\" data-align=\"right\">36<\/td><\/tr><tr><td>Field architecture<\/td><td>Shared metadata taxonomy<\/td><td class=\"has-text-align-right\" data-align=\"right\">37<\/td><\/tr><tr><td>Hierarchy<\/td><td>Parent\/sub-issues, issue types, dependencies<\/td><td class=\"has-text-align-right\" data-align=\"right\">38<\/td><\/tr><tr><td>Capacity<\/td><td>Estimate\/iteration\/team workload<\/td><td class=\"has-text-align-right\" data-align=\"right\">39<\/td><\/tr><tr><td>Portfolio\/program<\/td><td>Cross-team strategic planning<\/td><td class=\"has-text-align-right\" data-align=\"right\">40<\/td><\/tr><tr><td>Cross-repository design<\/td><td>Shared organization planning<\/td><td class=\"has-text-align-right\" data-align=\"right\">45<\/td><\/tr><tr><td>Automation architecture<\/td><td>Choosing built-in\/Actions\/API\/App<\/td><td class=\"has-text-align-right\" data-align=\"right\">46<\/td><\/tr><tr><td>Issues integration<\/td><td>Types, hierarchy, dependencies, issue fields<\/td><td class=\"has-text-align-right\" data-align=\"right\">47<\/td><\/tr><tr><td>PR integration<\/td><td>Reviews, merge automation, releases<\/td><td class=\"has-text-align-right\" data-align=\"right\">48<\/td><\/tr><tr><td>Milestones<\/td><td>Release\/phase integration<\/td><td class=\"has-text-align-right\" data-align=\"right\">49<\/td><\/tr><tr><td>Administration<\/td><td>Ongoing project operations<\/td><td class=\"has-text-align-right\" data-align=\"right\">53<\/td><\/tr><tr><td>Data model<\/td><td>IDs, items, fields, views<\/td><td class=\"has-text-align-right\" data-align=\"right\">54<\/td><\/tr><tr><td>API auth<\/td><td>Tokens, scopes, permissions<\/td><td class=\"has-text-align-right\" data-align=\"right\">55<\/td><\/tr><tr><td>Limits<\/td><td>Item\/field\/workflow and functional constraints<\/td><td class=\"has-text-align-right\" data-align=\"right\">56<\/td><\/tr><tr><td>Legacy migration<\/td><td>Projects (classic) transition concepts<\/td><td class=\"has-text-align-right\" data-align=\"right\">57<\/td><\/tr><tr><td>Best practices<\/td><td>Sustainable operating model<\/td><td class=\"has-text-align-right\" data-align=\"right\">58<\/td><\/tr><tr><td>Anti-patterns<\/td><td>Common design failures<\/td><td class=\"has-text-align-right\" data-align=\"right\">59<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">60.2 Fast Decision Guide<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;What are you trying to do?]\n    A --&gt; B{Plan work visually?}\n    B --&gt;|Spreadsheet-like| C&#91;Table]\n    B --&gt;|Flow\/Kanban| D&#91;Board]\n    B --&gt;|Timeline| E&#91;Roadmap]\n    A --&gt; F{Automate?}\n    F --&gt;|Simple state\/add\/archive| G&#91;Built-in Workflow]\n    F --&gt;|Repo event + logic| H&#91;GitHub Actions]\n    F --&gt;|One-off\/script| I&#91;gh project]\n    F --&gt;|Rich API integration| J&#91;GraphQL \/ REST]\n    F --&gt;|Long-lived org service| K&#91;GitHub App]\n    A --&gt; L{Metadata scope?}\n    L --&gt;|Same across org issues| M&#91;Organization Issue Field]\n    L --&gt;|Only this project| N&#91;Project Custom Field]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">60.3 Minimal Production-Ready Project<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you need a safe starting configuration, use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Project: Organization-owned\nVisibility: Private\nAdmins: 2+\n\nFields:\n  Status\n  Priority\n  Sprint (Iteration)\n  Estimate (Number)\n  Team\n  Start Date\n  Target Date\n\nViews:\n  Backlog Table\n  Current Sprint Board\n  Roadmap\n  My Work\n  Risks\n\nWorkflows:\n  Set initial Status\n  Set Done on issue close \/ PR merge\n  Reopen synchronization if required\n  Auto-add where deterministic\n  Auto-archive old completed items\n\nDocumentation:\n  README with scope, field definitions, view meanings,\n  automation rules, ownership, and lifecycle policy\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">End-to-End Hands-On Lab \u2014 Build&nbsp;<code>Acme Platform Delivery<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This lab connects the most important concepts into one practical exercise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lab Goal<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Build an organization project that can manage backlog, sprint execution, roadmap planning, and basic automation across&nbsp;<code>web<\/code>,&nbsp;<code>api<\/code>, and&nbsp;<code>infra<\/code>&nbsp;repositories.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 \u2014 Create the Project<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create an organization-owned blank Table project named:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Acme Platform Delivery\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Keep it private during setup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 \u2014 Add Core Fields<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create\/configure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Status: Backlog, Ready, In Progress, In Review, Done\nPriority: P0, P1, P2, P3\nSprint: Iteration, 2-week cadence\nEstimate: Number\nTeam: Web, API, Platform\nStart Date: Date\nTarget Date: Date\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3 \u2014 Add Sample Work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create or add at least six issues across the three repositories:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>web   #101 Add passkey enrollment screen\nweb   #102 Add recovery UX\napi   #201 Add WebAuthn challenge endpoint\napi   #202 Add recovery token endpoint\ninfra #301 Add authentication audit dashboard\ninfra #302 Rotate production signing keys\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4 \u2014 Build the Backlog View<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Layout: Table\nGroup by: Priority\nSort: Priority, then Target Date\nShow: Status, Priority, Team, Estimate, Sprint\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5 \u2014 Build the Sprint Board<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Layout: Board\nColumns: Status\nFilter: sprint:@current\nGroup horizontally: Team\nShow card fields: Priority, Estimate, Assignees\nField sum: Estimate\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6 \u2014 Build the Roadmap<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Layout: Roadmap\nStart: Start Date\nTarget: Target Date\nGroup by: Team\nZoom: Quarter\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7 \u2014 Create a Personal View<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Filter: assignee:@me -status:Done\nLayout: Table or Board\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8 \u2014 Enable Built-In Workflows<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Configure appropriate rules to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set an initial Status when items enter the project\nSet Status = Done when an issue closes \/ PR merges\nReopen\/synchronize where your workflow requires it\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9 \u2014 Add Auto-Add<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For each target repository, create an auto-add rule for a deliberate label such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>label:platform\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Remember: existing matching issues may need manual\/bulk backfill.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 10 \u2014 Add an Insight<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a chart showing item count by Status, optionally grouped by Team.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 11 \u2014 Write the README<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Document:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Purpose\nRepositories in scope\nStatus definitions\nPriority definitions\nSprint cadence\nView meanings\nAutomation behavior\nProject owners\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 12 \u2014 Test the Full Flow<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Create Issue] --&gt; B&#91;Apply platform label]\n    B --&gt; C&#91;Auto-add to Project]\n    C --&gt; D&#91;Initial Status]\n    D --&gt; E&#91;Assign Priority\/Sprint\/Estimate]\n    E --&gt; F&#91;Move through Board]\n    F --&gt; G&#91;Close Issue \/ Merge PR]\n    G --&gt; H&#91;Status -&gt; Done]\n    H --&gt; I&#91;Auto-archive later]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Validation checklist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; ] Issue enters the correct Project\n&#91; ] Status is initialized\n&#91; ] Current sprint view includes it when assigned\n&#91; ] Board movement changes the intended field\n&#91; ] Roadmap uses the correct dates\n&#91; ] Closing\/merging updates Status as designed\n&#91; ] Charts reflect the resulting data\n&#91; ] Permissions prevent unintended editing\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Operational Cheat Sheet<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Everyday UI Tasks<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Need<\/th><th class=\"has-text-align-left\" data-align=\"left\">Fast path<\/th><\/tr><\/thead><tbody><tr><td>Find my work<\/td><td><code>assignee:@me -status:Done<\/code><\/td><\/tr><tr><td>Current sprint<\/td><td><code>sprint:@current<\/code><\/td><\/tr><tr><td>Next sprint<\/td><td><code>sprint:@next<\/code><\/td><\/tr><tr><td>High priority unfinished<\/td><td>Priority P0\/P1 + not Done<\/td><\/tr><tr><td>One repository<\/td><td><code>repo:OWNER\/REPO<\/code><\/td><\/tr><tr><td>Open issues only<\/td><td><code>is:issue is:open<\/code><\/td><\/tr><tr><td>PRs only<\/td><td><code>is:pr<\/code><\/td><\/tr><tr><td>Missing assignee<\/td><td><code>no:assignee<\/code>&nbsp;where supported by the relevant filter context<\/td><\/tr><tr><td>Items updated today<\/td><td><code>updated:@today<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Everyday CLI Tasks<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Projects<\/em>\ngh project list --owner acme-corp\n\n<em># Fields<\/em>\ngh project field-list 7 --owner acme-corp\n\n<em># Items<\/em>\ngh project item-list 7 --owner acme-corp --limit 100\n\n<em># Add issue\/PR<\/em>\ngh project item-add 7 --owner acme-corp --url ISSUE_OR_PR_URL\n\n<em># Create draft<\/em>\ngh project item-create 7 --owner acme-corp --title 'Draft idea'\n\n<em># Update friendly field<\/em>\ngh project item-edit 7 --owner acme-corp --url ISSUE_URL --field Status --value 'In Progress'\n\n<em># Link repository<\/em>\ngh project link 7 --owner acme-corp --repo acme-corp\/api\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Official References<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Projects changes regularly. The following official references are the best places to verify behavior after this guide&#8217;s&nbsp;<strong>2026-09-26<\/strong>&nbsp;verification date.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>GitHub Projects documentation<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\">https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects<\/a><\/li>\n\n\n\n<li><strong>Quickstart for Projects<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/learning-about-projects\/quickstart-for-projects\">https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/learning-about-projects\/quickstart-for-projects<\/a><\/li>\n\n\n\n<li><strong>Adding items to Projects<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/managing-items-in-your-project\/adding-items-to-your-project\">https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/managing-items-in-your-project\/adding-items-to-your-project<\/a><\/li>\n\n\n\n<li><strong>Filtering Projects<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/customizing-views-in-your-project\/filtering-projects\">https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/customizing-views-in-your-project\/filtering-projects<\/a><\/li>\n\n\n\n<li><strong>Automating Projects<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/automating-your-project\">https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/automating-your-project<\/a><\/li>\n\n\n\n<li><strong>Using the GraphQL API to manage Projects<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/automating-your-project\/using-the-api-to-manage-projects\">https:\/\/docs.github.com\/en\/issues\/planning-and-tracking-with-projects\/automating-your-project\/using-the-api-to-manage-projects<\/a><\/li>\n\n\n\n<li><strong>GraphQL Projects (<code>ProjectV2<\/code>) reference<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/graphql\/reference\/projects\">https:\/\/docs.github.com\/en\/graphql\/reference\/projects<\/a><\/li>\n\n\n\n<li><strong>REST Projects API<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/rest\/projects\">https:\/\/docs.github.com\/en\/rest\/projects<\/a><\/li>\n\n\n\n<li><strong>GitHub CLI\u00a0<code>gh project<\/code>\u00a0manual<\/strong><br><a href=\"https:\/\/cli.github.com\/manual\/gh_project\">https:\/\/cli.github.com\/manual\/gh_project<\/a><\/li>\n\n\n\n<li><strong>Official\u00a0<code>actions\/add-to-project<\/code>\u00a0action<\/strong><br><a href=\"https:\/\/github.com\/actions\/add-to-project\">https:\/\/github.com\/actions\/add-to-project<\/a><\/li>\n\n\n\n<li><strong>GitHub Issues \u2014 sub-issues and dependencies<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/issues\/tracking-your-work-with-issues\/using-issues\">https:\/\/docs.github.com\/en\/issues\/tracking-your-work-with-issues\/using-issues<\/a><\/li>\n\n\n\n<li><strong>Organization issue fields<\/strong><br><a href=\"https:\/\/docs.github.com\/en\/issues\/tracking-your-work-with-issues\/using-issues\/managing-issue-fields-in-your-organization\">https:\/\/docs.github.com\/en\/issues\/tracking-your-work-with-issues\/using-issues\/managing-issue-fields-in-your-organization<\/a><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Final Takeaway<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Projects becomes powerful when you stop thinking of it as \u201ca board\u201d and start treating it as a&nbsp;<strong>structured planning layer over GitHub Issues and Pull Requests<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The durable model is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart LR\n    A&#91;Issues \/ PRs \/ Drafts] --&gt; B&#91;Structured Fields]\n    B --&gt; C&#91;Purpose-Specific Views]\n    C --&gt; D&#91;Built-In Automation]\n    D --&gt; E&#91;Insights + Project Updates]\n    E --&gt; F&#91;CLI \/ APIs \/ Apps at Scale]\n    F --&gt; G&#91;Governance + Security]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Keep the data model small, make views audience-specific, automate deterministic bookkeeping, preserve canonical issue\/PR metadata, and use stronger API\/App automation only when the built-in tools no longer express the requirement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That combination gives you a Project that remains useful for developers, product teams, engineering managers, and organization administrators instead of becoming another board everyone stops updating.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Scope:&nbsp;Current&nbsp;GitHub Projects \/ Projects v2, not Projects (classic).Audience:&nbsp;Developers, DevOps engineers, engineering managers, product managers, project administrators, platform teams, and GitHub organization owners.Last verified:&nbsp;2026-09-26 against current GitHub documentation.Learning&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1189","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1189"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1189\/revisions"}],"predecessor-version":[{"id":1190,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1189\/revisions\/1190"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}