se-admin 0.2.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.
Files changed (159) hide show
  1. se_admin-0.2.0/.gitignore +126 -0
  2. se_admin-0.2.0/LICENSE +21 -0
  3. se_admin-0.2.0/PKG-INFO +258 -0
  4. se_admin-0.2.0/README.md +233 -0
  5. se_admin-0.2.0/data/checks.toml +0 -0
  6. se_admin-0.2.0/data/migrations.toml +0 -0
  7. se_admin-0.2.0/data/profiles.toml +91 -0
  8. se_admin-0.2.0/data/repos.toml +89 -0
  9. se_admin-0.2.0/data/tasks/add_zensical.toml +40 -0
  10. se_admin-0.2.0/data/tasks/add_zensical_config.toml +20 -0
  11. se_admin-0.2.0/data/tasks/add_zensical_dependencies.toml +12 -0
  12. se_admin-0.2.0/data/tasks/add_zensical_workflows_replace.toml +27 -0
  13. se_admin-0.2.0/data/tasks/normalize_core_files.toml +36 -0
  14. se_admin-0.2.0/data/tasks/normalize_lychee_location.toml +18 -0
  15. se_admin-0.2.0/data/tasks/pull_repo_sets.toml +17 -0
  16. se_admin-0.2.0/data/tasks/remove_mkdocs_config.toml +13 -0
  17. se_admin-0.2.0/data/tasks/remove_mkdocs_dependencies.toml +15 -0
  18. se_admin-0.2.0/data/tasks/replace_mkdocs_with_zensical.toml +31 -0
  19. se_admin-0.2.0/data/tasks/sync_dependabot_and_pull.toml +30 -0
  20. se_admin-0.2.0/docs/en/commands.md +65 -0
  21. se_admin-0.2.0/docs/en/concepts.md +74 -0
  22. se_admin-0.2.0/docs/en/configuration.md +107 -0
  23. se_admin-0.2.0/docs/en/examples.md +100 -0
  24. se_admin-0.2.0/docs/en/index.md +10 -0
  25. se_admin-0.2.0/docs/index.md +10 -0
  26. se_admin-0.2.0/pyproject.toml +199 -0
  27. se_admin-0.2.0/src/se_admin/__init__.py +1 -0
  28. se_admin-0.2.0/src/se_admin/__main__.py +6 -0
  29. se_admin-0.2.0/src/se_admin/_version.py +24 -0
  30. se_admin-0.2.0/src/se_admin/actions/__init__.py +35 -0
  31. se_admin-0.2.0/src/se_admin/actions/copy_file.py +57 -0
  32. se_admin-0.2.0/src/se_admin/actions/dependabot.py +58 -0
  33. se_admin-0.2.0/src/se_admin/actions/git_pull.py +18 -0
  34. se_admin-0.2.0/src/se_admin/actions/patch_markdown.py +108 -0
  35. se_admin-0.2.0/src/se_admin/actions/patch_toml.py +149 -0
  36. se_admin-0.2.0/src/se_admin/actions/replace_file.py +93 -0
  37. se_admin-0.2.0/src/se_admin/actions/run_command.py +38 -0
  38. se_admin-0.2.0/src/se_admin/app.py +374 -0
  39. se_admin-0.2.0/src/se_admin/checks/__init__.py +83 -0
  40. se_admin-0.2.0/src/se_admin/checks/exact_files.py +72 -0
  41. se_admin-0.2.0/src/se_admin/checks/python_version.py +94 -0
  42. se_admin-0.2.0/src/se_admin/checks/reference_files.py +63 -0
  43. se_admin-0.2.0/src/se_admin/checks/required_paths.py +29 -0
  44. se_admin-0.2.0/src/se_admin/checks/tags.py +54 -0
  45. se_admin-0.2.0/src/se_admin/checks/workflows.py +29 -0
  46. se_admin-0.2.0/src/se_admin/cli.py +89 -0
  47. se_admin-0.2.0/src/se_admin/domain/__init__.py +1 -0
  48. se_admin-0.2.0/src/se_admin/domain/capabilities.py +20 -0
  49. se_admin-0.2.0/src/se_admin/domain/findings.py +34 -0
  50. se_admin-0.2.0/src/se_admin/domain/operations.py +194 -0
  51. se_admin-0.2.0/src/se_admin/domain/profiles.py +92 -0
  52. se_admin-0.2.0/src/se_admin/domain/repos.py +77 -0
  53. se_admin-0.2.0/src/se_admin/domain/selectors.py +38 -0
  54. se_admin-0.2.0/src/se_admin/domain/tasks.py +72 -0
  55. se_admin-0.2.0/src/se_admin/migrations/__init__.py +17 -0
  56. se_admin-0.2.0/src/se_admin/migrations/python_package_profile.py +62 -0
  57. se_admin-0.2.0/src/se_admin/migrations/python_tooling_profile.py +54 -0
  58. se_admin-0.2.0/src/se_admin/migrations/python_version.py +65 -0
  59. se_admin-0.2.0/src/se_admin/migrations/replace_mkdocs_with_zensical.py +108 -0
  60. se_admin-0.2.0/src/se_admin/migrations/workflow_names.py +82 -0
  61. se_admin-0.2.0/src/se_admin/observe/__init__.py +91 -0
  62. se_admin-0.2.0/src/se_admin/observe/filesystem.py +41 -0
  63. se_admin-0.2.0/src/se_admin/observe/git.py +74 -0
  64. se_admin-0.2.0/src/se_admin/observe/github.py +80 -0
  65. se_admin-0.2.0/src/se_admin/observe/pyproject.py +52 -0
  66. se_admin-0.2.0/src/se_admin/observe/toml_files.py +54 -0
  67. se_admin-0.2.0/src/se_admin/observe/workflows.py +43 -0
  68. se_admin-0.2.0/src/se_admin/py.typed +0 -0
  69. se_admin-0.2.0/src/se_admin/reports/__init__.py +13 -0
  70. se_admin-0.2.0/src/se_admin/reports/json_report.py +62 -0
  71. se_admin-0.2.0/src/se_admin/reports/markdown.py +78 -0
  72. se_admin-0.2.0/src/se_admin/reports/summary.py +56 -0
  73. se_admin-0.2.0/src/se_admin/utils/__init__.py +1 -0
  74. se_admin-0.2.0/src/se_admin/utils/paths.py +41 -0
  75. se_admin-0.2.0/src/se_admin/utils/subprocesses.py +23 -0
  76. se_admin-0.2.0/src/se_admin/utils/text.py +55 -0
  77. se_admin-0.2.0/tests/fixtures/streaming-admin/data/profiles.toml +46 -0
  78. se_admin-0.2.0/tests/fixtures/streaming-admin/data/repos.toml +60 -0
  79. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/add_zensical.toml +40 -0
  80. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/add_zensical_config.toml +20 -0
  81. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/add_zensical_dependencies.toml +12 -0
  82. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/add_zensical_workflows_replace.toml +27 -0
  83. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/normalize_core_files.toml +36 -0
  84. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/normalize_lychee_location.toml +18 -0
  85. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/pull_repo_sets.toml +17 -0
  86. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/remove_mkdocs_config.toml +13 -0
  87. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/remove_mkdocs_dependencies.toml +15 -0
  88. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/replace_mkdocs_with_zensical.toml +31 -0
  89. se_admin-0.2.0/tests/fixtures/streaming-admin/data/tasks/sync_dependabot_and_pull.toml +30 -0
  90. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-00-admin/.github/workflows/ci-python-zensical.yml +0 -0
  91. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-00-admin/.github/workflows/deploy-zensical.yml +0 -0
  92. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-00-admin/.github/workflows/links.yml +0 -0
  93. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-00-admin/.markdownlint.yml +0 -0
  94. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-00-admin/LICENSE +0 -0
  95. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-00-admin/README.md +3 -0
  96. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-00-admin/pyproject.toml +8 -0
  97. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-00-admin/zensical.toml +3 -0
  98. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-01-foundations/.github/workflows/ci-python-zensical.yml +0 -0
  99. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-01-foundations/.github/workflows/deploy-zensical.yml +0 -0
  100. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-01-foundations/.github/workflows/links.yml +0 -0
  101. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-01-foundations/.markdownlint.yml +0 -0
  102. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-01-foundations/LICENSE +0 -0
  103. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-01-foundations/README.md +3 -0
  104. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-01-foundations/pyproject.toml +8 -0
  105. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-01-foundations/zensical.toml +3 -0
  106. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-02-kafka/.github/workflows/ci-python-zensical.yml +0 -0
  107. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-02-kafka/.github/workflows/deploy-zensical.yml +0 -0
  108. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-02-kafka/.github/workflows/links.yml +0 -0
  109. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-02-kafka/.markdownlint.yml +0 -0
  110. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-02-kafka/LICENSE +0 -0
  111. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-02-kafka/README.md +3 -0
  112. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-02-kafka/pyproject.toml +8 -0
  113. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-02-kafka/zensical.toml +3 -0
  114. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-03-data/.github/workflows/ci-python-zensical.yml +0 -0
  115. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-03-data/.github/workflows/deploy-zensical.yml +0 -0
  116. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-03-data/.github/workflows/links.yml +0 -0
  117. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-03-data/.markdownlint.yml +0 -0
  118. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-03-data/LICENSE +0 -0
  119. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-03-data/README.md +3 -0
  120. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-03-data/pyproject.toml +8 -0
  121. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-03-data/zensical.toml +3 -0
  122. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-04-visualization/.github/workflows/ci-python-zensical.yml +0 -0
  123. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-04-visualization/.github/workflows/deploy-zensical.yml +0 -0
  124. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-04-visualization/.github/workflows/links.yml +0 -0
  125. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-04-visualization/.markdownlint.yml +0 -0
  126. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-04-visualization/LICENSE +0 -0
  127. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-04-visualization/README.md +3 -0
  128. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-04-visualization/pyproject.toml +8 -0
  129. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-04-visualization/zensical.toml +3 -0
  130. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-05-storage/.github/workflows/ci-python-zensical.yml +0 -0
  131. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-05-storage/.github/workflows/deploy-zensical.yml +0 -0
  132. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-05-storage/.github/workflows/links.yml +0 -0
  133. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-05-storage/.markdownlint.yml +0 -0
  134. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-05-storage/LICENSE +0 -0
  135. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-05-storage/README.md +3 -0
  136. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-05-storage/pyproject.toml +8 -0
  137. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-05-storage/zensical.toml +3 -0
  138. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-06-scenarios/.github/workflows/ci-python-zensical.yml +0 -0
  139. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-06-scenarios/.github/workflows/deploy-zensical.yml +0 -0
  140. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-06-scenarios/.github/workflows/links.yml +0 -0
  141. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-06-scenarios/.markdownlint.yml +0 -0
  142. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-06-scenarios/LICENSE +0 -0
  143. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-06-scenarios/README.md +3 -0
  144. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-06-scenarios/pyproject.toml +8 -0
  145. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-06-scenarios/zensical.toml +3 -0
  146. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-07-applied/.github/workflows/ci-python-zensical.yml +0 -0
  147. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-07-applied/.github/workflows/deploy-zensical.yml +0 -0
  148. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-07-applied/.github/workflows/links.yml +0 -0
  149. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-07-applied/.markdownlint.yml +0 -0
  150. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-07-applied/LICENSE +0 -0
  151. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-07-applied/README.md +3 -0
  152. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-07-applied/pyproject.toml +8 -0
  153. se_admin-0.2.0/tests/fixtures/streaming-admin/workspace/streaming-07-applied/zensical.toml +3 -0
  154. se_admin-0.2.0/tests/test_cli.py +29 -0
  155. se_admin-0.2.0/tests/test_config_loader.py +186 -0
  156. se_admin-0.2.0/tests/test_profiles.py +178 -0
  157. se_admin-0.2.0/tests/test_reports.py +143 -0
  158. se_admin-0.2.0/tests/test_required_paths.py +110 -0
  159. se_admin-0.2.0/zensical.toml +45 -0
