Fix Sentry Issues
brianlovin/agent-config
Use Sentry MCP to discover, triage, and fix production issues with root-cause analysis.
Investigate and remediate data quality alerts using Monte Carlo MCP tools.
$ npx skills add sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sickn33/agentic-awesome-skills monte-carlo-remediation --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/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/monte-carlo-remediation .claude/skills/monte-carlo-remediation && 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 "monte-carlo-remediation" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/monte-carlo-remediation into .claude/skills/monte-carlo-remediation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monte-carlo-remediation", 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/sickn33/agentic-awesome-skills/tree/main/skills/monte-carlo-remediationType 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 sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sickn33/agentic-awesome-skills monte-carlo-remediation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/monte-carlo-remediation .agents/skills/monte-carlo-remediation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "monte-carlo-remediation" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/monte-carlo-remediation into .agents/skills/monte-carlo-remediation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monte-carlo-remediation", 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 sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sickn33/agentic-awesome-skills monte-carlo-remediation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/monte-carlo-remediation .cursor/skills/monte-carlo-remediation && 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 "monte-carlo-remediation" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/monte-carlo-remediation into .cursor/skills/monte-carlo-remediation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monte-carlo-remediation", 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/sickn33/agentic-awesome-skills.git --path skills/monte-carlo-remediation--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 sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sickn33/agentic-awesome-skills monte-carlo-remediation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/monte-carlo-remediation .gemini/skills/monte-carlo-remediation && 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 "monte-carlo-remediation" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/monte-carlo-remediation into .gemini/skills/monte-carlo-remediation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monte-carlo-remediation", 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 sickn33/agentic-awesome-skills monte-carlo-remediationInstalls 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 sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/monte-carlo-remediation .github/skills/monte-carlo-remediation && 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 "monte-carlo-remediation" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/monte-carlo-remediation into .github/skills/monte-carlo-remediation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monte-carlo-remediation", 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 sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sickn33/agentic-awesome-skills monte-carlo-remediation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sickn33/agentic-awesome-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/monte-carlo-remediation .opencode/skills/monte-carlo-remediation && 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 "monte-carlo-remediation" agent skill from https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/monte-carlo-remediation into .opencode/skills/monte-carlo-remediation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monte-carlo-remediation", 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.
monte-carlo-remediationInvestigate and remediate data quality alerts using Monte Carlo MCP tools.
Monte Carlo Remediation is an agent skill from sickn33/agentic-awesome-skills. Investigate and remediate data quality alerts using Monte Carlo MCP tools. Runs root cause analysis, assesses blast radius, discovers available tools (MCP/CLI/API), proposes and executes fixes, or escalates with full context when uncertain.
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering MCP servers, Root cause analysis and Data cleaning. It works with Model Context Protocol. The repository describes itself as: AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,400+ agentic skills. Includes… The licence is Apache-2.0.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b84d35a. 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.
Shell commands in SKILL.md call:
ghairflowdbtFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From 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.
Monte Carlo Remediation loads about 4k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 1,939 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 sickn33/agentic-awesome-skills at commit b84d35a, republished under its Apache-2.0 licence (© sickn33). 1,939 words, ~3,966 tokens.
.claude/skills/monte-carlo-remediation/SKILL.md (or your agent's skills folder).This skill teaches you to investigate and remediate data quality issues detected by Monte Carlo. You use MC MCP tools to understand the alert context, run root cause analysis, assess blast radius, and then execute the appropriate remediation action using whatever external tools the user has connected.
Monte Carlo tool routing (required): Always call Monte Carlo MCP tools through this plugin's bundled server, whose fully-qualified tool names are
mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__<tool>(e.g.mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__get_alerts). Bare tool names used in this skill (get_alerts,search,get_table, …) refer to that bundled server. If the session also has a separately-configuredmonte-carlo-mcpserver, do not route to it — it may point at a different endpoint or credentials.
Reference files live next to this skill file. Use the Read tool (not MCP resources) to access them:
references/patterns.md (relative to this file)references/tool-discovery.md (relative to this file)references/safety.md (relative to this file)Activate when the user:
Do not activate when the user is:
The Monte Carlo MCP server (monte-carlo-mcp) provides the investigation tools used in the workflows below. The workflows reference key tools by name (e.g., get_alerts, run_troubleshooting_agent, get_asset_lineage), but use any Monte Carlo tool that helps — the server has additional tools beyond what the workflows explicitly call out. Explore what's available.
Note on tool call examples: The code blocks below show key parameters to guide you. Always check the tool's own description for the complete parameter list and exact parameter names — they are authoritative.
Remediation actions are executed via whatever tools are available — MCP servers, CLI tools, or APIs. See Workflow 2 (Capability Discovery) and references/tool-discovery.md for how to detect and use them. Use whatever works; don't limit yourself to a prescribed list.
Follow these workflows in order. Each workflow builds on the context gathered by the previous one.
Goal: Understand what happened, why it happened, and what's affected.
Before proposing ANY remediation action, you MUST complete this investigation. Do not skip steps — incomplete context leads to wrong fixes.
get_alerts(
alert_ids=["<alert_id>"],
)If the user provided a table name instead of an alert ID:
search(query="<table_name>")
→ extract MCON
get_alerts(
table_mcons=["<mcon>"],
created_after="<7 days ago>",
created_before="<now>",
order_by="-createdTime",
statuses=["NOT_ACKNOWLEDGED", "WORK_IN_PROGRESS"]
)Extract from the alert: alert_type (Freshness, Volume, Schema Changes, etc.), severity, affected table MCONs, created_time.
alert_assessment(
incident_id="<alert_uuid>"
)This returns incident_likelihood (HIGH/MEDIUM/LOW), alert_impact (HIGH/MEDIUM/LOW), and a summary. Use this to decide urgency:
Always use async mode. TSA analysis takes 4–8 minutes — sync mode will time out.
run_troubleshooting_agent(
incident_id="<alert_uuid>",
async_mode=true
)While TSA runs, proceed with Steps 4–6 in parallel — gather lineage, table context, and query data while waiting. Then poll for TSA results:
get_troubleshooting_agent_results(
incident_id="<alert_uuid>"
)Status values:
not_found → TSA hasn't been triggered yetrunning → still analyzing (wait 30s initially, then 60s intervals)success → results availablefailed → check full_response for error; proceed with manual investigationWhen TSA succeeds, read both the tldr and the verifications section. The tldr summarizes the root cause — this is your primary input for choosing a remediation action. The full_response includes a "verifications to confirm the root cause" section with specific checks (queries to run, things to compare, upstream systems to inspect). These verifications are often actionable remediation steps themselves — use them to guide what to do next or present them to the user as concrete next steps.
get_asset_lineage(
mcons=["<affected_table_mcon>"],
direction="DOWNSTREAM"
)For BI report coverage:
get_downstream_bi_reports(
mcon="<affected_table_mcon>"
)Then for upstream investigation:
get_asset_lineage(
mcons=["<affected_table_mcon>"],
direction="UPSTREAM"
)Note: has_relationships=false means no dependencies tracked — do not assume missing relationships.
get_table(
mcon="<affected_table_mcon>",
include_fields=true,
include_table_capabilities=true
)Extract: last activity timestamps, row counts, schema, monitoring status, importance score.
For key downstream tables identified in Step 4, also fetch their details:
get_table(mcon="<downstream_mcon>")get_monitors(mcons=["<affected_table_mcon>"])For Custom SQL or Validation alerts, also fetch the monitor configuration to understand the exact rule that breached:
get_monitors(
monitor_ids=["<monitor_id_from_alert>"],
include_fields=["config"]
)The config contains the SQL query or validation conditions — this tells you exactly what the monitor checks, which is essential for understanding what went wrong and what the fix should be.
get_queries_for_table(
mcon="<affected_table_mcon>",
query_type="destination",
limit=10
)Use query_type="destination" to find queries that write to this table (pipeline queries). This helps identify which pipeline or job is responsible for the data.
Wait for TSA to complete before presenting findings. Do not present partial results — the TSA root cause analysis and its verifications section are critical for choosing the right remediation action. If TSA is still running, keep polling; gather Steps 4–6 in the meantime.
After all steps are complete, synthesize your findings into a clear summary:
full_response that can confirm the root cause or serve as remediation stepsPresent this summary to the user before proceeding to remediation.
Goal: Determine what remediation actions are possible given the tools you have available.
Before attempting any remediation action, you must know what tools you can use. You have three categories to check:
mcp__*__* patterns (e.g., mcp__airflow__trigger_dag_run)gh, dbt, airflow, curl via which <tool>curl if you have the right credentialsDon't assume any particular tool is available. But also don't assume MCP is the only option — a gh pr create via the CLI works just as well as a GitHub MCP tool.
For detailed guidance on discovery across all three categories, read references/tool-discovery.md.
After checking, summarize what's available:
Example:
"For this remediation, I can:
- ✅ Investigate via Monte Carlo (MCP connected)
- ✅ Restart the Airflow DAG (Airflow MCP connected)
- ✅ Create a code fix (
ghCLI available)- ❌ Rerun the dbt job (no dbt Cloud MCP or
dbtCLI found)"
When no tool (MCP, CLI, or API) is available for a needed action:
airflow dags trigger <dag_id>, dbt run --select <model>)create_or_update_alert_comment to record the diagnosis and recommended fixGoal: Take the appropriate action to fix the root cause, with safety rails.
Read references/patterns.md for detailed examples of common remediation patterns.
Based on the TSA root cause and available tools, determine the action:
| Root Cause Signal (from TSA) | Typical Remediation | Required Capability |
|---|---|---|
| Pipeline/DAG failure or delay | Restart the failed pipeline or task | Pipeline orchestration |
| dbt model failure | Rerun the failed dbt job | dbt operations |
| Schema change (upstream) | Assess impact, update downstream models or revert | Code changes |
| Volume anomaly (missing data) | Check upstream pipeline, trigger backfill | Pipeline orchestration + warehouse |
| Volume anomaly (duplicate data) | Identify and remove duplicates, fix pipeline | Warehouse + code changes |
| Permission/access error | Present findings, recommend user escalates to data platform team | None (user decides) |
| Infrastructure issue | Present findings, recommend user escalates to platform/ops team | None (user decides) |
| Unknown or complex root cause | Present full context and ask user for next steps | None (user decides) |
If the root cause maps to multiple possible actions, present the options to the user with tradeoffs and let them choose.
If the root cause doesn't clearly map to any pattern, read references/patterns.md for the "Unknown / complex" pattern, which focuses on presenting full context to the user and asking for direction.
BEFORE executing anything, present the plan to the user:
"Based on the investigation:
Root cause: [TSA summary] Proposed action: [what you want to do] Reasoning: [why this action addresses the root cause] Risk: [what could go wrong, blast radius] Rollback: [how to undo if the fix causes new problems]"
Before executing, read references/safety.md for the full safety protocol. The essentials:
create_or_update_alert_commentGoal: Close out the incident properly — update status, document, and prevent recurrence.
Ask the user what status to set:
FIXED — the root cause was identified and remediatedEXPECTED — the alert fired on expected behavior (e.g., planned maintenance)NO_ACTION_NEEDED — the issue resolved itself or is not actionableThen call update_alert(alert_id="<alert_uuid>", status="<chosen_status>").
create_or_update_alert_comment(
alert_id="<alert_uuid>",
comment="## Remediation Summary\n\n**Root cause:** [TSA findings]\n**Action taken:** [what was done]\n**Result:** [outcome]\n**Remediated by:** AI agent via remediation skill\n**Timestamp:** [ISO timestamp]"
)After remediating, briefly assess whether this issue is likely to recur:
Do not automatically create monitors or tickets — suggest them and let the user decide.
create_or_update_alert_comment.© sickn33, 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 skills/monte-carlo-remediation of sickn33/agentic-awesome-skills.
Open the folder on GitHubat commit b84d35a
We found 5 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in sickn33/agentic-awesome-skills, which our catalogue first saw on October 7, 2026.
Monte Carlo Remediation 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 |
|---|---|---|---|---|---|---|
| Monte Carlo Remediation this skillsickn33/agentic-awesome-skills | 47k | 1 repos | ~4k | Automated safety check: Pass | Apache-2.0 | |
| Fix Sentry Issuesbrianlovin/agent-config | 377 | 1 repos | ~1.2k | Automated safety check: Pass | None | |
| Flowstudio Power Automate Debuggithub/awesome-copilot | 40k | 2 repos | ~5k | Automated safety check: Pass | MIT | |
| Openbb Data Fetchermonarchjuno/vibe-investing | 299 | — | ~2.9k | Automated safety check: Notes | MIT | |
| Debugagentic-community/mcp-gateway-registry | 968 | — | ~1.8k | Automated safety check: Notes | Apache-2.0 | |
| Diagnosekbanc85/claudia | 296 | — | ~1.8k | Automated safety check: Pass | Custom licence |
brianlovin/agent-config
Use Sentry MCP to discover, triage, and fix production issues with root-cause analysis.
github/awesome-copilot
Debug failing Power Automate cloud flows using the FlowStudio MCP server.
monarchjuno/vibe-investing
Fetch financial, market, economic, fundamental, news, options, crypto, ETF, index, and macro data through the OpenBB Python interface instead of the OpenBB MCP server.
agentic-community/mcp-gateway-registry
Debug issues in the MCP Gateway Registry using first-principles thinking.
kbanc85/claudia
Check memory system health and troubleshoot connectivity issues.
comet-ml/opik-mcp
Root-cause a specific Opik trace, or a pattern across traces, and return a grounded explanation.
sickn33/agentic-awesome-skills
Implements an interface in one of two named color modes, iridescent white or colorful black, from a parameterized starter that reports measured color intensity.
sickn33/agentic-awesome-skills
Saves a user's project decisions, rules and preferences into a project-local mdbase so later sessions and other agents can recover the intent.
sickn33/agentic-awesome-skills
Keeps project decisions, research and verified results available across coding-agent sessions through LWC memory, a document Wiki graph and a CodeGraph code index.
sickn33/agentic-awesome-skills
Guides an agent through assessing its own owner for cofounder fit, publishing an approved profile, and ranking complementary profiles other agents published for their owners.
sickn33/agentic-awesome-skills
Integracao com WhatsApp Business Cloud API (Meta). An agent skill from sickn33/agentic-awesome-skills.
sickn33/agentic-awesome-skills
Acts as a proxy for the Cline CLI, dispatching coding tasks one at a time, monitoring runs by hard evidence, relaying decisions to you and learning per-project preferences.
Works with
Investigate and remediate data quality alerts using Monte Carlo MCP tools. Monte Carlo Remediation is an agent skill from sickn33/agentic-awesome-skills. Investigate and remediate data quality alerts using Monte Carlo MCP tools.
Monte Carlo Remediation fits situations like: tasks that involve MCP servers; tasks that involve Root cause analysis; tasks that involve Data cleaning.
Run `npx skills add sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a claude-code`. Or copy the skill folder (skills/monte-carlo-remediation in sickn33/agentic-awesome-skills) into .claude/skills/monte-carlo-remediation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a codex`. Or copy the skill folder (skills/monte-carlo-remediation in sickn33/agentic-awesome-skills) into .agents/skills/monte-carlo-remediation 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 sickn33/agentic-awesome-skills --skill monte-carlo-remediation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/monte-carlo-remediation, .gemini/skills/monte-carlo-remediation, .github/skills/monte-carlo-remediation and .opencode/skills/monte-carlo-remediation in your project.
Going by SKILL.md and its folder, Monte Carlo Remediation needs the command-line tools its instructions call (gh, airflow and dbt).
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. 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.
Monte Carlo Remediation is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k 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 Monte Carlo Remediation: Fix Sentry Issues (brianlovin/agent-config, 377 stars), Flowstudio Power Automate Debug (github/awesome-copilot, 40k stars), Openbb Data Fetcher (monarchjuno/vibe-investing, 299 stars) and Debug (agentic-community/mcp-gateway-registry, 968 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sickn33 (a GitHub user) maintains it in sickn33/agentic-awesome-skills, which has 47,405 GitHub stars. The repository holds 1,497 skills in this directory. The repository was last updated on October 9, 2026.
Source: sickn33/agentic-awesome-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.