Agent skill

Night Market Operations

by athola in athola/claude-night-market

Run and ship this repo: make targets, artifacts, release runbook.

MITAuto-check passedDevelopment

Install Night Market Operations

skills CLI
$ npx skills add athola/claude-night-market --skill night-market-operations -a claude-code

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

GitHub CLI
$ gh skill install athola/claude-night-market night-market-operations --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/athola/claude-night-market.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/night-market-operations .claude/skills/night-market-operations && 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
night-market-operations
GitHub stars
341
Token cost
~3.6k tokens
SKILL.md length
1,447 words
Files
1
Skills in repo
152
Repo updated
First seen
Licence
MIT

At a glance

Run and ship this repo: make targets, artifacts, release runbook.

  • Works in 8 steps: Preflight. Run… → Bump the version everywhere. Dry-run first → Add the CHANGELOG entry. CHANGELOG.md… → …
  • Use night-market-build-and-env
  • SKILL.md covers Command anatomy, Scoping runs: one plugin, one…, Artifact conventions and Release runbook, plus 5 more sections
  • Calls make, uv and rg

What it does

Night Market Operations is an agent skill from athola/claude-night-market. Run and ship this repo: make targets, artifacts, release runbook. Use when testing, linting, or releasing. Do not use for setup; use night-market-build-and-env.

Its SKILL.md is about 3.6k 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 Linting and formatting and Runbooks and postmortems. It works with Ruff and Python. The repository describes itself as: 23 Claude Code plugins: TDD enforcement hooks, git/PR workflows, spec-driven development, code review, project lifecycle, fix-from-error, maintenance automation, context… The licence is MIT.

When your agent uses it

  • Use night-market-build-and-env
  • Tasks that involve Linting and formatting
  • Tasks that involve Runbooks and postmortems

Example prompts

  • “/night-market-operations”

Requirements

  • Python 3

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Preflight. Run Skill(sanctum:git-workspace-review) for a
  2. Bump the version everywhere. Dry-run first
  3. Add the CHANGELOG entry. CHANGELOG.md follows Keep a Changelog
  4. Sync the docs. Update the per-plugin version column in
  5. Open the PR and clear the gates. Follow
  6. Merge to master.
  7. Tag the release. Run /sanctum:create-tag v1.9.16. The command
  8. Let the release pipeline run.

What it can do on your machine

Read from SKILL.md and the folder at commit 9f3eb00. 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

    Shell commands in SKILL.md call:

    • make
    • uv
    • rg
    • python3
    • git
    • bash

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

  • Network

    No URLs in SKILL.md. Its commands use uv and git, which can reach the network depending on how they are called.

    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

Night Market Operations loads about 3.6k tokens when it runs. Until then it costs about 46 tokens; SKILL.md has 1,447 words of instructions outside code blocks.

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

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 athola/claude-night-market at commit 9f3eb00, republished under its MIT licence (© athola). 1,447 words, ~3,610 tokens.

