agentagon 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.
Files changed (266) hide show
  1. agentagon-0.1.0/.claude-plugin/plugin.json +8 -0
  2. agentagon-0.1.0/.codex-plugin/plugin.json +26 -0
  3. agentagon-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
  4. agentagon-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  5. agentagon-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +17 -0
  6. agentagon-0.1.0/.github/dependabot.yml +12 -0
  7. agentagon-0.1.0/.github/workflows/codeql.yml +31 -0
  8. agentagon-0.1.0/.github/workflows/docs.yml +95 -0
  9. agentagon-0.1.0/.github/workflows/release.yml +143 -0
  10. agentagon-0.1.0/.github/workflows/security.yml +46 -0
  11. agentagon-0.1.0/.github/workflows/tests.yml +80 -0
  12. agentagon-0.1.0/.gitignore +23 -0
  13. agentagon-0.1.0/.gitleaks.toml +13 -0
  14. agentagon-0.1.0/AGENTS.md +59 -0
  15. agentagon-0.1.0/CODE_OF_CONDUCT.md +83 -0
  16. agentagon-0.1.0/CONTRIBUTING.md +79 -0
  17. agentagon-0.1.0/LICENSE +202 -0
  18. agentagon-0.1.0/MANIFEST.in +14 -0
  19. agentagon-0.1.0/PKG-INFO +151 -0
  20. agentagon-0.1.0/README.md +124 -0
  21. agentagon-0.1.0/SECURITY.md +28 -0
  22. agentagon-0.1.0/THIRD_PARTY_NOTICES.txt +32 -0
  23. agentagon-0.1.0/contracts/v1/acquisition.json +71 -0
  24. agentagon-0.1.0/contracts/v1/evaluation-budget.json +24 -0
  25. agentagon-0.1.0/contracts/v1/evaluation-plan.json +539 -0
  26. agentagon-0.1.0/contracts/v1/evaluation-review.json +85 -0
  27. agentagon-0.1.0/contracts/v1/fix-control.json +32 -0
  28. agentagon-0.1.0/contracts/v1/fix-profile.json +423 -0
  29. agentagon-0.1.0/contracts/v1/fix-review.json +34 -0
  30. agentagon-0.1.0/contracts/v1/fix-round.json +116 -0
  31. agentagon-0.1.0/contracts/v1/fix-spec.json +339 -0
  32. agentagon-0.1.0/contracts/v1/intelligence-eval-request.json +39 -0
  33. agentagon-0.1.0/contracts/v1/intelligence-fix-request.json +30 -0
  34. agentagon-0.1.0/contracts/v1/intelligence-request.json +39 -0
  35. agentagon-0.1.0/contracts/v1/intelligence-response.json +20 -0
  36. agentagon-0.1.0/contracts/v1/issue-update.json +40 -0
  37. agentagon-0.1.0/contracts/v1/selection.json +27 -0
  38. agentagon-0.1.0/contracts/v1/submission.json +427 -0
  39. agentagon-0.1.0/contracts/v1/task-event.json +43 -0
  40. agentagon-0.1.0/contracts/v1/trace.json +313 -0
  41. agentagon-0.1.0/contracts/v1/verification.json +118 -0
  42. agentagon-0.1.0/docs/README.md +71 -0
  43. agentagon-0.1.0/docs/assets/causeway-dark.png +0 -0
  44. agentagon-0.1.0/docs/assets/causeway-light.png +0 -0
  45. agentagon-0.1.0/docs/assets/dashboard-example.png +0 -0
  46. agentagon-0.1.0/docs/assets/docs.css +112 -0
  47. agentagon-0.1.0/docs/assets/favicon.svg +1 -0
  48. agentagon-0.1.0/docs/assets/logo.png +0 -0
  49. agentagon-0.1.0/docs/audit.md +94 -0
  50. agentagon-0.1.0/docs/capabilities.md +17 -0
  51. agentagon-0.1.0/docs/concepts.md +67 -0
  52. agentagon-0.1.0/docs/contributing/README.md +70 -0
  53. agentagon-0.1.0/docs/contributing/architecture.md +118 -0
  54. agentagon-0.1.0/docs/contributing/capabilities.md +108 -0
  55. agentagon-0.1.0/docs/contributing/docs-site.md +88 -0
  56. agentagon-0.1.0/docs/contributing/extending.md +105 -0
  57. agentagon-0.1.0/docs/contributing/product-decisions.md +49 -0
  58. agentagon-0.1.0/docs/contributing/releasing.md +96 -0
  59. agentagon-0.1.0/docs/dashboard.md +63 -0
  60. agentagon-0.1.0/docs/delivery.md +67 -0
  61. agentagon-0.1.0/docs/eval.md +113 -0
  62. agentagon-0.1.0/docs/execution.md +33 -0
  63. agentagon-0.1.0/docs/faq.md +65 -0
  64. agentagon-0.1.0/docs/fix.md +100 -0
  65. agentagon-0.1.0/docs/getting-started/bring-one-failure.md +37 -0
  66. agentagon-0.1.0/docs/getting-started/first-audit.md +49 -0
  67. agentagon-0.1.0/docs/getting-started/install.md +127 -0
  68. agentagon-0.1.0/docs/getting-started/local-example.md +57 -0
  69. agentagon-0.1.0/docs/intelligence.md +81 -0
  70. agentagon-0.1.0/docs/orchestration.md +38 -0
  71. agentagon-0.1.0/docs/privacy.md +59 -0
  72. agentagon-0.1.0/docs/reference/cli.md +117 -0
  73. agentagon-0.1.0/docs/reference/evaluation.md +66 -0
  74. agentagon-0.1.0/docs/reference/fix.md +338 -0
  75. agentagon-0.1.0/docs/releases/0.1.0.md +50 -0
  76. agentagon-0.1.0/docs/reports.md +58 -0
  77. agentagon-0.1.0/docs/review.md +64 -0
  78. agentagon-0.1.0/docs/settings.md +93 -0
  79. agentagon-0.1.0/docs/task-evidence.md +21 -0
  80. agentagon-0.1.0/docs/telemetry.md +64 -0
  81. agentagon-0.1.0/docs/traces.md +87 -0
  82. agentagon-0.1.0/docs/troubleshooting.md +137 -0
  83. agentagon-0.1.0/docs_theme/partials/header.html +73 -0
  84. agentagon-0.1.0/examples/local-audit/README.md +26 -0
  85. agentagon-0.1.0/examples/local-audit/demo.py +67 -0
  86. agentagon-0.1.0/examples/ticket-retry/README.md +83 -0
  87. agentagon-0.1.0/examples/ticket-retry/application.py +12 -0
  88. agentagon-0.1.0/examples/ticket-retry/benchmark.py +55 -0
  89. agentagon-0.1.0/examples/ticket-retry/demo.py +178 -0
  90. agentagon-0.1.0/examples/ticket-retry/model.py +92 -0
  91. agentagon-0.1.0/examples/ticket-retry/test_ticket_retry.py +39 -0
  92. agentagon-0.1.0/examples/ticket-retry/ticket_environment.py +20 -0
  93. agentagon-0.1.0/examples/ticket-retry/verify.py +33 -0
  94. agentagon-0.1.0/hooks/hooks.json +8 -0
  95. agentagon-0.1.0/mkdocs.yml +105 -0
  96. agentagon-0.1.0/pyproject.toml +66 -0
  97. agentagon-0.1.0/requirements-docs.txt +5 -0
  98. agentagon-0.1.0/scripts/build_site.py +203 -0
  99. agentagon-0.1.0/scripts/check_installed.py +68 -0
  100. agentagon-0.1.0/scripts/check_secret_scan.py +66 -0
  101. agentagon-0.1.0/scripts/check_site.py +66 -0
  102. agentagon-0.1.0/scripts/docs_links.py +27 -0
  103. agentagon-0.1.0/scripts/install.sh +88 -0
  104. agentagon-0.1.0/scripts/release.py +186 -0
  105. agentagon-0.1.0/setup.cfg +4 -0
  106. agentagon-0.1.0/signals/audit-v1.json +245 -0
  107. agentagon-0.1.0/skills/audit/SKILL.md +41 -0
  108. agentagon-0.1.0/skills/audit/references/acquisition.md +27 -0
  109. agentagon-0.1.0/skills/audit/references/analysis.md +45 -0
  110. agentagon-0.1.0/skills/audit/references/braintrust.md +17 -0
  111. agentagon-0.1.0/skills/audit/references/formats.md +19 -0
  112. agentagon-0.1.0/skills/audit/references/history.md +21 -0
  113. agentagon-0.1.0/skills/audit/references/intelligence.md +55 -0
  114. agentagon-0.1.0/skills/audit/references/langfuse.md +11 -0
  115. agentagon-0.1.0/skills/audit/references/langsmith.md +17 -0
  116. agentagon-0.1.0/skills/audit/references/phoenix.md +17 -0
  117. agentagon-0.1.0/skills/audit/references/records.md +40 -0
  118. agentagon-0.1.0/skills/audit/references/setup.md +5 -0
  119. agentagon-0.1.0/skills/audit/references/telemetry.md +18 -0
  120. agentagon-0.1.0/skills/dashboard/SKILL.md +42 -0
  121. agentagon-0.1.0/skills/eval/SKILL.md +23 -0
  122. agentagon-0.1.0/skills/eval/helpers/agentagon_events.cjs +27 -0
  123. agentagon-0.1.0/skills/eval/helpers/agentagon_events.py +37 -0
  124. agentagon-0.1.0/skills/eval/references/preparation.md +59 -0
  125. agentagon-0.1.0/skills/fix/SKILL.md +81 -0
  126. agentagon-0.1.0/skills/fix/references/contract.md +143 -0
  127. agentagon-0.1.0/skills/fix/references/roles.md +31 -0
  128. agentagon-0.1.0/skills/review/SKILL.md +35 -0
  129. agentagon-0.1.0/skills/setup/SKILL.md +58 -0
  130. agentagon-0.1.0/skills/ship/SKILL.md +63 -0
  131. agentagon-0.1.0/src/agentagon/__init__.py +3 -0
  132. agentagon-0.1.0/src/agentagon/__main__.py +3 -0
  133. agentagon-0.1.0/src/agentagon/cli/__init__.py +1 -0
  134. agentagon-0.1.0/src/agentagon/cli/main.py +864 -0
  135. agentagon-0.1.0/src/agentagon/core/__init__.py +1 -0
  136. agentagon-0.1.0/src/agentagon/core/analysis.py +107 -0
  137. agentagon-0.1.0/src/agentagon/core/records.py +122 -0
  138. agentagon-0.1.0/src/agentagon/core/signals.py +280 -0
  139. agentagon-0.1.0/src/agentagon/dashboard.py +485 -0
  140. agentagon-0.1.0/src/agentagon/dashboard_assets/app.css +970 -0
  141. agentagon-0.1.0/src/agentagon/dashboard_assets/app.js +618 -0
  142. agentagon-0.1.0/src/agentagon/dashboard_assets/favicon.svg +1 -0
  143. agentagon-0.1.0/src/agentagon/dashboard_assets/index.html +174 -0
  144. agentagon-0.1.0/src/agentagon/dashboard_assets/logo-split-crown-96.png +0 -0
  145. agentagon-0.1.0/src/agentagon/dashboard_assets/theme.js +27 -0
  146. agentagon-0.1.0/src/agentagon/dashboard_assets/tidal-causeway-dark-moon.webp +0 -0
  147. agentagon-0.1.0/src/agentagon/dashboard_assets/tidal-causeway-light-sun.webp +0 -0
  148. agentagon-0.1.0/src/agentagon/dashboard_assets/workflow.js +227 -0
  149. agentagon-0.1.0/src/agentagon/experiments/__init__.py +1 -0
  150. agentagon-0.1.0/src/agentagon/experiments/checkouts.py +160 -0
  151. agentagon-0.1.0/src/agentagon/experiments/cleanup.py +110 -0
  152. agentagon-0.1.0/src/agentagon/experiments/controls.py +351 -0
  153. agentagon-0.1.0/src/agentagon/experiments/delivery.py +540 -0
  154. agentagon-0.1.0/src/agentagon/experiments/engine.py +1199 -0
  155. agentagon-0.1.0/src/agentagon/experiments/evaluation.py +122 -0
  156. agentagon-0.1.0/src/agentagon/experiments/evidence.py +29 -0
  157. agentagon-0.1.0/src/agentagon/experiments/hooks.py +120 -0
  158. agentagon-0.1.0/src/agentagon/experiments/inspection.py +235 -0
  159. agentagon-0.1.0/src/agentagon/experiments/learning.py +415 -0
  160. agentagon-0.1.0/src/agentagon/experiments/orchestration.py +559 -0
  161. agentagon-0.1.0/src/agentagon/experiments/preparation.py +732 -0
  162. agentagon-0.1.0/src/agentagon/experiments/runners.py +657 -0
  163. agentagon-0.1.0/src/agentagon/experiments/search.py +218 -0
  164. agentagon-0.1.0/src/agentagon/experiments/spec.py +330 -0
  165. agentagon-0.1.0/src/agentagon/experiments/store.py +72 -0
  166. agentagon-0.1.0/src/agentagon/experiments/worker.py +616 -0
  167. agentagon-0.1.0/src/agentagon/installation.py +286 -0
  168. agentagon-0.1.0/src/agentagon/lookup/__init__.py +1 -0
  169. agentagon-0.1.0/src/agentagon/lookup/client.py +219 -0
  170. agentagon-0.1.0/src/agentagon/lookup/owners.py +81 -0
  171. agentagon-0.1.0/src/agentagon/operations.py +658 -0
  172. agentagon-0.1.0/src/agentagon/reporting.py +834 -0
  173. agentagon-0.1.0/src/agentagon/storage/__init__.py +1 -0
  174. agentagon-0.1.0/src/agentagon/storage/changes.py +305 -0
  175. agentagon-0.1.0/src/agentagon/storage/config.py +284 -0
  176. agentagon-0.1.0/src/agentagon/storage/issues.py +155 -0
  177. agentagon-0.1.0/src/agentagon/storage/workspace.py +337 -0
  178. agentagon-0.1.0/src/agentagon/telemetry/__init__.py +1 -0
  179. agentagon-0.1.0/src/agentagon/telemetry/alignment.py +63 -0
  180. agentagon-0.1.0/src/agentagon/telemetry/ingest.py +292 -0
  181. agentagon-0.1.0/src/agentagon/telemetry/normalize.py +562 -0
  182. agentagon-0.1.0/src/agentagon/telemetry/selection.py +65 -0
  183. agentagon-0.1.0/src/agentagon/usage.py +517 -0
  184. agentagon-0.1.0/src/agentagon.egg-info/PKG-INFO +151 -0
  185. agentagon-0.1.0/src/agentagon.egg-info/SOURCES.txt +264 -0
  186. agentagon-0.1.0/src/agentagon.egg-info/dependency_links.txt +1 -0
  187. agentagon-0.1.0/src/agentagon.egg-info/entry_points.txt +2 -0
  188. agentagon-0.1.0/src/agentagon.egg-info/requires.txt +14 -0
  189. agentagon-0.1.0/src/agentagon.egg-info/top_level.txt +1 -0
  190. agentagon-0.1.0/tests/conftest.py +95 -0
  191. agentagon-0.1.0/tests/fixtures/braintrust.json +88 -0
  192. agentagon-0.1.0/tests/fixtures/langfuse.json +59 -0
  193. agentagon-0.1.0/tests/fixtures/langsmith.json +82 -0
  194. agentagon-0.1.0/tests/fixtures/otlp.json +148 -0
  195. agentagon-0.1.0/tests/fixtures/phoenix.json +51 -0
  196. agentagon-0.1.0/tests/support/__init__.py +1 -0
  197. agentagon-0.1.0/tests/support/audit.py +152 -0
  198. agentagon-0.1.0/tests/support/changes.py +21 -0
  199. agentagon-0.1.0/tests/support/controls.py +20 -0
  200. agentagon-0.1.0/tests/support/dashboard.py +138 -0
  201. agentagon-0.1.0/tests/support/delivery.py +78 -0
  202. agentagon-0.1.0/tests/support/evaluation.py +52 -0
  203. agentagon-0.1.0/tests/support/experiments.py +141 -0
  204. agentagon-0.1.0/tests/support/recovery.py +80 -0
  205. agentagon-0.1.0/tests/support/runners.py +79 -0
  206. agentagon-0.1.0/tests/test_audit.py +311 -0
  207. agentagon-0.1.0/tests/test_changes.py +292 -0
  208. agentagon-0.1.0/tests/test_config.py +173 -0
  209. agentagon-0.1.0/tests/test_continuation_hooks.py +75 -0
  210. agentagon-0.1.0/tests/test_dashboard.py +281 -0
  211. agentagon-0.1.0/tests/test_dashboard_browser.py +216 -0
  212. agentagon-0.1.0/tests/test_edge_cases.py +271 -0
  213. agentagon-0.1.0/tests/test_evaluation_handoff.py +122 -0
  214. agentagon-0.1.0/tests/test_evaluation_preparation.py +227 -0
  215. agentagon-0.1.0/tests/test_experiment_learning.py +245 -0
  216. agentagon-0.1.0/tests/test_experiment_ordering.py +202 -0
  217. agentagon-0.1.0/tests/test_experiment_recovery.py +158 -0
  218. agentagon-0.1.0/tests/test_experiment_runners.py +582 -0
  219. agentagon-0.1.0/tests/test_experiment_search.py +491 -0
  220. agentagon-0.1.0/tests/test_experiments.py +400 -0
  221. agentagon-0.1.0/tests/test_fix_cli.py +231 -0
  222. agentagon-0.1.0/tests/test_fix_config.py +87 -0
  223. agentagon-0.1.0/tests/test_fix_contracts.py +206 -0
  224. agentagon-0.1.0/tests/test_fix_controls.py +296 -0
  225. agentagon-0.1.0/tests/test_fix_controls_dashboard.py +248 -0
  226. agentagon-0.1.0/tests/test_fix_dashboard.py +169 -0
  227. agentagon-0.1.0/tests/test_fix_delivery.py +325 -0
  228. agentagon-0.1.0/tests/test_fix_issues.py +180 -0
  229. agentagon-0.1.0/tests/test_fix_reporting.py +171 -0
  230. agentagon-0.1.0/tests/test_host_rounds.py +275 -0
  231. agentagon-0.1.0/tests/test_installation.py +338 -0
  232. agentagon-0.1.0/tests/test_live_fix.py +340 -0
  233. agentagon-0.1.0/tests/test_lookup.py +584 -0
  234. agentagon-0.1.0/tests/test_metric_discrimination.py +182 -0
  235. agentagon-0.1.0/tests/test_preflight.py +126 -0
  236. agentagon-0.1.0/tests/test_product_flow.py +233 -0
  237. agentagon-0.1.0/tests/test_release.py +119 -0
  238. agentagon-0.1.0/tests/test_review_flow.py +381 -0
  239. agentagon-0.1.0/tests/test_review_reporting.py +90 -0
  240. agentagon-0.1.0/tests/test_selection.py +215 -0
  241. agentagon-0.1.0/tests/test_shipping_cleanup.py +111 -0
  242. agentagon-0.1.0/tests/test_site.py +87 -0
  243. agentagon-0.1.0/tests/test_source_audit.py +192 -0
  244. agentagon-0.1.0/tests/test_task_evidence.py +185 -0
  245. agentagon-0.1.0/tests/test_telemetry.py +220 -0
  246. agentagon-0.1.0/tests/test_ticket_demo.py +88 -0
  247. agentagon-0.1.0/tests/test_trace_alignment.py +68 -0
  248. agentagon-0.1.0/tests/test_usage.py +506 -0
  249. agentagon-0.1.0/tests/test_workflow_inspection.py +92 -0
  250. agentagon-0.1.0/tests/test_workflow_lookup.py +610 -0
  251. agentagon-0.1.0/website/README.md +12 -0
  252. agentagon-0.1.0/website/assets/logo-split-crown-96.png +0 -0
  253. agentagon-0.1.0/website/assets/site.css +244 -0
  254. agentagon-0.1.0/website/assets/site.js +70 -0
  255. agentagon-0.1.0/website/assets/theme-init.js +8 -0
  256. agentagon-0.1.0/website/assets/tidal-causeway-dark-moon.png +0 -0
  257. agentagon-0.1.0/website/assets/tidal-causeway-light-sun.png +0 -0
  258. agentagon-0.1.0/website/blogs/ai-agent-regression-testing.md +55 -0
  259. agentagon-0.1.0/website/blogs/observability-vs-evaluation.md +47 -0
  260. agentagon-0.1.0/website/blogs/what-flat-scores-hide.md +46 -0
  261. agentagon-0.1.0/website/index.html +41 -0
  262. agentagon-0.1.0/website/templates/article.html +23 -0
  263. agentagon-0.1.0/website/templates/base.html +47 -0
  264. agentagon-0.1.0/website/templates/blogs.html +20 -0
  265. agentagon-0.1.0/website/templates/header.html +40 -0
  266. agentagon-0.1.0/website/templates/message.html +12 -0
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "ag",
3
+ "version": "0.1.0",
4
+ "description": "Review local changes, audit agent applications, and evaluate measured improvements.",
5
+ "author": {"name": "Agentagon"},
6
+ "license": "Apache-2.0",
7
+ "skills": "./skills/"
8
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "ag",
3
+ "version": "0.1.0",
4
+ "description": "Review local changes, audit agent applications, and evaluate measured improvements.",
5
+ "author": {
6
+ "name": "Agentagon"
7
+ },
8
+ "license": "Apache-2.0",
9
+ "skills": "./skills/",
10
+ "interface": {
11
+ "displayName": "Agentagon",
12
+ "shortDescription": "Review, audit and improve agent applications",
13
+ "longDescription": "Prepare reviewed benchmarks, audit applications, coordinate bounded improvement experiments in the active host task, inspect task evidence and verified tradeoffs, and clean and reverify selected delivery branches.",
14
+ "developerName": "Agentagon",
15
+ "category": "Productivity",
16
+ "capabilities": [
17
+ "Read",
18
+ "Write",
19
+ "Interactive"
20
+ ],
21
+ "defaultPrompt": [
22
+ "Use ag:review to review my local changes.",
23
+ "Use ag:audit to audit this agent application."
24
+ ]
25
+ }
26
+ }
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a reproducible problem in Agentagon
4
+ ---
5
+
6
+ <!-- For a suspected vulnerability, email security@agentagon.ai instead of opening a public issue. See SECURITY.md. -->
7
+ <!-- Use synthetic or redacted examples. Do not attach credentials, private code/traces, or the full .agentagon directory. -->
8
+
9
+ ## What happened?
10
+
11
+ Describe the observed behavior and what you expected.
12
+
13
+ ## Reproduction
14
+
15
+ Provide the smallest command sequence or host request that reproduces the problem, with synthetic inputs when possible.
16
+
17
+ ## Environment
18
+
19
+ - Agentagon version (`agentagon --version`) and source commit, if known:
20
+ - Installation method (source/virtual environment, installer or wheel):
21
+ - OS and Python version:
22
+ - Coding host and version, if relevant:
23
+ - Workflow and runner (local, SSH or E2B), if relevant:
24
+
25
+ ## Evidence
26
+
27
+ Include the relevant redacted error output and expected output. Describe coverage limits or skipped checks that affect the result. Remove secrets from configuration examples and use environment-variable names instead of values.
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: Feature request
3
+ about: Describe a workflow problem or propose an improvement
4
+ ---
5
+
6
+ ## Problem
7
+
8
+ What are you trying to do, and where does the current workflow fall short?
9
+
10
+ ## Proposed behavior
11
+
12
+ Describe the result you want. Distinguish the proposal from existing behavior.
13
+
14
+ ## Example and alternatives
15
+
16
+ Give a concrete input/request and expected result. Describe any current workaround or alternatives you considered.
17
+
18
+ ## Constraints and verification
19
+
20
+ Which workflow, host or runner is affected? Note compatibility, privacy or execution-cost constraints. Explain how a contributor could verify that the change solves the problem.
21
+
22
+ <!-- Do not include credentials or private code/traces. Report vulnerabilities privately to security@agentagon.ai. -->
@@ -0,0 +1,17 @@
1
+ ## Problem and result
2
+
3
+ Describe the previous problem and resulting behavior. Link related issues, if any.
4
+
5
+ ## Evidence
6
+
7
+ Include a reproduction or usage example when it helps assess the change.
8
+
9
+ ## Validation
10
+
11
+ List the commands and environments you tested, with results. Identify skipped or unverified integrations separately.
12
+
13
+ ## Compatibility and documentation
14
+
15
+ Describe configuration, record/contract or packaging changes and any upgrade consequences. Link updated documentation. Omit this section if it does not apply.
16
+
17
+ <!-- Follow CONTRIBUTING.md. Keep unrelated changes, generated output, .agentagon state and credentials out of the diff. For a suspected vulnerability, report privately to security@agentagon.ai before opening a public PR. -->
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ open-pull-requests-limit: 5
8
+ - package-ecosystem: github-actions
9
+ directory: /
10
+ schedule:
11
+ interval: weekly
12
+ open-pull-requests-limit: 5
@@ -0,0 +1,31 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ schedule:
7
+ - cron: '41 6 * * 1'
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ analyze:
14
+ name: CodeQL (${{ matrix.language }})
15
+ runs-on: ubuntu-latest
16
+ permissions:
17
+ contents: read
18
+ security-events: write
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ language: [python, javascript-typescript]
23
+ steps:
24
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
25
+ with:
26
+ persist-credentials: false
27
+ - uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4
28
+ with:
29
+ languages: ${{ matrix.language }}
30
+ build-mode: none
31
+ - uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4
@@ -0,0 +1,95 @@
1
+ name: Website checks and deployment
2
+
3
+ on:
4
+ push:
5
+ paths:
6
+ - 'website/**'
7
+ - 'docs/**'
8
+ - 'docs_theme/**'
9
+ - 'mkdocs.yml'
10
+ - 'requirements-docs.txt'
11
+ - 'THIRD_PARTY_NOTICES.txt'
12
+ - 'scripts/docs_links.py'
13
+ - 'scripts/build_site.py'
14
+ - 'scripts/check_site.py'
15
+ - 'tests/test_site.py'
16
+ - '.github/workflows/docs.yml'
17
+ pull_request:
18
+ types: [opened, synchronize, reopened, closed]
19
+ paths:
20
+ - 'website/**'
21
+ - 'docs/**'
22
+ - 'docs_theme/**'
23
+ - 'mkdocs.yml'
24
+ - 'requirements-docs.txt'
25
+ - 'THIRD_PARTY_NOTICES.txt'
26
+ - 'scripts/docs_links.py'
27
+ - 'scripts/build_site.py'
28
+ - 'scripts/check_site.py'
29
+ - 'tests/test_site.py'
30
+ - '.github/workflows/docs.yml'
31
+ workflow_dispatch:
32
+
33
+ permissions:
34
+ contents: read
35
+
36
+ concurrency:
37
+ group: website-${{ github.event.pull_request.number || github.ref }}
38
+ cancel-in-progress: true
39
+
40
+ jobs:
41
+ build:
42
+ if: github.event.action != 'closed'
43
+ runs-on: ubuntu-latest
44
+ steps:
45
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
46
+ with:
47
+ persist-credentials: false
48
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
49
+ with:
50
+ python-version: '3.13'
51
+ - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
52
+ with:
53
+ node-version: '22'
54
+ - run: python -m pip install -r requirements-docs.txt 'pytest>=8,<10'
55
+ - name: Build and check website
56
+ env:
57
+ IS_PREVIEW: ${{ github.ref != 'refs/heads/main' }}
58
+ run: |
59
+ if [ "$IS_PREVIEW" = true ]; then
60
+ python scripts/build_site.py --preview
61
+ else
62
+ python scripts/build_site.py
63
+ fi
64
+ node --check website/assets/site.js
65
+ node --check website/assets/theme-init.js
66
+ python -m pytest tests/test_site.py --noconftest -q
67
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
68
+ with:
69
+ name: website
70
+ path: site/
71
+ retention-days: 7
72
+ - name: Deploy production or trusted PR preview
73
+ if: >-
74
+ (github.event_name == 'push' && github.ref == 'refs/heads/main') ||
75
+ (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') ||
76
+ (github.event_name == 'pull_request' &&
77
+ github.event.pull_request.head.repo.full_name == github.repository)
78
+ uses: Azure/static-web-apps-deploy@4d27395796ac319302594769cfe812bd207490b1 # v1
79
+ with:
80
+ azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
81
+ action: upload
82
+ app_location: site
83
+ output_location: ''
84
+ skip_app_build: true
85
+
86
+ close-preview:
87
+ if: >-
88
+ github.event_name == 'pull_request' && github.event.action == 'closed' &&
89
+ github.event.pull_request.head.repo.full_name == github.repository
90
+ runs-on: ubuntu-latest
91
+ steps:
92
+ - uses: Azure/static-web-apps-deploy@4d27395796ac319302594769cfe812bd207490b1 # v1
93
+ with:
94
+ azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
95
+ action: close
@@ -0,0 +1,143 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ['v*']
6
+ workflow_dispatch:
7
+ inputs:
8
+ tag:
9
+ description: Existing vX.Y.Z tag to publish or resume
10
+ required: true
11
+ type: string
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ concurrency:
17
+ group: release-${{ inputs.tag || github.ref_name }}
18
+ cancel-in-progress: false
19
+
20
+ env:
21
+ RELEASE_TAG: ${{ inputs.tag || github.ref_name }}
22
+ AGENTAGON_TELEMETRY_DISABLED: '1'
23
+
24
+ jobs:
25
+ build:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
29
+ with:
30
+ ref: ${{ env.RELEASE_TAG }}
31
+ fetch-depth: 0
32
+ persist-credentials: false
33
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
34
+ with:
35
+ python-version: '3.13'
36
+ - name: Require matching versions and successful checks on protected main
37
+ env:
38
+ GH_TOKEN: ${{ github.token }}
39
+ run: python scripts/release.py gate --tag "$RELEASE_TAG" --repository "$GITHUB_REPOSITORY"
40
+ - name: Reuse staged release files when resuming
41
+ id: reuse
42
+ env:
43
+ GH_TOKEN: ${{ github.token }}
44
+ run: |
45
+ gh api "repos/$GITHUB_REPOSITORY/releases?per_page=100" > "$RUNNER_TEMP/releases.json"
46
+ if python -c 'import json, os, sys; sys.exit(not any(r["tag_name"] == os.environ["RELEASE_TAG"] for r in json.load(open(sys.argv[1]))))' "$RUNNER_TEMP/releases.json"; then
47
+ gh release download "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" --dir dist \
48
+ --pattern '*.whl' --pattern '*.tar.gz' --pattern SHA256SUMS --pattern RELEASE_NOTES.md
49
+ python scripts/release.py verify --tag "$RELEASE_TAG"
50
+ echo 'found=true' >> "$GITHUB_OUTPUT"
51
+ fi
52
+ - name: Build and validate one set of distribution files
53
+ if: steps.reuse.outputs.found != 'true'
54
+ run: |
55
+ python -m pip install 'build>=1.2' 'twine>=6,<7' -r requirements-docs.txt
56
+ python -m build
57
+ python -m twine check --strict dist/*
58
+ python scripts/release.py manifest --tag "$RELEASE_TAG"
59
+ cp "docs/releases/${RELEASE_TAG#v}.md" dist/RELEASE_NOTES.md
60
+ printf '\nSource revision: `%s`\n' "$(git rev-parse HEAD)" >> dist/RELEASE_NOTES.md
61
+ python -m venv "$RUNNER_TEMP/release-wheel"
62
+ "$RUNNER_TEMP/release-wheel/bin/python" -m pip install dist/*.whl
63
+ cd "$RUNNER_TEMP"
64
+ "$RUNNER_TEMP/release-wheel/bin/python" "$GITHUB_WORKSPACE/scripts/check_installed.py"
65
+ "$RUNNER_TEMP/release-wheel/bin/python" "$GITHUB_WORKSPACE/examples/local-audit/demo.py"
66
+ mkdir release-source
67
+ tar -xzf "$GITHUB_WORKSPACE/dist/agentagon-${RELEASE_TAG#v}.tar.gz" -C release-source
68
+ cd "release-source/agentagon-${RELEASE_TAG#v}"
69
+ python scripts/build_site.py
70
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
71
+ with:
72
+ name: release-packages
73
+ path: dist/
74
+ retention-days: 90
75
+ if-no-files-found: error
76
+
77
+ stage:
78
+ needs: build
79
+ runs-on: ubuntu-latest
80
+ permissions:
81
+ contents: write
82
+ steps:
83
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
84
+ with:
85
+ ref: ${{ env.RELEASE_TAG }}
86
+ persist-credentials: false
87
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
88
+ with:
89
+ python-version: '3.13'
90
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
91
+ with:
92
+ name: release-packages
93
+ path: dist/
94
+ - name: Preserve reviewed files in a draft GitHub release
95
+ env:
96
+ GH_TOKEN: ${{ github.token }}
97
+ run: python scripts/release.py stage --tag "$RELEASE_TAG" --repository "$GITHUB_REPOSITORY"
98
+
99
+ pypi:
100
+ needs: stage
101
+ runs-on: ubuntu-latest
102
+ environment:
103
+ name: pypi
104
+ url: https://pypi.org/p/agentagon
105
+ permissions:
106
+ contents: read
107
+ id-token: write
108
+ steps:
109
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
110
+ with:
111
+ ref: ${{ env.RELEASE_TAG }}
112
+ persist-credentials: false
113
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
114
+ with:
115
+ python-version: '3.13'
116
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
117
+ with:
118
+ name: release-packages
119
+ path: dist/
120
+ - name: Verify existing PyPI hashes and select only missing files
121
+ id: pending
122
+ run: |
123
+ python scripts/release.py pypi --tag "$RELEASE_TAG"
124
+ if [ -n "$(ls -A pending)" ]; then echo 'upload=true' >> "$GITHUB_OUTPUT"; fi
125
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
126
+ if: steps.pending.outputs.upload == 'true'
127
+ with:
128
+ packages-dir: pending/
129
+ - name: Verify every published PyPI digest
130
+ run: |
131
+ python scripts/release.py pypi --tag "$RELEASE_TAG" --pending verify-published
132
+ test -z "$(ls -A verify-published)"
133
+
134
+ publish:
135
+ needs: pypi
136
+ runs-on: ubuntu-latest
137
+ permissions:
138
+ contents: write
139
+ steps:
140
+ - name: Publish the staged GitHub release
141
+ env:
142
+ GH_TOKEN: ${{ github.token }}
143
+ run: gh release edit "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" --draft=false --latest
@@ -0,0 +1,46 @@
1
+ name: Security checks
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ schedule:
7
+ - cron: '23 6 * * 1'
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ secrets:
15
+ name: Secret scan
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
19
+ with:
20
+ fetch-depth: 0
21
+ persist-credentials: false
22
+ - name: Install verified Gitleaks CLI
23
+ run: |
24
+ curl --fail --silent --show-error --location --output "$RUNNER_TEMP/gitleaks.tar.gz" \
25
+ https://github.com/gitleaks/gitleaks/releases/download/v8.30.1/gitleaks_8.30.1_linux_x64.tar.gz
26
+ echo "551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb $RUNNER_TEMP/gitleaks.tar.gz" | sha256sum --check
27
+ tar -xzf "$RUNNER_TEMP/gitleaks.tar.gz" -C "$RUNNER_TEMP" gitleaks
28
+ - name: Scan history and current files
29
+ run: |
30
+ python3 scripts/check_secret_scan.py "$RUNNER_TEMP/gitleaks"
31
+ "$RUNNER_TEMP/gitleaks" git . --log-opts=--all --redact --no-banner
32
+ "$RUNNER_TEMP/gitleaks" dir . --redact --no-banner
33
+
34
+ dependencies:
35
+ name: Dependency audit
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
39
+ with:
40
+ persist-credentials: false
41
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
42
+ with:
43
+ python-version: '3.13'
44
+ - run: python -m pip install --upgrade pip
45
+ - run: python -m pip install '.[dev,browser,e2b]' -r requirements-docs.txt 'pip-audit==2.10.1'
46
+ - run: python -m pip_audit --local --progress-spinner off
@@ -0,0 +1,80 @@
1
+ name: Audit checks
2
+
3
+ on: [push, pull_request]
4
+
5
+ permissions:
6
+ contents: read
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ matrix:
13
+ include:
14
+ - os: ubuntu-latest
15
+ python-version: '3.12'
16
+ - os: ubuntu-latest
17
+ python-version: '3.13'
18
+ - os: macos-latest
19
+ python-version: '3.13'
20
+ steps:
21
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
22
+ with:
23
+ persist-credentials: false
24
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
25
+ with:
26
+ python-version: ${{ matrix.python-version }}
27
+ - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
28
+ with:
29
+ node-version: '22'
30
+ - run: python -m pip install '.[dev]'
31
+ - run: python -m ruff check src tests skills/eval/helpers scripts examples
32
+ - run: python -m ruff format --check src tests skills/eval/helpers scripts examples
33
+ - name: Check shipped JavaScript and shell syntax
34
+ run: |
35
+ for script in src/agentagon/dashboard_assets/*.js skills/eval/helpers/*.cjs; do
36
+ node --check "$script"
37
+ done
38
+ sh -n scripts/install.sh
39
+ - run: python -m pytest -q
40
+ - run: python -m build
41
+ - name: Install and exercise the built wheel outside the checkout
42
+ working-directory: ${{ runner.temp }}
43
+ run: |
44
+ python -m venv "$RUNNER_TEMP/agentagon-wheel"
45
+ "$RUNNER_TEMP/agentagon-wheel/bin/python" -m pip install "$GITHUB_WORKSPACE"/dist/*.whl
46
+ "$RUNNER_TEMP/agentagon-wheel/bin/python" "$GITHUB_WORKSPACE/scripts/check_installed.py"
47
+ "$RUNNER_TEMP/agentagon-wheel/bin/python" "$GITHUB_WORKSPACE/examples/local-audit/demo.py"
48
+
49
+ browser:
50
+ runs-on: ubuntu-latest
51
+ steps:
52
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
53
+ with:
54
+ persist-credentials: false
55
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
56
+ with:
57
+ python-version: '3.13'
58
+ - run: python -m pip install '.[dev,browser]'
59
+ - run: python -m playwright install --with-deps chromium
60
+ - run: python -m pytest tests/test_dashboard_browser.py -q
61
+
62
+ source-package:
63
+ name: Source package and website
64
+ runs-on: ubuntu-latest
65
+ steps:
66
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
67
+ with:
68
+ persist-credentials: false
69
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
70
+ with:
71
+ python-version: '3.13'
72
+ - run: python -m pip install '.[dev]' 'twine>=6,<7' -r requirements-docs.txt
73
+ - run: python -m build && python -m twine check --strict dist/*
74
+ - name: Build the website from the extracted source package
75
+ run: |
76
+ mkdir "$RUNNER_TEMP/source-package"
77
+ tar -xzf dist/*.tar.gz -C "$RUNNER_TEMP/source-package"
78
+ cd "$RUNNER_TEMP"/source-package/agentagon-*
79
+ python scripts/build_site.py
80
+ python -m pytest tests/test_site.py --noconftest -q
@@ -0,0 +1,23 @@
1
+ .agentagon/
2
+ .venv/
3
+ .venv-docs/
4
+ site/
5
+ __pycache__/
6
+ *.py[cod]
7
+ .pytest_cache/
8
+ .ruff_cache/
9
+ *.egg-info/
10
+ build/
11
+ dist/
12
+ .gstack/
13
+ .env
14
+ .env.*
15
+ !.env.example
16
+ *.pem
17
+ *.key
18
+ *.p12
19
+ *.pfx
20
+ id_rsa
21
+ id_ed25519
22
+ .DS_Store
23
+ .worktrees/
@@ -0,0 +1,13 @@
1
+ title = "Agentagon secret scanning"
2
+ [extend]
3
+ useDefault = true
4
+
5
+ [[rules]]
6
+ id = "generic-api-key"
7
+
8
+ [[rules.allowlists]]
9
+ description = "Exact public PostHog ingestion token in its shipped default"
10
+ condition = "AND"
11
+ paths = ['''^src/agentagon/usage\.py$''']
12
+ regexTarget = "secret"
13
+ regexes = ['''^phc_CUB2gYkuZX7TsLaJmTxqUg7iCbuitCxkYW4LVgcy9HKn$''']
@@ -0,0 +1,59 @@
1
+ # Repository guidance
2
+
3
+ ## Authoritative references
4
+
5
+ | Need | Source |
6
+ |---|---|
7
+ | Setup and contribution workflow | [CONTRIBUTING.md](CONTRIBUTING.md) |
8
+ | Usage and configuration | [README.md](README.md), [user guides](docs/README.md) |
9
+ | Architecture and behavioral boundaries | [Product decisions](docs/contributing/product-decisions.md) |
10
+ | Source and representative tests | [Implementation map](docs/contributing/capabilities.md) |
11
+ | Accepted records and instrumentation | [Versioned contracts](contracts/v1/), [task evidence](docs/task-evidence.md) |
12
+ | Packaging and validation | [pyproject.toml](pyproject.toml), [MANIFEST.in](MANIFEST.in), [CI](.github/workflows/tests.yml), [extended checks](docs/contributing/README.md) |
13
+
14
+ ## Commands
15
+
16
+ - Use Python 3.12+, Git and Node.js 22 on macOS or Linux; run commands from the repository root with the virtual environment active.
17
+ - Substitute changed Python paths for focused lint/format checks; the table includes the full CI scope.
18
+
19
+ | Task | Command |
20
+ |---|---|
21
+ | Development setup | `python3 -m venv .venv && . .venv/bin/activate && python -m pip install -e '.[dev]'` |
22
+ | Focused test example | `python -m pytest tests/test_dashboard.py -q` |
23
+ | Full suite | `python -m pytest -q` |
24
+ | Lint | `python -m ruff check src tests skills/eval/helpers scripts examples` |
25
+ | Format check | `python -m ruff format --check src tests skills/eval/helpers scripts examples` |
26
+ | Browser setup and tests | `python -m pip install -e '.[dev,browser]' && python -m playwright install chromium && python -m pytest tests/test_dashboard_browser.py -q` |
27
+ | JavaScript syntax | `for script in src/agentagon/dashboard_assets/*.js skills/eval/helpers/*.cjs; do node --check "$script"; done` |
28
+ | Installer syntax | `sh -n scripts/install.sh` |
29
+ | Build sdist and wheel | `python -m build` |
30
+
31
+ - Validate packaging changes by installing the built wheel in a fresh environment outside the checkout using the [packaging checks](docs/contributing/README.md#packaging-checks).
32
+ - Local HTTP/browser tests need loopback access; require authorization before enabling [native registration or live SSH/E2B tests](docs/contributing/README.md#optional-integration-checks), and report skips separately from verified results.
33
+
34
+ ## Project boundaries
35
+
36
+ - Keep model reasoning, candidate edits and independent reviews in the coding-agent host; Python handles evidence, validation and bounded execution.
37
+ - Preserve review scope over captured changes and the fixed audit rubric; full audits may inspect uncommitted or non-Git directories, while evaluation/fix workflows require clean committed inputs.
38
+ - Preserve frozen benchmark comparisons, failed/dominated experiment evidence and user choice among verified alternatives; selection, publication, merge and deployment remain separate actions.
39
+ - Keep dashboard reads within one checkout's display projections; controls remain opt-in with exact-origin/session validation, and reads must not execute work or reconnect to runners.
40
+ - Preserve explicit invocation > project override > user default precedence; store credential references rather than secret values.
41
+ - Optional [Intelligence](docs/intelligence.md) uses separately prepared privacy-safe context/focus; never automatically upload raw code, traces, credentials or the saved audit goal.
42
+ - Keep the remote worker and copyable Python event helper compatible with Python 3.10 and standard-library-only execution.
43
+
44
+ ## Generated files and private state
45
+
46
+ - Regenerate build output and caches from source; do not commit `.venv/`, `build/`, `dist/`, `*.egg-info/`, `__pycache__/`, `.pytest_cache/` or `.ruff_cache/` (see [.gitignore](.gitignore)).
47
+ - Keep `.agentagon/` private and ignored; use CLI operations for saved state, reports and immutable evidence. Edit prepared host response/templates as workflow inputs, without rewriting frozen records or checksum-addressed artifacts.
48
+ - Treat `contracts/`, `signals/`, `skills/` and `src/agentagon/dashboard_assets/` as shipped source, not disposable generated output; keep packaging declarations and resource references aligned when changing them.
49
+
50
+ ## Documentation and commits
51
+
52
+ - Lead docs with the decision, outcome or action; use plain words, short paragraphs and concrete examples, without filler or unnecessary qualifiers.
53
+ - Keep each doc focused and each detailed rule in one authoritative place, linking elsewhere instead of duplicating it.
54
+ - Preserve requirements, evidence, tradeoffs and uncertainty; use enough detail to prevent mistakes rather than imposing arbitrary length limits.
55
+ - Distinguish proposals, decisions, implemented behavior and verified results; put dated test counts and environment-specific limits in PR/release records.
56
+ - Preserve unrelated work and history; do not infer authorization to commit, publish, merge or deploy from a documentation workflow.
57
+ - When committing, follow [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/): one logical change, an imperative summary without a trailing period, and a scope only when useful.
58
+ - Use `feat` for features and `fix` for bugs; other types are allowed. Mark breaking changes with `!` after the type/scope or a `BREAKING CHANGE:` footer.
59
+ - Add a commit body when needed to explain the previous problem, why the change is necessary, and tradeoffs or consequences the diff cannot explain.