@astrale-domains/issues 0.1.2 → 0.1.4

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 (190) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +65 -15
  3. package/dist/schema/.runtime/states/issue/index.d.ts +27 -0
  4. package/dist/schema/.runtime/states/issue/index.js +11 -0
  5. package/dist/schema/index.d.ts +6 -7
  6. package/dist/schema/index.js +5 -6
  7. package/dist/schema/{comment/relationships.d.ts → modules/comment/classes/comment-authored-by.d.ts} +2 -18
  8. package/dist/schema/modules/comment/classes/comment-authored-by.js +9 -0
  9. package/dist/schema/{comment/class.d.ts → modules/comment/classes/comment.d.ts} +36 -4
  10. package/dist/schema/modules/comment/classes/comment.js +17 -0
  11. package/dist/schema/modules/comment/classes/index.d.ts +3 -0
  12. package/dist/schema/modules/comment/classes/index.js +3 -0
  13. package/dist/schema/modules/comment/classes/issue-has-comment.d.ts +16 -0
  14. package/dist/schema/modules/comment/classes/issue-has-comment.js +10 -0
  15. package/dist/schema/modules/comment/functions/delete-comment.d.ts +7 -0
  16. package/dist/schema/modules/comment/functions/delete-comment.js +11 -0
  17. package/dist/schema/modules/comment/functions/edit-comment.d.ts +9 -0
  18. package/dist/schema/modules/comment/functions/edit-comment.js +11 -0
  19. package/dist/schema/modules/comment/functions/index.d.ts +2 -0
  20. package/dist/schema/modules/comment/functions/index.js +2 -0
  21. package/dist/schema/modules/comment/index.d.ts +4 -0
  22. package/dist/schema/modules/comment/index.js +4 -0
  23. package/dist/schema/modules/comment/policies/contribute-to-comment.d.ts +1 -0
  24. package/dist/schema/modules/comment/policies/contribute-to-comment.js +12 -0
  25. package/dist/schema/modules/comment/policies/edit-own-comment.d.ts +1 -0
  26. package/dist/schema/modules/comment/policies/edit-own-comment.js +6 -0
  27. package/dist/schema/modules/comment/policies/index.d.ts +4 -0
  28. package/dist/schema/modules/comment/policies/index.js +4 -0
  29. package/dist/schema/modules/comment/policies/traverse-comment-relationship.d.ts +1 -0
  30. package/dist/schema/modules/comment/policies/traverse-comment-relationship.js +17 -0
  31. package/dist/schema/modules/comment/policies/traverse-issue-comment.d.ts +1 -0
  32. package/dist/schema/modules/comment/policies/traverse-issue-comment.js +14 -0
  33. package/dist/schema/modules/comment/types/comment.d.ts +5 -0
  34. package/dist/schema/modules/comment/types/comment.js +6 -0
  35. package/dist/schema/modules/comment/types/index.d.ts +1 -0
  36. package/dist/schema/modules/comment/types/index.js +1 -0
  37. package/dist/schema/modules/issue/classes/index.d.ts +5 -0
  38. package/dist/schema/modules/issue/classes/index.js +5 -0
  39. package/dist/schema/modules/issue/classes/issue-assigned-to.d.ts +16 -0
  40. package/dist/schema/modules/issue/classes/issue-assigned-to.js +9 -0
  41. package/dist/schema/modules/issue/classes/issue-reported-by.d.ts +16 -0
  42. package/dist/schema/modules/issue/classes/issue-reported-by.js +9 -0
  43. package/dist/schema/modules/issue/classes/issue-subtask-of.d.ts +19 -0
  44. package/dist/schema/modules/issue/classes/issue-subtask-of.js +10 -0
  45. package/dist/schema/modules/issue/classes/issue.d.ts +258 -0
  46. package/dist/schema/modules/issue/classes/issue.js +35 -0
  47. package/dist/schema/modules/issue/classes/project-contains-issue.d.ts +16 -0
  48. package/dist/schema/modules/issue/classes/project-contains-issue.js +10 -0
  49. package/dist/schema/modules/issue/functions/add-issue-comment.d.ts +9 -0
  50. package/dist/schema/modules/issue/functions/add-issue-comment.js +11 -0
  51. package/dist/schema/modules/issue/functions/archive-issue.d.ts +7 -0
  52. package/dist/schema/modules/issue/functions/archive-issue.js +11 -0
  53. package/dist/schema/modules/issue/functions/assign-issue.d.ts +9 -0
  54. package/dist/schema/modules/issue/functions/assign-issue.js +11 -0
  55. package/dist/schema/modules/issue/functions/index.d.ts +7 -0
  56. package/dist/schema/modules/issue/functions/index.js +7 -0
  57. package/dist/schema/modules/issue/functions/set-issue-parent.d.ts +9 -0
  58. package/dist/schema/modules/issue/functions/set-issue-parent.js +11 -0
  59. package/dist/schema/modules/issue/functions/set-issue-tags.d.ts +9 -0
  60. package/dist/schema/modules/issue/functions/set-issue-tags.js +11 -0
  61. package/dist/schema/modules/issue/functions/transition-issue.d.ts +22 -0
  62. package/dist/schema/modules/issue/functions/transition-issue.js +20 -0
  63. package/dist/schema/modules/issue/functions/update-issue.d.ts +16 -0
  64. package/dist/schema/modules/issue/functions/update-issue.js +15 -0
  65. package/dist/schema/modules/issue/index.d.ts +4 -0
  66. package/dist/schema/modules/issue/index.js +4 -0
  67. package/dist/schema/modules/issue/policies/contribute-to-issue.d.ts +1 -0
  68. package/dist/schema/modules/issue/policies/contribute-to-issue.js +10 -0
  69. package/dist/schema/modules/issue/policies/index.d.ts +5 -0
  70. package/dist/schema/modules/issue/policies/index.js +5 -0
  71. package/dist/schema/modules/issue/policies/traverse-issue-assignee.d.ts +1 -0
  72. package/dist/schema/modules/issue/policies/traverse-issue-assignee.js +14 -0
  73. package/dist/schema/modules/issue/policies/traverse-issue-parent.d.ts +1 -0
  74. package/dist/schema/modules/issue/policies/traverse-issue-parent.js +14 -0
  75. package/dist/schema/modules/issue/policies/traverse-issue-reporter.d.ts +1 -0
  76. package/dist/schema/modules/issue/policies/traverse-issue-reporter.js +14 -0
  77. package/dist/schema/modules/issue/policies/traverse-project-issue.d.ts +1 -0
  78. package/dist/schema/modules/issue/policies/traverse-project-issue.js +7 -0
  79. package/dist/schema/modules/issue/types/index.d.ts +1 -0
  80. package/dist/schema/modules/issue/types/index.js +1 -0
  81. package/dist/schema/modules/issue/types/issue.d.ts +10 -0
  82. package/dist/schema/modules/issue/types/issue.js +12 -0
  83. package/dist/schema/modules/project/classes/index.d.ts +3 -0
  84. package/dist/schema/modules/project/classes/index.js +3 -0
  85. package/dist/schema/modules/project/classes/project-has-member.d.ts +16 -0
  86. package/dist/schema/modules/project/classes/project-has-member.js +9 -0
  87. package/dist/schema/{tracker/relationships.d.ts → modules/project/classes/project-owned-by.d.ts} +5 -5
  88. package/dist/schema/modules/project/classes/project-owned-by.js +9 -0
  89. package/dist/schema/modules/project/classes/project.d.ts +283 -0
  90. package/dist/schema/modules/project/classes/project.js +35 -0
  91. package/dist/schema/modules/project/functions/add-project-member.d.ts +10 -0
  92. package/dist/schema/modules/project/functions/add-project-member.js +12 -0
  93. package/dist/schema/modules/project/functions/archive-project.d.ts +7 -0
  94. package/dist/schema/modules/project/functions/archive-project.js +11 -0
  95. package/dist/schema/modules/project/functions/create-project-issue.d.ts +16 -0
  96. package/dist/schema/modules/project/functions/create-project-issue.js +15 -0
  97. package/dist/schema/modules/project/functions/create-project-tag.d.ts +12 -0
  98. package/dist/schema/modules/project/functions/create-project-tag.js +14 -0
  99. package/dist/schema/modules/project/functions/create-project.d.ts +14 -0
  100. package/dist/schema/modules/project/functions/create-project.js +14 -0
  101. package/dist/schema/modules/project/functions/index.d.ts +8 -0
  102. package/dist/schema/modules/project/functions/index.js +8 -0
  103. package/dist/schema/modules/project/functions/list-projects.d.ts +25 -0
  104. package/dist/schema/modules/project/functions/list-projects.js +16 -0
  105. package/dist/schema/modules/project/functions/remove-project-member.d.ts +10 -0
  106. package/dist/schema/modules/project/functions/remove-project-member.js +12 -0
  107. package/dist/schema/modules/project/functions/update-project.d.ts +13 -0
  108. package/dist/schema/modules/project/functions/update-project.js +14 -0
  109. package/dist/schema/modules/project/index.d.ts +4 -0
  110. package/dist/schema/modules/project/index.js +4 -0
  111. package/dist/schema/modules/project/policies/contribute-to-project.d.ts +1 -0
  112. package/dist/schema/modules/project/policies/contribute-to-project.js +7 -0
  113. package/dist/schema/modules/project/policies/index.d.ts +4 -0
  114. package/dist/schema/modules/project/policies/index.js +4 -0
  115. package/dist/schema/modules/project/policies/manage-project.d.ts +1 -0
  116. package/dist/schema/modules/project/policies/manage-project.js +6 -0
  117. package/dist/schema/modules/project/policies/traverse-project-member.d.ts +1 -0
  118. package/dist/schema/modules/project/policies/traverse-project-member.js +7 -0
  119. package/dist/schema/modules/project/policies/traverse-project-owner.d.ts +1 -0
  120. package/dist/schema/modules/project/policies/traverse-project-owner.js +7 -0
  121. package/dist/schema/modules/project/types/index.d.ts +2 -0
  122. package/dist/schema/modules/project/types/index.js +2 -0
  123. package/dist/schema/modules/project/types/membership-change.d.ts +6 -0
  124. package/dist/schema/modules/project/types/membership-change.js +7 -0
  125. package/dist/schema/modules/project/types/project.d.ts +8 -0
  126. package/dist/schema/modules/project/types/project.js +9 -0
  127. package/dist/schema/modules/tag/classes/index.d.ts +3 -0
  128. package/dist/schema/modules/tag/classes/index.js +3 -0
  129. package/dist/schema/modules/tag/classes/issue-tagged-with.d.ts +16 -0
  130. package/dist/schema/modules/tag/classes/issue-tagged-with.js +10 -0
  131. package/dist/schema/modules/tag/classes/project-contains-tag.d.ts +16 -0
  132. package/dist/schema/modules/tag/classes/project-contains-tag.js +10 -0
  133. package/dist/schema/{tag/class.d.ts → modules/tag/classes/tag.d.ts} +40 -3
  134. package/dist/schema/modules/tag/classes/tag.js +16 -0
  135. package/dist/schema/modules/tag/functions/delete-tag.d.ts +7 -0
  136. package/dist/schema/modules/tag/functions/delete-tag.js +11 -0
  137. package/dist/schema/modules/tag/functions/edit-tag.d.ts +12 -0
  138. package/dist/schema/modules/tag/functions/edit-tag.js +14 -0
  139. package/dist/schema/modules/tag/functions/index.d.ts +2 -0
  140. package/dist/schema/modules/tag/functions/index.js +2 -0
  141. package/dist/schema/modules/tag/index.d.ts +4 -0
  142. package/dist/schema/modules/tag/index.js +4 -0
  143. package/dist/schema/modules/tag/policies/contribute-to-tag.d.ts +1 -0
  144. package/dist/schema/modules/tag/policies/contribute-to-tag.js +10 -0
  145. package/dist/schema/modules/tag/policies/index.d.ts +4 -0
  146. package/dist/schema/modules/tag/policies/index.js +4 -0
  147. package/dist/schema/modules/tag/policies/manage-tag.d.ts +1 -0
  148. package/dist/schema/modules/tag/policies/manage-tag.js +10 -0
  149. package/dist/schema/modules/tag/policies/traverse-issue-tag.d.ts +1 -0
  150. package/dist/schema/modules/tag/policies/traverse-issue-tag.js +14 -0
  151. package/dist/schema/modules/tag/policies/traverse-project-tag.d.ts +1 -0
  152. package/dist/schema/modules/tag/policies/traverse-project-tag.js +7 -0
  153. package/dist/schema/modules/tag/types/index.d.ts +1 -0
  154. package/dist/schema/modules/tag/types/index.js +1 -0
  155. package/dist/schema/modules/tag/types/tag.d.ts +7 -0
  156. package/dist/schema/modules/tag/types/tag.js +8 -0
  157. package/dist/schema/schema.d.ts +902 -0
  158. package/dist/schema/schema.js +49 -0
  159. package/dist/schema/types/index.js +1 -0
  160. package/dist/schema/types/node-id.js +2 -0
  161. package/package.json +28 -20
  162. package/dist/schema/application/functions.js +0 -156
  163. package/dist/schema/application/index.d.ts +0 -701
  164. package/dist/schema/application/index.js +0 -49
  165. package/dist/schema/command/class.d.ts +0 -38
  166. package/dist/schema/command/class.js +0 -13
  167. package/dist/schema/command/index.d.ts +0 -2
  168. package/dist/schema/command/index.js +0 -2
  169. package/dist/schema/command/relationships.d.ts +0 -32
  170. package/dist/schema/command/relationships.js +0 -14
  171. package/dist/schema/comment/class.js +0 -7
  172. package/dist/schema/comment/index.d.ts +0 -2
  173. package/dist/schema/comment/index.js +0 -2
  174. package/dist/schema/comment/relationships.js +0 -11
  175. package/dist/schema/issue/class.d.ts +0 -74
  176. package/dist/schema/issue/class.js +0 -17
  177. package/dist/schema/issue/index.d.ts +0 -2
  178. package/dist/schema/issue/index.js +0 -2
  179. package/dist/schema/issue/relationships.d.ts +0 -112
  180. package/dist/schema/issue/relationships.js +0 -23
  181. package/dist/schema/tag/class.js +0 -10
  182. package/dist/schema/tag/index.d.ts +0 -2
  183. package/dist/schema/tag/index.js +0 -2
  184. package/dist/schema/tag/relationships.d.ts +0 -32
  185. package/dist/schema/tag/relationships.js +0 -12
  186. package/dist/schema/tracker/class.d.ts +0 -73
  187. package/dist/schema/tracker/class.js +0 -10
  188. package/dist/schema/tracker/index.d.ts +0 -2
  189. package/dist/schema/tracker/index.js +0 -2
  190. package/dist/schema/tracker/relationships.js +0 -7