Download SKILL.mdSave it as .claude/skills/night-market-operations/SKILL.md (or your agent's skills folder).
name
night-market-operations
description
Run and ship this repo: make targets, artifacts, release runbook. Use when testing, linting, or releasing. Do not use for setup; use night-market-build-and-env.

Night Market Operations

This skill is the runbook for operating the claude-night-market repo: what each make target actually executes, where artifacts land, and the exact sequence that ships a release. Every command below was verified against the Makefile, scripts/, and .github/workflows/ on 2026-07-02 (repo v1.9.15).

Terms used once and reused throughout:

  • Plugin: a directory under plugins/ with a .claude-plugin/plugin.json manifest. Most have their own Makefile, pyproject.toml, and tests/.
  • skrills: a Rust CLI for skill validation and token analysis, vendored at plugins/abstract/bin/skrills. Every skrills target has a Python fallback, so a missing binary never blocks you.
  • ClawHub export: a cross-framework skill package format written to clawhub/ by scripts/clawhub_export.py.

All commands run from the repo root unless a cd is shown. uv is required for everything Python. For environment setup, see night-market-build-and-env.

Command anatomy

CommandWhat it actually executesWhen to useExpected output shape
make test./scripts/run-plugin-tests.sh --all: per plugin, runs make test --quiet if the plugin Makefile has a test: target, else uv run python -m pytest tests/ --tb=short --quiet if pyproject mentions pytest. Skips plugins without tests/.Full sweep before a PR or release.Per-plugin pass/fail/skip lines. Failures re-run verbose.
make lintuv run ruff format plugins/, then uv run ruff check --fix plugins/, then ruff format again, then uv run bandit --quiet -c pyproject.toml -r plugins/. All use root pyproject.toml config.Before every commit. Mutates files (auto-fix).Four staged sections ending "Lint Complete".
make typecheck./scripts/run-plugin-typecheck.sh --all: per-plugin uv run mypy under each plugin's own strict config, plus a separate uv run mypy hooks/ pass when hooks/*.py exists.After type-touching changes and before release.Per-plugin pass/fail. Hooks checked as a sub-step.
make validate-allpython3 plugins/abstract/scripts/validate_plugin.py <plugin> for every plugin. Failures print "(validation failed)" but do NOT stop the loop or fail the target.Structure audit after manifest edits.One validation block per plugin. Read output, not exit code.
make plugin-checkFor each plugin whose Makefile has a plugin-check: target: timeout 180 make -C plugins/<p> plugin-check. Failures and timeouts print a note, exit code stays 0.Dogfood/demo sweep before release.Per-plugin sections. Watch for "(plugin-check failed or timed out)".
make docs-sync-checkbash scripts/capabilities-sync-check.shPR touches plugin manifests or skills (mirrors capabilities-sync.yml CI).Drift list or clean pass. Fix drift with /sanctum:sync-capabilities --fix.
make supply-chain-scanpython3 scripts/supply_chain_scan.pyAfter dependency or lockfile changes.Scan report between banner lines.
make validate-skillsskrills validate --skill-dir plugins --target claude (plugin bin, then PATH). Falls back to uv run python scripts/check_plugin_hooks.py.Skill frontmatter/structure check.skrills report, or the Python fallback notice plus its output.
make analyze-skillsskrills analyze --skill-dir plugins. Falls back to uv run python scripts/generate_dependency_map.py.Skill token-budget and dependency analysis.Token/dependency stats.
make statusmake -C <plugin> status for every plugin.Quick overview.Per-plugin status or "(status unavailable)".
make cleanmake -C <plugin> clean for every plugin, errors ignored.Reset build artifacts."Done."

Two targets have soft failure modes worth repeating: make validate-all and make plugin-check keep going past failures and can exit 0 while a plugin is broken. Read their output. Do not treat a green exit as proof.

Scoping runs: one plugin, one file

The root Makefile auto-generates delegation targets for every plugin that has a Makefile. make <plugin>-<target> is identical to make -C plugins/<plugin> <target>:

bash
make sanctum-test        # run sanctum's test suite
make imbue-lint          # run imbue's lint target
make abstract-help       # list a plugin's own targets

Run a single test file from inside the plugin directory:

bash
cd plugins/imbue && uv run pytest tests/unit/test_deferred_capture.py -x -q

Rules that save you an hour:

  • Never run root pytest expecting plugin tests to run. Root pyproject.toml sets norecursedirs = ["plugins/*", ...] because plugin conftest.py files collide on import paths. Plugin tests run per-plugin, always.
  • Some plugins force coverage on every run. imbue's pytest addopts include --cov=scripts, --cov-report=html:htmlcov, and --cov-report=xml, so even a single-file run writes htmlcov/ and coverage.xml into plugins/imbue/. This is normal, not a mess you made.
  • Coverage thresholds: root coverage fail_under = 85. Per-plugin overrides live in each plugin's [tool.nightmarket] coverage_threshold (per-plugin values: see night-market-validation-and-qa, the designated home for the threshold inventory). run-plugin-tests.sh reads that value and passes --cov-fail-under=<n> when the plugin runs via the pytest path.

Artifact conventions

ArtifactProducerLocationCommitted?
htmlcov/, coverage.xmlpytest coverage addoptsRepo root and per-plugin dirsPresent in tree but regenerated. Never hand-edit
reports/skill-graph.jsonskill-graph toolingreports/No, generated locally (reports/ is gitignored). Rebuild with the skill-graph tooling
clawhub/make clawhub-exportclawhub/manifest.json plus one nm-<plugin>-<skill>/ dir per exported skillNo, generated locally. make clawhub-export rebuilds it, and the release workflow regenerates it in CI
bridge/openclaw/, bridge/a2a/make bridge-build, make a2a-cardsbridge/Build outputs. make bridge-clean removes skills and a2a
book/build/mdbook build (book/book.toml sets build-dir = "build")book/build/No, CI-built
trust-report.jsonCI only: trust-attestation.yml on push to masterWorkflow workspace, SLSA-attestedNo, never in tree
Show full SKILL.md (709 more words)Show less

Release runbook

The ecosystem ships as one version. .claude-plugin/marketplace.json is the version source of truth, fanned out to every plugin manifest. Gates and review policy are night-market-change-control territory. This is the mechanical sequence.

  1. Preflight. Run Skill(sanctum:git-workspace-review) for a read-only workspace check. Confirm you are on a <topic>-<version> branch. Do not release from master.

  2. Bump the version everywhere. Dry-run first:

    bash
    uv run python plugins/sanctum/scripts/update_versions.py 1.9.16 --dry-run
    uv run python plugins/sanctum/scripts/update_versions.py 1.9.16
    git diff --stat

    The script rejects any version that does not match ^\d+\.\d+\.\d+$. It then rewrites the version field in every match of these globs, and it skips cache and venv directories:

    • **/pyproject.toml
    • **/Cargo.toml
    • **/package.json
    • **/.claude-plugin/plugin.json
    • **/.claude-plugin/metadata.json
    • **/.claude-plugin/marketplace.json
    • **/openpackage.yml
    • any **/__init__.py that contains __version__

    Expect a large diff of roughly 100 files. That is the design.

  3. Add the CHANGELOG entry. CHANGELOG.md follows Keep a Changelog 1.1.0 with SemVer. Keep ## [Unreleased] at the top. Insert ## [X.Y.Z] - YYYY-MM-DD directly below it. Do not rewrite or de-slop historical entries.

  4. Sync the docs. Update the per-plugin version column in docs/api-overview.md. Then run:

    bash
    make docs-sync-check

    The check compares plugin.json registrations against the generated capabilities reference in book/src/reference/. If it reports drift, run /sanctum:sync-capabilities --fix.

  5. Open the PR and clear the gates. Follow night-market-change-control. The gates are the pre-commit hooks, the slop check on docs, capabilities-sync, typecheck, and the security workflows.

  6. Merge to master.

    trust-attestation.yml fires on the push. It runs make test. It writes trust-report.json. It attaches a SLSA provenance attestation with actions/attest-build-provenance@v4.

  7. Tag the release. Run /sanctum:create-tag v1.9.16. The command pushes a v-prefixed annotated tag. It then confirms that the release pipeline started.

  8. Let the release pipeline run.

    cross-framework-publish.yml fires on v* tags. It strips the v and validates the version against ^[0-9]+\.[0-9]+\.[0-9]+. It runs the cross-framework unit tests: clawhub_export, build_bridge, a2a_cards, and framework_detect. It runs make cross-framework. It packages four tarballs:

    • night-market-clawhub
    • night-market-openclaw-bridge
    • night-market-a2a-cards
    • night-market-cross-framework

    It then creates the GitHub release.

    One precondition applies. The publish job fails when clawhub/manifest.json does not exist. It also fails when total_exported is 0. The current count is 188.

    ClawHub submission after the release stays manual. Run ./scripts/clawhub-submit.sh v<version>.

Release checklist:

  • make test, make lint, make typecheck all pass locally
  • update_versions.py diff reviewed and marketplace.json shows the new version
  • CHANGELOG has the new section, [Unreleased] still on top
  • make docs-sync-check clean
  • Tag pushed, both workflows green, release has 4 tarball assets

Book publishing

The mdBook under book/ deploys via deploy-book.yml:

  • Triggers: push to master or main touching book/** or the workflow file itself, plus PRs on the same paths (build-only) and manual dispatch.
  • Build: peaceiris/actions-mdbook@v2 with mdbook-version: 'latest', then mdbook build with working-directory book. Output book/build uploads via actions/upload-pages-artifact@v5 and deploys with actions/deploy-pages@v5, with one retry step if the first deploy fails.
  • Known fragility: mdbook is unpinned ("latest"), so a new upstream mdbook release can break the build with no change in this repo. If the book job fails right after an mdbook release, suspect that first.

Local preview, if mdbook is installed:

bash
cd book && mdbook build   # output in book/build/

Cross-framework export surface

bash
make clawhub-export       # export all skills to clawhub/, then validate
make clawhub-export-top   # top 20 most marketable skills only
make clawhub-validate     # re-validate an existing export
make clawhub-stats        # export statistics, no writes
make bridge-build         # (depends on clawhub-export) build bridge/openclaw/
make a2a-cards            # generate A2A agent cards into bridge/a2a/
make a2a-list             # list agents eligible for card generation
make detect-framework     # detect the active agentic framework
make cross-framework      # all of the above: export + bridge + cards

make cross-framework is exactly what the release pipeline runs, so running it locally before tagging catches export failures early. It prints skill and agent counts and ends with framework detection.

When NOT to use

You wantUse instead
Set up uv, Python, tools from scratchnight-market-build-and-env
Classify a change, know which gates applynight-market-change-control
Diagnose a failing test or broken hooknight-market-debugging-playbook
Configuration axes, env vars, defaultsnight-market-config-catalog
Coverage discipline and evidence barnight-market-validation-and-qa
Plugin/skill/hook mechanicsclaude-code-plugin-reference
Measurement tooling interpretationnight-market-diagnostics-toolkit
Stop an egregore loop or its watchdog relaunch machinerynight-market-completion-integrity-campaign (P1b, "Stopping and relaunch machinery")

Exit Criteria

  • The chosen make target ran and its per-plugin summary was read, beyond the exit code alone. For make validate-all and make plugin-check, output was scanned for embedded failure notes.
  • Single-plugin or single-file test runs were executed from inside the plugin directory, never via root pytest.
  • For a release: update_versions.py diff verified, CHANGELOG section added, make docs-sync-check clean, tag pushed, and the GitHub release shows all four tarball assets.
  • Any generated artifact (htmlcov, coverage.xml, clawhub/, book/build) was identified as generated and not hand-edited.

Provenance and maintenance

Compiled 2026-07-02 against repo v1.9.15, branch discussions-fix-1.9.14. Coverage-threshold inventory delegated to night-market-validation-and-qa and the egregore stop cross-reference added on 2026-07-03. Volatile facts and how to re-verify them:

bash
# Make target wiring
sed -n '60,150p' Makefile && sed -n '150,300p' Makefile

# Test runner behavior (delegation, coverage threshold, skip logic)
sed -n '1,110p' scripts/run-plugin-tests.sh

# Version bump globs and semver regex
rg -n "patterns|re.match" plugins/sanctum/scripts/update_versions.py

# Release pipeline gates
rg -n "tags|total_exported|tar -czf" \
  .github/workflows/cross-framework-publish.yml

# Attestation flow
rg -n "make test|attest|trust-report" \
  .github/workflows/trust-attestation.yml

# Book deploy and mdbook pin
rg -n "mdbook-version|deploy-pages|working-directory" \
  .github/workflows/deploy-book.yml

# Current export count (was 188 on 2026-07-02)
python3 -c "import json; \
  print(json.load(open('clawhub/manifest.json'))['total_exported'])"

# Coverage thresholds
rg -n "coverage_threshold" plugins/*/pyproject.toml
rg -n "fail_under" pyproject.toml

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

Files

Just SKILL.md in .claude/skills/night-market-operations of athola/claude-night-market.

Open the folder on GitHubat commit 9f3eb00

Compare with similar skills

Night Market Operations 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.

Night Market Operations compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Night Market Operations this skillathola/claude-night-market341—~3.6kAutomated safety check: PassMIT
Update Dependenciesalorence/django-modern-rpc111—~1.3kAutomated safety check: PassMIT
Minimizing Ty Ecosystem Changesastral-sh/ruff50k—~4.6kAutomated safety check: PassMIT
Summarise Ecosystem Resultsastral-sh/ruff50k—~2.2kAutomated safety check: PassMIT
Kedro Babysitkedro-org/kedro11k—~4kAutomated safety check: PassCustom licence
Saleor Commit Workflowsaleor/saleor23k—~575Automated safety check: PassBSD-3-Clause

Similar skills

  • Update Dependencies

    alorence/django-modern-rpc

    Routine update of all project dependencies — uv itself, uv.lock (all groups), tool versions pinned in GitHub workflows and .pre-commit-config.yaml (uv, ruff, mypy...), and SHA-pinned GitHub Actions.

    111 GitHub stars~1.3k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Official

    A skill your agent uses when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference"…

    50k GitHub stars~4.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    A skill your agent uses when a user says "summarise ecosystem results", "summarize this ty ecosystem report", "what changed in this ecosystem run?", or asks to summarise or summarize ty ecosystem…

    50k GitHub stars~2.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Kedro Babysit

    kedro-org/kedro

    Run Kedro's local lint / format / type-check / tests on changed files (uses the project's pre-commit hooks, ruff, mypy, pytest, lint-imports, detect-secrets, Make targets — in the right venv), or…

    11k GitHub stars~4k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Commits changes in the Saleor codebase and works through pre-commit hook failures from ruff, mypy, the GraphQL schema check and the migrations check.

    23k GitHub stars~575 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Adding Ty Diagnostics

    astral-sh/ruff

    Official

    A skill your agent uses when a user says "add a ty rule", "add a ty diagnostic", "write this new ty diagnostic", "change a ty error message", "review ty diagnostics", or asks to add, update, or…

    50k GitHub stars~556 tokensUpdated today
    DevelopmentAuto-check passed

