| title | Contributing | |||
|---|---|---|---|---|
| tags |
|
This guide explains how to contribute to the TCAT Wiki.
Note that, while minor external contributions are welcome, this guide is primarily intended for use by TCAT/GS staff.
For a list of all guides on the TCAT Wiki, refer to the Guides List.
This project follows standardized version control conventions:
The TCAT Wiki uses Semantic Versioning (MAJOR.MINOR.PATCH):
- Major (X.0.0):
- Core: New major features or upgrades
- Docs: Changes to structure/navigation that break external links
- Minor (0.X.0):
- Core: Significant changes to core features
- Docs: New documentation or major reworks
- Patch (0.0.X):
- Core: Minor fixes, fixing typos, completing chores
- Docs: Small updates, fixing typos, adding images
Commits follow Conventional Commits with scoping:
feat(scope): description- Core features or Docs contentfix(scope): description- Core patches or Docs corrections
Examples:
feat(core-plugins): add abbreviations plugin
feat(docs-accessmap): add user manual page
fix(core-util): fix nav generator logic
fix(docs-walksheds): fix typo
Follow GitHub flow with structured branch names:
Format: type/scope/<work-item-number>-short-description
Examples:
feat/core-plugins/1234-add-abbreviations-plugin
feat/docs-accessmap/1024-add-user-manual-page
fix/core-util/9876-fix-nav-generator-logic
fix/docs-walksheds/2048-fix-typo
- Create a feature branch following the naming convention
- Make commits using conventional commit format
- Open a pull request to
mainand merge it
Changelog entries and version tags are managed manually, not on every PR merge. Do this whenever a meaningful set of changes has landed on main:
-
In VS Code Copilot Chat (agent mode), run:
/changelogThe prompt reads the commit history since the last tag, determines the correct Semantic Version bump, and prepends a new
### Features/### Fixesentry toCHANGELOG.md. -
Review the generated entry — the prompt will flag any commits it omitted or that looked miscategorized.
-
Commit the changelog update to
main:chore: update changelog for vX.Y.Z -
On the GitHub website, go to Releases → Draft a new release.
- In Choose a tag, type the new version (e.g.
v11.1.0) and select Create new tag on publish. - Set the title to
vX.Y.Z. - Paste the release summary as the description.
- Click Publish release.
- In Choose a tag, type the new version (e.g.
This section of the guide explains how to set up a Windows environment for contributing to the TCAT Wiki for the first time.
-
Keyboard shortcut to press | Action
(
Shift+C) | Copy -
Command to enter into terminal
[
someCommand --arguments \<path>]
-
Install Visual Studio Code
- Install VS Code Extensions
-
Clone the repository
git clone https://github.com/TaskarCenterAtUW/tcat-wiki cd tcat-wiki
-
Install Python
-
Set up Python virtual environment
-
Create the virtual environment
python3 -m venv .venv -
Activate the virtual environment
.\.venv\Scripts\Activate.ps1
-
-
Install requirements
pip install -r requirements.txt
Refer to the documentation for Zensical.
By default, guides appear in both their parent page's guides section and in the main guides list. You can control this using frontmatter flags (YAML comments, invisible on the built page).
To exclude a guide from its parent's guides section:
---
title: Your Guide Title
tags:
- Guide
# exclude-from-parent-guides-list
---To exclude a guide from the main guides list:
---
title: Your Guide Title
tags:
- Guide
# exclude-from-main-guides-list
---Both flags can be used together to exclude a guide from all guides lists.
Use the golden samples in templates/content/README.md rather than live docs pages when checking content structure and formatting.
The full editor-facing guide lives in .github/instructions/content-style.instructions.md. Apply these conventions when writing or revising content in docs/:
- Choose the closest golden sample before drafting or reviewing:
- templates/content/topic-index.md for topic landing pages
- templates/content/tutorial.md for single-page tutorials
- templates/content/user-manual-index.md for user manual landing pages
- templates/content/subpage.md for tutorial and user manual subpages
- For multi-page tutorial indexes, combine the opening pattern from templates/content/tutorial.md with the table-of-contents pattern from templates/content/user-manual-index.md.
- Open each guide with frontmatter, a
##page heading that matches the frontmatter title, a one-sentence opener, the standard Guides List reference, and a horizontal rule. - Use the required first sentence for the page type:
- Tutorials and tutorial index pages begin with
This tutorial... - User manual index pages begin with
This user manual... - Tutorial and user manual subpages begin with
This section...
- Tutorials and tutorial index pages begin with
- Write for one clear user goal per page. Break procedures into
###sections and ordered lists, using either named steps or numbered subsections depending on the complexity of the workflow. - Use short, imperative steps. Bold exact UI labels and use code formatting for commands, filenames, IDs, placeholders, headers, and literal values.
- When readers must substitute values, explain the placeholders once and provide a concrete example when it materially improves clarity.
- Add screenshots only when they clarify a step or confirm a state. Place them directly after the relevant step and write alt text that identifies both the screen and the key focus area.
- Use admonitions sparingly for cautions, waiting states, tips, and success confirmations.
- Prefer plain language, active voice, and verified instructions over exhaustive explanation. Do not invent undocumented behavior or UI details.
Where possible, follow these guidelines for images:
-
Format: 24-bit
.png -
Resizing: Scale images using
{ width="123" }:{ width="300" }
Refer to Zensical: Images for more information.
For creating screenshots with a consistent style, Firefox DevTools is to be used.
-
Open Firefox DevTools
(
F12) -
Open Responsive Design View
(
Ctrl+Shift+M) -
Add custom device profiles:
-
Name:
[Screenshot] Web - Portrait-
Size:
810x1440 -
Device Pixel Ratio:
1 -
User Agent String:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0
-
-
Name:
[Screenshot] Web - Landscape-
Size:
1440x810 -
Device Pixel Ratio:
1 -
User Agent String:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0
-
-
-
It is recommended to remove all embedded metadata, such as with the use of ExifToolGUI.
-
Process screenshots with the
process-screenshot.pyutility to generate themed light/dark variants with borders and drop shadows:# Ensure venv is activated first! ..\.venv\Scripts\Activate.ps1 # Process a single screenshot python .\utilities\process-screenshot.py docs\resources\images\example\screenshot.png # Process all images in a directory python .\utilities\process-screenshot.py docs\resources\images\example\ # Process recursively with a custom profile python .\utilities\process-screenshot.py docs\resources\images\ --recurse --profile uw-purple # Regenerate existing output files python .\utilities\process-screenshot.py screenshot.png --overwrite
The script produces two variants per input image, saved as maximally-compressed lossless PNGs:
{name}-light.png— dark border + drop shadow for light theme pages{name}-dark.png— light border + glow for dark theme pages
Reference them in Markdown with Zensical's theme-switching fragments:
 
Mode-tagged source files (e.g.,
image.light.png,image.dark.png) generate only the matching variant. Run with--helpfor all options including per-variant color/shadow overrides.
For creating image annotations with a consistent style, follow these guidelines.
- Highlight box
- Use: Indicating an area of focus in an image.
- Style: Use the native keyboard navigation highlight
- Example:
 

- Naming convention: For images with highlights, append
-h-$highlightedFeaturebefore the light/dark identifier.- Example:
dashboard-dark.png→dashboard-h-api-key-copy-dark.png
- Example:
- Create QR codes using Project Nayuki's QR Code generator library.
The event report system generates post-event summary reports.
# Ensure venv is activated first!
.\.venv\Scripts\Activate.ps1
# Generate a complete event report:
python .\utilities\generate-event-report.py --event olympia-connected
# Re-generate using cached stats:
python .\utilities\generate-event-report.py --event olympia-connected --skip-stats
# Run TM stats generator directly:
python .\utilities\event-reports\generate-tm-event-stats.py --event mny26
# Run ASR stats generator directly:
python .\utilities\event-reports\generate-asr-event-stats.py --event nda-vancouverRun with --help for all available options.
# H1 Header
## H2 Header
### H3 Header
#### H4 Header
##### H5 Header
###### H6 Header
**bold text**
*italic text*
***bold and italic***
~~strikethrough~~
`inline code`
[Link text](https://example.com)
[Link with title](https://example.com "Hover title")


Unordered:
- Item 1
- Item 2
- Nested item
Ordered:
1. First item
2. Second item
3. Third item
> This is a blockquote
> Multiple lines
>> Nested quote
```javascript
function hello() {
console.log("Hello, world!");
}
```
| Header 1 | Header 2 | Header 3 |
|----------|----------|----------|
| Row 1 | Data | Data |
| Row 2 | Data | Data |
---
or
***
or
___
- [x] Completed task
- [ ] Incomplete task
- [ ] Another task
Use backslash to escape: \* \_ \# \`
End a line with two spaces
to create a line break.
Or use a blank line for a new paragraph.