academic-research-kernel 2.0.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 (253) hide show
  1. academic_research_kernel-2.0.0/.github/workflows/live-contract.yml +41 -0
  2. academic_research_kernel-2.0.0/.github/workflows/publish-pypi.yml +45 -0
  3. academic_research_kernel-2.0.0/.github/workflows/qa.yml +227 -0
  4. academic_research_kernel-2.0.0/.gitignore +12 -0
  5. academic_research_kernel-2.0.0/CONTRIBUTING.md +16 -0
  6. academic_research_kernel-2.0.0/LICENSE +176 -0
  7. academic_research_kernel-2.0.0/LICENSE-APPLICATION.md +21 -0
  8. academic_research_kernel-2.0.0/LICENSE-HISTORY.md +26 -0
  9. academic_research_kernel-2.0.0/LICENSES/MIT-pre-SLL.txt +21 -0
  10. academic_research_kernel-2.0.0/PKG-INFO +229 -0
  11. academic_research_kernel-2.0.0/README.de.md +101 -0
  12. academic_research_kernel-2.0.0/README.es.md +101 -0
  13. academic_research_kernel-2.0.0/README.fr.md +101 -0
  14. academic_research_kernel-2.0.0/README.ja.md +99 -0
  15. academic_research_kernel-2.0.0/README.ko.md +100 -0
  16. academic_research_kernel-2.0.0/README.md +181 -0
  17. academic_research_kernel-2.0.0/README.zh-CN.md +175 -0
  18. academic_research_kernel-2.0.0/README.zh-Hans.md +175 -0
  19. academic_research_kernel-2.0.0/README.zh-Hant.md +100 -0
  20. academic_research_kernel-2.0.0/README.zh-TW.md +100 -0
  21. academic_research_kernel-2.0.0/SLL-APPLICATION.json +27 -0
  22. academic_research_kernel-2.0.0/SOURCE-LINEAGE.md +38 -0
  23. academic_research_kernel-2.0.0/docs/agenda-audit-20260917.md +35 -0
  24. academic_research_kernel-2.0.0/docs/artifact-adapter-matrix.json +178 -0
  25. academic_research_kernel-2.0.0/docs/audit-20260906.md +128 -0
  26. academic_research_kernel-2.0.0/docs/direction-primitive-mapping.json +50 -0
  27. academic_research_kernel-2.0.0/docs/distribution-release.md +125 -0
  28. academic_research_kernel-2.0.0/docs/environment.json +27 -0
  29. academic_research_kernel-2.0.0/docs/external-checks.json +17 -0
  30. academic_research_kernel-2.0.0/docs/external-proposal-priors-20260917-scfabric.md +26 -0
  31. academic_research_kernel-2.0.0/docs/factor-matrix.json +2273 -0
  32. academic_research_kernel-2.0.0/docs/findings.json +206 -0
  33. academic_research_kernel-2.0.0/docs/i18n/manifest.json +13023 -0
  34. academic_research_kernel-2.0.0/docs/kernel-architecture.md +142 -0
  35. academic_research_kernel-2.0.0/docs/pain-atlas-v0.en.md +353 -0
  36. academic_research_kernel-2.0.0/docs/pain-atlas-v0.zh.md +353 -0
  37. academic_research_kernel-2.0.0/docs/post-pr6-roadmap-reevaluation.md +65 -0
  38. academic_research_kernel-2.0.0/docs/post-pr9-roadmap-reevaluation.md +129 -0
  39. academic_research_kernel-2.0.0/docs/project-lineage-audit-20260920.json +251 -0
  40. academic_research_kernel-2.0.0/docs/project-lineage-audit-20260920.md +187 -0
  41. academic_research_kernel-2.0.0/docs/research-plan-v0.en.md +140 -0
  42. academic_research_kernel-2.0.0/docs/research-plan-v0.zh.md +140 -0
  43. academic_research_kernel-2.0.0/docs/scientific-compute-fabric.md +57 -0
  44. academic_research_kernel-2.0.0/docs/standards/README.md +28 -0
  45. academic_research_kernel-2.0.0/docs/standards/registry.json +197 -0
  46. academic_research_kernel-2.0.0/docs/style/aidetox-contract.json +68 -0
  47. academic_research_kernel-2.0.0/docs/style/profiles/ar.json +24 -0
  48. academic_research_kernel-2.0.0/docs/style/profiles/bn.json +21 -0
  49. academic_research_kernel-2.0.0/docs/style/profiles/de.json +21 -0
  50. academic_research_kernel-2.0.0/docs/style/profiles/en.json +25 -0
  51. academic_research_kernel-2.0.0/docs/style/profiles/es.json +21 -0
  52. academic_research_kernel-2.0.0/docs/style/profiles/fa.json +24 -0
  53. academic_research_kernel-2.0.0/docs/style/profiles/fr.json +21 -0
  54. academic_research_kernel-2.0.0/docs/style/profiles/hi.json +22 -0
  55. academic_research_kernel-2.0.0/docs/style/profiles/id.json +23 -0
  56. academic_research_kernel-2.0.0/docs/style/profiles/it.json +24 -0
  57. academic_research_kernel-2.0.0/docs/style/profiles/ja.json +23 -0
  58. academic_research_kernel-2.0.0/docs/style/profiles/ko.json +22 -0
  59. academic_research_kernel-2.0.0/docs/style/profiles/pl.json +23 -0
  60. academic_research_kernel-2.0.0/docs/style/profiles/pt.json +24 -0
  61. academic_research_kernel-2.0.0/docs/style/profiles/ru.json +23 -0
  62. academic_research_kernel-2.0.0/docs/style/profiles/sw.json +22 -0
  63. academic_research_kernel-2.0.0/docs/style/profiles/tr.json +23 -0
  64. academic_research_kernel-2.0.0/docs/style/profiles/ur.json +21 -0
  65. academic_research_kernel-2.0.0/docs/style/profiles/vi.json +22 -0
  66. academic_research_kernel-2.0.0/docs/style/profiles/zh-Hans.json +30 -0
  67. academic_research_kernel-2.0.0/docs/style/profiles/zh-Hant.json +30 -0
  68. academic_research_kernel-2.0.0/docs/terminology/README.md +69 -0
  69. academic_research_kernel-2.0.0/docs/terminology/registry.json +1117 -0
  70. academic_research_kernel-2.0.0/i18n/ar/README.md +95 -0
  71. academic_research_kernel-2.0.0/i18n/bn/README.md +95 -0
  72. academic_research_kernel-2.0.0/i18n/fa/README.md +95 -0
  73. academic_research_kernel-2.0.0/i18n/hi/README.md +95 -0
  74. academic_research_kernel-2.0.0/i18n/id/README.md +95 -0
  75. academic_research_kernel-2.0.0/i18n/it/README.md +95 -0
  76. academic_research_kernel-2.0.0/i18n/pl/README.md +95 -0
  77. academic_research_kernel-2.0.0/i18n/pt/README.md +95 -0
  78. academic_research_kernel-2.0.0/i18n/ru/README.md +95 -0
  79. academic_research_kernel-2.0.0/i18n/sw/README.md +95 -0
  80. academic_research_kernel-2.0.0/i18n/tr/README.md +95 -0
  81. academic_research_kernel-2.0.0/i18n/ur/README.md +95 -0
  82. academic_research_kernel-2.0.0/i18n/vi/README.md +95 -0
  83. academic_research_kernel-2.0.0/mcp.json +24 -0
  84. academic_research_kernel-2.0.0/plugin.json +20 -0
  85. academic_research_kernel-2.0.0/pyproject.toml +81 -0
  86. academic_research_kernel-2.0.0/requirements-qa.txt +17 -0
  87. academic_research_kernel-2.0.0/schemas/artifact-ingestion-receipt.schema.json +356 -0
  88. academic_research_kernel-2.0.0/schemas/claim-evidence-graph.schema.json +176 -0
  89. academic_research_kernel-2.0.0/schemas/computation-artifact.schema.json +17 -0
  90. academic_research_kernel-2.0.0/schemas/compute-receipt.schema.json +98 -0
  91. academic_research_kernel-2.0.0/schemas/cross-review-artifact.schema.json +23 -0
  92. academic_research_kernel-2.0.0/schemas/decision-ledger-receipt.schema.json +667 -0
  93. academic_research_kernel-2.0.0/schemas/evidence-receipt.schema.json +81 -0
  94. academic_research_kernel-2.0.0/schemas/ingestion-kernel-state.schema.json +116 -0
  95. academic_research_kernel-2.0.0/schemas/legacy-academic-evidence.schema.json +174 -0
  96. academic_research_kernel-2.0.0/schemas/lineage-receipt.schema.json +196 -0
  97. academic_research_kernel-2.0.0/schemas/literature-analysis-artifact.schema.json +48 -0
  98. academic_research_kernel-2.0.0/schemas/literature-delta.schema.json +14 -0
  99. academic_research_kernel-2.0.0/schemas/opaque-manuscript.schema.json +15 -0
  100. academic_research_kernel-2.0.0/schemas/quantitative-audit.schema.json +66 -0
  101. academic_research_kernel-2.0.0/schemas/reproduction-receipt.schema.json +21 -0
  102. academic_research_kernel-2.0.0/schemas/research-artifact-envelope.schema.json +112 -0
  103. academic_research_kernel-2.0.0/schemas/research-object.schema.json +164 -0
  104. academic_research_kernel-2.0.0/schemas/retraction-delta.schema.json +117 -0
  105. academic_research_kernel-2.0.0/schemas/review-finding.schema.json +47 -0
  106. academic_research_kernel-2.0.0/schemas/review-panel-spec.schema.json +69 -0
  107. academic_research_kernel-2.0.0/schemas/review-result.schema.json +36 -0
  108. academic_research_kernel-2.0.0/schemas/review-run-receipt.schema.json +52 -0
  109. academic_research_kernel-2.0.0/schemas/systematic-review-artifact.schema.json +18 -0
  110. academic_research_kernel-2.0.0/scripts/_version.py +2 -0
  111. academic_research_kernel-2.0.0/scripts/distribution_smoke.py +92 -0
  112. academic_research_kernel-2.0.0/scripts/hermes_runtime_smoke.py +51 -0
  113. academic_research_kernel-2.0.0/scripts/i18n_sync.py +452 -0
  114. academic_research_kernel-2.0.0/scripts/ingestion/__init__.py +52 -0
  115. academic_research_kernel-2.0.0/scripts/ingestion/adapters.py +1989 -0
  116. academic_research_kernel-2.0.0/scripts/ingestion/commitments.py +265 -0
  117. academic_research_kernel-2.0.0/scripts/ingestion/contracts.py +212 -0
  118. academic_research_kernel-2.0.0/scripts/ingestion/engine.py +269 -0
  119. academic_research_kernel-2.0.0/scripts/ingestion/models.py +1024 -0
  120. academic_research_kernel-2.0.0/scripts/ingestion/registry.py +115 -0
  121. academic_research_kernel-2.0.0/scripts/mcp_server.py +898 -0
  122. academic_research_kernel-2.0.0/scripts/package_acceptance.py +40 -0
  123. academic_research_kernel-2.0.0/scripts/qa.py +395 -0
  124. academic_research_kernel-2.0.0/scripts/recompute_direction_coverage.py +85 -0
  125. academic_research_kernel-2.0.0/scripts/release_manifest.py +85 -0
  126. academic_research_kernel-2.0.0/scripts/scfabric/admission.py +180 -0
  127. academic_research_kernel-2.0.0/scripts/scfabric/backends.py +175 -0
  128. academic_research_kernel-2.0.0/scripts/scfabric/compute_receipt.py +88 -0
  129. academic_research_kernel-2.0.0/scripts/scfabric/hardware_probe.py +156 -0
  130. academic_research_kernel-2.0.0/scripts/scfabric/run_ab_matrix.py +55 -0
  131. academic_research_kernel-2.0.0/scripts/scfabric/workload_profiles.py +254 -0
  132. academic_research_kernel-2.0.0/scripts/shared_contracts/__init__.py +33 -0
  133. academic_research_kernel-2.0.0/scripts/shared_contracts/evidence.py +1167 -0
  134. academic_research_kernel-2.0.0/scripts/verify_external_apis.py +41 -0
  135. academic_research_kernel-2.0.0/scripts/verify_release_assets.py +32 -0
  136. academic_research_kernel-2.0.0/server.json +17 -0
  137. academic_research_kernel-2.0.0/skills/academic-source-verification/SKILL.md +220 -0
  138. academic_research_kernel-2.0.0/skills/academic-source-verification/scripts/check_updates.py +160 -0
  139. academic_research_kernel-2.0.0/skills/academic-source-verification/scripts/locate_oa.py +131 -0
  140. academic_research_kernel-2.0.0/skills/academic-source-verification/scripts/normalize_identifier.py +122 -0
  141. academic_research_kernel-2.0.0/skills/academic-source-verification/scripts/verify_pdf_identity.py +153 -0
  142. academic_research_kernel-2.0.0/skills/academic-source-verification/scripts/verify_work.py +205 -0
  143. academic_research_kernel-2.0.0/skills/academic-writing/SKILL.md +124 -0
  144. academic_research_kernel-2.0.0/skills/academic-writing/references/china-academia.md +36 -0
  145. academic_research_kernel-2.0.0/skills/academic-writing/references/citation-styles.md +113 -0
  146. academic_research_kernel-2.0.0/skills/academic-writing/references/mainland-china-academia.md +36 -0
  147. academic_research_kernel-2.0.0/skills/academic-writing/references/submission-letters.md +39 -0
  148. academic_research_kernel-2.0.0/skills/claim-evidence-graph/SKILL.md +138 -0
  149. academic_research_kernel-2.0.0/skills/claim-evidence-graph/scripts/__init__.py +24 -0
  150. academic_research_kernel-2.0.0/skills/claim-evidence-graph/scripts/graph.py +1184 -0
  151. academic_research_kernel-2.0.0/skills/cross-review-five/SKILL.md +139 -0
  152. academic_research_kernel-2.0.0/skills/cross-review-five/docs/implementation-contract-v2.md +110 -0
  153. academic_research_kernel-2.0.0/skills/cross-review-five/scripts/adapters/__init__.py +20 -0
  154. academic_research_kernel-2.0.0/skills/cross-review-five/scripts/adapters/command_adapter.py +185 -0
  155. academic_research_kernel-2.0.0/skills/cross-review-five/scripts/adapters/hermes_cli_adapter.py +204 -0
  156. academic_research_kernel-2.0.0/skills/cross-review-five/scripts/adapters/mock_adapter.py +85 -0
  157. academic_research_kernel-2.0.0/skills/cross-review-five/scripts/contracts.py +324 -0
  158. academic_research_kernel-2.0.0/skills/cross-review-five/scripts/orchestrate.py +199 -0
  159. academic_research_kernel-2.0.0/skills/cross-review-five/scripts/orchestrate_v2.py +1607 -0
  160. academic_research_kernel-2.0.0/skills/decision-ledger/SKILL.md +96 -0
  161. academic_research_kernel-2.0.0/skills/decision-ledger/scripts/__init__.py +34 -0
  162. academic_research_kernel-2.0.0/skills/decision-ledger/scripts/ledger.py +2348 -0
  163. academic_research_kernel-2.0.0/skills/literature-analysis/SKILL.md +269 -0
  164. academic_research_kernel-2.0.0/skills/literature-analysis/references/bibtex-guide.md +36 -0
  165. academic_research_kernel-2.0.0/skills/literature-analysis/references/bilingual-reading.md +31 -0
  166. academic_research_kernel-2.0.0/skills/literature-analysis/references/fallacy-checklist.md +65 -0
  167. academic_research_kernel-2.0.0/skills/literature-analysis/references/journal-matching.md +23 -0
  168. academic_research_kernel-2.0.0/skills/literature-analysis/references/peer-review-template.md +54 -0
  169. academic_research_kernel-2.0.0/skills/literature-analysis/references/reproduction.md +26 -0
  170. academic_research_kernel-2.0.0/skills/literature-analysis/references/research-gap.md +26 -0
  171. academic_research_kernel-2.0.0/skills/literature-analysis/references/review-matrix.md +30 -0
  172. academic_research_kernel-2.0.0/skills/literature-analysis/scripts/build_citation_graph.py +184 -0
  173. academic_research_kernel-2.0.0/skills/literature-analysis/scripts/build_review_matrix.py +112 -0
  174. academic_research_kernel-2.0.0/skills/literature-analysis/scripts/collect_corpus.py +246 -0
  175. academic_research_kernel-2.0.0/skills/literature-analysis/scripts/deduplicate_works.py +164 -0
  176. academic_research_kernel-2.0.0/skills/literature-analysis/scripts/export_bibtex.py +329 -0
  177. academic_research_kernel-2.0.0/skills/literature-analysis/scripts/interop.py +667 -0
  178. academic_research_kernel-2.0.0/skills/literature-watch/SKILL.md +122 -0
  179. academic_research_kernel-2.0.0/skills/literature-watch/scripts/watch.py +438 -0
  180. academic_research_kernel-2.0.0/skills/math-computation/SKILL.md +338 -0
  181. academic_research_kernel-2.0.0/skills/math-computation/references/advanced-recipes.md +203 -0
  182. academic_research_kernel-2.0.0/skills/math-computation/references/domain-recipes-finance.md +171 -0
  183. academic_research_kernel-2.0.0/skills/math-computation/references/domain-recipes-physics-engineering.md +109 -0
  184. academic_research_kernel-2.0.0/skills/math-computation/references/domain-recipes-social-science.md +153 -0
  185. academic_research_kernel-2.0.0/skills/quantitative-paper-audit/SKILL.md +150 -0
  186. academic_research_kernel-2.0.0/skills/quantitative-paper-audit/references/formulas.md +75 -0
  187. academic_research_kernel-2.0.0/skills/quantitative-paper-audit/references/mismatch-catalog.md +73 -0
  188. academic_research_kernel-2.0.0/skills/quantitative-paper-audit/scripts/recompute.py +513 -0
  189. academic_research_kernel-2.0.0/skills/research-object-identity/SKILL.md +160 -0
  190. academic_research_kernel-2.0.0/skills/research-object-identity/scripts/identity.py +524 -0
  191. academic_research_kernel-2.0.0/skills/research-object-identity/scripts/provenance.py +941 -0
  192. academic_research_kernel-2.0.0/skills/research-reproducibility/SKILL.md +118 -0
  193. academic_research_kernel-2.0.0/skills/research-reproducibility/references/adjudication.md +78 -0
  194. academic_research_kernel-2.0.0/skills/research-reproducibility/references/pipeline.md +114 -0
  195. academic_research_kernel-2.0.0/skills/research-reproducibility/scripts/repro_checklist.py +297 -0
  196. academic_research_kernel-2.0.0/skills/retraction-watch/SKILL.md +115 -0
  197. academic_research_kernel-2.0.0/skills/retraction-watch/scripts/watch.py +332 -0
  198. academic_research_kernel-2.0.0/skills/systematic-review-meta-analysis/SKILL.md +244 -0
  199. academic_research_kernel-2.0.0/skills/systematic-review-meta-analysis/references/effect-size-conversions.md +67 -0
  200. academic_research_kernel-2.0.0/skills/systematic-review-meta-analysis/references/search-strategy-guide.md +74 -0
  201. academic_research_kernel-2.0.0/skills/systematic-review-meta-analysis/scripts/meta_core.py +300 -0
  202. academic_research_kernel-2.0.0/src/academic_research_kernel/__init__.py +2 -0
  203. academic_research_kernel-2.0.0/src/academic_research_kernel/__main__.py +3 -0
  204. academic_research_kernel-2.0.0/src/academic_research_kernel/cli.py +90 -0
  205. academic_research_kernel-2.0.0/tests/fixtures/MCP-REGISTRY-LICENSE +216 -0
  206. academic_research_kernel-2.0.0/tests/fixtures/mcp-registry-server.schema.json +574 -0
  207. academic_research_kernel-2.0.0/tests/test_artifact_envelope.py +83 -0
  208. academic_research_kernel-2.0.0/tests/test_audit_batch2.py +230 -0
  209. academic_research_kernel-2.0.0/tests/test_audit_batch3.py +187 -0
  210. academic_research_kernel-2.0.0/tests/test_audit_batch4.py +374 -0
  211. academic_research_kernel-2.0.0/tests/test_audit_batch5.py +380 -0
  212. academic_research_kernel-2.0.0/tests/test_audit_batch6.py +218 -0
  213. academic_research_kernel-2.0.0/tests/test_audit_batch7.py +300 -0
  214. academic_research_kernel-2.0.0/tests/test_audit_batch8.py +120 -0
  215. academic_research_kernel-2.0.0/tests/test_authoring.py +30 -0
  216. academic_research_kernel-2.0.0/tests/test_blueprint_skills.py +150 -0
  217. academic_research_kernel-2.0.0/tests/test_claim_evidence_graph.py +664 -0
  218. academic_research_kernel-2.0.0/tests/test_cross_review_five.py +56 -0
  219. academic_research_kernel-2.0.0/tests/test_cross_review_five_v2.py +738 -0
  220. academic_research_kernel-2.0.0/tests/test_decision_ledger.py +1609 -0
  221. academic_research_kernel-2.0.0/tests/test_direction_grouping.py +105 -0
  222. academic_research_kernel-2.0.0/tests/test_distribution.py +41 -0
  223. academic_research_kernel-2.0.0/tests/test_evidence_contract.py +524 -0
  224. academic_research_kernel-2.0.0/tests/test_evidence_receipt.py +59 -0
  225. academic_research_kernel-2.0.0/tests/test_external_contract.py +66 -0
  226. academic_research_kernel-2.0.0/tests/test_harness_neutral.py +429 -0
  227. academic_research_kernel-2.0.0/tests/test_helper_scripts.py +370 -0
  228. academic_research_kernel-2.0.0/tests/test_ingestion_adversarial.py +285 -0
  229. academic_research_kernel-2.0.0/tests/test_ingestion_bridge.py +214 -0
  230. academic_research_kernel-2.0.0/tests/test_ingestion_closeout.py +338 -0
  231. academic_research_kernel-2.0.0/tests/test_ingestion_closure.py +161 -0
  232. academic_research_kernel-2.0.0/tests/test_ingestion_final_blockers.py +356 -0
  233. academic_research_kernel-2.0.0/tests/test_ingestion_hardening.py +2598 -0
  234. academic_research_kernel-2.0.0/tests/test_interop.py +203 -0
  235. academic_research_kernel-2.0.0/tests/test_license_application.py +129 -0
  236. academic_research_kernel-2.0.0/tests/test_mcp_surface.py +267 -0
  237. academic_research_kernel-2.0.0/tests/test_provenance_kernel.py +673 -0
  238. academic_research_kernel-2.0.0/tests/test_qa.py +69 -0
  239. academic_research_kernel-2.0.0/tests/test_quant_paper_audit.py +275 -0
  240. academic_research_kernel-2.0.0/tests/test_research_lifecycle_e2e.py +179 -0
  241. academic_research_kernel-2.0.0/tests/test_research_object_identity.py +529 -0
  242. academic_research_kernel-2.0.0/tests/test_research_reproducibility.py +236 -0
  243. academic_research_kernel-2.0.0/tests/test_scfabric.py +271 -0
  244. academic_research_kernel-2.0.0/tests/test_systematic_review.py +63 -0
  245. academic_research_kernel-2.0.0/tests/test_tap_discovery.py +39 -0
  246. academic_research_kernel-2.0.0/tests/upstream/LICENSE +21 -0
  247. academic_research_kernel-2.0.0/tests/upstream/hermes_authoring_standards.py +149 -0
  248. academic_research_kernel-2.0.0/tests/upstream/provenance.json +41 -0
  249. academic_research_kernel-2.0.0/tests/upstream/tap_discovery.py +28 -0
  250. academic_research_kernel-2.0.0/tools/longtail/factor_catalog.json +97 -0
  251. academic_research_kernel-2.0.0/tools/longtail/generate.py +511 -0
  252. academic_research_kernel-2.0.0/tools/longtail/generated-scenarios.json +4286 -0
  253. academic_research_kernel-2.0.0/uv.lock +2832 -0
