Skip to content

Commit 68b8621

Browse files
committed
chore
1 parent 89cca45 commit 68b8621

12 files changed

Lines changed: 242 additions & 114 deletions

File tree

.editorconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# ============================================================
2+
# .editorconfig (Standardize across editors and IDEs)
3+
# ============================================================
14
# REQ.UNIVERSAL: All professional GitHub project repositories MUST include .editorconfig.
25
# WHY: Establish a cross-editor baseline so diffs stay clean and formatting is consistent.
36
# ALT: Repository may omit .editorconfig ONLY if formatting is enforced equivalently by CI and formatter tooling.

.gitattributes

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1-
# WHY-FILE: Normalize line endings and GitHub language classification
2-
# to ensure cross-platform consistency and predictable CI behavior.
1+
# ============================================================
2+
# .gitattributes (Keep files consistent across operating systems)
3+
# ============================================================
34

4-
# === Core: Text normalization ===
5+
# REQ.UNIVERSAL: All professional GitHub project repositories MUST include .gitattributes.
6+
# WHY: Ensure consistent line endings, diff behavior, and file classification
7+
# across Windows, macOS, and Linux environments.
8+
# ALT: Repository may omit .gitattributes ONLY if equivalent normalization is
9+
# enforced reliably by tooling and CI (rare and fragile).
10+
# CUSTOM: Update file-type rules only when introducing new languages,
11+
# binary artifacts, or documentation formats.
12+
# NOTE: Rules are ordered by impact and generality, not alphabetically.
13+
# Git attributes are documented at https://git-scm.com/docs/gitattributes
14+
15+
# === Core defaults (always apply) ===
16+
17+
# WHY: Auto-detect text files and normalize line endings to avoid cross-platform drift.
518
* text=auto
619

720
# WHY-SECTION: Explicit EOL rules avoid platform-specific diffs and tool failures.

.github/dependabot.yml

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
1+
# ============================================================
2+
# .github/dependabot.yml (Check for GitHub Actions updates)
3+
# ============================================================
4+
# SOURCE: https://github.com/denisecase/templates
5+
#
16
# REQ.PROJECT: This repository SHOULD track GitHub Actions updates automatically.
2-
# WHY: GitHub Actions are executable dependencies and may receive security or behavior updates.
3-
# OBS: This repository has no language-level dependencies (Python, JS, Rust, etc.).
4-
# OBS: GitHub Actions are the only dependency class currently in scope.
7+
# WHY-FILE: GitHub Actions are executable dependencies and may receive security or behavior updates.
8+
# OBS: Language-level dependencies (e.g., Python packages) are upgraded manually.
9+
# OBS: GitHub Actions are the only dependency class automated here.
510
# ALT: Dependabot could be omitted if workflows are pinned and reviewed manually.
611
# CUSTOM: Update interval if CI cadence or security posture changes.
712

8-
version: 2
13+
# NOTE: This file automatically updates the versions used in Actions workflows.
14+
# You don't need to modify this file.
15+
# To disable: Delete this file or set enabled: false below.
16+
# enabled: false # Uncomment to disable Dependabot
917

10-
updates:
11-
- package-ecosystem: "github-actions"
12-
directory: "/"
18+
version: 2 # Dependabot configuration version
1319

14-
# WHY: Monthly cadence balances stability with security updates.
15-
# ALT: Use "weekly" for higher-security environments.
20+
updates:
21+
- package-ecosystem: "github-actions" # Dependency type
22+
directory: "/" # Location of GitHub Actions workflows
1623
schedule:
17-
interval: "monthly"
18-
19-
# WHY: Clear commit prefix simplifies changelog review and filtering.
24+
interval: "monthly" # ALT: Use "weekly" for higher security when needed
2025
commit-message:
21-
prefix: "(deps)"
26+
prefix: "(deps)" # WHY: enable filtering by commit type

.github/workflows/ci-hygiene.yml

Lines changed: 0 additions & 57 deletions
This file was deleted.

