cositos 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 (261) hide show
  1. cositos-0.1.0/.agents/skills/beads/SKILL.md +80 -0
  2. cositos-0.1.0/.agents/skills/beads/agents/openai.yaml +4 -0
  3. cositos-0.1.0/.beads/issues.jsonl +5 -0
  4. cositos-0.1.0/.claude/settings.json +15 -0
  5. cositos-0.1.0/.codex/config.toml +2 -0
  6. cositos-0.1.0/.codex/hooks.json +51 -0
  7. cositos-0.1.0/.dont/AGENTS.md +69 -0
  8. cositos-0.1.0/.dont/config.toml +14 -0
  9. cositos-0.1.0/.dont/seed/dont-seed.yaml +25 -0
  10. cositos-0.1.0/.editorconfig +14 -0
  11. cositos-0.1.0/.espectacular/AGENTS.md +1 -0
  12. cositos-0.1.0/.espectacular/config.toml +8 -0
  13. cositos-0.1.0/.espectacular/embed/a-closing-script-tag-in-state-is-neutralised.toml +10 -0
  14. cositos-0.1.0/.espectacular/embed/a-view-script-is-emitted-per-model.toml +10 -0
  15. cositos-0.1.0/.espectacular/embed/each-model-s-state-carries-anywidget-view-identity.toml +10 -0
  16. cositos-0.1.0/.espectacular/embed/only-requested-views-are-emitted.toml +10 -0
  17. cositos-0.1.0/.espectacular/embed/the-cdn-html-manager-loader-is-included.toml +10 -0
  18. cositos-0.1.0/.espectacular/embed/the-document-state-is-embedded-as-widget-state-json.toml +10 -0
  19. cositos-0.1.0/.espectacular/embed/write-html-persists-the-page.toml +10 -0
  20. cositos-0.1.0/.espectacular/protocol/comm-open-includes-anymodel-and-anyview-identity.toml +10 -0
  21. cositos-0.1.0/.espectacular/protocol/nested-binary-values-are-split-and-merged-losslessly.toml +10 -0
  22. cositos-0.1.0/.espectacular/protocol/unknown-method-is-ignored.toml +10 -0
  23. cositos-0.1.0/.espectacular/serialization/a-single-model-round-trips-losslessly.toml +10 -0
  24. cositos-0.1.0/.espectacular/serialization/binary-buffers-are-base64-encoded-per-the-v2-schema.toml +10 -0
  25. cositos-0.1.0/.espectacular/serialization/child-references-survive-a-round-trip.toml +10 -0
  26. cositos-0.1.0/.espectacular/serialization/duplicate-model-ids-are-rejected.toml +10 -0
  27. cositos-0.1.0/.espectacular/serialization/empty-model-id-is-rejected.toml +10 -0
  28. cositos-0.1.0/.espectacular/serialization/front-end-code-is-preserved.toml +10 -0
  29. cositos-0.1.0/.espectacular/serialization/reference-cycles-do-not-break-loading.toml +10 -0
  30. cositos-0.1.0/.espectacular/serialization/the-document-envelope-declares-the-state-format-version.toml +10 -0
  31. cositos-0.1.0/.github/release.yml +37 -0
  32. cositos-0.1.0/.github/workflows/docs.yml +59 -0
  33. cositos-0.1.0/.github/workflows/release.yml +65 -0
  34. cositos-0.1.0/.github/workflows/verify.yml +104 -0
  35. cositos-0.1.0/.gitignore +59 -0
  36. cositos-0.1.0/.pi/prompts/opsx-apply.md +153 -0
  37. cositos-0.1.0/.pi/prompts/opsx-archive.md +158 -0
  38. cositos-0.1.0/.pi/prompts/opsx-explore.md +172 -0
  39. cositos-0.1.0/.pi/prompts/opsx-propose.md +107 -0
  40. cositos-0.1.0/.pi/prompts/opsx-sync.md +141 -0
  41. cositos-0.1.0/.pi/skills/openspec-apply-change/SKILL.md +159 -0
  42. cositos-0.1.0/.pi/skills/openspec-archive-change/SKILL.md +117 -0
  43. cositos-0.1.0/.pi/skills/openspec-explore/SKILL.md +289 -0
  44. cositos-0.1.0/.pi/skills/openspec-propose/SKILL.md +113 -0
  45. cositos-0.1.0/.pi/skills/openspec-sync-specs/SKILL.md +147 -0
  46. cositos-0.1.0/.python-version +1 -0
  47. cositos-0.1.0/.wai/.gitignore +3 -0
  48. cositos-0.1.0/.wai/AGENTS.md +106 -0
  49. cositos-0.1.0/.wai/PLUGINS.md +30 -0
  50. cositos-0.1.0/.wai/config.toml +9 -0
  51. cositos-0.1.0/.wai/projects/cositos-core/.pending-resume +1 -0
  52. cositos-0.1.0/.wai/projects/cositos-core/.state +31 -0
  53. cositos-0.1.0/.wai/projects/cositos-core/designs/2026-07-03-design-cositos-a-portable-anywidget-backend.md +90 -0
  54. cositos-0.1.0/.wai/projects/cositos-core/designs/2026-07-06-design-expanding-the-cositos-backend-language-s.md +116 -0
  55. cositos-0.1.0/.wai/projects/cositos-core/designs/2026-07-06-design-notebooks-static-html-export-and-integ.md +93 -0
  56. cositos-0.1.0/.wai/projects/cositos-core/designs/2026-07-06-design-serializable-widgets-composition-and-a.md +187 -0
  57. cositos-0.1.0/.wai/projects/cositos-core/designs/2026-07-07-decision-json-schema-to-document-portable-aut.md +93 -0
  58. cositos-0.1.0/.wai/projects/cositos-core/designs/2026-07-09-design-controls-catalog-schema-and-scope.md +209 -0
  59. cositos-0.1.0/.wai/projects/cositos-core/designs/2026-07-10-ci-docs-release-infrastructure-github-actions.md +1 -0
  60. cositos-0.1.0/.wai/projects/cositos-core/plans/2026-07-03-plan-cositos-v0-implementation-tdd-each-ti.md +53 -0
  61. cositos-0.1.0/.wai/projects/cositos-core/plans/2026-07-10-ci-docs-release-verify-docs-release-infra-impleme.md +1 -0
  62. cositos-0.1.0/.wai/projects/cositos-core/plans/2026-07-10-implemented-verify-yml-docs-build-docs-yml-deplo.md +1 -0
  63. cositos-0.1.0/.wai/projects/cositos-core/research/2026-07-03-research-porting-the-anywidget-backend-to-a-new.md +96 -0
  64. cositos-0.1.0/.wai/projects/cositos-core/research/2026-07-07-publish-readiness-review-2026-07-07-two-rule.md +92 -0
  65. cositos-0.1.0/.wai/projects/cositos-core/research/2026-07-07-research-integrating-cositos-widgets-with-clojure-clay.md +189 -0
  66. cositos-0.1.0/.wai/projects/cositos-core/research/2026-07-07-research-reusing-cositos-in-a-tui-bubble-tea.md +127 -0
  67. cositos-0.1.0/.wai/projects/cositos-core/research/2026-07-07-widget-app-state-management-benchmark-findings.md +98 -0
  68. cositos-0.1.0/.wai/projects/cositos-core/research/2026-07-09-research-real-controls-widgets-as-optional-extension.md +94 -0
  69. cositos-0.1.0/.wai/resources/agent-config/.projections.yml +12 -0
  70. cositos-0.1.0/AGENTS.md +196 -0
  71. cositos-0.1.0/CLAUDE.md +173 -0
  72. cositos-0.1.0/LICENSE +21 -0
  73. cositos-0.1.0/NOTICE +51 -0
  74. cositos-0.1.0/PKG-INFO +147 -0
  75. cositos-0.1.0/README.md +91 -0
  76. cositos-0.1.0/TOOL_EVALUATION.md +448 -0
  77. cositos-0.1.0/chat.md +27 -0
  78. cositos-0.1.0/clojure/.gitignore +3 -0
  79. cositos-0.1.0/clojure/README.md +37 -0
  80. cositos-0.1.0/clojure/deps.edn +18 -0
  81. cositos-0.1.0/clojure/dev/cositos/clay_demo.clj +77 -0
  82. cositos-0.1.0/clojure/dev/cositos/clay_notebook.clj +111 -0
  83. cositos-0.1.0/clojure/dev/cositos/clay_spike.clj +30 -0
  84. cositos-0.1.0/clojure/dev/cositos/clojupyter_transport.clj +148 -0
  85. cositos-0.1.0/clojure/src/cositos/clay.clj +70 -0
  86. cositos-0.1.0/clojure/src/cositos/core.clj +178 -0
  87. cositos-0.1.0/clojure/test/cositos/clay_test.clj +69 -0
  88. cositos-0.1.0/clojure/test/cositos/core_test.clj +120 -0
  89. cositos-0.1.0/clojure/test/cositos/test_runner.clj +10 -0
  90. cositos-0.1.0/coverage-manifest.toml +36 -0
  91. cositos-0.1.0/csharp/Core.cs +258 -0
  92. cositos-0.1.0/csharp/Program.cs +163 -0
  93. cositos-0.1.0/csharp/README.md +31 -0
  94. cositos-0.1.0/csharp/cositos.csproj +12 -0
  95. cositos-0.1.0/docs/.gitignore +8 -0
  96. cositos-0.1.0/docs/_quarto.yml +79 -0
  97. cositos-0.1.0/docs/bd-sync.md +161 -0
  98. cositos-0.1.0/docs/explanation/architecture.qmd +87 -0
  99. cositos-0.1.0/docs/explanation/state-discipline.qmd +184 -0
  100. cositos-0.1.0/docs/hooks.md +54 -0
  101. cositos-0.1.0/docs/hosts.md +135 -0
  102. cositos-0.1.0/docs/index.qmd +38 -0
  103. cositos-0.1.0/docs/pluto.md +134 -0
  104. cositos-0.1.0/docs/porting.md +101 -0
  105. cositos-0.1.0/docs/prepare.sh +9 -0
  106. cositos-0.1.0/docs/publish-readiness-review-2026-07-07.md +87 -0
  107. cositos-0.1.0/docs/reference/api-cheatsheet.qmd +59 -0
  108. cositos-0.1.0/docs/reference/index.qmd +131 -0
  109. cositos-0.1.0/docs/reference/specs.qmd +34 -0
  110. cositos-0.1.0/docs/status.md +65 -0
  111. cositos-0.1.0/docs/tutorials/authoring-widgets.qmd +102 -0
  112. cositos-0.1.0/docs/tutorials/dashboard.qmd +130 -0
  113. cositos-0.1.0/docs/tutorials/integrating.qmd +66 -0
  114. cositos-0.1.0/docs/tutorials/plot-integration.qmd +103 -0
  115. cositos-0.1.0/docs/tutorials/polyglot-parity.qmd +86 -0
  116. cositos-0.1.0/docs/tutorials/quickstart.qmd +155 -0
  117. cositos-0.1.0/docs/tutorials/save-restore.qmd +106 -0
  118. cositos-0.1.0/docs/tutorials/static-export.qmd +84 -0
  119. cositos-0.1.0/docs/tutorials/web-ojs.qmd +72 -0
  120. cositos-0.1.0/docs/widgets-gallery.qmd +378 -0
  121. cositos-0.1.0/docs/widgets.md +61 -0
  122. cositos-0.1.0/examples/README.md +86 -0
  123. cositos-0.1.0/examples/benchmarks/README.md +165 -0
  124. cositos-0.1.0/examples/benchmarks/RESULTS.md +108 -0
  125. cositos-0.1.0/examples/benchmarks/benchlib.py +218 -0
  126. cositos-0.1.0/examples/benchmarks/crossfilter.py +298 -0
  127. cositos-0.1.0/examples/benchmarks/dynamic.py +159 -0
  128. cositos-0.1.0/examples/benchmarks/form.py +282 -0
  129. cositos-0.1.0/examples/benchmarks/masterdetail.py +216 -0
  130. cositos-0.1.0/examples/benchmarks/reactive.py +146 -0
  131. cositos-0.1.0/examples/benchmarks/reactive_selftest.py +57 -0
  132. cositos-0.1.0/examples/benchmarks/run.py +90 -0
  133. cositos-0.1.0/examples/binder/README.md +47 -0
  134. cositos-0.1.0/examples/binder/environment.yml +23 -0
  135. cositos-0.1.0/examples/composition/build.py +89 -0
  136. cositos-0.1.0/examples/composition/vbox.html +81 -0
  137. cositos-0.1.0/examples/dashboard/build.py +307 -0
  138. cositos-0.1.0/examples/e2e/README.md +89 -0
  139. cositos-0.1.0/examples/e2e/clojure/deps.edn +6 -0
  140. cositos-0.1.0/examples/e2e/clojure/dump.clj +72 -0
  141. cositos-0.1.0/examples/e2e/expected.json +15 -0
  142. cositos-0.1.0/examples/e2e/julia/Manifest.toml +107 -0
  143. cositos-0.1.0/examples/e2e/julia/Project.toml +3 -0
  144. cositos-0.1.0/examples/e2e/julia/dump.jl +78 -0
  145. cositos-0.1.0/examples/e2e/python_e2e.py +87 -0
  146. cositos-0.1.0/examples/notebooks/clojure_counter.ipynb +151 -0
  147. cositos-0.1.0/examples/notebooks/julia_counter.ipynb +109 -0
  148. cositos-0.1.0/examples/notebooks/pluto_demo.jl +68 -0
  149. cositos-0.1.0/examples/notebooks/python_counter.ipynb +122 -0
  150. cositos-0.1.0/examples/parity/Manifest.toml +105 -0
  151. cositos-0.1.0/examples/parity/Project.toml +3 -0
  152. cositos-0.1.0/examples/parity/README.md +21 -0
  153. cositos-0.1.0/examples/parity/dump.jl +10 -0
  154. cositos-0.1.0/examples/plots/build.py +51 -0
  155. cositos-0.1.0/examples/plots/plotly.html +862 -0
  156. cositos-0.1.0/examples/static-export/.gitignore +4 -0
  157. cositos-0.1.0/examples/static-export/README.md +58 -0
  158. cositos-0.1.0/examples/static-export/build.py +77 -0
  159. cositos-0.1.0/examples/static-export/jupyterbook/_config.yml +18 -0
  160. cositos-0.1.0/examples/static-export/jupyterbook/_toc.yml +7 -0
  161. cositos-0.1.0/examples/static-export/quarto/_quarto.yml +13 -0
  162. cositos-0.1.0/examples/static-export/quarto/counter.qmd +24 -0
  163. cositos-0.1.0/examples/web/exported-widget-state.html +65 -0
  164. cositos-0.1.0/examples/web/index.html +67 -0
  165. cositos-0.1.0/examples/widgets/button.js +19 -0
  166. cositos-0.1.0/examples/widgets/checkbox.js +18 -0
  167. cositos-0.1.0/examples/widgets/download_button.js +42 -0
  168. cositos-0.1.0/examples/widgets/dropdown.js +27 -0
  169. cositos-0.1.0/examples/widgets/html.js +13 -0
  170. cositos-0.1.0/examples/widgets/int_slider.js +32 -0
  171. cositos-0.1.0/examples/widgets/text.js +18 -0
  172. cositos-0.1.0/fixtures/comm_open.json +20 -0
  173. cositos-0.1.0/fixtures/controls-catalog.json +131 -0
  174. cositos-0.1.0/fixtures/custom.json +9 -0
  175. cositos-0.1.0/fixtures/update.json +10 -0
  176. cositos-0.1.0/fixtures/update_nested_buffer.json +21 -0
  177. cositos-0.1.0/fixtures/widget-state.json +38 -0
  178. cositos-0.1.0/front/package-lock.json +1581 -0
  179. cositos-0.1.0/front/package.json +28 -0
  180. cositos-0.1.0/front/src/buffers.js +66 -0
  181. cositos-0.1.0/front/src/channels.js +207 -0
  182. cositos-0.1.0/front/src/index.js +14 -0
  183. cositos-0.1.0/front/src/model.js +126 -0
  184. cositos-0.1.0/front/src/runtime.js +51 -0
  185. cositos-0.1.0/front/test/buffers.test.js +32 -0
  186. cositos-0.1.0/front/test/clay_channel.test.js +168 -0
  187. cositos-0.1.0/front/test/conformance.test.js +53 -0
  188. cositos-0.1.0/front/test/gallery.test.js +160 -0
  189. cositos-0.1.0/front/test/loader.test.js +44 -0
  190. cositos-0.1.0/front/test/model.test.js +165 -0
  191. cositos-0.1.0/front/test/pluto.test.js +73 -0
  192. cositos-0.1.0/front/test/runtime.test.js +75 -0
  193. cositos-0.1.0/front/tsconfig.json +16 -0
  194. cositos-0.1.0/julia/Project.toml +31 -0
  195. cositos-0.1.0/julia/README.md +54 -0
  196. cositos-0.1.0/julia/ext/CositosControlsExt.jl +152 -0
  197. cositos-0.1.0/julia/ext/CositosIJuliaExt.jl +115 -0
  198. cositos-0.1.0/julia/ext/CositosPlutoExt.jl +152 -0
  199. cositos-0.1.0/julia/src/Cositos.jl +716 -0
  200. cositos-0.1.0/julia/test/controls_tests.jl +176 -0
  201. cositos-0.1.0/julia/test/host_tests.jl +176 -0
  202. cositos-0.1.0/julia/test/runtests.jl +362 -0
  203. cositos-0.1.0/lefthook.yml +43 -0
  204. cositos-0.1.0/llm.txt +36 -0
  205. cositos-0.1.0/mise.toml +239 -0
  206. cositos-0.1.0/openspec/changes/archive/2026-07-06-embed-static-html/.openspec.yaml +2 -0
  207. cositos-0.1.0/openspec/changes/archive/2026-07-06-embed-static-html/proposal.md +43 -0
  208. cositos-0.1.0/openspec/changes/archive/2026-07-06-embed-static-html/specs/embed/spec.md +38 -0
  209. cositos-0.1.0/openspec/changes/archive/2026-07-06-embed-static-html/tasks.md +18 -0
  210. cositos-0.1.0/openspec/changes/archive/2026-07-06-serialize-widget-state/.openspec.yaml +2 -0
  211. cositos-0.1.0/openspec/changes/archive/2026-07-06-serialize-widget-state/design.md +54 -0
  212. cositos-0.1.0/openspec/changes/archive/2026-07-06-serialize-widget-state/proposal.md +57 -0
  213. cositos-0.1.0/openspec/changes/archive/2026-07-06-serialize-widget-state/specs/serialization/spec.md +52 -0
  214. cositos-0.1.0/openspec/changes/archive/2026-07-06-serialize-widget-state/tasks.md +37 -0
  215. cositos-0.1.0/openspec/config.yaml +20 -0
  216. cositos-0.1.0/openspec/project.md +5 -0
  217. cositos-0.1.0/openspec/specs/embed/spec.md +46 -0
  218. cositos-0.1.0/openspec/specs/protocol/spec.md +36 -0
  219. cositos-0.1.0/openspec/specs/serialization/spec.md +56 -0
  220. cositos-0.1.0/pretender.toml +14 -0
  221. cositos-0.1.0/probe/README.md +188 -0
  222. cositos-0.1.0/probe/kernel_probe.py +166 -0
  223. cositos-0.1.0/pyproject.toml +86 -0
  224. cositos-0.1.0/r/README.md +29 -0
  225. cositos-0.1.0/r/core.R +223 -0
  226. cositos-0.1.0/r/test.R +129 -0
  227. cositos-0.1.0/scripts/coverage_audit.py +135 -0
  228. cositos-0.1.0/scripts/e2e_all.py +157 -0
  229. cositos-0.1.0/src/cositos/__init__.py +40 -0
  230. cositos-0.1.0/src/cositos/buffers.py +129 -0
  231. cositos-0.1.0/src/cositos/contrib/__init__.py +13 -0
  232. cositos-0.1.0/src/cositos/contrib/controls.py +175 -0
  233. cositos-0.1.0/src/cositos/contrib/harvest.py +86 -0
  234. cositos-0.1.0/src/cositos/embed.py +128 -0
  235. cositos-0.1.0/src/cositos/jupyter.py +98 -0
  236. cositos-0.1.0/src/cositos/model.py +140 -0
  237. cositos-0.1.0/src/cositos/protocol.py +144 -0
  238. cositos-0.1.0/src/cositos/serialize.py +227 -0
  239. cositos-0.1.0/src/cositos/transport.py +35 -0
  240. cositos-0.1.0/tests/test_buffers.py +126 -0
  241. cositos-0.1.0/tests/test_conformance.py +100 -0
  242. cositos-0.1.0/tests/test_contrib_controls.py +225 -0
  243. cositos-0.1.0/tests/test_contrib_harvest.py +123 -0
  244. cositos-0.1.0/tests/test_e2e_all.py +131 -0
  245. cositos-0.1.0/tests/test_e2e_clojure.py +156 -0
  246. cositos-0.1.0/tests/test_e2e_controls.py +107 -0
  247. cositos-0.1.0/tests/test_e2e_dashboard.py +175 -0
  248. cositos-0.1.0/tests/test_e2e_julia.py +158 -0
  249. cositos-0.1.0/tests/test_e2e_jupyter.py +111 -0
  250. cositos-0.1.0/tests/test_e2e_python.py +60 -0
  251. cositos-0.1.0/tests/test_embed.py +159 -0
  252. cositos-0.1.0/tests/test_example_dashboard.py +349 -0
  253. cositos-0.1.0/tests/test_jupyter.py +119 -0
  254. cositos-0.1.0/tests/test_kernel_probe.py +37 -0
  255. cositos-0.1.0/tests/test_model.py +252 -0
  256. cositos-0.1.0/tests/test_notebooks.py +144 -0
  257. cositos-0.1.0/tests/test_oracle_anywidget.py +94 -0
  258. cositos-0.1.0/tests/test_protocol.py +88 -0
  259. cositos-0.1.0/tests/test_serialize.py +303 -0
  260. cositos-0.1.0/tests/test_static_export.py +53 -0
  261. cositos-0.1.0/uv.lock +3701 -0
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: beads
3
+ description: Use when working in a repository that uses bd or Beads for durable project task tracking, issue dependencies, blocker management, multi-session handoff, or shared work memory. Trigger when the user asks to find ready work, claim or close tasks, create follow-up work, inspect blockers, recover project context, or choose between local planning and persistent project tracking.
4
+ ---
5
+
6
+ # Beads
7
+
8
+ Use Beads as the shared project task system. Local plans, scratch files, and personal memories are useful, but they are not the durable source of truth for project work.
9
+
10
+ ## First Step
11
+
12
+ Run:
13
+
14
+ ```bash
15
+ bd prime
16
+ ```
17
+
18
+ If that prints nothing, check whether the repository has an active Beads workspace:
19
+
20
+ ```bash
21
+ bd where
22
+ ```
23
+
24
+ ## Preferred Route
25
+
26
+ Use the `bd` CLI when shell access is available. It is the most compact and direct Beads interface.
27
+
28
+ ## Core CLI Workflow
29
+
30
+ 1. Find work:
31
+
32
+ ```bash
33
+ bd ready
34
+ bd list --status=open
35
+ bd list --status=in_progress
36
+ ```
37
+
38
+ 2. Inspect before editing:
39
+
40
+ ```bash
41
+ bd show <id>
42
+ ```
43
+
44
+ 3. Claim work atomically:
45
+
46
+ ```bash
47
+ bd update <id> --claim
48
+ ```
49
+
50
+ 4. Create durable follow-up work when implementation reveals new tasks:
51
+
52
+ ```bash
53
+ bd create "Short title" --description="Why this exists and what needs to be done" --type=task --priority=2
54
+ ```
55
+
56
+ 5. Close completed work:
57
+
58
+ ```bash
59
+ bd close <id> --reason="Completed"
60
+ ```
61
+
62
+ ## What Belongs In Beads
63
+
64
+ Use Beads for:
65
+
66
+ - shared project tasks
67
+ - blockers and dependencies
68
+ - discovered follow-up work
69
+ - work that must survive thread reset, compaction, or handoff
70
+ - status that another person or agent should be able to resume
71
+
72
+ Use agent-local planning tools only for the current turn's execution checklist. Do not treat them as shared project state.
73
+
74
+ ## Rules
75
+
76
+ - Do not create markdown TODO files as the source of truth when Beads is available.
77
+ - Do not use `bd edit`; it opens an interactive editor. Use `bd update` flags instead.
78
+ - Prefer `--json` when parsing `bd` output programmatically.
79
+ - If hooks are installed, `bd prime` may already be injected. Run it manually when context is missing.
80
+ - Do not auto-close or mutate tasks unless the work is actually complete.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Beads"
3
+ short_description: "Project task tracking with bd"
4
+ default_prompt: "Use $beads to inspect ready work and manage durable project tasks."
@@ -0,0 +1,5 @@
1
+ {"_type":"issue","id":"cositos-n1e","title":"Pre-requisite: add git remote + GitHub Pages + secrets before CI fires","description":"The CI/docs/release workflows are wired and ready, but won't fire until:\\n1. A GitHub remote is added (git remote add origin git@github.com:\u003corg\u003e/cositos.git)\\n2. GitHub Pages is enabled in the repo Settings (Source: GitHub Actions)\\n3. For releases: NPM_TOKEN and PYPI_API_TOKEN secrets are set in the repo\\n4. _quarto.yml site-url is uncommented with the real URL","status":"closed","priority":2,"issue_type":"task","owner":"45505583+sashakile@users.noreply.github.com","created_at":"2026-07-10T20:24:25Z","created_by":"Sasha","updated_at":"2026-07-10T20:38:10Z","closed_at":"2026-07-10T20:38:10Z","close_reason":"Remote added (git@github.com:sashakile/cositos.git), site-url set, workflows created","dependency_count":0,"dependent_count":0,"comment_count":0}
2
+ {"_type":"issue","id":"cositos-bc3","title":"Create release workflow (PyPI + npm + GitHub Release)","description":"Create .github/workflows/release.yml triggered by git tag v*. Publishes cositos to PyPI, @cositos/front to npm, and creates a GitHub Release.","status":"closed","priority":2,"issue_type":"task","assignee":"Sasha","owner":"45505583+sashakile@users.noreply.github.com","created_at":"2026-07-10T20:20:44Z","created_by":"Sasha","updated_at":"2026-07-10T20:23:51Z","started_at":"2026-07-10T20:22:17Z","closed_at":"2026-07-10T20:23:51Z","close_reason":"Implemented: verify.yml docs-build job, docs.yml deploy workflow, release.yml (PyPI+npm+GitHub Release), _quarto.yml site-url placeholder, front/package.json publish config, mise release tasks","dependency_count":0,"dependent_count":0,"comment_count":0}
3
+ {"_type":"issue","id":"cositos-qgf","title":"Create GitHub Pages docs-deploy workflow","description":"Create .github/workflows/docs.yml that builds the Quarto site and deploys to GitHub Pages on every push to main.","status":"closed","priority":2,"issue_type":"task","owner":"45505583+sashakile@users.noreply.github.com","created_at":"2026-07-10T20:20:35Z","created_by":"Sasha","updated_at":"2026-07-10T20:23:51Z","closed_at":"2026-07-10T20:23:51Z","close_reason":"Implemented: verify.yml docs-build job, docs.yml deploy workflow, release.yml (PyPI+npm+GitHub Release), _quarto.yml site-url placeholder, front/package.json publish config, mise release tasks","dependency_count":0,"dependent_count":0,"comment_count":0}
4
+ {"_type":"issue","id":"cositos-t7n","title":"Add docs-build CI job to verify.yml","description":"The verify.yml runs lint/typecheck/coverage per-language tests but doesn't build docs. Add a parallel docs-build job that runs (needs quarto on the runner).","status":"closed","priority":2,"issue_type":"task","assignee":"Sasha","owner":"45505583+sashakile@users.noreply.github.com","created_at":"2026-07-10T20:19:50Z","created_by":"Sasha","updated_at":"2026-07-10T20:23:51Z","started_at":"2026-07-10T20:21:39Z","closed_at":"2026-07-10T20:23:51Z","close_reason":"Implemented: verify.yml docs-build job, docs.yml deploy workflow, release.yml (PyPI+npm+GitHub Release), _quarto.yml site-url placeholder, front/package.json publish config, mise release tasks","dependency_count":0,"dependent_count":0,"comment_count":0}
5
+ {"_type":"issue","id":"cositos-ual","title":"Update _quarto.yml for GitHub Pages site-url","description":"Add site-url to _quarto.yml so the Quarto site generates correct canonical links when deployed to GitHub Pages.","status":"closed","priority":3,"issue_type":"task","assignee":"Sasha","owner":"45505583+sashakile@users.noreply.github.com","created_at":"2026-07-10T20:20:53Z","created_by":"Sasha","updated_at":"2026-07-10T20:23:51Z","started_at":"2026-07-10T20:22:37Z","closed_at":"2026-07-10T20:23:51Z","close_reason":"Implemented: verify.yml docs-build job, docs.yml deploy workflow, release.yml (PyPI+npm+GitHub Release), _quarto.yml site-url placeholder, front/package.json publish config, mise release tasks","dependency_count":0,"dependent_count":0,"comment_count":0}
@@ -0,0 +1,15 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "command": "bd prime --hook-json",
8
+ "type": "command"
9
+ }
10
+ ],
11
+ "matcher": ""
12
+ }
13
+ ]
14
+ }
15
+ }
@@ -0,0 +1,2 @@
1
+ [features]
2
+ hooks = true
@@ -0,0 +1,51 @@
1
+ {
2
+ "hooks": {
3
+ "PostCompact": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "command": "bd codex-hook PostCompact",
8
+ "statusMessage": "Scheduling Beads context refresh",
9
+ "type": "command"
10
+ }
11
+ ],
12
+ "matcher": "manual|auto"
13
+ }
14
+ ],
15
+ "PreCompact": [
16
+ {
17
+ "hooks": [
18
+ {
19
+ "command": "bd codex-hook PreCompact",
20
+ "statusMessage": "Checking Beads context",
21
+ "type": "command"
22
+ }
23
+ ],
24
+ "matcher": "manual|auto"
25
+ }
26
+ ],
27
+ "SessionStart": [
28
+ {
29
+ "hooks": [
30
+ {
31
+ "command": "bd codex-hook SessionStart",
32
+ "statusMessage": "Loading Beads context",
33
+ "type": "command"
34
+ }
35
+ ],
36
+ "matcher": "startup|resume|clear"
37
+ }
38
+ ],
39
+ "UserPromptSubmit": [
40
+ {
41
+ "hooks": [
42
+ {
43
+ "command": "bd codex-hook UserPromptSubmit",
44
+ "statusMessage": "Refreshing Beads context",
45
+ "type": "command"
46
+ }
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ }
@@ -0,0 +1,69 @@
1
+ # dont managed instructions
2
+
3
+ > This file is managed by `dont init` and `dont doctor --fix`. Do not edit manually.
4
+
5
+ # dont
6
+
7
+ This project uses `dont` for epistemic claim tracking.
8
+
9
+ For full documentation see the [dont spec](https://github.com/charly-vibes/dont).
10
+
11
+ ## Quick start
12
+
13
+ ```
14
+ dont ground "claim text" --file README.md --lines 10-18 # fast path: claim + repo evidence
15
+ dont conclude "claim text" # introduce an unverified claim
16
+ dont trust <id> --reason ... # register doubt
17
+ dont dismiss <id> --evidence ... # verify with evidence
18
+ dont show <id> # inspect a claim
19
+ dont trace <id> # diagnose blocker paths
20
+ dont list # list all claims
21
+ ```
22
+
23
+ `dont ground` is the preferred fast path when you already have the claim and evidence in hand. The underlying model is still conclude โ†’ trust โ†’ dismiss โ†’ forget: `ground` composes `conclude` and `dismiss` rather than bypassing the core lifecycle.
24
+
25
+ ## Grounding claims in repository evidence
26
+
27
+ Prefer repository-relative file locators over opaque `file://` URIs when the evidence lives inside the current project:
28
+
29
+ ```
30
+ # Preferred: repository-relative locator
31
+ dont ground "documented project fact" --file README.md --lines 10-18
32
+ dont dismiss <id> --file src/lib.rs --lines 42-55 --anchor "MyTrait"
33
+ dont dismiss <id> --file docs/spec.md --excerpt "The system SHALL..."
34
+
35
+ # Supported for compatibility: plain URI
36
+ dont dismiss <id> --evidence https://external-source.example/ref
37
+ ```
38
+
39
+ Repository-relative locators resolve against the project root regardless of the caller's working directory. Paths that escape the project root (via `..` traversal or symlink escape) are refused.
40
+
41
+ When `show` or `why` reports stale, unresolved, or otherwise confusing blockers, run `dont trace <id>` to see the blocker path that explains what dependency or support fallout needs attention.
42
+
43
+ ## Modes
44
+
45
+ `dont` operates in two modes:
46
+
47
+ - **permissive** โ€” allows claims to progress with weaker evidence; suitable for exploratory work.
48
+ - **strict** โ€” enforces full evidence and lifecycle requirements before dismissal.
49
+
50
+ Run `dont prime --json` to see the current mode. To change mode, edit `mode = "permissive"` or `mode = "strict"` in `.dont/config.toml`.
51
+
52
+ ## Error recovery
53
+
54
+ When a command returns `"ok": false`, read `data.remediation[0].command` from the JSON envelope and run it exactly as printed. Do not guess reformulations โ€” the remediation field is authoritative.
55
+
56
+ ## Defining terms
57
+
58
+ Before running `dont define`, run `dont suggest-term "<description>"` to check for an existing term that fits. When defining, always supply both `--label "<a noun phrase>"` and `--doc "<definition text>"` together.
59
+
60
+ ## Spawn
61
+
62
+ When `dont` requests a sub-agent via a spawn envelope, the harness is responsible for fulfilling the spawn. Run the spawn command from the envelope's `data.command` field and feed its output back to the calling agent.
63
+
64
+ ## Help
65
+
66
+ Run `dont help --tutorial` for the first-session walkthrough.
67
+ Run `dont help --topics` to list all how-to guides.
68
+ Run `dont help --howto <topic>` to read a specific guide.
69
+
@@ -0,0 +1,14 @@
1
+ [project]
2
+ name = "dont-project"
3
+ mode = "permissive"
4
+
5
+ [output]
6
+ default_format = "json"
7
+
8
+ [storage]
9
+ busy_retry_attempts = 5
10
+ busy_retry_base_ms = 100
11
+
12
+ [harness]
13
+ managed_docs = ["AGENTS.md", "CLAUDE.md"]
14
+ spawn_timeout_hours = 24
@@ -0,0 +1,25 @@
1
+ # dont seed vocabulary snapshot
2
+ # Installed project-locally by `dont init`. Tool upgrades MUST NOT rewrite this
3
+ # file except through an explicit seed-migration operation.
4
+ prefix: "dont:"
5
+ terms:
6
+ - id: "dont:Entity"
7
+ status: locked
8
+ - id: "dont:Claim"
9
+ status: locked
10
+ - id: "dont:Term"
11
+ status: locked
12
+ - id: "dont:Evidence"
13
+ status: locked
14
+ - id: "dont:kind_of"
15
+ status: locked
16
+ - id: "dont:related_to"
17
+ status: locked
18
+ - id: "dont:defined_as"
19
+ status: locked
20
+ - id: "dont:Hypothesis"
21
+ status: locked
22
+ - id: "dont:Retraction"
23
+ status: locked
24
+ - id: "dont:external_ref"
25
+ status: locked
@@ -0,0 +1,14 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+ indent_style = space
9
+
10
+ [*.py]
11
+ indent_size = 4
12
+
13
+ [*.{json,toml,md,yml,yaml}]
14
+ indent_size = 2
@@ -0,0 +1 @@
1
+ Before acting on any `ah check` finding, run its `playbook_command` to get the canonical remediation steps. Use `ah explain <topic>` to look up the playbook for any finding kind.
@@ -0,0 +1,8 @@
1
+ tool_version = "0.1.0"
2
+
3
+ [paths]
4
+ specs = "openspec/specs"
5
+ changes = "openspec/changes"
6
+
7
+ [runners]
8
+ pytest = ["uv", "run", "--extra", "dev", "pytest"]
@@ -0,0 +1,10 @@
1
+ id = "a-closing-script-tag-in-state-is-neutralised"
2
+ description = "A closing script tag in state is neutralised."
3
+ archetype = "BP"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_embed.py::test_embedded_json_is_script_escaped"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "a-view-script-is-emitted-per-model"
2
+ description = "A view script is emitted per model."
3
+ archetype = "BP"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_embed.py::test_emits_a_view_script_per_model"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "each-model-s-state-carries-anywidget-view-identity"
2
+ description = "Each model's state carries anywidget view identity."
3
+ archetype = "BP"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_embed.py::test_each_exported_model_state_carries_anywidget_view_identity"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "only-requested-views-are-emitted"
2
+ description = "Only requested views are emitted."
3
+ archetype = "BP"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_embed.py::test_views_argument_restricts_emitted_views"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "the-cdn-html-manager-loader-is-included"
2
+ description = "The CDN html-manager loader is included."
3
+ archetype = "BP"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_embed.py::test_includes_cdn_html_manager_loader"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "the-document-state-is-embedded-as-widget-state-json"
2
+ description = "The document state is embedded as widget-state+json."
3
+ archetype = "BP"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_embed.py::test_embeds_document_state_block"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "write-html-persists-the-page"
2
+ description = "write_html persists the page."
3
+ archetype = "BP"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_embed.py::test_write_html_matches_embed_html"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "comm-open-includes-anymodel-and-anyview-identity"
2
+ description = "comm_open carries immutable anywidget fields + version."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_protocol.py::test_comm_open_includes_immutable_anywidget_fields"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "nested-binary-values-are-split-and-merged-losslessly"
2
+ description = "Buffer split/merge round-trips losslessly."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_buffers.py::test_round_trip_merge_is_inverse_of_split"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "unknown-method-is-ignored"
2
+ description = "Unknown inbound method is ignored."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_protocol.py::test_parse_unknown_method_is_ignored"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "a-single-model-round-trips-losslessly"
2
+ description = "A single model round-trips losslessly."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_serialize.py::test_round_trip_binary_by_raw_bytes"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "binary-buffers-are-base64-encoded-per-the-v2-schema"
2
+ description = "Binary buffers are base64-encoded per the v2 schema."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_serialize.py::test_dump_model_includes_buffers_when_present"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "child-references-survive-a-round-trip"
2
+ description = "Child references survive a round-trip."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_serialize.py::test_composition_child_refs_preserved_verbatim"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "duplicate-model-ids-are-rejected"
2
+ description = "Duplicate model ids are rejected."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_serialize.py::test_dump_document_rejects_duplicate_model_ids"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "empty-model-id-is-rejected"
2
+ description = "Empty model id is rejected."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_serialize.py::test_dump_document_rejects_empty_model_id"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "front-end-code-is-preserved"
2
+ description = "Front-end code is preserved."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_serialize.py::test_round_trip_plain_state_is_identity"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "reference-cycles-do-not-break-loading"
2
+ description = "Reference cycles do not break loading."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_serialize.py::test_reference_cycle_loads_without_recursion"
10
+ timeout_seconds = 60
@@ -0,0 +1,10 @@
1
+ id = "the-document-envelope-declares-the-state-format-version"
2
+ description = "The document envelope declares the state-format version."
3
+ archetype = "PF"
4
+ status = "active"
5
+ superseded_by = ""
6
+ authored_with = "0.1.0"
7
+
8
+ [[tests.pytest]]
9
+ flags = "tests/test_serialize.py::test_document_envelope_shape"
10
+ timeout_seconds = 60
@@ -0,0 +1,37 @@
1
+ # Configuration for softprops/action-gh-release auto-generated release notes.
2
+ # Categories group related PRs together in the release body.
3
+
4
+ changelog:
5
+ categories:
6
+ - title: ๐ŸŽ‰ New Features
7
+ labels:
8
+ - enhancement
9
+ - feature
10
+ - title: ๐Ÿ› Bug Fixes
11
+ labels:
12
+ - bug
13
+ - fix
14
+ - title: ๐Ÿ“š Documentation
15
+ labels:
16
+ - documentation
17
+ - docs
18
+ - title: ๐Ÿ”ง Maintenance
19
+ labels:
20
+ - chore
21
+ - maintenance
22
+ - refactor
23
+ - title: ๐Ÿงช Testing
24
+ labels:
25
+ - testing
26
+ - test
27
+ - title: ๐ŸŒ New Language Backend
28
+ labels:
29
+ - language-backend
30
+ - port
31
+ - title: โฌ†๏ธ Dependencies
32
+ labels:
33
+ - dependencies
34
+ - deps
35
+ - title: Other Changes
36
+ labels:
37
+ - "*"
@@ -0,0 +1,59 @@
1
+ name: docs
2
+
3
+ # Builds and deploys the Quarto documentation site to GitHub Pages
4
+ # on every push to main.
5
+
6
+ on:
7
+ push:
8
+ branches: [main]
9
+
10
+ permissions:
11
+ contents: read
12
+ pages: write
13
+ id-token: write
14
+
15
+ concurrency:
16
+ group: pages-${{ github.ref }}
17
+ cancel-in-progress: true
18
+
19
+ jobs:
20
+ build-and-deploy:
21
+ runs-on: ubuntu-latest
22
+ environment:
23
+ name: github-pages
24
+ url: ${{ steps.deployment.outputs.page_url }}
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+
28
+ - uses: astral-sh/setup-uv@v5
29
+ with:
30
+ python-version-file: ".python-version"
31
+ - uses: jdx/mise-action@v2
32
+ with:
33
+ install: true
34
+ cache: true
35
+
36
+ - uses: quarto-dev/quarto-actions/setup@v2
37
+
38
+ # Docs build includes a Julia parity check (examples/parity/dump.jl)
39
+ - uses: julia-actions/setup-julia@v2
40
+ with:
41
+ version: "1.11"
42
+
43
+ - name: Install project dependencies (Python + JS)
44
+ run: mise run setup
45
+
46
+ - name: Precompile Julia parity project deps
47
+ run: julia --project=examples/parity -e 'using Pkg; Pkg.instantiate()'
48
+
49
+ - name: Build Quarto documentation site
50
+ run: mise run docs
51
+
52
+ - name: Upload built site as Pages artifact
53
+ uses: actions/upload-pages-artifact@v3
54
+ with:
55
+ path: docs/_site
56
+
57
+ - name: Deploy to GitHub Pages
58
+ id: deployment
59
+ uses: actions/deploy-pages@v4