Contributing to the Wiki - dathere/qsv GitHub Wiki
Tier: Advanced
This wiki is itself a git repo at https://github.com/dathere/qsv.wiki.git. Anyone with write access to qsv can clone it, edit pages locally, and push to master. There's no PR review (GitHub Wikis don't support PRs) β so we rely on conventions and a verification checklist instead.
git clone https://github.com/dathere/qsv.wiki.git ~/code/qsv.wiki
cd ~/code/qsv.wiki
# Edit pages
$EDITOR Recipe-My-New-Recipe.md
# Commit and push
git add Recipe-My-New-Recipe.md _Sidebar.md
git commit -m "wiki: add Recipe-My-New-Recipe"
git push origin masterPages appear on the live wiki immediately after the push.
qsv.wiki/
βββ Home.md β landing page
βββ _Sidebar.md β left-side nav (rendered specially by GitHub)
βββ _Footer.md β bottom footer (rendered specially)
βββ _Header.md β reserved for future CSS hooks
βββ <Page-Name>.md β every other page; one per file
βββ files/ β binary assets (CSVs, ZIPs, images)
βββ images/ β screenshots, charts (optional)
All pages live at repo root with no subdirectories (GitHub Wiki convention). Filenames become URL slugs: Recipe-Foo-Bar.md β https://github.com/dathere/qsv/wiki/Recipe-Foo-Bar and renders as Recipe Foo Bar.
Every page must:
-
Start with an H1 matching the slug humanized:
# Recipe: Foo Bar -
Declare a tier on line 3:
**Tier:** [Beginner|Intermediate|Advanced](Tier-Legend) -
End with a
## See alsosection with 3-5 outbound links
# {{Category Title}}
**Tier:** [{{Tier}}](Tier-Legend)
**Commands covered:** `cmd1`, `cmd2`, β¦ `cmdN`
> [!NOTE]
> Per-command flag reference lives in [/docs/help/](https://github.com/dathere/qsv/tree/master/docs/help).
> This page is the *workflow* layer β when to reach for each command and how they compose.
## Quick decision table
| If you want to⦠| Use | Notes |
|---|---|---|
## `cmd1`
{{1-paragraph intro}}
**Example: {{scenario with anchor dataset}}**
```bash
qsv {{cmd1}} {{args}} {{anchor_file}}{{1-paragraph commentary.}}
See also: /docs/help/cmd1.md, Recipe-X
- β¦
#### Cookbook recipe page
```markdown
# Recipe: {{Title}}
**Tier:** [{{Tier}}](Tier-Legend)
**Commands used:** `cmdA`, `cmdB`, `cmdC`
**Anchor dataset:** {{name}}
## Problem
## Data
## Solution
## Variations
## Performance notes
## See also
| Trigger | Update |
|---|---|
| A new command is added to qsv | Add 1 row to Command-Reference + 1 H2 section in the matching category page in Phase B |
| A flag is renamed | Grep qsv.wiki for the old flag name; update each reference |
| A new feature in an existing command | Add a new example to the category page; add to the related recipe(s) if relevant |
| A new performance number is published | Don't hardcode the number in the wiki. Update docs/BENCHMARKS.md instead β the wiki links to it |
| A new env var | Add to Environment-Variables under the right category section. Source of truth is docs/ENVIRONMENT_VARIABLES.md
|
| A new cookbook recipe | Create a Recipe-Foo-Bar.md from the template above, add to _Sidebar.md, and add a row to Cookbook
|
Before pushing, run through this list:
-
git cloneand render locally withgh repo view,glow, or your editor's Markdown preview. - Click every link on the changed page β no 404s, no relative-vs-absolute confusion.
- Run every code block against its declared anchor dataset. If the block is mocked or illustrative, mark with
<!-- illustrative -->comment. - Verify fenced language is correct:
bash,sql,lua,python,json,toml,jinja. - Confirm the new page is in
_Sidebar.mdin the right tier section. - Confirm the "See also" footer has 3-5 outbound links.
- Confirm the tier badge is at the top of the page, linking to
Tier-Legend. - No duplicated content from
/docs/help/<cmd>.md(paraphrase + link instead). - Performance numbers cite their source (
docs/BENCHMARKS.mdor qsv.dathere.com/benchmarks). - Commit message follows the convention (next section).
Use a wiki: prefix:
wiki: add Recipe-Foo-Bar pagewiki: update Performance-Tuning to link new BENCHMARKS sectionwiki: fix dead link in Command-Referencewiki: expand Cookbook with Recipe-Larger-than-RAM
For multi-file changes, summarize in the subject and itemize in the body:
wiki: Phase B batch 2 β Aggregation + Joins category pages
Aggregation-and-Statistics covers stats, moarstats, frequency, β¦
Joins-and-Set-Ops covers join, joinp, exclude, partition, split β¦
The wiki's job is workflow + discoverability. The /docs/ tree is the canonical reference. Avoid duplication:
-
Per-command flag tables live in
/docs/help/<cmd>.md. The wiki paraphrases and links. -
Performance numbers live in
docs/BENCHMARKS.md. The wiki cites them. -
Env var definitions live in
docs/ENVIRONMENT_VARIABLES.md. The wiki groups them by topic and links. -
Stats metric definitions live in
docs/STATS_DEFINITIONS.md. The wiki shows them in use.
The only exceptions are the Why-qsv page (where some standalone numbers are quoted directly for the pitch) and any legacy content preserved on Cookbook.
When you need a dataset for an example, prefer (in order):
-
wcp.csvβ World Cities Population, infiles/wcp.zip -
NYC 311 β bundled at
resources/test/NYC_311_SR_2010-2020-sample-1M.csv -
Boston 311 β bundled at
resources/test/boston311-*.csv -
Allegheny property sales β bundled at
resources/test/allegheny_property_sales*.csv -
NOAA GHCN-Daily β fetched live via
qsv fetch -
GitHub stargazers β fetched live via
qsv fetch - country_continent.csv β for join examples
The same dataset appearing in multiple pages helps users build mental models. See the anchor table on Home and Cookbook.
The wiki ships a small bash lint at scripts/lint.sh. It does two checks:
-
Command-reference check. Scans every page for
qsv <command>patterns inside code contexts (fenced blocks + inline backticks) and verifies each<command>is inqsv --list. -
Help-link check (optional). When
QSV_REPO_PATHis set, scans every page for/docs/help/<X>.mdreferences and verifies eachX.mdexists in the named qsv checkout.
# Just the command-reference check
./scripts/lint.sh
# Both checks β point at a local qsv source checkout
QSV_REPO_PATH=~/code/qsv ./scripts/lint.shExit codes:
-
0β clean -
1β stale or missing references -
2β environment problem (qsv missing,qsv --listunparseable,QSV_REPO_PATHinvalid)
GitHub Actions doesn't run on *.wiki repos directly, so the workflow file lives in the main qsv repo. Copy scripts/wiki-lint-workflow.yml from the wiki to the main repo at .github/workflows/wiki-lint.yml and push.
The workflow runs:
- Nightly at 04:17 UTC
-
On every PR that touches
src/cmd/,src/main.rs, ordocs/help/ -
On manual dispatch (
workflow_dispatch)
It builds qsv with -F all_features from the PR's source, clones the wiki, and runs the lint. Scheduled failures open a sticky wiki-lint issue (or comment on the existing one) so stale references can't quietly persist.
If a literal qsv <token> appears in a doc that isn't a real command invocation (template placeholder, prose-as-comment in a bash block, etc.), add the token to scripts/lint.allowlist (one per line; # for comments). Don't push false positives through; future contributors will assume they're real.
For /docs/help/<X>.md placeholders (e.g. cmd1.md in template snippets), the script's HELP_ALLOWLIST already includes the common ones (cmd1, cmd2, cmdA-C, X).
GitHub Wiki renders Use-Hyphens-In-Title-Case.md as the page title Use Hyphens In Title Case. So:
-
Recipe-Clean-and-Normalize.mdβ "Recipe Clean and Normalize" -
Recipe-CKAN-Integration.mdβ "Recipe CKAN Integration" - For non-ASCII or special characters, URL-encode in cross-page links:
[xsv vs qsv stats](xsv-0.13.0-%60stats%60-compared-with-qsv-1.0.0-%60stats%60)
Always use hyphens, never spaces or underscores, in filenames.
-
Images / screenshots β store in
images/at the repo root. Reference relatively:. -
Sample CSVs β store in
files/. Reference relatively:[wcp.zip](files/wcp.zip). -
Benchmark SVGs β DO NOT copy from
/docs/into the wiki. Link to raw URL instead:https://raw.githubusercontent.com/dathere/qsv/master/docs/qsv-benchmarks.svg.
For future demos, host on asciinema.org and embed via the standard <script> tag. Test that GitHub Wiki renders the script β if it gets stripped, fall back to a GIF in images/.
The full Phase A/B/C/D/E wiki-expansion plan lives at the contributor's local plan file (or in .claude/plans/the-wiki-is-a-typed-dragon.md if you cloned that with the wiki). This page is the maintenance layer; the plan was the creation layer.
- Home
- Tier-Legend
- README's CONTRIBUTING.md β code contributions
-
docs/BENCHMARKS.mdβ single source of truth for performance numbers -
docs/ENVIRONMENT_VARIABLES.mdβ single source of truth for env vars - Discussions β ask for help on wiki edits