Agent skill

Incident Report Writing

by GAIK-project in GAIK-project/gaik-toolkit

Extracts structured data from incident/safety observation audio recordings for manufacturing company reporting.

MITAuto-check passedDocuments & Office

Install Incident Report Writing

skills CLI
$ npx skills add GAIK-project/gaik-toolkit --skill incident-report-writing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install GAIK-project/gaik-toolkit incident-report-writing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/GAIK-project/gaik-toolkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/implementation_layer/no-code-assets/agent-skills/skills/incident-report-writing .claude/skills/incident-report-writing && rm -rf skills-src

Use ~/.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/

Facts

Skill name
incident-report-writing
GitHub stars
100
Token cost
~3.4k tokens
SKILL.md length
1,590 words
Files
6
Skills in repo
15
Repo updated
First seen
Licence
MIT

At a glance

Extracts structured data from incident/safety observation audio recordings for manufacturing company reporting.

  • Works in 5 steps: Get Audio File Path → Transcribe Audio (gaik-transcriber MCP… → Extract Structured Fields → …
  • The user needs to process supervisor
  • SKILL.md covers When to Use, Input, Tooling Rules (Windows vs… and Workflow, plus 3 more sections
  • Runs Batch and Python scripts from its folder

What it does

Incident Report Writing is an agent skill from GAIK-project/gaik-toolkit. Extracts structured data from incident/safety observation audio recordings for manufacturing company reporting. Use when the user needs to process supervisor or employee audio recordings into standardized incident report data.

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files (for example `README.md` and `transcription-MCP/server.py`).

It sits in Documents & Office, covering Report writing and Schema markup. The repository describes itself as: Python toolkit providing reusable AI/ML utilities: schema extraction, structured outputs, and production-ready components. The licence is MIT.

When your agent uses it

  • The user needs to process supervisor
  • Employee audio recordings into standardized incident report data

Example prompts

  • “Use the incident-report-writing skill to extract structured data from incident/safety observation audio recordings for manufacturing company reporting”
  • “/incident-report-writing”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Get Audio File Path
  2. Transcribe Audio (gaik-transcriber MCP tool)
  3. Extract Structured Fields
  4. Generate Word Document
  5. Save and Present

What it can do on your machine

Read from SKILL.md and the folder at commit e66fcca. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships script files (Batch and Python), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Incident Report Writing loads about 3.4k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 1,590 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~63
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from GAIK-project/gaik-toolkit at commit e66fcca, republished under its MIT licence (© GAIK-project). 1,590 words, ~3,421 tokens.

Download SKILL.mdSave it as .claude/skills/incident-report-writing/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
incident-report-writing
description
Extracts structured data from incident/safety observation audio recordings for manufacturing company reporting. Use when the user needs to process supervisor or employee audio recordings into standardized incident report data.

Incident Report Writing

Transcribes audio recordings from supervisors or employees describing incidents, near misses, safety observations, or related initiatives, and extracts structured information required for official incident reporting forms.

This skill is designed to run in Claude Desktop with:

  • An MCP gaik-transcriber server (for transcribing audio/video recordings)

When to Use

Use this skill when:

  • User needs to process an incident or safety observation audio recording
  • User mentions "incident report", "safety observation", "near miss", or "safety initiative"
  • User wants to extract structured information from safety-related audio notes
  • User asks to process or transcribe an incident recording
  • User provides an audio file describing a workplace incident or safety observation

Input

Required:

  • Audio/video recording file path (e.g., .mp3, .m4a, .wav, .mp4, etc.)
  • The recording should contain a description of an incident, near miss, safety observation, or safety initiative

Required parameter:

  • audio_file_path: Full path to the audio/video recording. If not provided, ask the user to specify it.

Tooling Rules (Windows vs Linux Path Safety)

Why this matters

On Windows, Claude Desktop + toolchains sometimes behave like they are in a POSIX shell, producing paths like /mnt/c/.... Meanwhile, your MCP servers may run native Windows Python, expecting C:\.... This mismatch can cause "file not found" or failing shell commands.

Strict rules
  1. Prefer Windows drive-letter paths on Windows Pass file paths like C:\Users\...\recording.m4a to the gaik-transcriber.

  2. Avoid bash commands on Windows If you must run a command on Windows, prefer PowerShell.

  3. When calling gaik-transcriber, use Windows drive-letter paths Pass file paths like C:\Users\...\recording.m4a. If you only have a POSIX/WSL path (e.g., /mnt/c/...), convert it to a Windows path before calling the transcriber.

  4. Never assume the environment is Linux Treat the runtime as OS-ambiguous and enforce the above rules to stay stable.

  5. Never do the following:

  • NEVER run pip install, python -c, or any ad-hoc parsing code
  • NEVER use /mnt/user-data/uploads/... paths unless explicitly provided by the environment

Workflow

Step 1 — Get Audio File Path

If the user has not specified an audio file path, ask for it:

  • Request the full path to the audio recording
  • Verify the path uses Windows format (e.g., C:\Users\...) on Windows systems
  • Confirm the file exists before proceeding
Step 2 — Transcribe Audio (gaik-transcriber MCP tool)

Call the transcription MCP tool:

gaik-transcriber:transcribe_audio
  file_path: <full_path_to_audio_file>
  enhanced: false

Parameters:

  • file_path: Full Windows path to the recording
  • enhanced: Always use false (standard transcription is sufficient)

If transcription fails:

  • Check the path format (ensure Windows drive-letter paths on Windows)
  • Report the error clearly to the user
  • Do NOT proceed with extraction if transcription fails

Important: Preserve the entire transcription text for the extraction step.

Step 3 — Extract Structured Fields

From the transcription, extract the following 17 fields exactly as specified.

CRITICAL EXTRACTION RULES:

  1. Use ONLY information explicitly present in the transcript
  2. If a field is not mentioned, return an empty string ("")
  3. Keep extracted values BRIEF - use only tight keywords, not full sentences
  4. Do NOT hallucinate or invent information
  5. For fields with predefined lists, ONLY select from those lists
  6. Follow the specified format for each field exactly
Fields to Extract:

1. Type of form

  • Description: Type of report being filed
  • Fixed options (choose ONLY one):
    • Safety observation
    • Safety-related initiative
  • If not explicitly mentioned or doesn't match: return ""

2. Observation type

  • Description: Category of the observation
  • Fixed options (choose ONLY one):
    • Safety
    • Environmental protection
    • Energy efficiency
  • If not explicitly mentioned or doesn't match: return ""

3. Positive safety observation

  • Description: Whether this is a positive observation
  • Fixed options:
    • Yes (ONLY if explicitly stated as positive)
  • If not explicitly stated as positive: return ""

4. Reporter name

  • Description: Name of the person making the report
  • Format: Full name as mentioned
  • If not mentioned: return ""

5. Reporter organization

  • Description: Organization the reporter belongs to
  • Fixed options (choose ONLY one):
    • Luvata Pori Oy
    • Luvata Oy
    • Other
  • If not explicitly mentioned or doesn't match: return ""

6. Summer employee

  • Description: Whether the reporter is a summer employee
  • Fixed options:
    • Yes
    • No
  • If not explicitly stated: return ""

7. Event date and time

  • Description: When the incident/observation occurred
  • Format rules:
    • If both date and time given: dd.mm.yyyy HH:MM
    • If only date given: dd.mm.yyyy
    • If year not mentioned: dd.mm
    • Zero-pad day/month: 5.4 → 05.04
  • If not mentioned: return ""

8. Building or site

  • Description: Building or site where event occurred
  • Format: Keep as short as possible
  • If not mentioned: return ""

9. Detailed location

  • Description: Specific area within building/site
  • Format: Keep as short as possible
  • If not mentioned: return ""

10. Location clarification

  • Description: Additional location details
  • Format: Brief clarification only
  • If not mentioned: return ""

11. Event description

  • Description: What happened
  • Format: Brief keywords describing the event
  • If not mentioned: return ""

12. Near miss

  • Description: Whether this was a near miss event
  • Fixed options:
    • Yes
    • No
  • If not explicitly stated: return ""

13. Possible consequences

  • Description: What could have happened
  • Format: Brief keywords only
  • If not mentioned: return ""

14. Direct cause of the event

  • Description: Root cause category
  • Fixed options (choose ONLY one):
    • 5S
    • Technical failure
    • Protective devices on machines
    • Maintenance
    • Tools and devices
    • Work methods and instructions
    • Work guidance / induction / training
    • Following instructions and common standards
    • Information flow / lack of information flow
    • Working conditions
    • Weather conditions
    • Traffic
    • First-aid supplies (used / shortages)
    • PPE
    • Hurry / insufficient resources
    • Human / organizational factor
  • If not explicitly mentioned or doesn't match: return ""

15. Corrective actions performed

  • Description: Whether corrective actions were taken
  • Fixed options:
    • Yes (ONLY if explicitly stated actions were performed/completed)
    • No
  • If only suggested/planned but not performed: return ""
  • If not mentioned: return ""

16. Corrective actions description

  • Description: What corrective actions were taken
  • Format: Brief keywords only
  • If not mentioned: return ""

17. Photo mentioned

  • Description: Whether a photo was mentioned/attached
  • Fixed options:
    • Yes (ONLY if explicitly mentioned)
  • If not mentioned: return ""
Show full SKILL.md (653 more words)Show less
Step 4 — Generate Word Document

Before creating the document, view the docx skill:

view /mnt/skills/public/docx/SKILL.md

Then create a new Word document using the docx skill's "Creating a new Word document" workflow.

Document Structure:

  1. Title: INCIDENT REPORT (centered, bold, large font)

  2. 2-Column Table:

    • Column 1: Field name
    • Column 2: Extracted value
    • Include all 17 fields in order, even if value is empty string

Table Format:

| Field                          | Value                          |
|--------------------------------|--------------------------------|
| Type of form                   | [extracted value or ""]        |
| Observation type               | [extracted value or ""]        |
| Positive safety observation    | [extracted value or ""]        |
| Reporter name                  | [extracted value or ""]        |
| Reporter organization          | [extracted value or ""]        |
| Summer employee                | [extracted value or ""]        |
| Event date and time            | [extracted value or ""]        |
| Building or site               | [extracted value or ""]        |
| Detailed location              | [extracted value or ""]        |
| Location clarification         | [extracted value or ""]        |
| Event description              | [extracted value or ""]        |
| Near miss                      | [extracted value or ""]        |
| Possible consequences          | [extracted value or ""]        |
| Direct cause of the event      | [extracted value or ""]        |
| Corrective actions performed   | [extracted value or ""]        |
| Corrective actions description | [extracted value or ""]        |
| Photo mentioned                | [extracted value or ""]        |

Document Formatting:

  • Use clean, professional formatting
  • Table should have borders
  • First column (field names) should be slightly bold
  • Keep the document simple and readable
Step 5 — Save and Present
  1. Save the document with a descriptive filename, e.g., IncidentReport_[Date].docx
  2. Use present_files to share the document with the user

Guardrails

Critical Rules to Prevent Hallucination:

MUST DO:

  • Extract ONLY information explicitly mentioned in the transcript
  • Use exact field names as specified
  • Keep extracted values BRIEF (tight keywords only)
  • Return empty string ("") if field not mentioned in transcript
  • For fixed-option fields, ONLY select from the predefined lists
  • Follow the exact format for each field
  • Preserve numbers as digits (not words)

MUST NOT DO:

  • NEVER invent or hallucinate information not in the transcript
  • NEVER add assumptions or interpretations
  • NEVER use values outside predefined lists for fixed-option fields
  • NEVER create full sentences when "keywords" are requested
  • NEVER leave out fields from the output (include all 17 fields)
  • NEVER change field names
  • NEVER guess dates, numbers, names, or organizations
Field-Specific Validation:

Date and Time (Field 7):

  • Must follow format rules exactly
  • If transcript says "fifth of April", extract as 05.04
  • If only time is mentioned without date, return ""

Fixed-Option Fields:

  • Type of form (field 1): ONLY from 2 options
  • Observation type (field 2): ONLY from 3 options
  • Positive safety observation (field 3): ONLY Yes or ""
  • Reporter organization (field 5): ONLY from 3 options
  • Summer employee (field 6): ONLY Yes, No, or ""
  • Near miss (field 12): ONLY Yes, No, or ""
  • Direct cause (field 14): ONLY from 16 options
  • Corrective actions performed (field 15): ONLY Yes, No, or ""
  • Photo mentioned (field 17): ONLY Yes or ""

Location Fields (8, 9, 10):

  • Keep as short as possible
  • Building/site: just the building name/number
  • Detailed location: just the area within building
  • Clarification: minimal additional context

Description Fields (11, 13, 16):

  • Use ONLY tight keywords
  • No full sentences
  • No elaboration beyond what's stated
Error Handling:

If transcription fails:

  • Report error clearly to user
  • Do NOT attempt extraction without transcript
  • Provide troubleshooting steps (check file path, file format, etc.)

If transcript is unclear or ambiguous:

  • Extract what is clear
  • Return "" for unclear fields
  • Do NOT guess or make assumptions

If speaker mentions conflicting information:

  • Use the most explicit or latest mention
  • If still uncertain, return ""

If fixed-option field doesn't match any option:

  • Return "" (do not force a match)
  • Explain to user why field was left empty

Examples

Example 1: Standard Safety Observation

User prompt: "Process this incident report: C:\Reports\safety-obs-2024-03-15.mp3"

Expected behavior:

  1. Transcribe audio using gaik-transcriber
  2. Extract all 17 fields from transcript
  3. Return "" for fields not mentioned
  4. Present extracted data to user
Example 2: Minimal Information

User prompt: "Extract incident data from C:\Audio\report.m4a"

Expected behavior:

  1. Transcribe audio
  2. Extract available fields
  3. Return "" for fields not mentioned
  4. Ensure fixed-option fields match allowed values or are empty
  5. Present extracted data to user
Example 3: Missing File Path

User prompt: "Create an incident report from my recording"

Expected behavior:

  1. Ask user for the audio file path
  2. Explain format needed (e.g., C:\path\to\file.mp3)
  3. Wait for user to provide path
  4. Proceed with transcription and extraction once path is provided

Notes

  • The skill focuses on accurate extraction over interpretation
  • Never hallucinate - empty fields are acceptable and expected
  • The transcript may contain casual speech, filler words, and unclear audio - extract what is clear
  • Fixed-option lists are closed sets - do not add values not in the lists
  • All field names must be preserved exactly as specified
  • Brevity is critical - keep all extracted values as short keywords, not narrative descriptions

© GAIK-project, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files in implementation_layer/no-code-assets/agent-skills/skills/incident-report-writing of GAIK-project/gaik-toolkit.

  • SKILL.md
  • README.md
  • data/Sample_1.m4a
  • data/Sample_2.m4a
  • setup.bat
  • transcription-MCP/server.py

Open the folder on GitHubat commit e66fcca

Compare with similar skills

Incident Report Writing 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.

Incident Report Writing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Incident Report Writing this skillGAIK-project/gaik-toolkit100—~3.4kAutomated safety check: PassMIT
Markitdownjimmc414/Kosmos5952 repos~1.7kAutomated safety check: PassNone
Form Fillingplatonai/Browser41.2k—~1.1kAutomated safety check: PassApache-2.0
Graphic EbookVarnan-Tech/opendirectory674—~5kAutomated safety check: PassMIT
Make Photo Stamp ArchiveDlcccc71913/skill-make-photo-stamp-archive367—~1.3kAutomated safety check: PassMIT
Make Tape Collagesherlyryn/make-tape-collage118—~4.7kAutomated safety check: PassMIT

Similar skills

  • Markitdown

    jimmc414/Kosmos

    Convert various file formats (PDF, Office documents, images, audio, web content, structured data) to Markdown optimized for LLM processing.

    595 GitHub starsUsed in 2 repos~1.7k tokens
    Documents & OfficeAuto-check passed
  • Form Filling

    platonai/Browser4

    Automatically fills web forms using provided field data and can optionally submit the form.

    1.2k GitHub stars~1.1k tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • Graphic Ebook

    Varnan-Tech/opendirectory

    Creates professionally designed B2B SaaS e-books in HTML + CSS, exported as print-ready PDF.

    674 GitHub stars~5k tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • Make Photo Stamp Archive

    Dlcccc71913/skill-make-photo-stamp-archive

    Transform one or more supplied photos into clean direct-splice archival artworks that pair a faithfully preserved photograph with a warm-white paper panel containing a compact hand-pressed custom…

    367 GitHub stars~1.3k tokensUpdated 1 mo ago
    Documents & OfficeAuto-check passed
  • Make Tape Collage

    sherlyryn/make-tape-collage

    Transform a supplied photo or text description into a clean, tactile tape-collage raster artwork, or pair a faithfully preserved borderless photo print with a spacious warm-white paper panel…

    118 GitHub stars~4.7k tokensUpdated 1 mo ago
    Documents & OfficeAuto-check passed
  • Ky Markdown Rebuilder

    KyrieCheungYep/ky-markdown-rebuilder

    Rebuild visual documents into reliable Markdown by combining text extraction with page or screenshot alignment.

    117 GitHub stars~5.7k tokensUpdated 3 mo ago
    Documents & OfficeAuto-check passed

More from GAIK-project/gaik-toolkit

All 15 skills in this repo
  • Brief To Slides

    GAIK-project/gaik-toolkit

    Builds a visual, editable PowerPoint (.pptx) deck with speaker-ready notes, exact timing, citations and a layout-checked design from a topic, an audience and a length, using only the user's own…

    100 GitHub stars~2.8k tokensUpdated 2 days ago
    Auto-check passed
  • Gaik Toolkit

    GAIK-project/gaik-toolkit

    GAIK toolkit overview and reference. An agent skill from GAIK-project/gaik-toolkit.

    100 GitHub stars~5.7k tokensUpdated 2 days ago
    Auto-check passed
  • Extracting Structured Data

    GAIK-project/gaik-toolkit

    Extracts structured data — fields, tables, line items — out of documents into a validated schema using the gaik toolkit, and designs schemas that stay inside provider limits and produce checkable…

    100 GitHub stars~3.2k tokensUpdated 2 days ago
    Auto-check passed
  • Parsing Documents

    GAIK-project/gaik-toolkit

    Converts PDFs, scans, and Word documents into text or markdown with the gaik toolkit's parsers, choosing the parser that will not silently destroy the structure the downstream task depends on.

    100 GitHub stars~2.3k tokensUpdated 2 days ago
    Auto-check passed
  • Searching Documents

    GAIK-project/gaik-toolkit

    Builds and debugs retrieval with the gaik toolkit — PgVectorStore, Ranker, FinnishTextProcessor, RelevanceGate — as hybrid search: pgvector similarity plus Postgres full-text, fused by rank, and the…

    100 GitHub stars~4.2k tokensUpdated 2 days ago
    Auto-check passed
  • Construction Diary Creation

    GAIK-project/gaik-toolkit

    Extracts structured data from Finnish construction site daily diary audio recordings (Työmaapäiväkirja) and creates a formatted Word document with extracted fields.

    100 GitHub stars~3.6k tokensUpdated 2 days ago
    Auto-check passed

Questions about Incident Report Writing

What does Incident Report Writing do?

Extracts structured data from incident/safety observation audio recordings for manufacturing company reporting. Incident Report Writing is an agent skill from GAIK-project/gaik-toolkit. Extracts structured data from incident/safety observation audio recordings for manufacturing company reporting.

When should I use Incident Report Writing?

Incident Report Writing fits situations like: the user needs to process supervisor; employee audio recordings into standardized incident report data.

How do I install Incident Report Writing in Claude Code?

Run `npx skills add GAIK-project/gaik-toolkit --skill incident-report-writing -a claude-code`. Or copy the skill folder (implementation_layer/no-code-assets/agent-skills/skills/incident-report-writing in GAIK-project/gaik-toolkit) into .claude/skills/incident-report-writing in your project. Claude Code loads it when a task matches its description.

How do I install Incident Report Writing in Codex?

Run `npx skills add GAIK-project/gaik-toolkit --skill incident-report-writing -a codex`. Or copy the skill folder (implementation_layer/no-code-assets/agent-skills/skills/incident-report-writing in GAIK-project/gaik-toolkit) into .agents/skills/incident-report-writing in your project. Codex loads it when a task matches its description.

Can I use Incident Report Writing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GAIK-project/gaik-toolkit --skill incident-report-writing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/incident-report-writing, .gemini/skills/incident-report-writing, .github/skills/incident-report-writing and .opencode/skills/incident-report-writing in your project.

What does Incident Report Writing need to run?

Going by SKILL.md and its folder, Incident Report Writing needs Windows cmd and Python for the scripts in its folder. Our summary lists: Python 3.

Does Incident Report Writing access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Incident Report Writing safe to install?

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.

What licence does Incident Report Writing use?

Incident Report Writing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Incident Report Writing use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Incident Report Writing?

Skills that share tags, products or a category with Incident Report Writing: Markitdown (jimmc414/Kosmos, 595 stars), Form Filling (platonai/Browser4, 1.2k stars), Graphic Ebook (Varnan-Tech/opendirectory, 674 stars) and Make Photo Stamp Archive (Dlcccc71913/skill-make-photo-stamp-archive, 367 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Incident Report Writing?

GAIK-project (a GitHub organization) maintains it in GAIK-project/gaik-toolkit, which has 100 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 9, 2026.

Source: GAIK-project/gaik-toolkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.