More from athola/claude-night-market

All 152 skills in this repo
  • Night Market Diagnostics Toolkit

    athola/claude-night-market

    Run and interpret repo diagnostic scripts (ratchets, validators, token stats).

    341 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Skills Eval

    athola/claude-night-market

    Evaluate Claude skill quality through auditing. An agent skill from athola/claude-night-market.

    341 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Agent Teams

    athola/claude-night-market

    Coordinates Claude agent teams via filesystem protocol. An agent skill from athola/claude-night-market.

    341 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Delegation Core

    athola/claude-night-market

    Delegates execution to eight CLIs (Gemini, Qwen, MiniMax, GLM, Muse, Codex, OpenCode, Glimmer).

    341 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Elegant Code

    athola/claude-night-market

    Guide minimal code via a decision ladder with full safety, edge, and negative-case coverage.

    341 GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Skill Library Mission

    athola/claude-night-market

    Build a project skill library in .claude/skills/ via discovery, parallel authoring, and review.

    341 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Night Market Operations

What does Night Market Operations do?

Run and ship this repo: make targets, artifacts, release runbook. Night Market Operations is an agent skill from athola/claude-night-market. Run and ship this repo: make targets, artifacts, release runbook.

When should I use Night Market Operations?

Night Market Operations fits situations like: use night-market-build-and-env; tasks that involve Linting and formatting; tasks that involve Runbooks and postmortems.