package/CHANGELOG.md ADDED
@@ -0,0 +1,78 @@
1
+ # Changelog
2
+
3
+ ## [0.1.4](https://github.com/astrale-os/domains/compare/issues-v0.1.3...issues-v0.1.4) (2026-08-29)
4
+
5
+
6
+ ### Features
7
+
8
+ * **domains:** remove Property visibility annotations from V1 schemas ([#118](https://github.com/astrale-os/domains/issues/118)) ([215e5e0](https://github.com/astrale-os/domains/commit/215e5e0ca3b849cb56fcccc685d4e3fc51cc41f5))
9
+ * **issues:** restore native reporting continuity ([#119](https://github.com/astrale-os/domains/issues/119)) ([4c0738d](https://github.com/astrale-os/domains/commit/4c0738d05fb5b1281b1d480376960fd494b98840))
10
+ * **states:** adopt intrinsic property transitions ([#108](https://github.com/astrale-os/domains/issues/108)) ([0d137c2](https://github.com/astrale-os/domains/commit/0d137c2832e8f9b732b337086ccb17ad0c49bb4e))
11
+
12
+ ## [0.1.3](https://github.com/astrale-os/domains/compare/issues-v0.1.2...issues-v0.1.3) (2026-08-27)
13
+
14
+
15
+ ### Features
16
+
17
+ * **issues:** replace Tracker with collaborative Projects ([#93](https://github.com/astrale-os/domains/issues/93)) ([68fbabe](https://github.com/astrale-os/domains/commit/68fbabe10ce1ffe45f854166c6db1a7028a10759))
18
+ * make Domain lifecycles authoritative ([#101](https://github.com/astrale-os/domains/issues/101)) ([4ed45f6](https://github.com/astrale-os/domains/commit/4ed45f6c3f5708db52455904c28a2c13c983e33f))
19
+
20
+ ## [0.1.2](https://github.com/astrale-os/domains/compare/issues-v0.1.1...issues-v0.1.2) (2026-08-26)
21
+
22
+
23
+ ### Features
24
+
25
+ * **domains:** complete AI Gateway and Integrations parity qualification ([#87](https://github.com/astrale-os/domains/issues/87)) ([5be7461](https://github.com/astrale-os/domains/commit/5be74610469c4a20b108d73c38d0d2b6a298eef6))
26
+ * **domains:** restore AI Gateway and Integrations parity ([#80](https://github.com/astrale-os/domains/issues/80)) ([51ca802](https://github.com/astrale-os/domains/commit/51ca8027109bdc3fd3a05e861e6ed58bea8fe755))
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * align domains with current SDK cohort ([#85](https://github.com/astrale-os/domains/issues/85)) ([f2153e2](https://github.com/astrale-os/domains/commit/f2153e271e1389692ee9f98a14207c5e4340a743))
32
+ * **deps:** qualify GRC and domain dependencies ([#84](https://github.com/astrale-os/domains/issues/84)) ([e8a4c6b](https://github.com/astrale-os/domains/commit/e8a4c6b80e8e8f02a385e0001aa0f220acef5ce6))
33
+
34
+ ## [0.1.1](https://github.com/astrale-os/domains/compare/issues-v0.1.0...issues-v0.1.1) (2026-08-25)
35
+
36
+
37
+ ### Features
38
+
39
+ * **events:** add Events V0 and async issue notifications ([9538769](https://github.com/astrale-os/domains/commit/9538769b0e3ff4063583b3798b1e2301098a5e0c))
40
+ * **issues:** add complete issues domain ([9b9928c](https://github.com/astrale-os/domains/commit/9b9928cea40d91db91083935ee074086d8d365bd))
41
+ * **issues:** polish scoped views and navigation ([8c67e56](https://github.com/astrale-os/domains/commit/8c67e56ef273054b9ea82e852bbe1d5f32f05ca5))
42
+ * **issues:** publish creation events asynchronously ([711a2ec](https://github.com/astrale-os/domains/commit/711a2eceb7b12d2a24db7051bb6a4a9ea5bc8601))
43
+ * **issues:** publish schema package ([cf931cb](https://github.com/astrale-os/domains/commit/cf931cb50efe2e9888b8721dc7d7876aaf39d05e))
44
+ * **issues:** support priority updates ([2ade78d](https://github.com/astrale-os/domains/commit/2ade78dd46f91c8dd6d170edc2fc5c03aa9ccbb3))
45
+ * overhaul domain apps and runtime flows ([cb92e06](https://github.com/astrale-os/domains/commit/cb92e0601d329a601c4eb072d4c80b0eff6816e7))
46
+ * overhaul services and domain applications ([b8bc24d](https://github.com/astrale-os/domains/commit/b8bc24dbce4c4541ccf1f453b5f3cd335ff1aca4))
47
+ * publish Schema-only Domain contracts ([ec0a16a](https://github.com/astrale-os/domains/commit/ec0a16a46a08a3a2118ca1490a4f7e71239d62eb))
48
+ * publish Schema-only Domain contracts ([70aab15](https://github.com/astrale-os/domains/commit/70aab152f4eea0c69fed1a35cd4611d8d2f99ff9))
49
+ * replace issues and events with kernel v2 ([c0152fa](https://github.com/astrale-os/domains/commit/c0152fa326a598cfe76bbda75f5e7cc5d42fd011))
50
+ * **skills:** add domain skill packages ([#28](https://github.com/astrale-os/domains/issues/28)) ([6c0b949](https://github.com/astrale-os/domains/commit/6c0b949f1e5821d9f53745fb02eca3453ffb7f80))
51
+
52
+
53
+ ### Bug Fixes
54
+
55
+ * **ci:** keep standalone packaging permissive ([9151cf9](https://github.com/astrale-os/domains/commit/9151cf99311dd070068734c373a1b7ec7e1027a0))
56
+ * **ci:** make domain workspace standalone ([ff42931](https://github.com/astrale-os/domains/commit/ff429317dfd8dd4b0af2ffe8160867c9ba410099))
57
+ * **ci:** simplify Domain publication ([097befc](https://github.com/astrale-os/domains/commit/097befc1217352ce4e3ce91c01d797aba8fd78a2))
58
+ * **ci:** simplify Domain publication ([1b99dd9](https://github.com/astrale-os/domains/commit/1b99dd9781337e13e63c5b1838d96d4fd0dfa3bc))
59
+ * fetch kernel packages from codeload ([c7239d3](https://github.com/astrale-os/domains/commit/c7239d3678c97c902688e42476c93f568ed523bf))
60
+ * **frontend:** complete retained Domain identity ([cd667d1](https://github.com/astrale-os/domains/commit/cd667d111da05b76c599ce60ba7d741994a40abb))
61
+ * **frontend:** complete retained Domain identity ([efb9878](https://github.com/astrale-os/domains/commit/efb9878947877205f3469836d226875a7c50d055))
62
+ * **frontend:** restore project source discovery ([#72](https://github.com/astrale-os/domains/issues/72)) ([7795508](https://github.com/astrale-os/domains/commit/77955086688833289b474c64314a6adae598be9f))
63
+ * **issues:** grant create mutation authority ([60ebffc](https://github.com/astrale-os/domains/commit/60ebffc28bda5fd3b54333d347b7375edab538f9))
64
+ * **issues:** hide migration provenance in views ([246c9a2](https://github.com/astrale-os/domains/commit/246c9a2a074cfec115177f52ce8096c7eb688f08))
65
+ * **issues:** pin a coherent kernel cohort ([2bb8f80](https://github.com/astrale-os/domains/commit/2bb8f80e872d301d0dd7c0b32ddbc0e01151a7c5))
66
+ * **issues:** pin mature frontend dependencies ([e8f67f3](https://github.com/astrale-os/domains/commit/e8f67f3ac81ad1178675bc00b0cb787dba62d183))
67
+ * **issues:** preserve complete native issue projections ([6c327e3](https://github.com/astrale-os/domains/commit/6c327e33d0c203af70f006050509856b9d67540b))
68
+ * **issues:** preserve complete paginated exports ([35d03d2](https://github.com/astrale-os/domains/commit/35d03d216ef13a07cfada894f2d93fe3ba390d89))
69
+ * **issues:** remove redundant list method ([1ca9a31](https://github.com/astrale-os/domains/commit/1ca9a31fbaead49b3b0a715a862e3751e79bbc25))
70
+ * **issues:** restore Issue.create function authority ([20f6169](https://github.com/astrale-os/domains/commit/20f6169f17b5e0922cb3108624e69a81e2765bf1))
71
+ * **issues:** use mature lucide release ([c0010f5](https://github.com/astrale-os/domains/commit/c0010f52de8c2eefbb4c6c900760c51ac18b602d))
72
+ * migrate durable domains to public invocation errors [skip ci] ([b951546](https://github.com/astrale-os/domains/commit/b95154607eabcb19b152bf6192b202c884337391))
73
+ * pin published kernel runtime beta ([d3f508e](https://github.com/astrale-os/domains/commit/d3f508e56c85b3595a56fe880f07bb34a895a906))
74
+ * require hosted-functions SDK release ([e4d3122](https://github.com/astrale-os/domains/commit/e4d312268798a1ab803b815ebaff234aae24500a))
75
+ * use HTTPS for kernel dependencies ([182c604](https://github.com/astrale-os/domains/commit/182c6045580f407d0cd42077e9d4a8286770cf3a))
76
+ * use published kernel package cohort ([6671da9](https://github.com/astrale-os/domains/commit/6671da9fc3f27f05b165da59a184ca5291e86d07))
77
+ * **views:** adopt proof-bounded Shell cohort ([#74](https://github.com/astrale-os/domains/issues/74)) ([09fb9f3](https://github.com/astrale-os/domains/commit/09fb9f39e5350cf930ff083090b6a6f21369dc49))
78
+ * **views:** retain graph query provenance ([#75](https://github.com/astrale-os/domains/issues/75)) ([c880a42](https://github.com/astrale-os/domains/commit/c880a42f78f15e24ebfe54ae4eb76388d8872a80))
package/README.md CHANGED
@@ -1,28 +1,77 @@
1
1
  # Issues Domain
2
2
 
3
- `issues.astrale.ai` owns caller-scoped Trackers, numbered Issues, Comments, Tags, Issue relations, and replay-safe command receipts.
3
+ `issues.astrale.ai` owns collaborative Projects, numbered Issues, Comments, and Project-local Tags.
4
+ It is a current Astrale Application with Schema Policies, receiver Methods, atomic Mutations, and an
5
+ inbox-first Shell View.
4
6
 
5
- This is a current Astrale Application, not the former repository/module abstraction:
7
+ ```text
8
+ Project
9
+ owned by one Identity; shared with member Identities
10
+ key, name, optional description, private owner/member execution index and nextIssueNumber, archived
11
+ contains Issues and Tags
12
+
13
+ Issue
14
+ immutable reference; title; optional description
15
+ status: open | accepted | resolved | deferred | closed
16
+ priority: 0..4; optional assignee; optional acyclic parent; Tags
17
+
18
+ Comment
19
+ body; immutable author; belongs to one Issue
20
+
21
+ Tag
22
+ name; Project-local slug; optional color; belongs to one Project
23
+ ```
24
+
25
+ The public callable surface keeps observation Project-owned and mutations receiver-owned:
6
26
 
7
27
  ```text
8
- schema/ public Classes, relationships, Functions, and application View
9
- states/ closed Issue lifecycle
10
- rules/ pure normalization, transitions, and receipt decisions
11
- queries/ named owner-scoped graph observations
12
- mutations/ atomic graph changes and receipt preconditions
13
- actions/ one-operation list handler
14
- workflows/ authorization observation, replay, and Mutation coordination
15
- views/ Shell-bound Tracker projection
16
- ui/ Domain-free presentation
17
- frontend/ Vite and TanStack Router application
28
+ Project.create
29
+ Project.list
30
+ Project.update | addMember | removeMember | createIssue | createTag | archive
31
+ Issue.update | assign | setTags | setParent | addComment | archive
32
+ Comment.edit | delete
33
+ Tag.edit | delete
18
34
  ```
19
35
 
20
- Every mutation creates a `Command` receipt in the same MutationAST as its business change. The receipt key is scoped through `command_requested_by`; its mutation precondition proves the key is unused. A repeated call reads the receipt, verifies the kind and fingerprint, and returns the retained target rather than submitting the change again. Reusing a key for different input fails closed.
36
+ `Tag.delete` remains one atomic Mutation through 2,046 linked Issues, the current supported Kernel
37
+ execution ceiling after its containment and Node removals. Larger Tags must first be removed from
38
+ enough Issues through `Issue.setTags`; the Workflow rejects them explicitly instead of submitting an
39
+ oversized Mutation with a backend-dependent failure.
40
+
41
+ `Project.create` and `Project.list` require authentication. `Project.list` returns only Projects the
42
+ caller owns or has joined, with their visible Issues and Comment threads nested for one CLI/agent
43
+ observation. Receiver Methods use Schema-owned Policies: Project owners administer metadata,
44
+ membership, Tags, and archival; owners and members contribute to Issues; only a Comment author edits
45
+ or deletes it. Reads are visible only through a Project the caller owns or has joined.
46
+
47
+ Ownership, membership, reporting, assignment, and authorship remain graph-native Policy facts. The
48
+ owning Project, Issue, or Comment also stores the corresponding Identity IDs privately, updated in
49
+ the same atomic Mutation as each edge. Recipes and Workflows can therefore validate current
50
+ collaboration state without requesting authority over every possible concrete Identity subtype from
51
+ another Domain.
52
+ Those private execution fields are not a second public model and never replace the Policy edges.
21
53
 
22
- The deleted Events Domain is not replaced by a fake package or hidden adapter. Issues no longer owns an Events outbox. Event publication can return later only as an explicit provider-neutral Integration with a real consumer and delivery contract.
54
+ There is no Domain `Command`, receipt, universal idempotency layer, activity log, or undo system.
55
+ `Project.create` and `Project.list` are Actions; the seventeen multi-step receiver operations are
56
+ explicit Workflows whose Query and Mutation effects use stable steps. Set-style changes converge
57
+ naturally and stale
58
+ concurrent writes reject through atomic Mutation preconditions. Creation retries have no Domain
59
+ replay guarantee; generic invocation idempotency belongs to the platform when it exists.
60
+
61
+ The mounted View defaults to a focused open-Issue Inbox with queue progress and keyboard or button
62
+ navigation. Accepted work has a dedicated discussion view, while Browse searches and filters the
63
+ complete visible corpus with bounded pagination. The roomy metadata drawer exposes Close, Defer,
64
+ Resolved, and Accept triage actions plus priority, assignment, Tags, and parent controls without
65
+ blurring the main view. The four outcomes display and honor the `C`, `D`, `R`, and `A` keyboard
66
+ shortcuts whenever the user is not typing. The selected Issue description and its Comment thread remain below the
67
+ inbox as one continuous Markdown conversation with strict Mermaid diagrams. Project, Issue, and Tag
68
+ creation and Project membership administration intentionally remain API-first.
23
69
 
24
70
  ## Development
25
71
 
72
+ Dependency changes must refresh both `issues/pnpm-lock.yaml` and the workspace-root `pnpm-lock.yaml`;
73
+ repository CI installs the latter with a frozen lockfile.
74
+
26
75
  ```bash
27
76
  pnpm install
28
77
  pnpm typecheck
@@ -33,4 +82,5 @@ pnpm build
33
82
  pnpm package
34
83
  ```
35
84
 
36
- Domain source imports Kernel concepts through semantic `@astrale-os/sdk/*` facades and owns no `.spec` tree.
85
+ Domain source imports Kernel concepts through semantic `@astrale-os/sdk/*` facades and owns no
86
+ `.spec` tree.
@@ -0,0 +1,27 @@
1
+ import { type EventOf, type StateOf } from '@astrale-os/sdk/state';
2
+ export declare const issueStatus: import("@astrale-os/sdk/state").StateMachine<{
3
+ readonly open: {
4
+ readonly accept: "accepted";
5
+ readonly defer: "deferred";
6
+ readonly close: "closed";
7
+ };
8
+ readonly accepted: {
9
+ readonly resolve: "resolved";
10
+ readonly defer: "deferred";
11
+ readonly close: "closed";
12
+ };
13
+ readonly deferred: {
14
+ readonly reopen: "open";
15
+ readonly accept: "accepted";
16
+ readonly close: "closed";
17
+ };
18
+ readonly resolved: {
19
+ readonly reopen: "open";
20
+ readonly close: "closed";
21
+ };
22
+ readonly closed: {
23
+ readonly reopen: "open";
24
+ };
25
+ }, "open">;
26
+ export type IssueStatus = StateOf<typeof issueStatus>;
27
+ export type IssueEvent = EventOf<typeof issueStatus>;
@@ -0,0 +1,11 @@
1
+ import { stateMachine } from '@astrale-os/sdk/state';
2
+ export const issueStatus = stateMachine({
3
+ initial: 'open',
4
+ transitions: {
5
+ open: { accept: 'accepted', defer: 'deferred', close: 'closed' },
6
+ accepted: { resolve: 'resolved', defer: 'deferred', close: 'closed' },
7
+ deferred: { reopen: 'open', accept: 'accepted', close: 'closed' },
8
+ resolved: { reopen: 'open', close: 'closed' },
9
+ closed: { reopen: 'open' },
10
+ },
11
+ });
@@ -1,7 +1,6 @@
1
- export { schema } from './application/index.js';
2
- export type { IssuesDomain, IssuesSchema } from './application/index.js';
3
- export { Command, command_requested_by, command_targets_primary } from './command/index.js';
4
- export { Comment, comment_authored_by, issue_has_comment } from './comment/index.js';
5
- export { Issue, issue_assigned_to, issue_blocks, issue_duplicates, issue_relates_to, issue_reported_by, issue_subtask_of, tracker_contains_issue, } from './issue/index.js';
6
- export { Tag, issue_tagged_with, tracker_contains_tag } from './tag/index.js';
7
- export { Tracker, tracker_owned_by } from './tracker/index.js';
1
+ export { schema } from './schema.js';
2
+ export type { IssuesDomain, IssuesSchema } from './schema.js';
3
+ export { Project, project_has_member, project_owned_by } from './modules/project/index.js';
4
+ export { Issue, issue_assigned_to, issue_reported_by, issue_subtask_of, project_contains_issue, } from './modules/issue/index.js';
5
+ export { Comment, comment_authored_by, issue_has_comment } from './modules/comment/index.js';
6
+ export { Tag, issue_tagged_with, project_contains_tag } from './modules/tag/index.js';
@@ -1,6 +1,5 @@
1
- export { schema } from './application/index.js';
2
- export { Command, command_requested_by, command_targets_primary } from './command/index.js';
3
- export { Comment, comment_authored_by, issue_has_comment } from './comment/index.js';
4
- export { Issue, issue_assigned_to, issue_blocks, issue_duplicates, issue_relates_to, issue_reported_by, issue_subtask_of, tracker_contains_issue, } from './issue/index.js';
5
- export { Tag, issue_tagged_with, tracker_contains_tag } from './tag/index.js';
6
- export { Tracker, tracker_owned_by } from './tracker/index.js';
1
+ export { schema } from './schema.js';
2
+ export { Project, project_has_member, project_owned_by } from './modules/project/index.js';
3
+ export { Issue, issue_assigned_to, issue_reported_by, issue_subtask_of, project_contains_issue, } from './modules/issue/index.js';
4
+ export { Comment, comment_authored_by, issue_has_comment } from './modules/comment/index.js';
5
+ export { Tag, issue_tagged_with, project_contains_tag } from './modules/tag/index.js';
@@ -1,10 +1,10 @@
1
- export declare const issue_has_comment: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
1
+ export declare const comment_authored_by: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
2
2
  readonly depth: 0;
3
3
  readonly abstract: false;
4
4
  readonly extends: readonly [];
5
5
  readonly properties: never;
6
6
  readonly source: {
7
- readonly as: "issue";
7
+ readonly as: "author";
8
8
  readonly outgoing: "0..*";
9
9
  };
10
10
  readonly target: {
@@ -14,19 +14,3 @@ export declare const issue_has_comment: import("@astrale-os/sdk/schema").Directe
14
14
  readonly constraints: Record<never, never>;
15
15
  readonly effectiveProperties: never;
16
16
  }>;
17
- export declare const comment_authored_by: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
18
- readonly depth: 0;
19
- readonly abstract: false;
20
- readonly extends: readonly [];
21
- readonly properties: never;
22
- readonly source: {
23
- readonly as: "comment";
24
- readonly outgoing: "1";
25
- };
26
- readonly target: {
27
- readonly as: "author";
28
- readonly incoming: "0..*";
29
- };
30
- readonly constraints: Record<never, never>;
31
- readonly effectiveProperties: never;
32
- }>;
@@ -0,0 +1,9 @@
1
+ import { K, edgeClass } from '@astrale-os/sdk/schema';
2
+ import { TraverseCommentRelationship } from '../policies/traverse-comment-relationship.js';
3
+ import { Comment } from './comment.js';
4
+ export const comment_authored_by = edgeClass.directed({
5
+ description: 'The immutable author of one Comment.',
6
+ source: { as: 'author', accepts: [K.classes.Identity], outgoing: '0..*' },
7
+ target: { as: 'comment', accepts: [() => Comment], incoming: '1' },
8
+ policies: { traverse: () => TraverseCommentRelationship },
9
+ });
@@ -20,15 +20,47 @@ export declare const Comment: import("@astrale-os/sdk/schema").NodeClass<{
20
20
  }, "kernel.astrale.ai:class.Node", readonly import("@astrale-os/sdk/schema").AnyResolvedClass[], never, never, never, never, never, never>, ...never[]], import("@astrale-os/sdk/schema").PropertyProjection<string | number | boolean | import("@astrale-os/sdk/schema").Array | import("@astrale-os/sdk/schema").Object | null, true, "createdAt", "kernel.astrale.ai:class.Timestamped.property.createdAt"> | import("@astrale-os/sdk/schema").PropertyProjection<string | number | boolean | import("@astrale-os/sdk/schema").Array | import("@astrale-os/sdk/schema").Object | null, true, "updatedAt", "kernel.astrale.ai:class.Timestamped.property.updatedAt">, never, never, import("@astrale-os/sdk/schema").PropertyProjection<string | number | boolean | import("@astrale-os/sdk/schema").Array | import("@astrale-os/sdk/schema").Object | null, true, "createdAt", "kernel.astrale.ai:class.Timestamped.property.createdAt"> | import("@astrale-os/sdk/schema").PropertyProjection<string | number | boolean | import("@astrale-os/sdk/schema").Array | import("@astrale-os/sdk/schema").Object | null, true, "updatedAt", "kernel.astrale.ai:class.Timestamped.property.updatedAt">, never, never>];
21
21
  readonly properties: {
22
22
  readonly body: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "body", "self">;
23
+ readonly authorId: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "authorId", "self">;
23
24
  };
24
- readonly methods: Readonly<Record<never, never>>;
25
- readonly effectiveProperties: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "body", "self"> | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, true> & {
25
+ readonly methods: {
26
+ readonly edit: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
27
+ body: string;
28
+ }, {
29
+ readonly mode: 'value';
30
+ readonly value: {
31
+ id: string;
32
+ body: string;
33
+ };
34
+ }, "authorized", false, "default">>;
35
+ readonly delete: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
36
+ readonly mode: 'value';
37
+ readonly value: {
38
+ commentId: string;
39
+ deleted: true;
40
+ };
41
+ }, "authorized", false, "default">>;
42
+ };
43
+ readonly effectiveProperties: (import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "authorId", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "body", "self">) | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, true> & {
26
44
  readonly name: "createdAt";
27
45
  readonly key: "kernel.astrale.ai:class.Timestamped.property.createdAt";
28
46
  }) | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, true> & {
29
47
  readonly name: "updatedAt";
30
48
  readonly key: "kernel.astrale.ai:class.Timestamped.property.updatedAt";
31
49
  });
32
- readonly effectiveInstanceMethods: never;
50
+ readonly effectiveInstanceMethods: import("@astrale-os/sdk/schema").AuthoredMethodProjection<import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
51
+ readonly mode: 'value';
52
+ readonly value: {
53
+ commentId: string;
54
+ deleted: true;
55
+ };
56
+ }, "authorized", false, "default">>, "delete", "self"> | import("@astrale-os/sdk/schema").AuthoredMethodProjection<import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
57
+ body: string;
58
+ }, {
59
+ readonly mode: 'value';
60
+ readonly value: {
61
+ id: string;
62
+ body: string;
63
+ };
64
+ }, "authorized", false, "default">>, "edit", "self">;
33
65
  readonly effectiveStaticMethods: never;
34
- }>;
66
+ }> & import("@astrale-os/sdk/schema").StateClass<Readonly<Omit<Readonly<Record<never, never>>, never> & {}>>;
@@ -0,0 +1,17 @@
1
+ import { K, nodeClass, property } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { nodeIdValue } from '../../../types/index.js';
4
+ import { deleteCommentMethod } from '../functions/delete-comment.js';
5
+ import { editCommentMethod } from '../functions/edit-comment.js';
6
+ import { ContributeToComment } from '../policies/contribute-to-comment.js';
7
+ export const Comment = nodeClass({
8
+ description: 'One authored discussion entry attached to an Issue.',
9
+ icon: 'message-square',
10
+ extends: [K.classes.Timestamped],
11
+ properties: {
12
+ body: z.string().min(1).max(50_000),
13
+ authorId: property(nodeIdValue, {}),
14
+ },
15
+ methods: { edit: editCommentMethod, delete: deleteCommentMethod },
16
+ policies: { read: () => ContributeToComment },
17
+ });
@@ -0,0 +1,3 @@
1
+ export { comment_authored_by } from './comment-authored-by.js';
2
+ export { Comment } from './comment.js';
3
+ export { issue_has_comment } from './issue-has-comment.js';
@@ -0,0 +1,3 @@
1
+ export { comment_authored_by } from './comment-authored-by.js';
2
+ export { Comment } from './comment.js';
3
+ export { issue_has_comment } from './issue-has-comment.js';
@@ -0,0 +1,16 @@
1
+ export declare const issue_has_comment: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
2
+ readonly depth: 0;
3
+ readonly abstract: false;
4
+ readonly extends: readonly [];
5
+ readonly properties: never;
6
+ readonly source: {
7
+ readonly as: "issue";
8
+ readonly outgoing: "0..*";
9
+ };
10
+ readonly target: {
11
+ readonly as: "comment";
12
+ readonly incoming: "1";
13
+ };
14
+ readonly constraints: Record<never, never>;
15
+ readonly effectiveProperties: never;
16
+ }>;
@@ -0,0 +1,10 @@
1
+ import { edgeClass } from '@astrale-os/sdk/schema';
2
+ import { Issue } from '../../issue/index.js';
3
+ import { TraverseIssueComment } from '../policies/traverse-issue-comment.js';
4
+ import { Comment } from './comment.js';
5
+ export const issue_has_comment = edgeClass.directed({
6
+ description: 'One Issue contains one Comment.',
7
+ source: { as: 'issue', accepts: [() => Issue], outgoing: '0..*' },
8
+ target: { as: 'comment', accepts: [() => Comment], incoming: '1' },
9
+ policies: { traverse: () => TraverseIssueComment },
10
+ });
@@ -0,0 +1,7 @@
1
+ export declare const deleteCommentMethod: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
2
+ readonly mode: 'value';
3
+ readonly value: {
4
+ commentId: string;
5
+ deleted: true;
6
+ };
7
+ }, "authorized", false, "default">>;
@@ -0,0 +1,11 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { nodeIdValue } from '../../../types/index.js';
4
+ import { EditOwnComment } from '../policies/edit-own-comment.js';
5
+ export const deleteCommentMethod = method({
6
+ description: 'Delete this Comment as its author.',
7
+ auth: 'authorized',
8
+ policy: ({ check, self }) => check(EditOwnComment, self),
9
+ input: z.strictObject({}),
10
+ output: z.strictObject({ commentId: nodeIdValue, deleted: z.literal(true) }),
11
+ });
@@ -0,0 +1,9 @@
1
+ export declare const editCommentMethod: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
2
+ body: string;
3
+ }, {
4
+ readonly mode: 'value';
5
+ readonly value: {
6
+ id: string;
7
+ body: string;
8
+ };
9
+ }, "authorized", false, "default">>;
@@ -0,0 +1,11 @@
1
+ import { method } from '@astrale-os/sdk/schema';
2
+ import { z } from 'zod';
3
+ import { EditOwnComment } from '../policies/edit-own-comment.js';
4
+ import { commentValue } from '../types/comment.js';
5
+ export const editCommentMethod = method({
6
+ description: 'Edit this Comment as its author.',
7
+ auth: 'authorized',
8
+ policy: ({ check, self }) => check(EditOwnComment, self),
9
+ input: z.strictObject({ body: z.string().min(1).max(50_000) }),
10
+ output: commentValue,
11
+ });
@@ -0,0 +1,2 @@
1
+ export { deleteCommentMethod } from './delete-comment.js';
2
+ export { editCommentMethod } from './edit-comment.js';
@@ -0,0 +1,2 @@
1
+ export { deleteCommentMethod } from './delete-comment.js';
2
+ export { editCommentMethod } from './edit-comment.js';
@@ -0,0 +1,4 @@
1
+ export { commentValue } from './types/index.js';
2
+ export { comment_authored_by, Comment, issue_has_comment } from './classes/index.js';
3
+ export { deleteCommentMethod, editCommentMethod } from './functions/index.js';
4
+ export { ContributeToComment, EditOwnComment, TraverseCommentRelationship, TraverseIssueComment, } from './policies/index.js';
@@ -0,0 +1,4 @@
1
+ export { commentValue } from './types/index.js';
2
+ export { comment_authored_by, Comment, issue_has_comment } from './classes/index.js';
3
+ export { deleteCommentMethod, editCommentMethod } from './functions/index.js';
4
+ export { ContributeToComment, EditOwnComment, TraverseCommentRelationship, TraverseIssueComment, } from './policies/index.js';
@@ -0,0 +1 @@
1
+ export declare const ContributeToComment: import("@astrale-os/sdk/schema").Policy;
@@ -0,0 +1,12 @@
1
+ import { policy } from '@astrale-os/sdk/schema';
2
+ import { Issue, project_contains_issue } from '../../issue/index.js';
3
+ import { Project, project_has_member, project_owned_by } from '../../project/index.js';
4
+ import { issue_has_comment } from '../classes/issue-has-comment.js';
5
+ export const ContributeToComment = policy({
6
+ description: 'The caller owns or belongs to the Project containing this Comment.',
7
+ match: ({ allOf, anyOf, edge, exists, object, subject }) => exists(({ node }) => {
8
+ const project = node(() => Project);
9
+ const issue = node(() => Issue);
10
+ return allOf(anyOf(edge({ source: subject, class: () => project_owned_by, target: project }), edge({ source: subject, class: () => project_has_member, target: project })), edge({ source: project, class: () => project_contains_issue, target: issue }), edge({ source: issue, class: () => issue_has_comment, target: object }));
11
+ }),
12
+ });
@@ -0,0 +1 @@
1
+ export declare const EditOwnComment: import("@astrale-os/sdk/schema").Policy;
@@ -0,0 +1,6 @@
1
+ import { policy } from '@astrale-os/sdk/schema';
2
+ import { comment_authored_by } from '../classes/comment-authored-by.js';
3
+ export const EditOwnComment = policy({
4
+ description: 'The caller is the immutable author of this Comment.',
5
+ match: ({ edge, object, subject }) => edge({ source: subject, class: () => comment_authored_by, target: object }),
6
+ });
@@ -0,0 +1,4 @@
1
+ export { ContributeToComment } from './contribute-to-comment.js';
2
+ export { EditOwnComment } from './edit-own-comment.js';
3
+ export { TraverseCommentRelationship } from './traverse-comment-relationship.js';
4
+ export { TraverseIssueComment } from './traverse-issue-comment.js';
@@ -0,0 +1,4 @@
1
+ export { ContributeToComment } from './contribute-to-comment.js';
2
+ export { EditOwnComment } from './edit-own-comment.js';
3
+ export { TraverseCommentRelationship } from './traverse-comment-relationship.js';
4
+ export { TraverseIssueComment } from './traverse-issue-comment.js';
@@ -0,0 +1 @@
1
+ export declare const TraverseCommentRelationship: import("@astrale-os/sdk/schema").Policy;
@@ -0,0 +1,17 @@
1
+ import { policy } from '@astrale-os/sdk/schema';
2
+ import { Issue, project_contains_issue } from '../../issue/index.js';
3
+ import { Project, project_has_member, project_owned_by } from '../../project/index.js';
4
+ import { comment_authored_by } from '../classes/comment-authored-by.js';
5
+ import { issue_has_comment } from '../classes/issue-has-comment.js';
6
+ export const TraverseCommentRelationship = policy({
7
+ description: 'The caller owns or belongs to the Project containing the source Comment.',
8
+ match: ({ allOf, anyOf, edge, exists, source, subject, target }) => anyOf(exists(({ node }) => {
9
+ const issue = node(() => Issue);
10
+ const project = node(() => Project);
11
+ return allOf(edge({ source, class: () => comment_authored_by, target }), edge({ source: issue, class: () => issue_has_comment, target }), edge({ source: project, class: () => project_contains_issue, target: issue }), edge({ source: subject, class: () => project_owned_by, target: project }));
12
+ }), exists(({ node }) => {
13
+ const issue = node(() => Issue);
14
+ const project = node(() => Project);
15
+ return allOf(edge({ source, class: () => comment_authored_by, target }), edge({ source: issue, class: () => issue_has_comment, target }), edge({ source: project, class: () => project_contains_issue, target: issue }), edge({ source: subject, class: () => project_has_member, target: project }));
16
+ })),
17
+ });
@@ -0,0 +1 @@
1
+ export declare const TraverseIssueComment: import("@astrale-os/sdk/schema").Policy;
@@ -0,0 +1,14 @@
1
+ import { policy } from '@astrale-os/sdk/schema';
2
+ import { project_contains_issue } from '../../issue/index.js';
3
+ import { Project, project_has_member, project_owned_by } from '../../project/index.js';
4
+ import { issue_has_comment } from '../classes/issue-has-comment.js';
5
+ export const TraverseIssueComment = policy({
6
+ description: 'Issue Comment containment is visible only inside the containing Project.',
7
+ match: ({ allOf, anyOf, edge, exists, source, subject, target }) => anyOf(exists(({ node }) => {
8
+ const project = node(() => Project);
9
+ return allOf(edge({ source, class: () => issue_has_comment, target }), edge({ source: project, class: () => project_contains_issue, target: source }), edge({ source: subject, class: () => project_owned_by, target: project }));
10
+ }), exists(({ node }) => {
11
+ const project = node(() => Project);
12
+ return allOf(edge({ source, class: () => issue_has_comment, target }), edge({ source: project, class: () => project_contains_issue, target: source }), edge({ source: subject, class: () => project_has_member, target: project }));
13
+ })),
14
+ });
@@ -0,0 +1,5 @@
1
+ import { z } from 'zod';
2
+ export declare const commentValue: z.ZodObject<{
3
+ id: z.ZodString;
4
+ body: z.ZodString;
5
+ }, z.core.$strict>;
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+ import { nodeIdValue } from '../../../types/index.js';
3
+ export const commentValue = z.strictObject({
4
+ id: nodeIdValue,
5
+ body: z.string().min(1).max(50_000),
6
+ });
@@ -0,0 +1 @@
1
+ export { commentValue } from './comment.js';
@@ -0,0 +1 @@
1
+ export { commentValue } from './comment.js';
@@ -0,0 +1,5 @@
1
+ export { issue_assigned_to } from './issue-assigned-to.js';
2
+ export { issue_reported_by } from './issue-reported-by.js';
3
+ export { issue_subtask_of } from './issue-subtask-of.js';
4
+ export { Issue } from './issue.js';
5
+ export { project_contains_issue } from './project-contains-issue.js';
@@ -0,0 +1,5 @@
1
+ export { issue_assigned_to } from './issue-assigned-to.js';
2
+ export { issue_reported_by } from './issue-reported-by.js';
3
+ export { issue_subtask_of } from './issue-subtask-of.js';
4
+ export { Issue } from './issue.js';
5
+ export { project_contains_issue } from './project-contains-issue.js';
@@ -0,0 +1,16 @@
1
+ export declare const issue_assigned_to: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
2
+ readonly depth: 0;
3
+ readonly abstract: false;
4
+ readonly extends: readonly [];
5
+ readonly properties: never;
6
+ readonly source: {
7
+ readonly as: "assignee";
8
+ readonly outgoing: "0..*";
9
+ };
10
+ readonly target: {
11
+ readonly as: "issue";
12
+ readonly incoming: "0..1";
13
+ };
14
+ readonly constraints: Record<never, never>;
15
+ readonly effectiveProperties: never;
16
+ }>;