@@ -0,0 +1,126 @@
1
+ # ============================================================
2
+ # .gitignore (Keep unnecessary files out of the repository)
3
+ # ============================================================
4
+ # Updated 2026-05-06
5
+
6
+ # REQ.UNIVERSAL: All professional GitHub project repositories MUST include .gitignore.
7
+ # WHY: Prevent committing generated artifacts, local state, secrets, and OS-specific files.
8
+
9
+ # === Universal (all projects, all languages) ===
10
+
11
+ # WHY: Logs are useful during debugging and verification.
12
+ # ALT: Comment if logs must be inspected or validated.
13
+ *.log
14
+ logs/
15
+ PRIVATE_NOTES.md
16
+ PRIVATE-NOTES.md
17
+
18
+ # WHY: Temporary and swap files are machine-local noise and create meaningless diffs.
19
+ *.swo
20
+ *.swp
21
+ *.tmp
22
+ *~
23
+
24
+ # === VS Code (special case) ===
25
+
26
+ # WHY: Ignore editor state while allowing a shared baseline configuration.
27
+ .vscode/
28
+
29
+ # WHY: Commit recommended extensions (opt-in) for consistent development experience.
30
+ # NOTE: Share recommendations, not personal editor styles or preferences.
31
+ # Must reinclude directory first so Git will traverse
32
+ !.vscode/
33
+ !.vscode/extensions.json
34
+ !.vscode/settings.json
35
+
36
+ # === OS-specific files (macOS / Windows) ===
37
+
38
+ # WHY: OS-generated metadata files should never be tracked.
39
+ .AppleDouble
40
+ .DS_Store
41
+ .LSOverride
42
+ Icon\r
43
+ ._*
44
+ .Spotlight-V100/
45
+ .Trashes
46
+ desktop.ini
47
+ ehthumbs.db
48
+ Thumbs.db
49
+
50
+ # === Editors / IDEs (non-VS Code) ===
51
+
52
+ # WHY: IDE metadata is machine-local and should not be tracked.
53
+ *.code-workspace
54
+ .idea/
55
+
56
+ # === Environment variables and secrets ===
57
+
58
+ # WHY: Never commit credentials or environment-specific configuration.
59
+ .env
60
+ .env.*
61
+ *.env
62
+
63
+ # === Documentation build output ===
64
+
65
+ # WHY: Static site build output is generated.
66
+ site/
67
+
68
+ # === Generic caches ===
69
+
70
+ # WHY: Generic caches are machine-local and should not be tracked.
71
+ .cache/
72
+
73
+ # === Python ===
74
+
75
+ # WHY: Virtual environments are machine-local and reproducible.
76
+ .venv/
77
+ venv/
78
+
79
+ # REQ.PYTHON: Do NOT git ignore uv.lock. Commit it and use it in CI/CD pipelines.
80
+
81
+ # WHY: Python version when using scm matches any repo depth and any package name
82
+ **/src/**/_version.py
83
+
84
+ # WHY: Python bytecode is generated.
85
+ __pycache__/
86
+ *.pyc
87
+ *.pyd
88
+ *.pyo
89
+
90
+ # WHY: Build and packaging artifacts are generated.
91
+ .eggs/
92
+ build/
93
+ dist/
94
+ *.egg
95
+ *.egg-info/
96
+ *.whl
97
+
98
+ # WHY: Tooling caches should not be tracked.
99
+ .coverage
100
+ .coverage.*
101
+ .mypy_cache/
102
+ .pytest_cache/
103
+ .pytype/
104
+ .ruff_cache/
105
+ .tox/
106
+
107
+ # WHY: Notebook checkpoint state is generated.
108
+ .ipynb_checkpoints/
109
+
110
+ # WHY: Local test and coverage reports are generated.
111
+ htmlcov/
112
+ coverage.xml
113
+
114
+ # WHY: Nox is common in Python tooling
115
+ .nox/
116
+
117
+ # === JS / docs tooling ===
118
+
119
+ node_modules/
120
+ out/
121
+
122
+ # === Lean ===
123
+
124
+ # WHY: Lake build and dependency state is generated.
125
+ .lake/
126
+ lake-packages/
se_admin-0.2.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Structural Explainability
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,258 @@
1
+ Metadata-Version: 2.4
2
+ Name: se-admin
3
+ Version: 0.2.0
4
+ Project-URL: Homepage, https://github.com/structural-explainability/se-admin
5
+ Project-URL: Repository, https://github.com/structural-explainability/se-admin
6
+ Project-URL: Documentation, https://structural-explainability.github.io/se-admin/
7
+ Project-URL: Issues, https://github.com/structural-explainability/se-admin/issues
8
+ Project-URL: Changelog, https://github.com/structural-explainability/se-admin/blob/main/CHANGELOG.md
9
+ License-File: LICENSE
10
+ Requires-Python: >=3.15
11
+ Requires-Dist: se-manifest-schema
12
+ Requires-Dist: tomlkit
13
+ Provides-Extra: dev
14
+ Requires-Dist: build; extra == 'dev'
15
+ Requires-Dist: packaging; extra == 'dev'
16
+ Requires-Dist: pre-commit; extra == 'dev'
17
+ Requires-Dist: pyright; extra == 'dev'
18
+ Requires-Dist: pytest; extra == 'dev'
19
+ Requires-Dist: pytest-cov; extra == 'dev'
20
+ Requires-Dist: ruff; extra == 'dev'
21
+ Requires-Dist: twine; extra == 'dev'
22
+ Provides-Extra: docs
23
+ Requires-Dist: zensical==0.0.37; extra == 'docs'
24
+ Description-Content-Type: text/markdown
25
+
26
+ # se-admin
27
+
28
+ [![Docs Site](https://img.shields.io/badge/docs-site-blue?logo=github)](https://structural-explainability.github.io/se-admin/)
29
+ [![Repo](https://img.shields.io/badge/repo-GitHub-black?logo=github)](https://github.com/structural-explainability/se-admin)
30
+ [![Python 3.15+](https://img.shields.io/badge/python-3.15%2B-blue?logo=python)](./pyproject.toml)
31
+ [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](./LICENSE)
32
+
33
+ [![CI](https://github.com/structural-explainability/se-admin/actions/workflows/ci-python-zensical.yml/badge.svg?branch=main)](https://github.com/structural-explainability/se-admin/actions/workflows/ci-python-zensical.yml)
34
+ [![Docs](https://github.com/structural-explainability/se-admin/actions/workflows/deploy-zensical.yml/badge.svg?branch=main)](https://github.com/structural-explainability/se-admin/actions/workflows/deploy-zensical.yml)
35
+ [![Links](https://github.com/structural-explainability/se-admin/actions/workflows/links.yml/badge.svg?branch=main)](https://github.com/structural-explainability/se-admin/actions/workflows/links.yml)
36
+
37
+ > Structural Explainability Admin:
38
+ > administration of the SE ecosystem.
39
+
40
+ SE Admin is a data-driven system that applies composable operations
41
+ over repository surfaces
42
+ with declarative targets and selectable scope
43
+ to move repos between states.
44
+
45
+ ## Owns
46
+
47
+ - enforcement of constitution (automation)
48
+ - repository lifecycle operations
49
+ - cross-repository consistency
50
+
51
+ ## Includes
52
+
53
+ scaffolding
54
+
55
+ - repository templates
56
+
57
+ synchronization
58
+
59
+ - configuration propagation
60
+
61
+ validation orchestration
62
+
63
+ - multi-repo validation execution
64
+
65
+ workflow reuse
66
+
67
+ - shared GitHub Actions
68
+
69
+ bulk operations
70
+
71
+ - dependency upgrades
72
+ - structural updates
73
+
74
+ ## Overview
75
+
76
+ ```text
77
+ data/ = declared desired state, no logic, only declarations
78
+ observe/ = actual repo state, no decisions, only facts
79
+ checks/ = pure comparison, no side effects
80
+ actions/ = primitive mutations
81
+ migrations/ = composed actions
82
+ reports/ = human/machine output projections only
83
+ ```
84
+
85
+ ```text
86
+ domain/
87
+ repo - repository
88
+ profile = named bundle of expectations (paths, workflows, checks)
89
+ selector = how you choose repos (set, name, pattern)
90
+ finding = result of a check
91
+ ```
92
+
93
+ ```text
94
+ repos.toml = instances: which repos exist, repo sets, assigned profiles
95
+ profiles.toml = reusable traits: profile definitions
96
+ checks.toml = constraints: check definitions and canonical comparisons
97
+ migrations.toml = transformations: named migration recipes
98
+ ```
99
+
100
+ ```text
101
+ data (declared) -> observe (actual) -> checks (compare) -> actions/migrations -> reports
102
+ ```
103
+
104
+ ## Operation Requirements
105
+
106
+ Data describes operations and a small interpreter executing them
107
+
108
+ All operations must be:
109
+
110
+ - deterministic
111
+ - idempotent
112
+ - side-effect scoped
113
+
114
+ Examples:
115
+
116
+ - delete_file is OK if missing
117
+ - add_dependency is OK if already present
118
+ - replace_text is no-op if not found
119
+
120
+ ## Operation Taxonomy
121
+
122
+ ### Detection (no side effects)
123
+
124
+ - path_exists
125
+ - path_missing
126
+ - toml_key_exists
127
+ - toml_value_equals
128
+ - dependency_present
129
+ - workflow_present
130
+
131
+ ### Mutation (single responsibility)
132
+
133
+ Filesystem
134
+
135
+ - create_file
136
+ - delete_file
137
+ - copy_file
138
+ - ensure_directory
139
+ - rename_path
140
+ TOML
141
+ - toml_set_key
142
+ - toml_remove_key
143
+ - toml_add_dependency
144
+ - toml_remove_dependency
145
+ - toml_ensure_table
146
+ Workflows (still files, but special intent)
147
+ - ensure_workflow
148
+ - remove_workflow
149
+ - replace_workflow
150
+ Text
151
+ - replace_block
152
+ - insert_block
153
+ - remove_block
154
+ Process
155
+ - run_command
156
+
157
+ ## Composition
158
+
159
+ ```text
160
+ Operation =
161
+ AtomicOperation
162
+ | Sequence[Operation]
163
+ | Conditional(condition, Operation)
164
+ ```
165
+
166
+ ## Example
167
+
168
+ A tool transition is a declarative description of how to
169
+ remove one capability and establish another across all affected surfaces.
170
+
171
+ ```text
172
+ Sequence(
173
+ Conditional(detect_mkdocs, Sequence(
174
+ delete_file("mkdocs.yml"),
175
+ toml_remove_dependency("mkdocs"),
176
+ remove_workflow("deploy-mkdocs.yml")
177
+ )),
178
+
179
+ Sequence(
180
+ create_file("zensical.toml"),
181
+ toml_add_dependency(group="docs", name="zensical"),
182
+ ensure_workflow("deploy-zensical.yml"),
183
+ ensure_directory("docs")
184
+ )
185
+ )
186
+ ```
187
+
188
+ ## Command Reference
189
+
190
+ <details>
191
+ <summary>Show command reference</summary>
192
+
193
+ ### In a machine terminal
194
+
195
+ Open a machine terminal where you want the project:
196
+
197
+ ```shell
198
+ git clone https://github.com/structural-explainability/se-admin
199
+
200
+ cd se-admin
201
+ code .
202
+ ```
203
+
204
+ ### In a VS Code terminal
205
+
206
+ ```shell
207
+ # if strange errors, clean uv cache
208
+ # uv cache clean
209
+
210
+ uv self update
211
+ uv python pin 3.15
212
+ uv sync --extra dev --extra docs --upgrade
213
+
214
+ uvx pre-commit install
215
+
216
+ git add -A
217
+ uvx pre-commit run --all-files
218
+ # repeat if changes were made
219
+ git add -A
220
+ uvx pre-commit run --all-files
221
+
222
+ # run the module
223
+ uv run python -m se_admin show
224
+
225
+ # do chores
226
+ uv run python -m pyright
227
+ uv run python -m pytest
228
+ uv run python -m zensical build
229
+
230
+ # save progress
231
+ git add -A
232
+ git commit -m "update"
233
+ git push -u origin main
234
+ ```
235
+
236
+ Portability fixture checks verifying that `se-admin`
237
+ can load and operate on a non-SE repository family
238
+ using an alternate data root.
239
+
240
+ ```shell
241
+ uv run python -m se_admin --data tests/fixtures/streaming-admin/data repos
242
+ uv run python -m se_admin --data tests/fixtures/streaming-admin/data check --set modules
243
+ uv run python -m se_admin --data tests/fixtures/streaming-admin/data check --set admin
244
+ uv run python -m se_admin --data tests/fixtures/streaming-admin/data run --dry-run normalize_core_files
245
+
246
+ </details>
247
+
248
+ ## Citation
249
+
250
+ [CITATION.cff](./CITATION.cff)
251
+
252
+ ## License
253
+
254
+ [LICENSE](./LICENSE)
255
+
256
+ ## Manifest
257
+
258
+ [SE_MANIFEST.toml](./SE_MANIFEST.toml)
@@ -0,0 +1,233 @@
1
+ # se-admin
2
+
3
+ [![Docs Site](https://img.shields.io/badge/docs-site-blue?logo=github)](https://structural-explainability.github.io/se-admin/)
4
+ [![Repo](https://img.shields.io/badge/repo-GitHub-black?logo=github)](https://github.com/structural-explainability/se-admin)
5
+ [![Python 3.15+](https://img.shields.io/badge/python-3.15%2B-blue?logo=python)](./pyproject.toml)
6
+ [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](./LICENSE)
7
+
8
+ [![CI](https://github.com/structural-explainability/se-admin/actions/workflows/ci-python-zensical.yml/badge.svg?branch=main)](https://github.com/structural-explainability/se-admin/actions/workflows/ci-python-zensical.yml)
9
+ [![Docs](https://github.com/structural-explainability/se-admin/actions/workflows/deploy-zensical.yml/badge.svg?branch=main)](https://github.com/structural-explainability/se-admin/actions/workflows/deploy-zensical.yml)
10
+ [![Links](https://github.com/structural-explainability/se-admin/actions/workflows/links.yml/badge.svg?branch=main)](https://github.com/structural-explainability/se-admin/actions/workflows/links.yml)
11
+
12
+ > Structural Explainability Admin:
13
+ > administration of the SE ecosystem.
14
+
15
+ SE Admin is a data-driven system that applies composable operations
16
+ over repository surfaces
17
+ with declarative targets and selectable scope
18
+ to move repos between states.
19
+
20
+ ## Owns
21
+
22
+ - enforcement of constitution (automation)
23
+ - repository lifecycle operations
24
+ - cross-repository consistency
25
+
26
+ ## Includes
27
+
28
+ scaffolding
29
+
30
+ - repository templates
31
+
32
+ synchronization
33
+
34
+ - configuration propagation
35
+
36
+ validation orchestration
37
+
38
+ - multi-repo validation execution
39
+
40
+ workflow reuse
41
+
42
+ - shared GitHub Actions
43
+
44
+ bulk operations
45
+
46
+ - dependency upgrades
47
+ - structural updates
48
+
49
+ ## Overview
50
+
51
+ ```text
52
+ data/ = declared desired state, no logic, only declarations
53
+ observe/ = actual repo state, no decisions, only facts
54
+ checks/ = pure comparison, no side effects
55
+ actions/ = primitive mutations
56
+ migrations/ = composed actions
57
+ reports/ = human/machine output projections only
58
+ ```
59
+
60
+ ```text
61
+ domain/
62
+ repo - repository
63
+ profile = named bundle of expectations (paths, workflows, checks)
64
+ selector = how you choose repos (set, name, pattern)
65
+ finding = result of a check
66
+ ```
67
+
68
+ ```text
69
+ repos.toml = instances: which repos exist, repo sets, assigned profiles
70
+ profiles.toml = reusable traits: profile definitions
71
+ checks.toml = constraints: check definitions and canonical comparisons
72
+ migrations.toml = transformations: named migration recipes
73
+ ```
74
+
75
+ ```text
76
+ data (declared) -> observe (actual) -> checks (compare) -> actions/migrations -> reports
77
+ ```
78
+
79
+ ## Operation Requirements
80
+
81
+ Data describes operations and a small interpreter executing them
82
+
83
+ All operations must be:
84
+
85
+ - deterministic
86
+ - idempotent
87
+ - side-effect scoped
88
+
89
+ Examples:
90
+
91
+ - delete_file is OK if missing
92
+ - add_dependency is OK if already present
93
+ - replace_text is no-op if not found
94
+
95
+ ## Operation Taxonomy
96
+
97
+ ### Detection (no side effects)
98
+
99
+ - path_exists
100
+ - path_missing
101
+ - toml_key_exists
102
+ - toml_value_equals
103
+ - dependency_present
104
+ - workflow_present
105
+
106
+ ### Mutation (single responsibility)
107
+
108
+ Filesystem
109
+
110
+ - create_file
111
+ - delete_file
112
+ - copy_file
113
+ - ensure_directory
114
+ - rename_path
115
+ TOML
116
+ - toml_set_key
117
+ - toml_remove_key
118
+ - toml_add_dependency
119
+ - toml_remove_dependency
120
+ - toml_ensure_table
121
+ Workflows (still files, but special intent)
122
+ - ensure_workflow
123
+ - remove_workflow
124
+ - replace_workflow
125
+ Text
126
+ - replace_block
127
+ - insert_block
128
+ - remove_block
129
+ Process
130
+ - run_command
131
+
132
+ ## Composition
133
+
134
+ ```text
135
+ Operation =
136
+ AtomicOperation
137
+ | Sequence[Operation]
138
+ | Conditional(condition, Operation)
139
+ ```
140
+
141
+ ## Example
142
+
143
+ A tool transition is a declarative description of how to
144
+ remove one capability and establish another across all affected surfaces.
145
+
146
+ ```text
147
+ Sequence(
148
+ Conditional(detect_mkdocs, Sequence(
149
+ delete_file("mkdocs.yml"),
150
+ toml_remove_dependency("mkdocs"),
151
+ remove_workflow("deploy-mkdocs.yml")
152
+ )),
153
+
154
+ Sequence(
155
+ create_file("zensical.toml"),
156
+ toml_add_dependency(group="docs", name="zensical"),
157
+ ensure_workflow("deploy-zensical.yml"),
158
+ ensure_directory("docs")
159
+ )
160
+ )
161
+ ```
162
+
163
+ ## Command Reference
164
+
165
+ <details>
166
+ <summary>Show command reference</summary>
167
+
168
+ ### In a machine terminal
169
+
170
+ Open a machine terminal where you want the project:
171
+
172
+ ```shell
173
+ git clone https://github.com/structural-explainability/se-admin
174
+
175
+ cd se-admin
176
+ code .
177
+ ```
178
+
179
+ ### In a VS Code terminal
180
+
181
+ ```shell
182
+ # if strange errors, clean uv cache
183
+ # uv cache clean
184
+
185
+ uv self update
186
+ uv python pin 3.15
187
+ uv sync --extra dev --extra docs --upgrade
188
+
189
+ uvx pre-commit install
190
+
191
+ git add -A
192
+ uvx pre-commit run --all-files
193
+ # repeat if changes were made
194
+ git add -A
195
+ uvx pre-commit run --all-files
196
+
197
+ # run the module
198
+ uv run python -m se_admin show
199
+
200
+ # do chores
201
+ uv run python -m pyright
202
+ uv run python -m pytest
203
+ uv run python -m zensical build
204
+
205
+ # save progress
206
+ git add -A
207
+ git commit -m "update"
208
+ git push -u origin main
209
+ ```
210
+
211
+ Portability fixture checks verifying that `se-admin`
212
+ can load and operate on a non-SE repository family
213
+ using an alternate data root.
214
+
215
+ ```shell
216
+ uv run python -m se_admin --data tests/fixtures/streaming-admin/data repos
217
+ uv run python -m se_admin --data tests/fixtures/streaming-admin/data check --set modules
218
+ uv run python -m se_admin --data tests/fixtures/streaming-admin/data check --set admin
219
+ uv run python -m se_admin --data tests/fixtures/streaming-admin/data run --dry-run normalize_core_files
220
+
221
+ </details>
222
+
223
+ ## Citation
224
+
225
+ [CITATION.cff](./CITATION.cff)
226
+
227
+ ## License
228
+
229
+ [LICENSE](./LICENSE)
230
+
231
+ ## Manifest
232
+
233
+ [SE_MANIFEST.toml](./SE_MANIFEST.toml)
File without changes
File without changes