# How writing back works

> Staging changes, the changes panel, and why nothing reaches GitHub by accident.

Moving things on a board never changes GitHub. Only **pending changes** do, and they go through three steps:

1. **Stage.** An action on the board (making issues from stickies, adding a label, linking a blocked-by) stages a change. The change shows on the shapes it’s about and in the changes panel, for everyone on the board. Nothing is written yet.
2. **Review.** Someone opens the push sheet, reads what will be written (issue bodies, labels, files, how many people will be notified), corrects anything that’s wrong, and leaves out anything that shouldn’t go.
3. **Push.** Tack writes the changes one at a time, and confirms each one when GitHub shows it.

![Stickies and cards, each with one mark above it summing up what's staged on it, such as New issue in unpic · +enhancement, Will close · Will comment, and Blocked by #418 · +@priya.](https://tack.social/_astro/writes-light.DEWBYn7V_ZzK3Ka.webp)

Staged changes on the board: one mark per shape, summing up everything staged on it.

## Who can do what

- **Anyone who can edit the board** can stage changes.
- **Pushing** needs edit access to the board, a GitHub sign-in, write access to each repository being written to, and the [GitHub App](https://tack.social/self-hosting/github-app.md) installed there. GitHub decides, not the board: someone with push access can push what anyone else staged.
- **Viewers** see the changes panel, but can’t change it.

## Staging

Every action is one undo step, and shows a toast with **Undo** saying what was staged on what: “Staged 2 issues for acme/app, with 1 label”, “Staged +docs on #412”, “Staged closing #412 as completed”, “Staged: #377 blocked by #412”. The [built-in actions](https://tack.social/writing-back/actions.md) are the full list.

Staged changes show on the board as **one mark above each shape**, summing up everything staged on it: “New issue in unpic · Sub-issue of #412 · +enhancement”, “Will close · Will comment”, “+\@kai · → v5.0”. It’s cut short at the shape’s width, with a count when there’s more than one change. Point at it (or tab to it) to see each change, with its labels and status, and click one to find it in the panel. Below 60% zoom the marks shrink to dots in their colour, so a staged brainstorm doesn’t bury the board.

There’s also an **outline** around anything with changes (red if one failed), a dashed card above a section that will become a parent issue, and, while you point at a sticky that will become an issue (or select it, or it’s being pushed), the card it’ll become, peeking out from behind it.

## Staged changes follow the board

A staged change is about the shapes on the board, as they are when it’s pushed, not as they were when it was staged:

- **Reword a sticky** after staging it, and its issue is pushed with the new words. Its row in the panel and the push sheet says “Edited since it was staged”.
- **Delete a shape** a change was made from, and the change is unstaged with it, in the same undo step: “Deleted a sticky and unstaged its issue”. Undo brings both back. Changes that refer to it (a sub-issue link to its issue, say) go too.
- A sticky emptied meanwhile is left out of a push until it says something again.

Staging is careful about duplicates and dependencies:

- Your labels and assignees on the same item merge into one change. Adding then removing a label cancels out, and a change that would change nothing is dropped.
- Stickies already staged as issues are skipped, not made twice.
- A change about an issue that’s still to be made depends on it: including one includes the other, and unstaging the new issue unstages what refers to it.

## The changes panel

Choose **Changes** in the top bar. Its badge counts what’s waiting, and a red dot on the tray says something failed.

![The changes panel beside the board: staged changes grouped by repository, each with who staged it and when, one failed with a Retry button, and Review and push 10 at the bottom.](https://tack.social/_astro/changes-light.BncDemTv_Z280bEB.webp)

The panel lists the changes waiting to go, grouped by repository, in the order they were staged (what one action staged together, in reading order on the board), each with who staged it and when. Click a change to see its shapes on the board.

- What one action staged together reads as **one row** (“40 new issues from stickies”) that opens to show each. It opens by itself when one of them fails or is picked out on the board.
- **×** unstages it (with Undo).
- **Failed** changes say why in plain words, with **Retry**. **Details** shows what GitHub said itself.
- What goes in a push is chosen in the [push sheet](https://tack.social/writing-back/pushing.md#reviewing), by whoever pushes: the panel is everyone’s list, and nobody can quietly take something out of someone else’s push.
- Changes being pushed show “Sending…” or “Sent, waiting for GitHub to confirm”, and the latest few that landed show under **On GitHub**, linking to what they wrote.
- **History** opens the board’s [push history](https://tack.social/writing-back/pushing.md#push-history).
- **Review and push** opens the [push sheet](https://tack.social/writing-back/pushing.md).

A change is one of:

| Status  | Means                                                         |
| ------- | ------------------------------------------------------------- |
| Staged  | Waiting to be pushed                                          |
| Sending | A push is writing it                                          |
| Sent    | GitHub accepted it, and Tack is waiting for GitHub to show it |
| Applied | On GitHub                                                     |
| Failed  | GitHub refused it, or it never showed up. The error says why  |

The list is part of the board, so everyone on it sees the same changes, live.