.github/workflows/ci-md.yml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# ============================================================
2+
# .github/workflows/ci-md.yml (Continuous Integration)
3+
# ============================================================
4+
# SOURCE: https://github.com/denisecase/templates
5+
#
6+
# WHY-FILE: Minimal checks for repositories where hygiene is the primary gate.
7+
# OBS: CI does not introduce additional style rules beyond repo configuration.
8+
# NOTE: This workflow intentionally avoids requiring Python or pre-commit for contributors.
9+
10+
name: CI Hygiene (Markdown and YAML)
11+
12+
# WHY: Validate repo contents on pushes to main branch and pull requests.
13+
14+
on:
15+
push:
16+
branches: [main] # WHY: Run when pushing to main branch.
17+
pull_request:
18+
branches: [main] # WHY: Run on pull requests targeting main branch.
19+
workflow_dispatch: # WHY: Allow manual triggering from Actions tab.
20+
21+
permissions: # WHY: Use least privileges required.
22+
contents: read
23+
24+
jobs:
25+
ci:
26+
name: Repository checks (pre-commit)
27+
runs-on: ubuntu-latest # WHY: Linux environment matches most production deployments
28+
timeout-minutes: 10 # WHY: Prevent hanging jobs. If over, it is likely stuck.
29+
30+
steps:
31+
# ============================================================
32+
# ASSEMBLE: Get code
33+
# ============================================================
34+
35+
- name: A1) Checkout repository code
36+
# WHY: Needed to access files for checks.
37+
uses: actions/checkout@v6
38+
39+
# ============================================================
40+
# BASIC CHECKS: Run basic checks
41+
# ============================================================
42+
43+
- name: B1) Lint Markdown
44+
# WHY: Enforce Markdown rules consistently (repo-config driven).
45+
uses: DavidAnson/markdownlint-cli2-action@v22
46+
with:
47+
globs: |
48+
**/*.md
49+
50+
51+
- name: B2) Lint YAML (uses .yamllint.yml)
52+
# WHY: Validate YAML correctness using repo-defined yamllint.yml rules.
53+
# OBS: Ensures GitHub Actions YAML and other YAML files remain valid.
54+
uses: ibiqlik/action-yamllint@v3
55+
with:
56+
config_file: .yamllint.yml # WHY: Use repo policy; avoid drifting defaults.
57+
file_or_dir: . # WHY: Lint YAML across the repository.
58+
no_warnings: true # WHY: CI output should be actionable.
59+
60+
- name: B3) Detect CITATION.cff
61+
# WHY: Verify presence of CITATION.cff for conditional validation.
62+
id: detect_citation
63+
shell: bash
64+
run: |
65+
if [ -f "CITATION.cff" ]; then
66+
echo "present=true" >> "$GITHUB_OUTPUT"
67+
else
68+
echo "present=false" >> "$GITHUB_OUTPUT"
69+
fi
70+
71+
- name: B4) Validate CITATION.cff (if present)
72+
# WHY: Ensure CITATION.cff is well-formed without making it mandatory.
73+
if: ${{ steps.detect_citation.outputs.present == 'true' }}
74+
uses: dieghernan/cff-validator@v4
75+
with:
76+
citation-path: CITATION.cff # WHY: Be explicit about the file validated.

.github/workflows/links.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ jobs:
2727
pull-requests: write
2828

2929
steps:
30-
- name: 1) Checkout repository code
31-
uses: actions/checkout@v6 # OBS: v6 current as of Dec 2025
30+
- name: A1) Checkout repository code
31+
uses: actions/checkout@v6
3232

3333
- name: 2) Check links with Lychee
3434
uses: lycheeverse/lychee-action@v2

.gitignore

Lines changed: 101 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,109 @@
1-
# REQ.UNIVERSAL: Spec repositories MUST ignore editor, OS, and transient artifacts.
2-
# WHY: Prevent accidental commits of local or generated noise.
3-
# ALT: Expand only if the repository adds tooling that generates artifacts.
1+
# ============================================================
2+
# .gitignore (Keep unnecessary files out of the repository)
3+
# ============================================================
44

5-
# === OS artifacts ===
6-
.DS_Store
7-
Thumbs.db
5+
# REQ.UNIVERSAL: All professional GitHub project repositories MUST include .gitignore.
6+
# WHY: Prevent committing generated artifacts, local state, secrets, and OS-specific files.
7+
# ALT: Repository may customize ignores, but MUST preserve universal safety rules.
8+
# CUSTOM: Logs may be temporarily committed for verification; keep ignored for
9+
# production use and security.
810

9-
# === Editor artifacts ===
10-
*.swp
11+
12+
# === Universal (all projects, all languages) ===
13+
14+
# WHY: Logs are useful during debugging and verification.
15+
# ALT: Comment if logs must be inspected or validated.
16+
*.log
17+
logs/
18+
PRIVATE_NOTES.md
19+
PRIVATE-NOTES.md
20+
21+
# WHY: Temporary and swap files are machine-local noise and create meaningless diffs.
1122
*.swo
12-
*.bak
23+
*.swp
24+
*.tmp
1325
*~
26+
27+
# === VS Code (special case) ===
28+
29+
# WHY: Ignore editor state while allowing a shared baseline configuration.
1430
.vscode/
31+
32+
# WHY: Commit recommended extensions (opt-in) for consistent development experience.
33+
# NOTE: Share recommendations, not personal editor styles or preferences.
34+
!.vscode/extensions.json
35+
!.vscode/settings.json
36+
37+
# === OS-specific files (macOS / Windows) ===
38+
39+
# WHY: OS-generated metadata files should never be tracked.
40+
.AppleDouble
41+
.DS_Store
42+
.LSOverride
43+
Icon\r
44+
._*
45+
.Spotlight-V100/
46+
.Trashes
47+
desktop.ini
48+
ehthumbs.db
49+
Thumbs.db
50+
51+
# === Editors / IDEs (non-VS Code) ===
52+
53+
# WHY: IDE metadata is machine-local and should not be tracked.
54+
*.code-workspace
1555
.idea/
1656

17-
# === Temporary files ===
18-
.tmp/
19-
.temp/
57+
# === Environment variables and secrets ===
2058

21-
# === LaTeX build artifacts (if SPEC is rendered locally) ===
22-
*.aux
23-
*.bbl
24-
*.blg
25-
*.log
26-
*.out
27-
*.toc
28-
*.fls
29-
*.fdb_latexmk
30-
31-
# === PDF previews ===
32-
*.pdf
33-
34-
# === Proof assistant artifacts (defensive, non-binding) ===
35-
*.olean
36-
*.ilean
37-
*.trace
38-
.lake/
59+
# WHY: Never commit credentials or environment-specific configuration.
60+
.env
61+
.env.*
62+
*.env
63+
64+
# === Documentation build output ===
65+
66+
# WHY: Static site build output is generated.
67+
site/
68+
69+
# === Generic caches ===
70+
71+
# WHY: Generic caches are machine-local and should not be tracked.
72+
.cache/
73+
74+
# === Python ===
75+
76+
# WHY: Virtual environments are machine-local and reproducible.
77+
.venv/
78+
venv/
79+
80+
# REQ.PYTHON: Do NOT git ignore uv.lock. Commit it and use it in CI/CD pipelines.
81+
82+
# WHY: Python version when using scm matches any repo depth and any package name
83+
**/src/**/_version.py
84+
85+
# WHY: Python bytecode is generated.
86+
__pycache__/
87+
*.pyc
88+
*.pyd
89+
*.pyo
90+
91+
# WHY: Build and packaging artifacts are generated.
92+
.eggs/
93+
build/
94+
dist/
95+
*.egg
96+
*.egg-info/
97+
*.whl
98+
99+
# WHY: Tooling caches should not be tracked.
100+
.coverage
101+
.coverage.*
102+
.mypy_cache/
103+
.pytest_cache/
104+
.pytype/
105+
.ruff_cache/
106+
.tox/
107+
108+
# WHY: Notebook checkpoint state is generated.
109+
.ipynb_checkpoints/

.markdownlint.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# ============================================================
2+
# .markdownlint.yml (Markdown linting configuration)
3+
# ============================================================
4+
5+
# WHY-FILE: Markdown lint rules for Markdown source repos such as specs.
6+
# WHY: Avoid enforcing line length; specs include long identifiers and URLs.
7+
# OBS: MD013 fails on identifier tables and unbreakable tokens (e.g., requirement IDs).
8+
# WHY: Allow inline HTML; specs may use semantic markers in normative text.
9+
10+
MD013: false # Line length
11+
MD033: false # Inline HTML

.yamllint.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# ============================================================
2+
# .yamllint.yml (YAML linting configuration)
3+
# ============================================================
4+
15
# WHY: Enforce YAML correctness without arbitrary style constraints.
26
# OBS: Default yamllint rules conflict with GitHub Actions YAML.
37
# Line length, document start, truthy, and comment spacing are intentionally disabled.

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2025 Denise M. Case
3+
Copyright (c) 2025-2026 Denise M. Case
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

0 commit comments

Comments
 (0)