| layout | page |
|---|---|
| title | add new term |
| permalink | /add-new/ |
| description | |
| nav | false |
| horizontal | false |
The PS-Wiki uses Markdown files as the editing interface and JSON files for storage. You should always edit Markdown files; the conversion to JSON is handled by the processing script.
- Create a Markdown file in
_wiki/<term-id>.mdusing stability.md as a template - Edit the content following the conventions below
- Run the processing script:
python database/pyscripts/process.py --terms <term-id>
- Commit both files:
_wiki/<term-id>.mdanddatabase/json/<term-id>.json
- Edit the Markdown file in
_wiki/<term-id>.md - Run the processing script:
python database/pyscripts/process.py --terms <term-id>
- Commit the updated files
When creating or editing term Markdown files, follow these conventions:
The YAML front matter should include:
---
title: Term Title
description: Brief description of the term
tags: [tag1, tag2, tag3]
related: [related-term-1, related-term-2]
authors:
- name: Author Name
url: https://author-url.com
version: 1.0.0
date: 2025-03-15
lastmod: 2025-11-19
---- Use
### Section Title(H3) for section headings - Start definition sections with
>(blockquote) for proper formatting - Include figures using Jekyll's figure.liquid include
- Add citations using
<d-cite key="citation-key"></d-cite>tags - Reference bibliography entries from
assets/bibliography/papers.bib
Figures should use this format:
{% raw %}
<div class="row mt-3">
<div class="col-sm mt-3 mt-md-0">
{% include figure.liquid path="/assets/img/pswiki/example-figure.png" zoomable=true %} Caption with <d-cite key="source-key"></d-cite>
</div>
</div>
<br />{% endraw %}
Figure Guidelines:
- Store figures in
assets/img/pswiki/directory - Use relative paths starting with
/assets/img/pswiki/ - Include concise captions in Markdown format
- Set
zoomable=truefor click-to-zoom functionality - Reference sources using
<d-cite>tags in captions
Add source citations at the end of each section:
Source: <d-cite key="citation-key"></d-cite> p42The citation keys must correspond to entries in assets/bibliography/papers.bib.
The PS-Wiki provides several scripts for managing terms:
The process.py script runs the complete pipeline (format, convert, validate, build index):
# Process all terms
python database/pyscripts/process.py
# Process specific terms by ID
python database/pyscripts/process.py --terms stability frequency-control
# Build index files only (skip term processing)
python database/pyscripts/process.py --index-only
# Skip validation for faster processing
python database/pyscripts/process.py --no-validate
# Dry-run mode (see what would be done)
python database/pyscripts/process.py --dry-run --verboseFor more granular control, use these scripts:
# Convert all Markdown files to JSON
python database/pyscripts/md2json.py --all
# Convert specific terms
python database/pyscripts/md2json.py --terms stability frequency-control
# Convert single file
python database/pyscripts/md2json.py -i _wiki/stability.md -o database/json/stability.json# Convert all JSON files to Markdown
python database/pyscripts/json2md.py --all
# Convert specific terms
python database/pyscripts/json2md.py --terms stability frequency-control
# Convert single file
python database/pyscripts/json2md.py -i database/json/stability.json -o _wiki/stability.mdNormalize Markdown formatting via MD → JSON → MD roundtrip:
# Format all files
python database/pyscripts/format.py --all
# Format specific terms
python database/pyscripts/format.py --terms stability frequency-control
# Format single file
python database/pyscripts/format.py -i _wiki/stability.mdValidate JSON files against the schema:
# Validate all files
python database/pyscripts/validate.py
# Validate specific terms
python database/pyscripts/validate.py --terms stability frequency-controlWhile editing JSON files directly is not recommended, you may need to work with JSON for:
- Schema migrations
- Bulk updates
- Automated processing
Each term is stored as database/json/<term-id>.json with this structure:
{
"$schema": "https://ps-wiki.github.io/schema/v1/term.schema.json",
"id": "term-id",
"title": "Term Title",
"description": "Brief description",
"language": "en",
"tags": ["tag1", "tag2"],
"related": ["related-term-1"],
"version": "1.0.0",
"breaking": false,
"dates": {
"created": "2025-03-15",
"last_modified": "2025-11-19"
},
"authors": [
{
"name": "Author Name",
"url": "https://author-url.com"
}
],
"content": {
"sections": [
{
"order": 1,
"id": "section-id",
"title": "Section Title",
"type": "definition",
"source_keys": ["citation-key"],
"page": "p42",
"body_md": "Section content in Markdown...\n"
}
]
}
}The conversion scripts automatically preserve important fields:
$schema- Always added/preservedaliases- Preserved from existing JSON- Field order - Maintained to minimize git diffs
If you encounter validation errors:
- Check the error message for the specific issue
- Verify all required fields are present in the front matter
- Ensure citation keys exist in
assets/bibliography/papers.bib - Verify figure paths are correct
- Check that related term IDs exist
Run validation on specific terms to debug:
python database/pyscripts/validate.py --terms <term-id>To format a Markdown file and normalize its structure:
# Format single file
python database/pyscripts/format.py -i _wiki/<term-id>.md
# Format all files
python database/pyscripts/format.py --allThis performs a roundtrip conversion (MD → JSON → MD) to normalize formatting.
The scripts ensure conversion invariance: running MD → JSON → MD → JSON produces identical results. This guarantees:
- No data loss during conversions
- Consistent formatting
- Minimal git diffs
During website deployment, JSON files are automatically converted back to Markdown for rendering. The JSON files serve as the canonical source of truth for the data.
Note: There may be minor formatting differences between your original Markdown and the deployed version due to the conversion process. This is normal and ensures consistency across all terms.