@@ -0,0 +1,41 @@
1
+ name: Live external contract checks
2
+ on:
3
+ schedule:
4
+ - cron: '0 9 * * 1'
5
+ workflow_dispatch:
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ external-apis:
10
+ runs-on: ubuntu-latest
11
+ timeout-minutes: 30
12
+ steps:
13
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
14
+ - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
15
+ with:
16
+ python-version: '3.12'
17
+ cache: pip
18
+ cache-dependency-path: requirements-qa.txt
19
+ - run: python -m pip install -r requirements-qa.txt
20
+ - name: Run external API contract checks
21
+ run: |
22
+ set +e
23
+ python scripts/verify_external_apis.py
24
+ code=$?
25
+ if [ "$code" -eq 2 ]; then
26
+ echo "::warning::External API unavailability, quota or transport failure; not a repository defect."
27
+ exit 0
28
+ fi
29
+ exit "$code"
30
+ dependency-audit:
31
+ runs-on: ubuntu-latest
32
+ timeout-minutes: 15
33
+ steps:
34
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
35
+ - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
36
+ with:
37
+ python-version: '3.12'
38
+ - name: Install pip-audit
39
+ run: python -m pip install pip-audit
40
+ - name: Audit QA requirements for known vulnerabilities
41
+ run: pip-audit -r requirements-qa.txt
@@ -0,0 +1,45 @@
1
+ name: Publish verified 2.0.0 artifacts to PyPI
2
+ on:
3
+ workflow_dispatch:
4
+ permissions:
5
+ contents: read
6
+ concurrency:
7
+ group: pypi-v2.0.0
8
+ cancel-in-progress: false
9
+ jobs:
10
+ publish:
11
+ if: github.ref == 'refs/heads/main'
12
+ runs-on: ubuntu-latest
13
+ environment:
14
+ name: pypi
15
+ url: https://pypi.org/p/academic-research-kernel
16
+ permissions:
17
+ contents: read
18
+ id-token: write
19
+ steps:
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
21
+ with:
22
+ ref: v2.0.0
23
+ fetch-depth: 0
24
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
25
+ with:
26
+ python-version: '3.12'
27
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78
28
+ with:
29
+ version: '0.12.17'
30
+ - name: Fetch immutable release assets and verify source and hashes
31
+ env:
32
+ GH_TOKEN: ${{ github.token }}
33
+ run: |
34
+ git merge-base --is-ancestor HEAD origin/main
35
+ gh release download v2.0.0 --pattern '*.whl' --pattern '*.tar.gz' --pattern 'release-manifest.json' --dir release-input
36
+ python scripts/verify_release_assets.py release-input
37
+ - run: uv run --frozen --extra qa --no-editable python -m twine check --strict dist/*
38
+ - run: python scripts/package_acceptance.py --uvx
39
+ - name: Publish with PyPI Trusted Publishing (no stored token)
40
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33
41
+ with:
42
+ packages-dir: dist/
43
+ - name: Verify actual public package with a clean cache
44
+ run: |
45
+ uv run --no-cache --no-project --python 3.12 --with academic-research-kernel==2.0.0 python -I scripts/distribution_smoke.py -- uvx --no-cache --python 3.12 academic-research-kernel@2.0.0
@@ -0,0 +1,227 @@
1
+ name: Skill correctness QA
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ types: [opened, synchronize, reopened, ready_for_review, converted_to_draft, labeled]
7
+ schedule:
8
+ - cron: '0 9 * * 1'
9
+ workflow_dispatch:
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && format('pr-{0}', github.event.pull_request.number) || github.run_id }}
12
+ # A delayed Draft/no-label event has no jobs to run and must not cancel
13
+ # the deliberately labeled candidate. Ready/full-ci keeps the same protection.
14
+ cancel-in-progress: ${{ github.event_name == 'pull_request' && (github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'full-ci')) && !(github.event.action == 'ready_for_review' && contains(github.event.pull_request.labels.*.name, 'full-ci')) }}
15
+ permissions:
16
+ contents: read
17
+ jobs:
18
+ checks:
19
+ # full-ci requests the complete matrix while Draft, including every later
20
+ # synchronize event. Promotion of that same candidate only triggers review;
21
+ # retain its existing CI evidence instead of paying for a duplicate matrix.
22
+ if: (github.event_name != 'pull_request' || github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'full-ci')) && !(github.event_name == 'pull_request' && github.event.action == 'ready_for_review' && contains(github.event.pull_request.labels.*.name, 'full-ci'))
23
+ strategy:
24
+ fail-fast: false
25
+ matrix:
26
+ include:
27
+ # Linux x86_64 across Python versions
28
+ - os: ubuntu-latest
29
+ arch: x86_64
30
+ python: '3.10'
31
+ - os: ubuntu-latest
32
+ arch: x86_64
33
+ python: '3.11'
34
+ - os: ubuntu-latest
35
+ arch: x86_64
36
+ python: '3.12'
37
+ - os: ubuntu-latest
38
+ arch: x86_64
39
+ python: '3.13'
40
+ - os: ubuntu-latest
41
+ arch: x86_64
42
+ python: '3.14'
43
+ # Linux ARM64
44
+ - os: ubuntu-24.04-arm
45
+ arch: arm64
46
+ python: '3.12'
47
+ # Ubuntu 26.04 preview canary (x86_64 and ARM64)
48
+ - os: ubuntu-26.04
49
+ arch: x86_64
50
+ python: '3.12'
51
+ - os: ubuntu-26.04-arm
52
+ arch: arm64
53
+ python: '3.12'
54
+ # Windows x86_64
55
+ - os: windows-latest
56
+ arch: x86_64
57
+ python: '3.12'
58
+ # Windows ARM64
59
+ - os: windows-11-arm
60
+ arch: arm64
61
+ python: '3.12'
62
+ # macOS Apple Silicon (ARM64)
63
+ - os: macos-latest
64
+ arch: arm64
65
+ python: '3.12'
66
+ # macOS Intel (x86_64)
67
+ - os: macos-15-intel
68
+ arch: x86_64
69
+ python: '3.12'
70
+ runs-on: ${{ matrix.os }}
71
+ timeout-minutes: 25
72
+ steps:
73
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 (Node 24)
74
+ with:
75
+ fetch-depth: 0
76
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 (Node 24)
77
+ with:
78
+ python-version: ${{ matrix.python }}
79
+ cache: pip
80
+ cache-dependency-path: requirements-qa.txt
81
+ - run: python -m pip install -r requirements-qa.txt
82
+ - run: python -m pip install 'torch>=2.5,<3' --index-url https://download.pytorch.org/whl/cpu || echo "Torch CPU wheel unavailable on this architecture, continuing with NumPy/SciPy reference"
83
+ - name: Check committed patch whitespace
84
+ shell: bash
85
+ env:
86
+ DIFF_BASE: ${{ github.event.pull_request.base.sha || github.event.before }}
87
+ DIFF_HEAD: ${{ github.event.pull_request.head.sha || github.sha }}
88
+ run: |
89
+ set -euo pipefail
90
+ # New branches and manual runs have no previous commit: check the full tree.
91
+ if [[ -z "$DIFF_BASE" || "$DIFF_BASE" =~ ^0+$ ]]; then
92
+ DIFF_BASE="$(git hash-object -t tree --stdin </dev/null)"
93
+ fi
94
+ git diff --check "$DIFF_BASE" "$DIFF_HEAD" --
95
+ - run: python scripts/qa.py
96
+ - run: python -m pytest -q tests
97
+ tap-lifecycle:
98
+ # Tap semantics resolve the default branch, so real Hermes integration
99
+ # runs on main pushes and manual dispatches, not on PR heads. PR-level
100
+ # discovery coverage stays with the pinned tap-discovery tests.
101
+ if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref == 'refs/heads/main')
102
+ runs-on: ubuntu-latest
103
+ timeout-minutes: 20
104
+ steps:
105
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 (Node 24)
106
+ - name: Check out pinned Hermes upstream
107
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 (Node 24)
108
+ with:
109
+ repository: NousResearch/hermes-agent
110
+ ref: 245e48008fa814b3251f50755eb656bd9fb86cb1
111
+ path: .hermes-upstream
112
+ fetch-depth: 1
113
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 (Node 24)
114
+ with:
115
+ python-version: '3.12'
116
+ - name: Install pinned Hermes
117
+ run: |
118
+ python -m pip install --upgrade pip
119
+ python -m pip install -e ./.hermes-upstream
120
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78
121
+ with:
122
+ version: '0.12.17'
123
+ - run: python scripts/hermes_runtime_smoke.py
124
+ - name: Tap, search, install and list
125
+ run: |
126
+ hermes skills tap add xngg1021/academic-research-kernel
127
+ hermes skills search academic-source-verification
128
+ hermes skills install xngg1021/academic-research-kernel/skills/academic-source-verification
129
+ hermes skills install xngg1021/academic-research-kernel/skills/quantitative-paper-audit
130
+ hermes skills install xngg1021/academic-research-kernel/skills/retraction-watch
131
+ hermes skills install xngg1021/academic-research-kernel/skills/cross-review-five
132
+ hermes skills list
133
+ upstream-canary:
134
+ # Canary integration against Hermes upstream main branch for forward compatibility
135
+ # Runs on main, manual dispatch, and PRs touching plugins/skills/adapters
136
+ if: github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && (github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'full-ci')) && !(github.event.action == 'ready_for_review' && contains(github.event.pull_request.labels.*.name, 'full-ci'))) || (github.event_name == 'push' && github.ref == 'refs/heads/main')
137
+ runs-on: ubuntu-latest
138
+ timeout-minutes: 20
139
+ steps:
140
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 (Node 24)
141
+ - name: Check out latest Hermes main
142
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 (Node 24)
143
+ with:
144
+ repository: NousResearch/hermes-agent
145
+ ref: main
146
+ path: .hermes-latest
147
+ fetch-depth: 1
148
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 (Node 24)
149
+ with:
150
+ python-version: '3.12'
151
+ - name: Install latest Hermes and test CLI smoke
152
+ run: |
153
+ python -m pip install --upgrade pip
154
+ python -m pip install -e ./.hermes-latest
155
+ hermes --version
156
+ hermes chat --help | grep -E -- '--query-file'
157
+ hermes chat --help | grep -E -- '--ignore-rules'
158
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78
159
+ with:
160
+ version: '0.12.17'
161
+ - run: python scripts/hermes_runtime_smoke.py
162
+ - name: Validate Agent Plugins v1 live loading under Hermes loader
163
+ run: |
164
+ python -c "
165
+ import sys
166
+ from pathlib import Path
167
+ from hermes_cli import agent_plugins
168
+ root = Path('.').resolve()
169
+ diag = []
170
+ manifest, m_diag = agent_plugins._validate_manifest(root)
171
+ diag.extend(m_diag)
172
+ assert manifest is not None and not diag, f'Manifest errors: {diag}'
173
+ mcp = agent_plugins._discover_mcp(root, root / '.data', diag, create_data=False)
174
+ assert 'academic-skills' in mcp and not diag, f'MCP errors: {diag}'
175
+ expected_count = len(list((root / 'skills').glob('*/SKILL.md')))
176
+ assert expected_count >= 12, f'Expected at least 12 skills, found {expected_count}'
177
+ skills = agent_plugins._discover_skills(root, diag)
178
+ assert len(skills) == expected_count and not diag, f'Skill errors: {diag}'
179
+ print(f'Hermes Agent Plugins v1 live validation SUCCESS: {len(skills)} skills, MCP, and manifest clean!')
180
+ "
181
+
182
+ distribution-build:
183
+ if: (github.event_name != 'pull_request' || github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'full-ci')) && !(github.event_name == 'pull_request' && github.event.action == 'ready_for_review' && contains(github.event.pull_request.labels.*.name, 'full-ci'))
184
+ runs-on: ubuntu-latest
185
+ steps:
186
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
187
+ with:
188
+ fetch-depth: 0
189
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
190
+ with:
191
+ python-version: '3.12'
192
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78
193
+ with:
194
+ version: '0.12.17'
195
+ - run: uv lock --check
196
+ - name: Build and validate release candidate
197
+ shell: bash
198
+ run: |
199
+ export SOURCE_DATE_EPOCH="$(git show -s --format=%ct HEAD)"
200
+ uv build
201
+ uv run --frozen --extra qa --no-editable python -m twine check --strict dist/*
202
+ uv run --frozen --extra qa --no-editable python scripts/release_manifest.py --output dist/release-manifest.json
203
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
204
+ with:
205
+ name: distribution-candidate
206
+ path: dist/
207
+ distribution-install:
208
+ needs: distribution-build
209
+ strategy:
210
+ fail-fast: false
211
+ matrix:
212
+ os: [ubuntu-latest, macos-latest, windows-latest]
213
+ runs-on: ${{ matrix.os }}
214
+ timeout-minutes: 15
215
+ steps:
216
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
217
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
218
+ with:
219
+ python-version: '3.12'
220
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78
221
+ with:
222
+ version: '0.12.17'
223
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
224
+ with:
225
+ name: distribution-candidate
226
+ path: dist/
227
+ - run: python scripts/package_acceptance.py --uvx
@@ -0,0 +1,12 @@
1
+ __pycache__/
2
+ .pytest_cache/
3
+ *.pyc
4
+ .venv/
5
+ # Machine-specific benchmark snapshots: receipts carry hardware
6
+ # fingerprints and must never enter the shared repository.
7
+ scripts/scfabric/receipts-*.json
8
+
9
+ dist/
10
+ build/
11
+ *.egg-info/
12
+ .uv-cache/
@@ -0,0 +1,16 @@
1
+ # Contributing to academic-research-kernel
2
+
3
+ Issues, bug reports, research discussion and non-code suggestions are welcome. Unsolicited copyright-bearing code or documentation contributions are not accepted by default. Before the maintainer decides to accept such a contribution, the contributor and the relevant rights holders must establish a separate, explicit inbound arrangement chosen by the maintainer.
4
+
5
+ Submission, opening a pull request, discussion, review or repository hosting alone does not assign copyright or patent rights. SLL is not a CLA and this policy is not an automatic assignment or license-back contract. An inbound arrangement must specify its actual rights and scope; none is invented here. Do not submit material you lack authority to provide, including restricted employer, university, client or third-party material.
6
+
7
+ This upstream intake policy does not restrict use, independent modification or redistribution already permitted by [SLL](LICENSE) or valid historical licenses. [LICENSE-APPLICATION.md](LICENSE-APPLICATION.md) defines the current offer; [LICENSE-HISTORY.md](LICENSE-HISTORY.md) preserves prior boundaries. Repository review roles do not prove copyright ownership or create an obligation to accept or review submissions.
8
+
9
+ ## External proposal intake discipline
10
+
11
+ Wholesale proposals from a single external model (for example a ChatGPT thread) follow a recorded discipline, added 2026-09-17 after the agenda audit:
12
+
13
+ 1. Before adoption, the maintainer writes down their own prior ranking and expectations in a dated note, so external influence is measurable afterwards.
14
+ 2. The proposal passes the five-model review panel (skills/cross-review-five) before implementation. Overnight wholesale adoption is recorded in the risk log.
15
+ 3. Quantitative claims inside a proposal ship with a machine-readable grouping and a recompute script; numbers without a reproducible artifact must not be cited as evidence (research plan, section 8).
16
+ 4. Rejections and their reasons are recorded in the audit trail. A rejection record is evidence that decision space stayed open.
@@ -0,0 +1,176 @@
1
+ # SOURCE LINEAGE LICENSE
2
+ ## Version 1.0
3
+
4
+ **FINAL CANONICAL TEXT.** This document is Source Lineage License Version 1.0 (SLL 1.0). Its exact local machine-readable reference is `LicenseRef-Source-Lineage-1.0`, a local LicenseRef, not an SPDX-assigned identifier. Publication of this License does not constitute OSI approval. The numbered provisions below are the license instrument. Companion reports and templates are non-normative and are not incorporated into it. Placing this document in a review repository does not automatically apply it to that repository or to any other project.
5
+
6
+ ### 1. Definitions
7
+
8
+ 1.1. “License” means this exact English Source Lineage License Version 1.0. It does not mean an earlier development version or a later version.
9
+
10
+ 1.2. “Licensor” means each individual or legal entity offering rights under this License, solely in respect of rights that person owns, controls, or is lawfully entitled to license. “You” means the individual or single legal entity exercising those rights; “Your” has the corresponding meaning.
11
+
12
+ 1.3. “Copyright and Similar Rights” means copyright and related economic rights, including applicable rights in performances, broadcasts, sound recordings, and databases, including sui generis database rights. It excludes patents, trademarks, moral rights, privacy and publicity rights, confidentiality, and trade secrets. “Licensed Rights” means only those Copyright and Similar Rights in Covered Material that the relevant Licensor is lawfully entitled to grant and that apply to Your activity.
13
+
14
+ 1.4. “Covered Material” means the identified work, database, or other material to which a Licensor expressly applies this License, including the Licensor's protected material as present in copies or Modified Material. Merely sharing a repository, package, network, or product does not bring other material within this definition. “Modified Material” means material containing or adapting Covered Material in a manner requiring permission under the relevant Licensed Rights. “Your Contributions” means Your additions, modifications, or other authorship, including within Modified Material, but only to the extent of rights You actually own or may lawfully license.
15
+
16
+ 1.5. “Your Organization” means You and, if You are a legal entity, entities actually controlling, controlled by, or under common control with You. Control means ownership of more than half of the voting rights or an enforceable power to direct ordinary management and operations. A commercial relationship, minority investment, or label alone is insufficient. This definition does not merge separate legal persons or make one responsible for another's conduct.
17
+
18
+ 1.6. “Internal Use” means use solely for the internal purposes of Your Organization by its personnel, or by a contractor acting solely on its behalf for those purposes. It excludes offering the functionality to an external customer for that customer's own use. Separate legal persons receiving copies remain recipients under Section 4, including group entities and contractors.
19
+
20
+ 1.7. “Source Lineage Information” means the supplied, materially relevant identification of Covered Material's upstream origin and modification history: project or work name; identified authors or rights holders, including supplied pseudonyms; source or repository reference; applicable license identity and version; supplied release, commit, or equivalent identifier; and supplied indications of prior modification. It includes relevant intermediate upstream sources supplied with the material, without requiring a complete historical chain or an investigation of unknown history. It does not include confidential development records or information about how a work was created merely because those records exist.
21
+
22
+ 1.8. “Distribute” means supply a copy of Covered Material, including in Modified Material or a larger product, to another person, by sale or otherwise, in source, executable, or another form. Copies supplied to a separate legal person count even within Your Organization. Personnel acting solely for the same legal person are not separate recipients merely through their employment. This definition identifies the notice context; it does not enlarge statutory exclusive rights.
23
+
24
+ 1.9. “Intentional Provenance Falsification” means knowingly making, or knowingly maintaining, a materially false representation of the upstream origin, modification status, or upstream version or revision represented by Covered Material with the purpose of misleading recipients. This includes purposeful removal or substitution of material lineage information to present upstream protected material as wholly independent original work, and false representations that Covered Material is an official or unmodified upstream release or corresponds to a specified upstream version or revision, in each case meeting those knowledge, materiality, and purpose requirements. An allegation, repetition, or an ordinary clerical, metadata, packaging, formatting, placement, transcription, or version-identification error, or an ambiguous technical description, does not by itself establish that purpose.
25
+
26
+ ### 2. Grant and legal scope
27
+
28
+ 2.1. Each Licensor grants You a worldwide, royalty-free, non-exclusive license under the Licensed Rights to use, study, reproduce, modify, translate, port, refactor, display, perform, communicate, make available, Distribute, extract and reuse database contents, and otherwise exploit Covered Material, in any medium, for commercial or non-commercial purposes. This includes automated and agent-assisted activity, combination with proprietary material, and private use of modifications, subject to the applicable conditions below.
29
+
30
+ 2.2. Sections 3.2, 4, and 6 are conditions of this grant only to the extent they are applicable to an actual exercise of Licensed Rights for which the relevant Licensor's permission is legally required, and only to the extent applicable law permits that condition to limit those rights. Acceptance through exercise of Licensed Rights is subject to applicable law. Merely receiving, possessing, reading, or running material does not establish that permission or contractual assent is legally required.
31
+
32
+ 2.3. No provision restricts an activity that can lawfully be undertaken without this permission, including through an exception, limitation, exhaustion, expiry, or independently held license. If a provision operates only as a contractual covenant, it is enforceable as such only where a binding contract and the necessary legal requirements actually exist. Its breach is not made copyright infringement by this License, and does not terminate Licensed Rights through Section 12.
33
+
34
+ 2.4. This License neither creates rights nor proves copyrightability, authorship, title, originality, or ownership. It does not claim ideas, facts, methods, algorithms, functionality, APIs as such, abstract architecture, or independent implementations where applicable law provides no relevant Licensed Rights. It does not warrant clearance of third-party rights.
35
+
36
+ 2.5. Each recipient of Covered Material receives the relevant Licensor's direct offer of these Licensed Rights on these terms, exercisable subject to the recipient's own compliance. Distribution does not require assignment of the distributor's grant. This direct offer supplies no rights the Licensor lacks and does not bypass a recipient's own termination under Section 12.
37
+
38
+ ### 3. Distinct rights layers and other terms
39
+
40
+ 3.1. Upstream protected material and Your Contributions are distinct rights layers even when technically inseparable. No rights in Your Contributions are assigned or automatically licensed to a Licensor by their inclusion in Modified Material. You may keep them closed and apply proprietary or other terms to the rights You actually hold in them. You may license a larger product under Your chosen terms. This License requires no disclosure of source code, modifications, build instructions, prompts, or development records.
41
+
42
+ 3.2. In exercising Licensed Rights to supply Covered Material or Modified Material, You must identify the continued application of this License to the relevant upstream rights. Your additional terms must not purport to erase, replace, or contradict those rights or prevent compliance with their applicable conditions. This does not grant recipients rights in Your Contributions that You have not granted, require separation of code, or prevent access controls protecting Your own material.
43
+
44
+ 3.3. Third-party material remains governed by its applicable rights and terms. Neither inclusion nor attribution under this License relicenses it, cures incompatible obligations, or makes uncopyrightable material copyrightable. Removing all relevant upstream protected material through lawful independent development can remove the need for this License for the resulting material; renaming or mechanically transforming protected expression does not establish that result.
45
+
46
+ ### 4. Distribution notices
47
+
48
+ 4.1. When You Distribute in exercise of Licensed Rights, You must provide recipients with the applicable license identity and version, an unmodified copy of the applicable license text, the supplied and materially relevant copyright and license notices and warranty and liability disclaimers, and the Source Lineage Information relevant to the material supplied. If You supply Modified Material, You must accurately indicate that it has been modified and retain supplied indications of prior modification. A concise indication is sufficient; a detailed change log is not required.
49
+
50
+ 4.2. Required information may be reasonably consolidated in accompanying legal notices, documentation, a notices file, an accessible application notice facility, or other media-appropriate materials delivered with the copy. The full applicable license text must be included in that delivery, including an offline-readable electronic accompanying document where appropriate; a bare external link alone does not satisfy this distribution requirement. Duplicate notices and unrelated notices may be omitted if the relevant substance and the mapping to affected material remain clear.
51
+
52
+ 4.3. Required notices must be reasonably discoverable by the relevant recipient in context. No advertising credit, homepage logo, every-screen notice, fixed click count, fixed font size, or disclosure of source code is required. Sale of a product is permitted, but recipients must not be required to make a separate payment or enter a separate nondisclosure undertaking merely to see its required license and lineage information.
53
+
54
+ ### 5. Service operation and internal use
55
+
56
+ 5.1. Operating Covered Material to provide a network service, without supplying copies of Covered Material to its users, creates no service-lineage notice obligation under this License, regardless of the material's contribution or whether the service is public or privately contracted. Reproduction or modification solely to operate that service does not itself create such a notice obligation or a service-notice basis for termination under Section 12. Actual supply of copies remains subject to Sections 3.2, 4, and 6 to the extent applicable.
57
+
58
+ 5.2. Merely operating a server, interacting over a network, or calling another person's remote service does not by itself establish an exercise of Licensed Rights requiring permission, contractual assent, or infringement.
59
+
60
+ 5.3. Internal Use requires no public notice. Section 4 still applies to copies supplied to separate legal persons in exercise of Licensed Rights. Responsibility for copying, distribution, and external services follows the actual actor and legally attributable conduct, not automatic group-wide liability.
61
+
62
+ ### 6. Accurate lineage and modification information
63
+
64
+ 6.1. This Section applies only when You Distribute in exercise of Licensed Rights. You must not engage in Intentional Provenance Falsification or falsely imply official authorship, status, sponsorship, or endorsement. You may change product names, branding, interfaces, and architecture while preserving required truthful upstream information and modification indications.
65
+
66
+ 6.2. You need preserve only supplied, materially relevant Source Lineage Information and notices. You need not discover unknown authors, reconstruct lost history, keep a former source publicly available, or reactivate a private or dead repository. An unavailable source reference may be retained as a historical identifier. Known material factual inaccuracies may be corrected with a concise indication of the correction, without inventing missing facts or silently substituting Your authorship for upstream authorship.
67
+
68
+ 6.3. Technical removal or relocation of headers or machine-readable metadata is permitted when equivalent required information is preserved in a compliant place and is not made materially misleading. Applicable statutory rules on copyright-management information remain independent; this License does not declare every metadata change unlawful or create a new statutory cause of action.
69
+
70
+ ### 7. Automated activity and databases
71
+
72
+ 7.1. Human-directed tools, agents, automated translation, refactoring, and other transformations are subject to the same rights analysis as other activity. Use of such tools neither automatically severs source lineage nor establishes that every output is a derivative work. Exposure during training or use does not by itself make all later outputs Modified Material. Protection of any human contribution or machine-generated material depends on applicable law and the facts.
73
+
74
+ 7.2. This License imposes no additional restriction on text and data mining or model training within the Licensed Rights. Provider-specific policies are not incorporated. A later unilateral reservation, machine-readable notice, or provider-policy change cannot reduce permissions already validly granted here. Separate arrangements may govern the parties and rights actually within their scope; mandatory exceptions and independently held rights remain unaffected.
75
+
76
+ 7.3. Database permissions cover only rights the relevant Licensor can grant. Protection of selection or arrangement and sui generis database rights must be distinguished from ownership of facts and from rights in individual contents. The applicable notice conditions concern material for which an exercise of those rights actually requires permission, including legally regulated cumulative extraction; they do not create rights over unprotected data.
77
+
78
+ ### 8. Moral rights
79
+
80
+ 8.1. Only a person legally entitled to consent, acting personally or through a legally authorized representative, can give consent concerning moral rights. To the extent the relevant Licensor is such a person and applicable law permits effective consent through this instrument, that person consents to the modifications, translations, and other adaptations authorized here of the identified Covered Material, solely as necessary to exercise the Licensed Rights in compliance with this License.
81
+
82
+ 8.2. This is not a general waiver of moral rights, a transfer of those rights, or consent to false attribution or treatment beyond that limited scope. Economic copyright ownership alone does not establish authority over an author's moral rights. Applicable formalities, unwaivable rights, and statutory exceptions remain effective; no signature or specific author consent is presumed from publication by someone else.
83
+
84
+ ### 9. Patents, names, and other rights
85
+
86
+ 9.1. This License makes no express patent grant. It does not exclude or limit exhaustion, an implied license, estoppel, invalidity, non-infringement, statutory defenses, or any other effect arising independently under applicable law. The absence of an express patent grant does not establish that an activity infringes any patent. Patent permissions may be given by a separate instrument.
87
+
88
+ 9.2. To the extent a Licensor controls relevant trademark rights, this License permits only the use of names necessary for truthful nominative identification and source-lineage attribution. It grants no right to use logos, brand a product, certify it, or claim official status, affiliation, or endorsement. Rights independently available under law remain unaffected. This provision asserts neither the existence nor ownership of any trademark.
89
+
90
+ 9.3. No rights in privacy, publicity, confidentiality, trade secrets, or other excluded rights are granted here. These rights and their lawful exceptions are governed separately.
91
+
92
+ ### 10. Contributions and separate arrangements
93
+
94
+ 10.1. Submission or acceptance of a contribution does not under this License assign copyright or patents, waive moral rights, or authorize unrestricted relicensing or sale of another person's rights. Any inbound grant, assignment, certification, or contribution policy requires its own applicable basis. A contributor is a Licensor only to the extent that contributor actually grants identified rights under this License.
95
+
96
+ 10.2. A rights holder may separately authorize attribution waivers, commercial, exclusive, non-exclusive, dual, field-of-use, territorial, or OEM licensing, or permissions for patents or trademarks, to the extent of rights that holder may grant and subject to existing grants and applicable law. No such instrument is mandatory under this License. A separate agreement binds only those legally bound by it and does not rewrite this License for other recipients or retroactively withdraw their valid grants.
97
+
98
+ ### 11. No service or administration undertaking
99
+
100
+ 11.1. Publishing material or granting this License creates no undertaking to provide support, maintenance, updates, security fixes, compatibility, code review, issue or pull-request review, consulting, legal explanations, service availability, patent clearance, data protection services, or defense or indemnification against claims. It creates no duty to monitor compliance, police downstream use, enforce rights, or respond to cure or reinstatement requests.
101
+
102
+ 11.2. A Licensor need not maintain an active repository, email address, website, company, support channel, or steward. Discontinuing any such facility does not alone terminate existing grants. A person may undertake separate obligations expressly and on that person's own behalf, without authority to bind another Licensor. This License itself imposes no indemnity on either party. Non-excludable legal duties are governed by Section 17.
103
+
104
+ ### 12. Duration, termination, and objective reinstatement
105
+
106
+ 12.1. Each grant endures for the full lawful term of the Licensed Rights, without lapse merely through non-use, subject to this Section and mandatory law under Sections 14 and 17. It is not revocable at will. Mandatory formalities or statutory limits are not displaced by this statement of duration.
107
+
108
+ 12.2. Only a material failure of an applicable license condition identified in Section 2.2 can terminate a grant, and only to the extent that termination is legally effective. Such failure terminates automatically only Your affected Licensed Rights from the affected Licensor in the affected Covered Material. Materiality concerns a substantial impairment of the applicable license identity, material lineage, modification information, or continued upstream permissions in context. Non-material errors do not terminate a grant and must be corrected when discovered where the condition applies.
109
+
110
+ 12.3. A terminated grant automatically reinstates when You cease the non-compliant activity and complete the applicable correction under this Section. For failures other than Intentional Provenance Falsification, correction means correcting the affected copies and notices You continue to supply, and making corrected notice information available by the ordinary delivery or notice channel for the affected recipients. If no such channel remains under Your control, sending the correction to known direct recipients for whom You retain a usable contact is sufficient. No new public service or contact channel must be created. Past copies outside Your control need not be recalled. There is no deadline after which cure requires discretionary approval.
111
+
112
+ 12.4. For Intentional Provenance Falsification, correction additionally requires an express, accurate retraction or correction of the false representation constituting Intentional Provenance Falsification, reasonably directed to the audience to which You made it. You must correct the claims and notices in channels still under Your control and take reasonably practicable steps to send the correction to known direct recipients for whom You retain a usable contact. Correction through those channels or contacts is sufficient; You need not locate unknown recipients, recover all past copies, secure third-party publication, or monitor the correction indefinitely. If neither an affected channel nor a usable direct contact remains, You must correct material still under Your control and include the express correction with any resumed supply. Silent removal of a false claim, without the applicable express correction, is insufficient.
113
+
114
+ 12.5. The Licensor's acknowledgment, consent, response, continued existence, or availability is not required for reinstatement under Sections 12.3 and 12.4. No fee, confession of liability, new agreement, or certification to the Licensor is required. Repeated ordinary errors do not automatically become intentional; actual evidence of knowing, purposeful falsification remains relevant. Each later material failure is assessed under this same Section.
115
+
116
+ 12.6. The relevant Licensor permits, notwithstanding termination under Section 12.2, the exercise of affected Licensed Rights strictly necessary to prepare and deliver corrections required by this Section, including corrected replacement copies for affected recipients. This limited permission does not authorize continued non-compliant exploitation or expansion to new audiences before reinstatement. Preparatory correction of notices for resumed supply can be completed before resumption.
117
+
118
+ 12.7. Reinstatement operates from completion of the applicable cure, not retroactively. It does not release accrued liability, extinguish independent statutory claims, or override a binding court order. Once the applicable correction is completed, the corrected conduct is no longer a continuing violation of that condition. Sections concerning interpretation, disclaimers, liability, historical grants, and the consequences and cure of termination continue to apply as appropriate after termination; they do not authorize continued exploitation of terminated rights.
119
+
120
+ ### 13. Downstream grants and enforcement scope
121
+
122
+ 13.1. A distributor's breach does not by itself terminate a compliant recipient's independently held grant. Each Licensor's grant and each recipient's compliance are assessed separately. A recipient cannot evade its own uncured termination merely by obtaining another copy under the same grant, but an independently valid historical or separate license remains governed by its own terms.
123
+
124
+ 13.2. This License gives no person standing to enforce rights that person does not own or cannot lawfully enforce. Ownership of a contribution, project administration, or stewardship does not authorize control over unrelated material or other contributors' rights. Termination of a limited contribution does not terminate others' grants, although use of an inseparable combination may still require permission for that contribution. Remedies, proof, causation, and standing remain matters of applicable law.
125
+
126
+ ### 14. Ownership changes and historical grants
127
+
128
+ 14.1. A Licensor remains free, to the extent permitted by applicable law and rights still held, to retain, assign, contribute, encumber, finance against, or otherwise transfer rights, or to license them under separate terms. This License imposes no consent requirement for those transactions and itself effects no transfer of ownership. Applicable formalities, prior grants, contributors' rights, and third-party encumbrances remain relevant.
129
+
130
+ 14.2. Valid historical grants remain governed by their own terms. Assignment, employment, incorporation, sale of assets or shares, merger, change of control, a change in repository visibility or access, abandonment, death, incapacity, or a later licensing policy does not by itself revoke those grants. A claimed exclusive license or later sale cannot erase earlier valid non-exclusive grants merely through this License. Historical licenses, including MIT or other licenses, are not replaced by applying this License to a later release.
131
+
132
+ 14.3. Existing grants do not require future unreleased material to be offered on the same terms. A rights holder may stop making new releases or apply different terms to future material within the rights that holder actually possesses. This freedom does not withdraw permissions already validly granted in material included in those future releases.
133
+
134
+ 14.4. Continuity is subject to non-excludable statutory termination, reversion, insolvency, succession, and analogous rules, including their formalities and any required recipient elections. This License does not promise absolute survival in every jurisdiction, revive an already validly terminated grant without cure, or require an estate, successor, or insolvency representative to provide continued services.
135
+
136
+ ### 15. Disclaimer of warranties
137
+
138
+ 15.1. To the maximum extent permitted by applicable law, Covered Material and the permissions here are provided as is and as available, without any express, implied, statutory, or other representation or warranty, including title, non-infringement, merchantability, fitness for a purpose, accuracy, security, compatibility, absence of defects, or continued availability. You assess their suitability and the rights required for Your activity. This allocation does not require You to indemnify anyone. This disclaimer and the limitation in Section 16 benefit each Licensor, author, contributor, maintainer, and license steward, solely in respect of that person's participation in Covered Material or stewardship of this License as applied to it, whether or not that person currently holds or grants Licensed Rights. These protections do not make a person a Licensor or confer ownership of or standing to enforce Licensed Rights, authority to bind another person, or responsibility for another's conduct. The protections under Sections 15 and 16 do not extend to liability to the extent arising from a person's own material failure, in the capacity of a recipient or distributor, to comply with an applicable condition of another Licensor's grant under Sections 3.2, 4, or 6, or from that person's exercise beyond the Licensed Rights received from that other Licensor, including exercise after termination and before reinstatement except as permitted by Section 12.6. This boundary applies to the actual conduct, capacity, and rights relationship giving rise to the claim, regardless of the person's other roles or the label or legal theory of the claim. A non-material error under Section 12.2 does not by itself remove these protections. The protections otherwise remain applicable to risks of licensing, authorship, contribution, maintenance, or stewardship, including defects and ordinary participation-related negligence; receiving or distributing material does not by itself remove them. This boundary creates no liability or entitlement to damages, imposes no new duty, and does not limit independently available permissions, exceptions, or defenses.
139
+
140
+ 15.2. A separate express undertaking binds only the person legally making it and only within its scope. Neither a contributor, steward, distributor, nor recipient has authority under this License to give warranties on another Licensor's behalf. Section 17 preserves liabilities and duties that cannot lawfully be excluded.
141
+
142
+ ### 16. Limitation of liability
143
+
144
+ 16.1. To the maximum extent permitted by applicable law, no person described in Section 15.1, acting in the capacity specified there, is liable to You on any legal theory, including contract, tort, or negligence, for direct, indirect, incidental, special, consequential, exemplary, or punitive loss, damage, cost, or expense arising from this License or the use or inability to use Covered Material, including lost profits, data, goodwill, business, or service, even if advised of the possibility. No monetary cap or indemnity is created.
145
+
146
+ 16.2. This exclusion does not apply to liability that applicable law prohibits excluding or limiting, including fraud, intentional misconduct, gross negligence, death or personal injury, or other mandatory liability to the extent non-excludable in the relevant jurisdiction. It does not extinguish an enforceable separate express undertaking by the person making it. Invalidity of an exclusion is addressed under Section 17, without presuming a court must rewrite it to achieve maximum exclusion.
147
+
148
+ ### 17. Mandatory law and interpretation
149
+
150
+ 17.1. Mandatory law prevails, including non-excludable consumer protections, liability, author rights, statutory exceptions, and applicable formalities. If a statute, regulation, or binding judicial order prevents a particular notice, You must comply with the remaining lawful requirements and provide a lawful substitute identifying the affected material and limitation to the extent legally permitted and reasonably practicable. A private confidentiality agreement or commercial preference does not by itself excuse compliance.
151
+
152
+ 17.2. This License selects no governing law, court, arbitration, fee-shifting rule, or fixed damages. Those matters follow applicable law or an effective separate agreement within its scope. Nothing creates automatic statutory damages, a presumption of intent, or a duty to litigate.
153
+
154
+ 17.3. If a provision is invalid or unenforceable, its severance or permitted adjustment and the effect on remaining provisions are governed by applicable law; no forbidden judicial rewriting is required. Failure to enforce is not by itself a change to this License. That statement does not eliminate waiver, estoppel, or other effects imposed by law.
155
+
156
+ ### 18. Exact versions and future publication
157
+
158
+ 18.1. Only the exact version actually offered for the relevant material applies by default. For this final SLL 1.0, this policy is described as SLL-1.0-only. The description is not a claim of SPDX registration. This License does not authorize automatic migration to a future SLL version.
159
+
160
+ 18.2. A recipient may use a later official SLL version only if a rights holder with sufficient authority expressly offered that choice for the relevant material, such as an explicit or-later grant, and the later version was legitimately issued under the applicable stewardship authority. Such a choice is the recipient's option, not a power to force migration. No later version changes the text or scope of the earlier valid grant by itself.
161
+
162
+ 18.3. Final SLL 1.0 is an immutable identified text. Any later substantive revision must have a separate version identity. Disputed stewardship, loss of an account, an unavailable website, or failure to appoint a successor does not amend existing text or invalidate its use under an existing grant.
163
+
164
+ ### 19. Separate stewardship and ownership
165
+
166
+ 19.1. Junfu Shi is the Initial License Steward for the SLL development project. That role does not, without a separate legal basis, establish ownership of any project's copyright, patent, trademark, contribution, repository, domain, account, or signing key. Each may be held by a different person or entity. A transfer of any one does not by itself transfer the others or authority to rewrite an existing license.
167
+
168
+ 19.2. Authority for future official versions may pass through a separate valid, authenticated designation or other applicable legal authority. This License does not appoint an automatic successor from repository control, inheritance of a key, or acquisition of project assets. No active steward or response is necessary to identify and use an already validly granted version. This provision imposes no obligation on the Initial License Steward to appoint a successor or administer requests.
169
+
170
+ ### 20. Text identity and copies
171
+
172
+ 20.1. This exact English Source Lineage License Version 1.0 is the canonical reference text. Faithful copies may be made with the identity intact. Adaptations of this license text may be made, but a changed text must have a distinct identity and must not be presented as this unchanged License. Translations may be supplied for information with their status identified and the applicable English text preserved, subject to mandatory law. These permissions extend only to rights lawfully available from the person authorizing use of the license text.
173
+
174
+ 20.2. A digest, commit identifier, signature, hosting platform, or license-list reference may help identify evidence of particular bytes; none certifies legality, copyrightability, ownership, authority, or approval. A faithful media or line-ending conversion is not, solely because its bytes differ, a substantive license amendment; the original identified text remains the comparison reference.
175
+
176
+ End of Source Lineage License Version 1.0.
@@ -0,0 +1,21 @@
1
+ # License application — hermes-academic-skills
2
+
3
+ Project: **hermes-academic-skills**. Repository: [`xngg1021/hermes-academic-skills`](https://github.com/xngg1021/hermes-academic-skills). Licensor and project/license steward: **Junfu Shi**, public identifier **SJF**, GitHub **@xngg1021**. Stewardship and repository administration do not themselves establish ownership or authority to license.
4
+
5
+ ## Express offer and scope
6
+
7
+ Unless a more specific file or directory notice states otherwise, copyrightable hermes-academic-skills material in this identified repository snapshot for which Junfu Shi owns, controls, or is lawfully entitled to license the relevant Copyright and Similar Rights is offered under **Source Lineage License Version 1.0**, local reference **LicenseRef-Source-Lineage-1.0**, in the exact English [LICENSE](LICENSE).
8
+
9
+ This notice identifies the snapshot containing it. Its first application commit and tree are recorded in [SOURCE-LINEAGE.md](SOURCE-LINEAGE.md), [LICENSE-HISTORY.md](LICENSE-HISTORY.md) and [SLL-APPLICATION.json](SLL-APPLICATION.json). Later snapshots retaining this application notice make the same scoped offer, subject to more specific notices and rights actually held. Earlier snapshots are not retroactively relabeled.
10
+
11
+ ## Rights outside this offer
12
+
13
+ The material in tests/upstream/ remains under its separately supplied Nous Research MIT license and provenance records; the root SLL offer does not replace those terms. The preserved LICENSES/MIT-pre-SLL.txt records this project's former root MIT license. Historical audit records describe their original snapshots. All other third-party material remains under its own applicable rights and terms.
14
+
15
+ This notice does not claim ownership of third-party material, facts, ideas, methods, algorithms, functionality, APIs as such, independent implementations or material whose rights are uncertain. SLL licenses only rights the relevant Licensor can legally grant; it establishes neither title nor copyrightability and provides no express patent grant. Permission from this Licensor does not supply missing third-party permission.
16
+
17
+ All valid historical grants remain effective according to their terms and applicable law. Adoption does not revoke earlier permissions or impose SLL retroactively on copies obtained under those permissions. Separate contracts, third-party notices and statutory rights keep their own scope.
18
+
19
+ ## Text identity
20
+
21
+ The root LICENSE is an exact byte copy of the [canonical English SLL 1.0 text](https://github.com/xngg1021/source-lineage-license-review/blob/ee413d709ba35ca44406473f9d468d022d13fdec/final/source-lineage-license-1.0/SOURCE_LINEAGE_LICENSE_1.0.md): SHA-256 `f6c982dafe666ceb2b01df4bc4f146e4facbd6f62753b7ae4cfd324f1db7cda6`; blob `d24b763a2d3ecbc13c21760c60345b8e9adff33d`. The local LicenseRef is not an SPDX-assigned identifier. Adoption or publication does not imply OSI approval. README summaries and translations are informational; the exact English LICENSE controls. This notice supplies the project application boundary without modifying SLL or incorporating a research-credit protocol into it.
@@ -0,0 +1,26 @@
1
+ # License history — hermes-academic-skills
2
+
3
+ ## Pre-SLL terminal snapshot — MIT
4
+
5
+ Main `439ce4a29d6d2d9137308d7f9f045863e9f0c5b3` was distributed with this project's root **MIT License**, copyright (c) 2026 Junfu Shi (xngg1021). Its exact text is preserved in [LICENSES/MIT-pre-SLL.txt](LICENSES/MIT-pre-SLL.txt) and the [fixed historical LICENSE](https://github.com/xngg1021/hermes-academic-skills/blob/439ce4a29d6d2d9137308d7f9f045863e9f0c5b3/LICENSE).
6
+
7
+ Recipients of that and earlier valid MIT snapshots retain the permissions already granted under MIT, subject to the terms applicable to those copies. They do not have to migrate to SLL. Valid MIT permissions for material obtained from those snapshots are not removed merely because the same material also appears in a later SLL-offered snapshot. Future additions are not automatically included in an earlier grant.
8
+
9
+ The separately identified [Nous Research MIT license](tests/upstream/LICENSE) and [upstream provenance](tests/upstream/provenance.json) remain unchanged. This transition neither claims those rights nor relabels that material as exclusively SLL.
10
+
11
+ ## First SLL snapshot
12
+
13
+ - Application commit: `441ab72e85c9ea607680dac7d8abdbd53f163ae4`.
14
+ - Application tree: `91c3d15d167e8bb46010cd45f21b38c7c7d7864d`.
15
+ - Version: repository application; no product version bump.
16
+ - License: Source Lineage License Version 1.0 / LicenseRef-Source-Lineage-1.0.
17
+ - Exact LICENSE SHA-256: `f6c982dafe666ceb2b01df4bc4f146e4facbd6f62753b7ae4cfd324f1db7cda6`.
18
+ - Canonical SLL source commit: `ee413d709ba35ca44406473f9d468d022d13fdec`; no tag/release assumed.
19
+
20
+ Commit A creates the express application and exact LICENSE; Commit B records A's actual SHA/tree without amending it. [SOURCE-LINEAGE.md](SOURCE-LINEAGE.md) and [SLL-APPLICATION.json](SLL-APPLICATION.json) carry the same boundary. The [application notice](LICENSE-APPLICATION.md) supplies the rights-aware scope.
21
+
22
+ No prior snapshot is retroactively rewritten by this adoption. All valid historical grants and all third-party rights retain their own scope, subject to applicable law. No old commit, tag or release is changed. The root [LICENSE](LICENSE) is the exact English SLL text, not a new license variant.
23
+
24
+ ## Prose cleanup after adoption — 2026-09-16
25
+
26
+ Skill prose was cleaned (declarative phrasing, punctuation runs, colloquial asides) without semantic change. Frontmatter, code blocks, tables, citation example blocks, versions and hashes stayed byte-identical. The adoption-moment skill body hashes moved from the machine-readable receipt to SOURCE-LINEAGE.md as a historical record; the receipt no longer asserts that current skill bodies equal adoption bodies. The adoption boundary (Commit A `441ab72e85c9ea607680dac7d8abdbd53f163ae4`, tree `91c3d15d167e8bb46010cd45f21b38c7c7d7864d`) is unchanged.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Junfu Shi (xngg1021)
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.