How do I install Night Market Operations in Claude Code?

Run `npx skills add athola/claude-night-market --skill night-market-operations -a claude-code`. Or copy the skill folder (.claude/skills/night-market-operations in athola/claude-night-market) into .claude/skills/night-market-operations in your project. Claude Code loads it when a task matches its description.

How do I install Night Market Operations in Codex?

Run `npx skills add athola/claude-night-market --skill night-market-operations -a codex`. Or copy the skill folder (.claude/skills/night-market-operations in athola/claude-night-market) into .agents/skills/night-market-operations in your project. Codex loads it when a task matches its description.

Can I use Night Market Operations 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 athola/claude-night-market --skill night-market-operations -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/night-market-operations, .gemini/skills/night-market-operations, .github/skills/night-market-operations and .opencode/skills/night-market-operations in your project.

What does Night Market Operations need to run?

Going by SKILL.md and its folder, Night Market Operations needs the command-line tools its instructions call (make, uv, rg, python3, git and bash). Our summary lists: Python 3.

Does Night Market Operations access the network?

SKILL.md contains no URLs. Its commands use uv and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Night Market Operations 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 Night Market Operations use?

Night Market Operations 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 Night Market Operations use?

About 3.6k 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 Night Market Operations?

Skills that share tags, products or a category with Night Market Operations: Update Dependencies (alorence/django-modern-rpc, 111 stars), Minimizing Ty Ecosystem Changes (astral-sh/ruff, 50k stars), Summarise Ecosystem Results (astral-sh/ruff, 50k stars) and Kedro Babysit (kedro-org/kedro, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Night Market Operations?

athola (a GitHub user) maintains it in athola/claude-night-market, which has 341 GitHub stars. The repository holds 152 skills in this directory. The repository was last updated on October 9, 2026.

Source: athola/claude-night-market on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.