reactive-research 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- reactive_research-0.1.0/.annotations/annotations.md +10 -0
- reactive_research-0.1.0/.editorconfig +197 -0
- reactive_research-0.1.0/.gitattributes +209 -0
- reactive_research-0.1.0/.github/.yamllint.yml +31 -0
- reactive_research-0.1.0/.github/dependabot.yml +47 -0
- reactive_research-0.1.0/.github/lychee.toml +88 -0
- reactive_research-0.1.0/.github/workflows/ci-python-zensical.yml +152 -0
- reactive_research-0.1.0/.github/workflows/deploy-zensical.yml +124 -0
- reactive_research-0.1.0/.github/workflows/links.yml +61 -0
- reactive_research-0.1.0/.github/workflows/pre-release.yml +123 -0
- reactive_research-0.1.0/.github/workflows/release-pypi.yml +111 -0
- reactive_research-0.1.0/.gitignore +308 -0
- reactive_research-0.1.0/.markdownlint-cli2.yaml +80 -0
- reactive_research-0.1.0/.markdownlint.json +10 -0
- reactive_research-0.1.0/.pre-commit-config.yaml +119 -0
- reactive_research-0.1.0/.vscode/ABOUT_THIS_FOLDER.md +38 -0
- reactive_research-0.1.0/.vscode/extensions.json +90 -0
- reactive_research-0.1.0/.vscode/settings.json +50 -0
- reactive_research-0.1.0/AI_USE.md +13 -0
- reactive_research-0.1.0/CHANGELOG.md +179 -0
- reactive_research-0.1.0/CITATION.cff +31 -0
- reactive_research-0.1.0/LICENSE +21 -0
- reactive_research-0.1.0/PKG-INFO +129 -0
- reactive_research-0.1.0/README.md +103 -0
- reactive_research-0.1.0/SE_MANIFEST.toml +83 -0
- reactive_research-0.1.0/docs/en/api.md +284 -0
- reactive_research-0.1.0/docs/en/index.md +177 -0
- reactive_research-0.1.0/docs/index.md +3 -0
- reactive_research-0.1.0/pyproject.toml +162 -0
- reactive_research-0.1.0/shape.ps1 +91 -0
- reactive_research-0.1.0/sit.ps1 +71 -0
- reactive_research-0.1.0/src/reactive_research/__init__.py +1 -0
- reactive_research-0.1.0/src/reactive_research/_version.py +24 -0
- reactive_research-0.1.0/src/reactive_research/cli.py +127 -0
- reactive_research-0.1.0/src/reactive_research/commands/__init__.py +1 -0
- reactive_research-0.1.0/src/reactive_research/commands/common.py +93 -0
- reactive_research-0.1.0/src/reactive_research/commands/extract.py +47 -0
- reactive_research-0.1.0/src/reactive_research/commands/graph.py +56 -0
- reactive_research-0.1.0/src/reactive_research/commands/impact.py +80 -0
- reactive_research-0.1.0/src/reactive_research/commands/inspect.py +48 -0
- reactive_research-0.1.0/src/reactive_research/commands/resolve.py +66 -0
- reactive_research-0.1.0/src/reactive_research/commands/snapshot.py +51 -0
- reactive_research-0.1.0/src/reactive_research/commands/validate.py +48 -0
- reactive_research-0.1.0/src/reactive_research/extract.py +285 -0
- reactive_research-0.1.0/src/reactive_research/graph.py +32 -0
- reactive_research-0.1.0/src/reactive_research/identifiers.py +42 -0
- reactive_research-0.1.0/src/reactive_research/impact.py +37 -0
- reactive_research-0.1.0/src/reactive_research/inspect.py +32 -0
- reactive_research-0.1.0/src/reactive_research/models.py +106 -0
- reactive_research-0.1.0/src/reactive_research/py.typed +0 -0
- reactive_research-0.1.0/src/reactive_research/repository.py +86 -0
- reactive_research-0.1.0/src/reactive_research/resolve.py +30 -0
- reactive_research-0.1.0/src/reactive_research/snapshot.py +32 -0
- reactive_research-0.1.0/src/reactive_research/validate.py +24 -0
- reactive_research-0.1.0/tests/__init__.py +1 -0
- reactive_research-0.1.0/tests/test_cli.py +26 -0
- reactive_research-0.1.0/tests/test_extract.py +74 -0
- reactive_research-0.1.0/tests/test_identifiers.py +48 -0
- reactive_research-0.1.0/uv.lock +619 -0
- reactive_research-0.1.0/zensical.toml +68 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Annotations
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
WHY: This repository uses the Structural Explainability Annotation Standard
|
|
5
|
+
to document decisions, constraints, and alternatives directly alongside
|
|
6
|
+
code and configuration.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
This repository uses the annotation standard defined at:
|
|
10
|
+
<https://github.com/structural-explainability/.github/blob/main/ANNOTATIONS.md>
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# .editorconfig (ALL-REPOS)
|
|
3
|
+
# ============================================================
|
|
4
|
+
# Updated: 2026-09-25
|
|
5
|
+
#
|
|
6
|
+
# REQ: All professional GitHub project repositories MUST include .editorconfig.
|
|
7
|
+
# WHY: Establish a cross-editor baseline so diffs stay clean and formatting
|
|
8
|
+
# is consistent across editors and IDEs.
|
|
9
|
+
# ALT: Repository may omit .editorconfig ONLY if formatting is enforced
|
|
10
|
+
# equivalently by CI and formatter tooling.
|
|
11
|
+
# CUSTOM: Adjust indent_size defaults only if organizational standards change;
|
|
12
|
+
# keep stable across projects.
|
|
13
|
+
# EditorConfig: https://editorconfig.org
|
|
14
|
+
|
|
15
|
+
root = true
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# === Core defaults ===
|
|
19
|
+
|
|
20
|
+
[*]
|
|
21
|
+
# WHY: Normalize line endings and encoding across Windows, macOS, and Linux.
|
|
22
|
+
charset = utf-8
|
|
23
|
+
end_of_line = lf
|
|
24
|
+
|
|
25
|
+
# WHY: Default to 2 spaces for configs and markup; language-specific overrides follow.
|
|
26
|
+
indent_size = 2
|
|
27
|
+
indent_style = space
|
|
28
|
+
|
|
29
|
+
# WHY: Newline at EOF avoids noisy diffs and tool warnings.
|
|
30
|
+
insert_final_newline = true
|
|
31
|
+
|
|
32
|
+
# WHY: Remove accidental whitespace noise in diffs.
|
|
33
|
+
trim_trailing_whitespace = true
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# === Named root and metadata files ===
|
|
37
|
+
|
|
38
|
+
[CITATION.cff]
|
|
39
|
+
# WHY: Citation tooling expects stable YAML formatting.
|
|
40
|
+
indent_size = 2
|
|
41
|
+
indent_style = space
|
|
42
|
+
|
|
43
|
+
[CODEOWNERS]
|
|
44
|
+
# WHY: CODEOWNERS is a structured text file; keep formatting simple and stable.
|
|
45
|
+
indent_size = 2
|
|
46
|
+
indent_style = space
|
|
47
|
+
|
|
48
|
+
[LICENSE]
|
|
49
|
+
# WHY: License text should remain plain, stable, and editor-neutral.
|
|
50
|
+
indent_size = 2
|
|
51
|
+
indent_style = space
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# === Build systems ===
|
|
55
|
+
|
|
56
|
+
[Makefile]
|
|
57
|
+
# WHY: Makefile recipe lines require real tab characters.
|
|
58
|
+
indent_style = tab
|
|
59
|
+
indent_size = tab
|
|
60
|
+
|
|
61
|
+
[*.mk]
|
|
62
|
+
# WHY: Makefile includes may contain recipes and should preserve real tabs.
|
|
63
|
+
indent_style = tab
|
|
64
|
+
indent_size = tab
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# === Markup and documentation ===
|
|
68
|
+
|
|
69
|
+
[*.md]
|
|
70
|
+
# WHY: Keep Markdown clean; use explicit <br> for hard line breaks.
|
|
71
|
+
indent_size = 2
|
|
72
|
+
trim_trailing_whitespace = true
|
|
73
|
+
|
|
74
|
+
[*.qmd]
|
|
75
|
+
# WHY: Quarto Markdown follows Markdown-style formatting.
|
|
76
|
+
indent_size = 2
|
|
77
|
+
indent_style = space
|
|
78
|
+
|
|
79
|
+
[*.rst]
|
|
80
|
+
# WHY: reStructuredText documentation benefits from stable 2-space indentation.
|
|
81
|
+
indent_size = 2
|
|
82
|
+
indent_style = space
|
|
83
|
+
|
|
84
|
+
[*.{bib,cls,sty,tex,typ}]
|
|
85
|
+
# WHY: LaTeX, BibTeX, and Typst source use a stable 2-space convention.
|
|
86
|
+
indent_size = 2
|
|
87
|
+
indent_style = space
|
|
88
|
+
|
|
89
|
+
[*.{css,html,xml}]
|
|
90
|
+
# WHY: Web and XML markup convention is 2 spaces.
|
|
91
|
+
indent_size = 2
|
|
92
|
+
indent_style = space
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
# === Configuration and structured text ===
|
|
96
|
+
|
|
97
|
+
[*.env]
|
|
98
|
+
# WHY: Environment templates should remain simple line-oriented text.
|
|
99
|
+
indent_size = 2
|
|
100
|
+
indent_style = space
|
|
101
|
+
|
|
102
|
+
[*.{cfg,ini}]
|
|
103
|
+
# WHY: INI-style configuration convention is 2 spaces.
|
|
104
|
+
indent_size = 2
|
|
105
|
+
indent_style = space
|
|
106
|
+
|
|
107
|
+
[*.{json,jsonc,jsonl,ndjson}]
|
|
108
|
+
# WHY: JSON tooling typically expects 2 spaces.
|
|
109
|
+
indent_size = 2
|
|
110
|
+
indent_style = space
|
|
111
|
+
|
|
112
|
+
[*.toml]
|
|
113
|
+
# WHY: TOML often follows 4-space indentation in many projects.
|
|
114
|
+
indent_size = 4
|
|
115
|
+
indent_style = space
|
|
116
|
+
|
|
117
|
+
[*.{yaml,yml}]
|
|
118
|
+
# WHY: YAML convention is 2 spaces.
|
|
119
|
+
indent_size = 2
|
|
120
|
+
indent_style = space
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# === Programming languages and scripts ===
|
|
124
|
+
|
|
125
|
+
[*.{bat,cmd}]
|
|
126
|
+
# WHY: Windows batch and command scripts use a simple 2-space shared baseline.
|
|
127
|
+
indent_size = 2
|
|
128
|
+
indent_style = space
|
|
129
|
+
|
|
130
|
+
[*.{bash,sh}]
|
|
131
|
+
# WHY: Shell script convention is 2 spaces.
|
|
132
|
+
indent_size = 2
|
|
133
|
+
indent_style = space
|
|
134
|
+
|
|
135
|
+
[*.{c,cpp,cs,go,h,hpp,java,rs}]
|
|
136
|
+
# WHY: Many C-family and systems languages commonly use 4 spaces.
|
|
137
|
+
indent_size = 4
|
|
138
|
+
indent_style = space
|
|
139
|
+
|
|
140
|
+
[*.jl]
|
|
141
|
+
# WHY: Julia convention commonly uses 4 spaces.
|
|
142
|
+
indent_size = 4
|
|
143
|
+
indent_style = space
|
|
144
|
+
|
|
145
|
+
[*.{cjs,js,jsx,mjs,ts,tsx}]
|
|
146
|
+
# WHY: JavaScript and TypeScript ecosystems commonly use 2 spaces.
|
|
147
|
+
indent_size = 2
|
|
148
|
+
indent_style = space
|
|
149
|
+
|
|
150
|
+
[*.mojo]
|
|
151
|
+
# WHY: Mojo uses Python-like syntax and commonly follows 4-space indentation.
|
|
152
|
+
indent_size = 4
|
|
153
|
+
indent_style = space
|
|
154
|
+
|
|
155
|
+
[*.ps1]
|
|
156
|
+
# WHY: PowerShell convention is 4 spaces.
|
|
157
|
+
indent_size = 4
|
|
158
|
+
indent_style = space
|
|
159
|
+
|
|
160
|
+
[*.{py,pyi}]
|
|
161
|
+
# WHY: Python convention is 4 spaces.
|
|
162
|
+
indent_size = 4
|
|
163
|
+
indent_style = space
|
|
164
|
+
|
|
165
|
+
[*.{r,R}]
|
|
166
|
+
# WHY: R convention commonly uses 2 spaces.
|
|
167
|
+
indent_size = 2
|
|
168
|
+
indent_style = space
|
|
169
|
+
|
|
170
|
+
[*.sql]
|
|
171
|
+
# WHY: SQL formatting varies, but 2 spaces is a stable shared baseline.
|
|
172
|
+
indent_size = 2
|
|
173
|
+
indent_style = space
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
# === Formal, math, and proof languages ===
|
|
177
|
+
|
|
178
|
+
[*.lean]
|
|
179
|
+
# WHY: Lean 4 convention is 2 spaces; matches Mathlib and stdlib style.
|
|
180
|
+
indent_size = 2
|
|
181
|
+
indent_style = space
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
# === Notebooks ===
|
|
185
|
+
|
|
186
|
+
[*.ipynb]
|
|
187
|
+
# WHY: Jupyter notebooks are JSON documents; keep embedded formatting stable.
|
|
188
|
+
indent_size = 2
|
|
189
|
+
indent_style = space
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
# === Text and tabular data ===
|
|
193
|
+
|
|
194
|
+
[*.{csv,dat,psv,tsv,txt,ged}]
|
|
195
|
+
# WHY: Text and tabular data should remain simple line-oriented text.
|
|
196
|
+
indent_size = 2
|
|
197
|
+
indent_style = space
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# .gitattributes (ALL-REPOS)
|
|
3
|
+
# ============================================================
|
|
4
|
+
# Updated: 2026-09-25
|
|
5
|
+
#
|
|
6
|
+
# REQ: All professional GitHub repositories SHOULD include .gitattributes.
|
|
7
|
+
# WHY: Keep line endings, diffs, merges, and file classification consistent
|
|
8
|
+
# across Windows, macOS, Linux, GitHub Actions, and other environments.
|
|
9
|
+
# CUSTOM: Add repository-specific rules when files require different handling.
|
|
10
|
+
# Git attributes: https://git-scm.com/docs/gitattributes
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# === Core defaults ===
|
|
14
|
+
|
|
15
|
+
# WHY: Auto-detect text files and normalize text to LF unless a later rule
|
|
16
|
+
# is more specific.
|
|
17
|
+
* text=auto eol=lf
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# === Named root and metadata files ===
|
|
21
|
+
|
|
22
|
+
# WHY: Important repository metadata files are text and should use LF.
|
|
23
|
+
.gitattributes text eol=lf
|
|
24
|
+
.gitignore text eol=lf
|
|
25
|
+
.editorconfig text eol=lf
|
|
26
|
+
.python-version text eol=lf
|
|
27
|
+
CODEOWNERS text eol=lf
|
|
28
|
+
LICENSE text eol=lf
|
|
29
|
+
uv.lock text eol=lf
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# === Operating-system files ===
|
|
33
|
+
|
|
34
|
+
# WHY: OS metadata files are binary/noisy and should not be normalized or diffed.
|
|
35
|
+
.DS_Store binary
|
|
36
|
+
Thumbs.db binary
|
|
37
|
+
desktop.ini binary
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === Markup and documentation ===
|
|
41
|
+
|
|
42
|
+
# WHY: Documentation, web, and math markup use LF for stable cross-platform diffs.
|
|
43
|
+
*.bib text eol=lf
|
|
44
|
+
*.cff text eol=lf
|
|
45
|
+
*.cls text eol=lf
|
|
46
|
+
*.css text eol=lf
|
|
47
|
+
*.html text eol=lf
|
|
48
|
+
*.md text eol=lf
|
|
49
|
+
*.qmd text eol=lf
|
|
50
|
+
*.rst text eol=lf
|
|
51
|
+
*.sty text eol=lf
|
|
52
|
+
*.tex text eol=lf
|
|
53
|
+
*.typ text eol=lf
|
|
54
|
+
*.xml text eol=lf
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# === Configuration and structured text ===
|
|
58
|
+
|
|
59
|
+
# WHY: Configuration and structured text files should produce stable diffs.
|
|
60
|
+
*.cfg text eol=lf
|
|
61
|
+
*.env text eol=lf
|
|
62
|
+
*.ini text eol=lf
|
|
63
|
+
*.json text eol=lf
|
|
64
|
+
*.jsonc text eol=lf
|
|
65
|
+
*.jsonl text eol=lf
|
|
66
|
+
*.ndjson text eol=lf
|
|
67
|
+
*.toml text eol=lf
|
|
68
|
+
*.txt text eol=lf
|
|
69
|
+
*.yaml text eol=lf
|
|
70
|
+
*.yml text eol=lf
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
# === Programming languages and scripts ===
|
|
74
|
+
|
|
75
|
+
# WHY: Source and script files use LF for CI, shells, containers, and tooling.
|
|
76
|
+
*.c text eol=lf
|
|
77
|
+
*.cpp text eol=lf
|
|
78
|
+
*.cs text eol=lf
|
|
79
|
+
*.go text eol=lf
|
|
80
|
+
*.h text eol=lf
|
|
81
|
+
*.hpp text eol=lf
|
|
82
|
+
*.java text eol=lf
|
|
83
|
+
*.jl text eol=lf
|
|
84
|
+
*.js text eol=lf
|
|
85
|
+
*.jsx text eol=lf
|
|
86
|
+
*.mjs text eol=lf
|
|
87
|
+
*.cjs text eol=lf
|
|
88
|
+
*.mojo text eol=lf
|
|
89
|
+
*.ps1 text eol=lf
|
|
90
|
+
*.py text eol=lf
|
|
91
|
+
*.pyi text eol=lf
|
|
92
|
+
*.r text eol=lf
|
|
93
|
+
*.R text eol=lf
|
|
94
|
+
*.rs text eol=lf
|
|
95
|
+
*.sh text eol=lf
|
|
96
|
+
*.sql text eol=lf
|
|
97
|
+
*.ts text eol=lf
|
|
98
|
+
*.tsx text eol=lf
|
|
99
|
+
|
|
100
|
+
# WHY: Windows batch scripts conventionally use CRLF and may be consumed by
|
|
101
|
+
# Windows tooling that expects Windows-style line endings.
|
|
102
|
+
*.bat text eol=crlf
|
|
103
|
+
*.cmd text eol=crlf
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
# === Formal, math, and proof languages ===
|
|
107
|
+
|
|
108
|
+
# WHY: Lean source files are text; Lean build artifacts are binary.
|
|
109
|
+
*.ilean binary
|
|
110
|
+
*.lean text eol=lf
|
|
111
|
+
*.olean binary
|
|
112
|
+
*.trace binary
|
|
113
|
+
|
|
114
|
+
# WHY: Lake build output should not be normalized if accidentally tracked.
|
|
115
|
+
.lake/** binary
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# === Notebooks ===
|
|
119
|
+
|
|
120
|
+
# WHY: Jupyter notebooks are JSON-based text files and benefit from stable
|
|
121
|
+
# cross-platform line endings.
|
|
122
|
+
*.ipynb text eol=lf
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# === Text and tabular data ===
|
|
126
|
+
|
|
127
|
+
# WHY: Small text data files benefit from readable diffs.
|
|
128
|
+
*.csv text eol=lf
|
|
129
|
+
*.dat text eol=lf
|
|
130
|
+
*.psv text eol=lf
|
|
131
|
+
*.tsv text eol=lf
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
# === Images and web binary assets ===
|
|
135
|
+
|
|
136
|
+
# WHY: Image and compiled web asset formats are binary; text diffs are not meaningful.
|
|
137
|
+
*.avif binary
|
|
138
|
+
*.bmp binary
|
|
139
|
+
*.gif binary
|
|
140
|
+
*.ico binary
|
|
141
|
+
*.jpeg binary
|
|
142
|
+
*.jpg binary
|
|
143
|
+
*.png binary
|
|
144
|
+
*.webp binary
|
|
145
|
+
*.wasm binary
|
|
146
|
+
|
|
147
|
+
# WHY: SVG is XML-based text and benefits from readable diffs.
|
|
148
|
+
*.svg text eol=lf
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
# === Databases ===
|
|
152
|
+
|
|
153
|
+
# WHY: Database files are binary; text diffs are not meaningful.
|
|
154
|
+
*.db binary
|
|
155
|
+
*.duckdb binary
|
|
156
|
+
*.sqlite binary
|
|
157
|
+
*.sqlite3 binary
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
# === Columnar and analytical data ===
|
|
161
|
+
|
|
162
|
+
# WHY: Columnar and analytical formats are binary; text diffs are not meaningful.
|
|
163
|
+
*.arrow binary
|
|
164
|
+
*.avro binary
|
|
165
|
+
*.feather binary
|
|
166
|
+
*.orc binary
|
|
167
|
+
*.parquet binary
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
# === Office, BI, PDF, and compressed artifacts ===
|
|
171
|
+
|
|
172
|
+
# WHY: Office, BI, PDF, and archive files are binary.
|
|
173
|
+
*.7z binary
|
|
174
|
+
*.bz2 binary
|
|
175
|
+
*.doc binary
|
|
176
|
+
*.docx binary
|
|
177
|
+
*.gz binary
|
|
178
|
+
*.odp binary
|
|
179
|
+
*.ods binary
|
|
180
|
+
*.odt binary
|
|
181
|
+
*.pbix binary
|
|
182
|
+
*.pbit binary
|
|
183
|
+
*.pdf binary
|
|
184
|
+
*.ppt binary
|
|
185
|
+
*.pptx binary
|
|
186
|
+
*.rar binary
|
|
187
|
+
*.tar binary
|
|
188
|
+
*.tgz binary
|
|
189
|
+
*.xls binary
|
|
190
|
+
*.xlsm binary
|
|
191
|
+
*.xlsx binary
|
|
192
|
+
*.xz binary
|
|
193
|
+
*.zip binary
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# === Logs and generated runtime output ===
|
|
197
|
+
|
|
198
|
+
# WHY: Logs are text when intentionally committed and should remain readable
|
|
199
|
+
# and diffable.
|
|
200
|
+
# NOTE: Most logs are ignored by .gitignore. Repository-specific research
|
|
201
|
+
# evidence may override text normalization with -text when exact bytes matter.
|
|
202
|
+
*.log text eol=lf
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
# === GitHub metadata and UI ===
|
|
206
|
+
|
|
207
|
+
# WHY: Exclude documentation and tests from GitHub language statistics.
|
|
208
|
+
docs/** linguist-documentation
|
|
209
|
+
tests/** linguist-documentation
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# .github/.yamllint.yml (ALL-REPOS)
|
|
3
|
+
# ============================================================
|
|
4
|
+
# Updated: 2026-09-25
|
|
5
|
+
#
|
|
6
|
+
# REQ: All repositories with YAML SHOULD lint YAML files
|
|
7
|
+
# to keep them clean and consistent.
|
|
8
|
+
# WHY: Detect malformed YAML, duplicate keys, indentation errors, trailing
|
|
9
|
+
# whitespace, and other structural problems before they reach CI/CD tooling.
|
|
10
|
+
# ALT: Style-only rules that create noise without improving correctness are
|
|
11
|
+
# intentionally relaxed for GitHub Actions and shared project configuration.
|
|
12
|
+
# yamllint: https://yamllint.readthedocs.io/
|
|
13
|
+
|
|
14
|
+
extends: default
|
|
15
|
+
|
|
16
|
+
rules:
|
|
17
|
+
# WHY: Workflow expressions, URLs, commands, and generated values can
|
|
18
|
+
# legitimately exceed an arbitrary line-length limit.
|
|
19
|
+
line-length: disable
|
|
20
|
+
|
|
21
|
+
# WHY: Repository YAML files do not require an explicit YAML document marker.
|
|
22
|
+
document-start: disable
|
|
23
|
+
|
|
24
|
+
# WHY: Comment layout is documentation style rather than YAML correctness.
|
|
25
|
+
comments: disable
|
|
26
|
+
|
|
27
|
+
# WHY: GitHub Actions uses `on` as a mapping key. Under YAML 1.1 semantics,
|
|
28
|
+
# yamllint may otherwise treat that key as a truthy value.
|
|
29
|
+
# WHY: Keep truthy-value checking for actual values while excluding keys.
|
|
30
|
+
truthy:
|
|
31
|
+
check-keys: false
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# .github/dependabot.yml (ALL-REPOS)
|
|
3
|
+
# ============================================================
|
|
4
|
+
# Updated: 2026-09-25
|
|
5
|
+
#
|
|
6
|
+
# REQ: All repositories SHOULD track GitHub Actions updates automatically.
|
|
7
|
+
# WHY: GitHub Actions are executable dependencies and may receive security,
|
|
8
|
+
# reliability, or behavior updates.
|
|
9
|
+
# OBS: Language-level dependencies (for example, Python packages) are upgraded
|
|
10
|
+
# manually using the project's package-management workflow.
|
|
11
|
+
# OBS: GitHub Actions are the only dependency class automated here.
|
|
12
|
+
# ALT: Dependabot version updates may be omitted when Actions are pinned and
|
|
13
|
+
# reviewed manually through another established maintenance process.
|
|
14
|
+
# CUSTOM: Adjust the schedule when repository activity or security posture
|
|
15
|
+
# warrants a different review cadence.
|
|
16
|
+
#
|
|
17
|
+
# NOTE: Dependabot updates GitHub Actions references used in workflow files,
|
|
18
|
+
# including Actions pinned to full commit SHAs.
|
|
19
|
+
# NOTE: When a pinned Action has a version comment on the same line, Dependabot
|
|
20
|
+
# can update that documentation along with the commit reference.
|
|
21
|
+
# NOTE: Dependabot security updates are distinct from scheduled version updates
|
|
22
|
+
# and can raise pull requests for vulnerable Actions when enabled in GitHub.
|
|
23
|
+
#
|
|
24
|
+
# Dependabot:
|
|
25
|
+
# https://docs.github.com/code-security/dependabot
|
|
26
|
+
|
|
27
|
+
version: 2
|
|
28
|
+
|
|
29
|
+
updates:
|
|
30
|
+
- package-ecosystem: "github-actions"
|
|
31
|
+
|
|
32
|
+
# WHY: "/" tells Dependabot to inspect GitHub Actions workflows for this
|
|
33
|
+
# repository.
|
|
34
|
+
directory: "/"
|
|
35
|
+
|
|
36
|
+
schedule:
|
|
37
|
+
# WHY: Weekly checks keep executable CI dependencies reasonably current
|
|
38
|
+
# without creating daily maintenance noise.
|
|
39
|
+
interval: "weekly"
|
|
40
|
+
|
|
41
|
+
commit-message:
|
|
42
|
+
# WHY: Use a recognizable dependency prefix for filtering and history.
|
|
43
|
+
prefix: "(deps)"
|
|
44
|
+
|
|
45
|
+
cooldown:
|
|
46
|
+
default-days: 7
|
|
47
|
+
# WHY: Match the 7-day cooldown used by uv exclude-newer and prek.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# .github/lychee.toml (ALL-REPOS)
|
|
3
|
+
# ============================================================
|
|
4
|
+
# Updated: 2026-09-25
|
|
5
|
+
#
|
|
6
|
+
# REQ: Repositories with documentation SHOULD check links automatically.
|
|
7
|
+
# WHY: Broken links reduce the reliability and reproducibility of documentation,
|
|
8
|
+
# references, instructions, and external resources.
|
|
9
|
+
# REQ: Link checking MUST be reliable and CI-safe.
|
|
10
|
+
# WHY: Configuration should detect genuinely broken links while minimizing
|
|
11
|
+
# false failures caused by rate limiting, authentication, and anti-bot services.
|
|
12
|
+
# OBS: Lychee configuration uses a flat structure for these options.
|
|
13
|
+
# OBS: Repository-specific path exclusions should be added only when needed.
|
|
14
|
+
# CUSTOM: Add exclusions only for links or paths that are known to be unsuitable
|
|
15
|
+
# for automated checking.
|
|
16
|
+
#
|
|
17
|
+
# Lychee: https://lychee.cli.rs/
|
|
18
|
+
|
|
19
|
+
# === Output ===
|
|
20
|
+
|
|
21
|
+
# WHY: Provide enough information to diagnose failures without excessive CI noise.
|
|
22
|
+
verbose = "info"
|
|
23
|
+
|
|
24
|
+
# WHY: Interactive progress bars are not useful in CI logs.
|
|
25
|
+
no_progress = true
|
|
26
|
+
|
|
27
|
+
# === Request reliability ===
|
|
28
|
+
|
|
29
|
+
# WHY: Limit parallel requests so CI does not overwhelm external servers.
|
|
30
|
+
max_concurrency = 6
|
|
31
|
+
|
|
32
|
+
# WHY: Retry transient network failures before declaring a link broken.
|
|
33
|
+
max_retries = 3
|
|
34
|
+
|
|
35
|
+
# WHY: Allow transient rate limits or service interruptions time to clear.
|
|
36
|
+
retry_wait_time = 8
|
|
37
|
+
|
|
38
|
+
# WHY: Prevent an unresponsive external service from blocking the workflow indefinitely.
|
|
39
|
+
timeout = 30
|
|
40
|
+
|
|
41
|
+
# === Accepted HTTP responses ===
|
|
42
|
+
|
|
43
|
+
# WHY: Accept common status codes that don't indicate broken links
|
|
44
|
+
# OBS: 403 and 429 reduce false positives
|
|
45
|
+
accept = [
|
|
46
|
+
"200..=299", # OK, partial content, etc.
|
|
47
|
+
301, # Moved permanently
|
|
48
|
+
302, # Found (temporary redirect)
|
|
49
|
+
307, # Temporary redirect
|
|
50
|
+
308, # Permanent redirect
|
|
51
|
+
403, # Forbidden (often false positive)
|
|
52
|
+
429, # Too many requests (rate limiting)
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
# === Network exclusions ===
|
|
56
|
+
|
|
57
|
+
# WHY: Localhost and loopback URLs describe local development services and are
|
|
58
|
+
# not expected to resolve from GitHub Actions.
|
|
59
|
+
exclude_loopback = true
|
|
60
|
+
|
|
61
|
+
# === URL exclusions ===
|
|
62
|
+
|
|
63
|
+
# WHY: Exclude external services known to block or interfere with automated
|
|
64
|
+
# link-checking requests.
|
|
65
|
+
# NOTE: Values are regular expressions matched against URLs.
|
|
66
|
+
exclude = [
|
|
67
|
+
"^https://shields\\.io", # WHY: Shields.io badges often have anti-bot measures that cause false positives
|
|
68
|
+
"^https://img\\.shields\\.io", # WHY: Shields.io image badges often have anti-bot measures that cause false positives
|
|
69
|
+
"^https://badges\\.github\\.com", # WHY: GitHub badges often have anti-bot measures that cause false positives
|
|
70
|
+
"^https://www\\.linkedin\\.com", # WHY: LinkedIn often blocks automated requests, causing false positives
|
|
71
|
+
"example\\.com", # WHY: Exclude example domains in documentation
|
|
72
|
+
"localhost", # WHY: Exclude local development URLs
|
|
73
|
+
"127\\.0\\.0\\.1", # WHY: Exclude local loopback
|
|
74
|
+
"\\.local", # WHY: Exclude local network domains
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
# === Path exclusions ===
|
|
78
|
+
|
|
79
|
+
# WHY: Exclude paths not relevant for link checking.
|
|
80
|
+
# NOTE: These names are used by the shared template repository and are harmless
|
|
81
|
+
# in repositories that do not contain matching paths.
|
|
82
|
+
exclude_path = [
|
|
83
|
+
"ALL",
|
|
84
|
+
"ALL-PY",
|
|
85
|
+
"ALL-PY-SRC",
|
|
86
|
+
"ALL-COURSE",
|
|
87
|
+
"ALL-COURSE-PY-SRC",
|
|
88
|
+
]
|