Linear
asgeirtj/system_prompts_leaks
Read and manage software issues, tickets, projects, and planning data in Linear.
A skill your agent uses when building a web app that must feel instant, when users complain about spinners or perceived slowness despite acceptable latency, or when designing a local-first sync…
$ npx skills add boraoztunc/skills --skill linear-local-first-architecture -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install boraoztunc/skills linear-local-first-architecture --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/linear-local-first-architecture .claude/skills/linear-local-first-architecture && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "linear-local-first-architecture" agent skill from https://github.com/boraoztunc/skills/tree/main/linear-local-first-architecture into .claude/skills/linear-local-first-architecture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linear-local-first-architecture", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/boraoztunc/skills/tree/main/linear-local-first-architectureType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add boraoztunc/skills --skill linear-local-first-architecture -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install boraoztunc/skills linear-local-first-architecture --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/linear-local-first-architecture .agents/skills/linear-local-first-architecture && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "linear-local-first-architecture" agent skill from https://github.com/boraoztunc/skills/tree/main/linear-local-first-architecture into .agents/skills/linear-local-first-architecture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linear-local-first-architecture", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add boraoztunc/skills --skill linear-local-first-architecture -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install boraoztunc/skills linear-local-first-architecture --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/linear-local-first-architecture .cursor/skills/linear-local-first-architecture && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "linear-local-first-architecture" agent skill from https://github.com/boraoztunc/skills/tree/main/linear-local-first-architecture into .cursor/skills/linear-local-first-architecture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linear-local-first-architecture", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/boraoztunc/skills.git --path linear-local-first-architecture--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add boraoztunc/skills --skill linear-local-first-architecture -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install boraoztunc/skills linear-local-first-architecture --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/linear-local-first-architecture .gemini/skills/linear-local-first-architecture && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "linear-local-first-architecture" agent skill from https://github.com/boraoztunc/skills/tree/main/linear-local-first-architecture into .gemini/skills/linear-local-first-architecture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linear-local-first-architecture", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install boraoztunc/skills linear-local-first-architectureInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add boraoztunc/skills --skill linear-local-first-architecture -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/linear-local-first-architecture .github/skills/linear-local-first-architecture && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "linear-local-first-architecture" agent skill from https://github.com/boraoztunc/skills/tree/main/linear-local-first-architecture into .github/skills/linear-local-first-architecture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linear-local-first-architecture", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add boraoztunc/skills --skill linear-local-first-architecture -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install boraoztunc/skills linear-local-first-architecture --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/linear-local-first-architecture .opencode/skills/linear-local-first-architecture && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "linear-local-first-architecture" agent skill from https://github.com/boraoztunc/skills/tree/main/linear-local-first-architecture into .opencode/skills/linear-local-first-architecture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linear-local-first-architecture", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
linear-local-first-architectureA skill your agent uses when building a web app that must feel instant, when users complain about spinners or perceived slowness despite acceptable latency, or when designing a local-first sync…
Linear Local First Architecture is an agent skill from boraoztunc/skills. Use when building a web app that must feel instant, when users complain about spinners or perceived slowness despite acceptable latency, or when designing a local-first sync architecture with optimistic updates.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Claude Code skills for copywriting, SEO, design, and more. The licence is Apache-2.0.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 645553c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are css, typescript, javascript and html).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
static.linear.appAlso links to:
performance.devFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Linear Local First Architecture loads about 3.2k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 1,062 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from boraoztunc/skills at commit 645553c, republished under its Apache-2.0 licence (© boraoztunc). 1,062 words, ~3,209 tokens.
.claude/skills/linear-local-first-architecture/SKILL.md (or your agent's skills folder).The network is the bottleneck—eliminate it wherever possible. Every network request costs hundreds of milliseconds; the best optimization is to avoid the request entirely by reading from local state.
Treat the browser as the database for each user. Store the full workspace in IndexedDB and hydrate into an in-memory observable graph; the UI reads from local state, not the server.
Mutations apply locally first, sync asynchronously. Update the local observable immediately so the UI re-renders synchronously, then queue the transaction for background sync to the server.
Render first, authenticate second. If local data exists, render it immediately and verify the session in the background; only redirect to login if the server rejects.
Ship less code in more pieces. Aggressive code splitting, modern-only targets, and per-package vendor chunks reduce initial payload and improve cache granularity.
Animate only composited properties. Restrict animations to transform and opacity to keep work on the GPU; never animate layout-triggering properties like width, height, or margin.
Store the workspace in IndexedDB and hydrate into an in-memory observable store (MobX in Linear's case). The UI queries the local store, not the server.
// A traditional web app updating the server
async function updateIssue({ issue }) {
showSpinner();
const response = await fetch(`/api/issues/${issue.id}`, {
method: "PATCH",
body: JSON.stringify({ title: issue.title }),
});
const updated = await response.json();
setIssue(updated)
hideSpinner();
}
// vs Linear
issue.title = "Faster app launch";
issue.save();The first line updates an in-memory datastore (MobX observable). The second line queues a transaction that the sync engine batches and flushes to the server. The UI re-renders synchronously off the local update—no spinners, no waiting.
If you're not building a custom sync engine, use libraries like Tanstack Query or SWR with optimistic updates:
// optimistic mutation with SWR
mutate(
`/api/issues/${issue.id}`,
{ ...issue, title: "Faster app launch" },
false
);
// vs Linear
issue.title = "Faster app launch";
issue.save();The key: UI responsiveness should not depend on network latency. Users perceive speed based on how quickly the interface reacts, not how quickly the server responds.
Target only modern browsers, drop legacy polyfills, and use aggressive code splitting:
// vite.config.ts (reconstruction; matches observed chunk graph)
export default defineConfig({
plugins: [react()],
build: {
target: "esnext", // no legacy syntax, no polyfills
cssMinify: "lightningcss",
modulePreload: { polyfill: false },
rollupOptions: {
output: {
// One chunk per npm package > ~3 KB. Cache invalidation
// becomes per-library instead of per-app-revision.
manualChunks(id) {
if (id.includes("node_modules")) {
const pkg = id.match(/node_modules\/([^/]+)/)?.[1];
if (pkg) return `vendor-${pkg}`;
}
},
},
},
},
});Split every npm package into its own chunk. A traditional vendor.js invalidates the entire dependency graph on any bump; per-package chunking makes cache invalidation fine-grained.
Eliminate the waterfall of fetch → parse → fetch imports by declaring all critical chunks in <head>:
<script type=module crossorigin
src="https://static.linear.app/client/assets/html.2_JBQs3Q.js"></script>
<link rel=modulepreload crossorigin
href="https://static.linear.app/client/assets/vendor-mobx.Crhy2qQc.js">
<link rel=modulepreload crossorigin
href="https://static.linear.app/client/assets/SyncWebSocket.Djw6l_Op.js">
<link rel=modulepreload crossorigin
href="https://static.linear.app/client/assets/DatabaseManager.DKssGAN8.js">
<!-- ...around many more -->The crossorigin attribute on each preload matches the crossorigin on the entry script, so the browser reuses the cached fetch. The cold-load timeline collapses from a sequential waterfall into a single parallel batch.
After the first page load, use a service worker to precache route-level chunks in the background:
// The service worker has a precache manifest baked into its source,
// around 1,200 hashed assets covering route chunks, icons, and fonts.
// It pulls them down lazily after the first page load.Within seconds of hitting the login screen, the full app sits in cache. Subsequent navigations skip the network entirely; the service worker answers directly from cache. Combined with IndexedDB, the app works offline.
Avoid an external stylesheet fetch by inlining just enough CSS to paint the loading state:
<style>
:root {
--bg-color: #f5f5f5;
--bg-base-color: #fcfcfd;
--bg-border-color: #e0e0e0;
--sidebar-width: 244px;
}
html { background: var(--bg-color); height: 100%; }
body { font-family: "Inter Variable", Arial, Helvetica, sans-serif; }
#appBorders {
border: 1px solid var(--bg-border-color);
background: var(--bg-base-color);
margin: 8px 8px 8px var(--sidebar-width);
border-radius: 12px;
}
#logo { transform: translateZ(0); }
@keyframes logoBackgroundPulse {
0% { opacity: 0; transform: scale(0.8); }
70% { opacity: 1; }
100% { opacity: 0; transform: scale(1.0); }
}
</style>
<script>performance.mark("appStart");</script>Inline JavaScript restores last-known shell tokens (sidebar bg, width, dark mode) before paint:
<script>
// Electron context — lets CSS branch on native chrome.
if (navigator.userAgent.includes("Electron") && navigator.userAgent.includes("Linear")) document.documentElement.classList.add("electron");
// No local store → no workspace data → render the auth layout.
if (localStorage.getItem("ApplicationStore") === null) document.documentElement.classList.add("logged-out");
// Restore last-known shell tokens (sidebar bg, width, dark mode) before paint.
const c = JSON.parse(localStorage.getItem("splashScreenConfig") || "{}");
if (c.bgSidebarColor) document.documentElement.style.setProperty("--bg-sidebar-color", c.bgSidebarColor);
if (c.sidebarWidth) document.documentElement.style.setProperty("--sidebar-width", c.sidebarWidth + "px");
if (c.darkMode) document.documentElement.classList.add("dark");
// Compact sidebar to a sliver when the user opens links in the desktop app.
if (JSON.parse(localStorage.getItem("userSettings") || "{}").openLinksInDesktop) document.documentElement.style.setProperty("--sidebar-width", "8px");
</script>By the time the first JavaScript bundle arrives, the loading screen is already correctly themed, sized, and positioned.
Preload variable fonts with correct CORS mode to avoid double-fetching:
<!-- in <head> of index.html -->
<link rel="preload"
href="https://static.linear.app/fonts/InterVariable.woff2?v=4.1"
as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preconnect" href="https://static.linear.app" crossorigin>@font-face {
font-family: "Inter Variable";
font-weight: 100 900;
font-display: swap;
src: url(https://static.linear.app/fonts/InterVariable.woff2?v=4.1)
format("woff2");
}
/* Italic and Berkeley Mono follow the same shape, single woff2 each. */Variable fonts cover the full 100–900 weight axis in a single woff2. font-display: swap renders the fallback stack immediately and swaps to Inter when it loads. crossorigin="anonymous" on the preload makes the browser reuse the cached font when CSS references it.
Instead of blocking on session validation, check if local data exists:
if (localStorage.getItem("ApplicationStore") === null) {
document.documentElement.classList.add("logged-out");
}If ApplicationStore exists, the user has used the app before and their workspace is in IndexedDB. Render it immediately. The actual session token sits in a cookie; let the next request (WebSocket handshake, sync delta, any HTTP call) fail with a 401 if the session is stale, then redirect to login.
The flow is "do we have anything to show you," not "do you have a valid session."
Make every property on every model its own observable. When a delta arrives from the server, write to the corresponding observable. The framework (MobX) knows exactly which components depend on which fields and re-renders only those components.
A change that updates one field of one issue re-renders exactly the components that read that field—not the parent list, not the sidebar, one cell. A 50-issue update is 50 cell re-renders, not a list re-render.
Every common action should have a shortcut. Single letters edit the focused issue. Two-letter combos navigate. Modifiers act globally. Make shortcuts visible everywhere in the UI.
Implement a global command palette (⌘ k) that searches over actions, issues, projects, labels, status changes, navigation, settings. Search runs against the local MobX object pool—no server request, instant results.
Browsers have three tiers of property changes:
transform, opacity): GPU-accelerated, independent of main threadcolor, background-color, border-color, fill): skip layout but redraw pixelswidth, height, top, left, margin, padding): force recomputation of every subsequent elementNever animate layout-triggering properties:
/* What Linear does */
.row:hover {
background-color: var(--color-bg-hover);
transition: background-color 0.12s;
}
.icon-arrow {
transform: translateX(0);
transition: transform 0.15s;
}
/* What you'd write if you didn't know better */
.row:hover {
margin-left: 2px; /* triggers layout for every row beneath */
transition: all 0.2s; /* and now you're animating margin */
}Default to shorter transitions than industry norms:
/* variables form Linear's stylesheet */
--speed-highlightFadeIn: 0s;
--speed-highlightFadeOut: .15s;
--speed-quickTransition: .1s;
--speed-regularTransition: .25s;
--speed-slowTransition: .35s;Use asymmetric timing: appear instantly when summoned, fade out over 150ms when dismissed. This makes the interface feel responsive to user intent.
❌ Don't wait for network requests before updating the UI. Apply mutations locally first, sync in the background, and rollback only if the server rejects.
❌ Don't animate layout-triggering properties like width, height, margin, padding, top, or left. Stick to transform and opacity.
❌ Don't block initial render on authentication. If local data exists, render it immediately and verify the session asynchronously.
❌ Don't bundle all vendor code into a single chunk. Split each npm package into its own chunk so cache invalidation is per-library, not per-app-revision.
❌ Don't use long animation durations (>250ms) for frequent interactions. Shorter transitions make the app feel faster; reserve longer durations for infrequent, high-impact moments.
❌ Don't fetch data on every navigation if it's already local. Hydrate from IndexedDB on boot, lazy-load heavy tables on demand, and treat the server as a sync target, not a source of truth for the UI.
© boraoztunc, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in linear-local-first-architecture of boraoztunc/skills.
Open the folder on GitHubat commit 645553c
Linear Local First Architecture next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Linear Local First Architecture this skillboraoztunc/skills | 398 | — | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| Linearasgeirtj/system_prompts_leaks | 69k | — | ~653 | Automated safety check: Pass | CC0-1.0 | |
| Linearyc-software/qm | 15k | — | ~886 | Automated safety check: Pass | MIT | |
| Linear Issue Workflowlobehub/lobehub | 83k | — | ~1.5k | Automated safety check: Pass | Custom licence | |
| Make Interfaces Feel Betteraffaan-m/ECC | 276k | 1 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Linearkaranhudia/borg-ui | 1.7k | — | ~1.7k | Automated safety check: Pass | AGPL-3.0 |
asgeirtj/system_prompts_leaks
Read and manage software issues, tickets, projects, and planning data in Linear.
yc-software/qm
Search, read, create, and update the user's Linear issues, projects, and comments through per-user OAuth.
lobehub/lobehub
Handles Linear issues for the team: reading details and images, checking sub-issues, marking progress, labeling AI-created issues and writing completion comments.
affaan-m/ECC
Apply concrete design-engineering details that make interfaces feel polished.
karanhudia/borg-ui
Use Symphony's lineargraphql client tool for raw Linear GraphQL operations such as comment editing and upload flows.
davila7/claude-code-templates
Automate Linear tasks via Rube MCP (Composio): issues, projects, cycles, teams, labels.
boraoztunc/skills
GSAP animation reference for HyperFrames. An agent skill from boraoztunc/skills.
boraoztunc/skills
Create video compositions, animations, title cards, overlays, captions, voiceovers, audio-reactive visuals, and scene transitions in HyperFrames HTML.
boraoztunc/skills
Translate an existing Remotion (React-based) video composition into a HyperFrames HTML composition.
boraoztunc/skills
Anime.js adapter patterns for HyperFrames. An agent skill from boraoztunc/skills.
boraoztunc/skills
Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow.
boraoztunc/skills
Compile a theme, sentence, object, mood, article idea, or photo into a quiet Japanese/Korean zine-style editorial poster — tall aged paper, large negative space, one small image anchor, experimental…
A skill your agent uses when building a web app that must feel instant, when users complain about spinners or perceived slowness despite acceptable latency, or when designing a local-first sync…. Linear Local First Architecture is an agent skill from boraoztunc/skills. Use when building a web app that must feel instant, when users complain about spinners or perceived slowness despite acceptable latency, or when designing a local-first sync architecture with optimistic updates.
Linear Local First Architecture fits situations like: building a web app that must feel instant; users complain about spinners; perceived slowness despite acceptable latency; designing a local-first sync architecture with optimistic updates.
Run `npx skills add boraoztunc/skills --skill linear-local-first-architecture -a claude-code`. Or copy the skill folder (linear-local-first-architecture in boraoztunc/skills) into .claude/skills/linear-local-first-architecture in your project. Claude Code loads it when a task matches its description.
Run `npx skills add boraoztunc/skills --skill linear-local-first-architecture -a codex`. Or copy the skill folder (linear-local-first-architecture in boraoztunc/skills) into .agents/skills/linear-local-first-architecture in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add boraoztunc/skills --skill linear-local-first-architecture -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/linear-local-first-architecture, .gemini/skills/linear-local-first-architecture, .github/skills/linear-local-first-architecture and .opencode/skills/linear-local-first-architecture in your project.
SKILL.md names no scripts, command-line tools or credentials: Linear Local First Architecture is instructions for the agent only.
SKILL.md names 2 domains. In commands or code: static.linear.app; the agent is likely to contact it when it follows the instructions. As links in the text: performance.dev. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Linear Local First Architecture is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Linear Local First Architecture: Linear (asgeirtj/system_prompts_leaks, 69k stars), Linear (yc-software/qm, 15k stars), Linear Issue Workflow (lobehub/lobehub, 83k stars) and Make Interfaces Feel Better (affaan-m/ECC, 276k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
boraoztunc (a GitHub user) maintains it in boraoztunc/skills, which has 398 GitHub stars. The repository holds 52 skills in this directory. The repository was last updated on August 15, 2026.
Source: boraoztunc/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.