| 1 | --- |
| 2 | title: Home |
| 3 | description: Your workspace's front page. Where you're needed now, what happened since you were last here, what is running, and the one item to start with. How every number is worked out. |
| 4 | --- |
| 5 | |
| 6 | **Home** is the first page of your workspace, at `/<workspace>/-/home`. |
| 7 | It answers three questions, in this order: |
| 8 | |
| 9 | 1. **Where you're needed**: everything waiting on you, however long ago |
| 10 | it started, with the action beside each item. |
| 11 | 2. **What happened while you were away**: what settled by itself and |
| 12 | what went live; what people did; what landed; deploys and spend, |
| 13 | since you were last here. |
| 14 | 3. **What is running now**: workflow runs and builds still going. |
| 15 | |
| 16 | **Start here** picks the one item to do first. |
| 17 | |
| 18 | For a workspace's owners, Home also opens |
| 19 | [Getting started](/guides/workspaces/#getting-started), the setup guide, |
| 20 | until they finish or close it; `?setup=1` opens it again. |
| 21 | |
| 22 | Every number on the page comes from what g1t has recorded. Nothing is |
| 23 | estimated. When a part of g1t does not answer, the section it feeds says |
| 24 | so, and the rest of the page still shows. |
| 25 | |
| 26 | ## Where you're needed |
| 27 | |
| 28 | This list has no time window: something that started waiting a week ago |
| 29 | is here until you deal with it. Each row says what it is, what is at |
| 30 | stake, how long it has waited, and has its action beside it. |
| 31 | |
| 32 | | Source | Rows | |
| 33 | | --- | --- | |
| 34 | | Code | A failed production build; your open pull request that can't land until you act (it conflicts, a required check fails, someone asked for changes, approvals are missing); your pull request that meets everything its branch asks for, ready for you to merge; a review asked of you by name; an invitation to a repository; a job waiting for a self-hosted runner | |
| 35 | | Notifications | An unread notification in this workspace that is a warning (someone or something is waiting) or a failure. One whose cause is over, such as a workflow that has passed since or a pull request that merged, has [settled](/guides/notifications/#threads-that-settle-themselves) and is not here | |
| 36 | | Chat | A conversation that mentions you, or a direct message you haven't read. Muted conversations are left out | |
| 37 | |
| 38 | A notification about something already on the list, such as a pull |
| 39 | request whose row is there, is left out. |
| 40 | |
| 41 | Rows are ordered most pressing first, by tier, then by how long each has |
| 42 | waited, longest first: |
| 43 | |
| 44 | 1. A failed production build. |
| 45 | 2. Your pull request that can't land until you act on it. |
| 46 | 3. Finished work that only waits for you: your pull request to merge, a |
| 47 | review, an invitation. |
| 48 | 4. Something that may be stuck: a job without a runner. |
| 49 | 5. Unread warnings and failures in your notifications. |
| 50 | 6. Mentions and direct messages. |
| 51 | |
| 52 | The list shows the first eight rows; **Show more** opens the rest. The |
| 53 | sentence under the page's heading starts with how many things need you. |
| 54 | |
| 55 | ## Start here |
| 56 | |
| 57 | **Start here** is the first row of Where you're needed: the most pressing |
| 58 | tier, and within it the row that has waited longest. g1t picks it with |
| 59 | that rule, so the same rows always give the same pick. |
| 60 | The card shows who is on it, the next action, how long it has waited, what |
| 61 | is at stake, and why it was picked. |
| 62 | |
| 63 | ## Since you were last here |
| 64 | |
| 65 | Home remembers when you were last on it, for each workspace, with your |
| 66 | account, so it is the same on your laptop and your phone. The second half |
| 67 | of the page covers what happened since then, and its heading says the span |
| 68 | in words, such as **Since Tuesday evening · 2 days** or **Since 40 |
| 69 | minutes ago**. |
| 70 | |
| 71 | | Switch | What it covers | |
| 72 | | --- | --- | |
| 73 | | **Since last visit** | From the end of your last visit to now. The default. | |
| 74 | | **Last 24 hours** | The 24 hours up to now. | |
| 75 | | **Last 7 days** | The 7 days up to now. | |
| 76 | |
| 77 | The switch is part of the address (`?window=24h`, `?window=7d`), so you |
| 78 | can bookmark a span. |
| 79 | |
| 80 | How a visit is counted: |
| 81 | |
| 82 | - A visit counts once the page has been in view for five seconds. A quick |
| 83 | refresh does not count, so it never wipes what you haven't looked at. |
| 84 | - What it records is when the page loaded, so anything that happens while |
| 85 | you are reading shows next time. |
| 86 | - Visits less than 30 minutes apart are one visit. Going to a pull request |
| 87 | and coming back, or refreshing, keeps the same span until you have been |
| 88 | away for half an hour. |
| 89 | - With no visit on record, Home shows the last 24 hours and says so. After |
| 90 | more than 14 days away, it shows the last 14 days. |
| 91 | |
| 92 | The sentence under the heading sums it up, for example: |
| 93 | |
| 94 | > 8 things need you. Since Tuesday evening, 3 people pushed 41 commits and |
| 95 | > merged 5 changes, and 12 changes landed. |
| 96 | |
| 97 | It says what people did first (the commits they pushed and the changes |
| 98 | they merged; if neither, the messages they sent), then everything that |
| 99 | [landed](#landed). When nothing at |
| 100 | all was counted, it says so plainly: |
| 101 | |
| 102 | > Quiet since Tuesday evening: nothing pushed, merged, deployed or said. |
| 103 | |
| 104 | When Code and Chat both failed to answer, the sentence ends with "what |
| 105 | people did couldn't be read" rather than reading as quiet. |
| 106 | |
| 107 | ### While you were away |
| 108 | |
| 109 | The first card says what finished by itself in the span, and what is |
| 110 | live. (Over **Last 24 hours** and **Last 7 days** it is called **Settled |
| 111 | for you**.) Its first line counts: |
| 112 | |
| 113 | | Count | What it is | |
| 114 | | --- | --- | |
| 115 | | *4 notifications settled* | Your notifications in this workspace that [settled themselves](/guides/notifications/#threads-that-settle-themselves) in the span: a later run passed, the pull request merged, the deployment went out. One you marked done yourself is not counted | |
| 116 | | *3 changes live*, *1 deploying*, *1 waiting to deploy*, *1 deploy failed* | The merges and pushes under [Landed](#landed), by whether each is [live](#live-after-merge) | |
| 117 | | *2 things still need you* | The rows of [Where you're needed](#where-youre-needed); it takes you there | |
| 118 | |
| 119 | Under it, each notification that settled, newest first, with why it |
| 120 | settled and who did it, such as **CI passed in run 330** or **Merged by |
| 121 | @ana**. **Done** opens the notifications that are done. |
| 122 | |
| 123 | ### People |
| 124 | |
| 125 | The second card, **People**, lists what people did in the span, one line |
| 126 | per kind of thing with its count, and each line opens the place that lists |
| 127 | them: a project's Activity tab for pushes, its pull requests or issues, |
| 128 | Artifacts, Chat. Beside the heading are the faces of the five most active, |
| 129 | and how many more there were. |
| 130 | |
| 131 | | Line | What counts | From | |
| 132 | | --- | --- | --- | |
| 133 | | *3 people pushed 41 commits to 4 projects* | Every push to a branch of one of the workspace's repositories (`git.push`; tags are not pushes). The commits are the ones each push brought to its branch, along the branch's first-parent line from where it is now back to where it was, at most 50, and one for a new branch. A push recorded before commits were counted counts as one commit. | Events | |
| 134 | | *opened 2 pull requests, merged 5, closed 1 without merging* | `pull.opened`, `pull.merged`, `pull.closed` | Events | |
| 135 | | *reviewed 3 pull requests* | A review is a comment with a verdict | Events | |
| 136 | | *opened 4 issues, closed 6* | `issue.opened`, `issue.closed` | Events | |
| 137 | | *left 9 comments* | `comment.created` without a verdict | Events | |
| 138 | | *2 deploys went out, 1 failed* | `deployment.succeeded` and `deployment.failed`, by who set the build off | Events | |
| 139 | | *published 1 release*, *published 2 package versions* | `release.published`, `package.published` | Events | |
| 140 | | *created 1 doc, edited 7 docs* | Artifacts made (`folio.created`), and artifacts whose content changed (`folio.updated`): each artifact once, and everyone whose changes a version holds edited it. "Docs" when every one is a doc, else "artifacts". Counts only: Home never shows an artifact's title here. | Events | |
| 141 | | *sent 120 messages in 5 conversations* | Text messages and thread replies that were not deleted, in the conversations you can read: every public channel, and the private channels and direct messages you are in. Conversations are those with at least one message. | Chat | |
| 142 | |
| 143 | A push an import made names nobody, so it is counted without a face. |
| 144 | |
| 145 | The card says when it has nothing to show, and names the part that didn't |
| 146 | answer (Code or Chat) so an empty card never reads as a quiet day. |
| 147 | |
| 148 | ### Landed |
| 149 | |
| 150 | Everything that landed in the span, newest first: |
| 151 | |
| 152 | | Row | What it is | |
| 153 | | --- | --- | |
| 154 | | A pull request merged | With who wrote it, and who merged it when that was someone else | |
| 155 | | A push to a default branch | One row per push a person made straight to a default branch: its commit's first line when it brought one, else how many commits, and who pushed. For the ten projects pushed to most in the span; past those, one row per project with how many commits and pushes | |
| 156 | | A production build that went live | A project's production build that built and was served (previews stay under Deploys) | |
| 157 | | A release published | Its tag and name, and who released it | |
| 158 | | A package version published | Its name and version, and who published it | |
| 159 | |
| 160 | The card's line counts them by kind. The first |
| 161 | five show; **Show more** opens the rest. Over **Last 7 days** the rows are |
| 162 | grouped by day (**Today**, **Yesterday**, **Sun, Oct 11**), five of each |
| 163 | day showing. |
| 164 | |
| 165 | #### Live after merge |
| 166 | |
| 167 | Each merge and push says whether it is live yet, for a project that |
| 168 | deploys to production. Landing on `main` is not shipping: a change is |
| 169 | shipped once a production deployment that contains it succeeds. |
| 170 | |
| 171 | | Label | When | |
| 172 | | --- | --- | |
| 173 | | **Live 9 min after merge** | A production deployment that succeeded shipped it, this long after it landed. The label opens that deployment, or the workflow run that deployed it | |
| 174 | | **Deploying** | A production deployment after it is under way | |
| 175 | | **Deploy failed** | The production deployment after it failed, and none has shipped it since | |
| 176 | | **Waiting to deploy** | Nothing has deployed it yet | |
| 177 | |
| 178 | How g1t knows: when a production deployment succeeds, a |
| 179 | [g1t.page build](/guides/deployments/) or one a workflow or the API |
| 180 | reported, g1t reads its commit's history back and writes down each |
| 181 | commit no production deployment shipped before as shipped by this one. |
| 182 | So a commit's first production deployment is the one that took it live, |
| 183 | and a rollback to an older commit ships nothing new. Home reads only what |
| 184 | was written down, so this costs nothing when the page loads. A change |
| 185 | that landed before g1t began writing this down for its project goes live |
| 186 | with the first production deployment that succeeded after it. |
| 187 | |
| 188 | #### Made with an agent |
| 189 | |
| 190 | A merge or push made in a harness session, such as Claude Code working |
| 191 | for you, carries the agent marker beside its title; it opens the |
| 192 | session. A pull request is marked when a session is tied to it (it |
| 193 | pushed the branch, named the pull request, or a commit on it carries a |
| 194 | `G1t-Session:` trailer); a push when one of its commits carries the |
| 195 | trailer. The change is still yours, and stays in the same list. When one of its sources (pull |
| 196 | requests, pushes and releases, deployments) didn't answer, the card says |
| 197 | so under the list. |
| 198 | |
| 199 | ### Deploys |
| 200 | |
| 201 | Every build that finished in the span, production and previews: **Went |
| 202 | live** when it built and was served (it may have been replaced since), or |
| 203 | **Failed**. Skipped builds are left out. A workspace whose projects did not |
| 204 | build in the span has no Deploys card. |
| 205 | |
| 206 | ### Spent |
| 207 | |
| 208 | What the workspace spent over the span, from its |
| 209 | [statement](/guides/usage-and-billing/), with each line at its price: what |
| 210 | was charged plus what your plan's included usage, a trial, a pool or a |
| 211 | discount paid of it. The lines are the statement's kinds of charge, such |
| 212 | as **Runner minutes, 2-core**, **Self-hosted runner time** and |
| 213 | **Deployments**, most first. Payments, credits, refunds and tax |
| 214 | are money in, not spend, and are left out. Under the total are the days |
| 215 | counted and the month so far, at price. |
| 216 | |
| 217 | The statement keeps whole days, midnight to midnight UTC, so spend counts |
| 218 | from the start of the UTC day the span began: a span since 3 p.m. UTC |
| 219 | yesterday counts all of yesterday. Usage that g1t measures through the |
| 220 | month, such as hosting requests and storage, shows on the day it is added |
| 221 | to the statement. |
| 222 | |
| 223 | ## Running now |
| 224 | |
| 225 | What is going right now, longest-going first: |
| 226 | |
| 227 | | Kind | What it is | |
| 228 | | --- | --- | |
| 229 | | Workflow run | A [workflow](/guides/actions/) run that is queued, waiting, running, or waiting for approval, in the ten projects pushed to most in the span (their newest 20 runs each) | |
| 230 | | Build | A project's newest build, queued or building | |
| 231 | |
| 232 | ## Without Code access |
| 233 | |
| 234 | A member whose membership does not include Code sees Home without anything |
| 235 | from Code: |
| 236 | |
| 237 | - People shows what was said and the artifacts edited; nothing from |
| 238 | repositories. |
| 239 | - Where you're needed has no rows from Code, and no notifications about a |
| 240 | repository. |
| 241 | - Landed, Deploys and Running now are not shown. |
| 242 | - Spent is the same for every member. |
| 243 | |
| 244 | ## When something doesn't answer |
| 245 | |
| 246 | Each section reads its own part of g1t and shows as soon as it has it. |
| 247 | When one does not answer: |
| 248 | |
| 249 | - Where you're needed and Running now name the parts that didn't answer, |
| 250 | so an empty list never reads as nothing waiting. |
| 251 | - People counts what could be read, and names the part that is missing |
| 252 | (Code or Chat). If nothing could be read, the card says so, and the |
| 253 | sentence under the heading says what people did couldn't be read. |
| 254 | - Landed, Deploys and Spent each say their part didn't answer. When |
| 255 | deployments or sessions can't be read, Landed shows its rows without |
| 256 | their live labels or agent markers. |
| 257 | - While you were away says when your notifications can't be read. |
| 258 | - If your last visit can't be read, the span is the last 24 hours and the |
| 259 | page says why. |
| 260 | |
| 261 | When a list g1t reads is longer than it reads at once (100 pull requests |
| 262 | per project and state, 50 projects, builds |
| 263 | of 20 projects, 5,000 events of the span), the page says that some work |
| 264 | may be missing or some counts are low. |
| 265 | |
| 266 | ## How it scales |
| 267 | |
| 268 | Every event in g1t is in one log, and its ids sort by time, so a span is a |
| 269 | range of ids. Home asks the events service for one digest of the span: for |
| 270 | each of the workspace's repositories (the first 50) and each kind of event |
| 271 | it counts, that is one range scan of an index on repository, type and id, |
| 272 | and the workspace's artifact events are the same range under no |
| 273 | repository. A busy week of tens of repositories is a few thousand rows, |
| 274 | read in one round trip; chat's count is one query over the conversations |
| 275 | you can read. When a workspace has hundreds of repositories, the next step |
| 276 | is a daily rollup per workspace that the digest reads instead of the log. |
| 277 | It is not built yet. |
| 278 | |
| 279 | ## For services: activity_digest and activity |
| 280 | |
| 281 | Home's counts come from two methods other services can call too. |
| 282 | |
| 283 | **`activity_digest`** on the events service (`repo_ids`, `workspace`, |
| 284 | `from`, `until`; RFC 3339, `[from, until)`; the caller has checked the |
| 285 | viewer may read each repository) returns, per repository that had any |
| 286 | event: `pushes` (`count`, `commits`, `branches`, `by` with each actor's |
| 287 | pushes and commits, and `default_branch` with the same for pushes straight |
| 288 | to it and `last_at`), `pulls` (`opened`, `merged`, `closed`), `issues` |
| 289 | (`opened`, `closed`), `reviews`, `comments`, `deployments` (`succeeded`, |
| 290 | `failed`, `production`), `releases` and `packages` (newest first, at most |
| 291 | 50 each); and for the workspace named, `folios` (`created`, `edited` with |
| 292 | each folio's authors, `edited_count`). Every count by actor is a list of |
| 293 | `{ actor, count }`, where `actor` is a member key: `user:<id>` for an |
| 294 | account (g1t is `user:usr_g1t_agent`), `agent:<id>` for an agent, or |
| 295 | empty for nobody. `complete` is |
| 296 | false when more than 5,000 events fell in the span, or more than 50 |
| 297 | repositories were named. |
| 298 | |
| 299 | **`activity`** on the chat service (`workspace`, `viewer`, `from`, |
| 300 | `until`) returns `messages`, `channels` (conversations with at least one) |
| 301 | and `authors` (`key`, `messages`; most first), over text messages and |
| 302 | thread replies not deleted in the conversations the viewer can read. |