@a-company/paradigm 5.37.11 → 6.0.2

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 (362) hide show
  1. package/dist/{accept-orchestration-SBZVK3H4.js → accept-orchestration-QQISPINV.js} +1 -1
  2. package/dist/add-UOR4INIV.js +8 -0
  3. package/dist/{agent-loader-RIVI6QPP.js → agent-loader-2WJHD46U.js} +1 -1
  4. package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-YKS2PQWO.js} +1 -1
  5. package/dist/{aggregate-W66DM3GA.js → aggregate-A5S5MTCC.js} +1 -1
  6. package/dist/{ambient-76YMUA5Q.js → ambient-BE3SQXNN.js} +1 -1
  7. package/dist/{ambient-WTLYUAQM.js → ambient-NVKQCW2A.js} +12 -12
  8. package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
  9. package/dist/{beacon-5QVYV5DF.js → beacon-QVUD3MGP.js} +1 -1
  10. package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
  11. package/dist/{chunk-SI6SV76D.js → chunk-3DZK54RU.js} +72 -19
  12. package/dist/{chunk-CHVQNRRT.js → chunk-4PSD5R7N.js} +2 -2
  13. package/dist/chunk-6SKSV5B2.js +24 -0
  14. package/dist/{chunk-KFNHCQ4R.js → chunk-FEYOQMZ5.js} +1 -1
  15. package/dist/{chunk-NEJ4ZLCY.js → chunk-GAFKOFAV.js} +1 -1
  16. package/dist/chunk-GRZQIKST.js +2 -0
  17. package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
  18. package/dist/chunk-LPBCQM5Y.js +6 -0
  19. package/dist/{chunk-T6IDXUUA.js → chunk-LWAIVOSF.js} +1 -1
  20. package/dist/{chunk-74SGKSRQ.js → chunk-M2HKWR25.js} +1 -1
  21. package/dist/{chunk-BOYQAMGC.js → chunk-M3PPXJU4.js} +1 -1
  22. package/dist/chunk-PHEX6LU4.js +111 -0
  23. package/dist/chunk-Q527BPUF.js +2 -0
  24. package/dist/chunk-R5ECMBIV.js +11 -0
  25. package/dist/{chunk-X3U3IGYT.js → chunk-TBWWFRL5.js} +1 -1
  26. package/dist/{chunk-MQIG6SMF.js → chunk-TNVWGPCE.js} +1 -1
  27. package/dist/{chunk-SUU6M4JH.js → chunk-TOYQ2QCB.js} +1 -1
  28. package/dist/chunk-TZDYIPVU.js +521 -0
  29. package/dist/{chunk-3XGNXXCT.js → chunk-UZ5H7K6Q.js} +1 -1
  30. package/dist/chunk-VIG5LSGZ.js +2 -0
  31. package/dist/chunk-VNIX5KBT.js +3 -0
  32. package/dist/{chunk-AGFPVSX5.js → chunk-VXIIVMTM.js} +1 -1
  33. package/dist/{chunk-ORDKEGII.js → chunk-WESTEMIM.js} +1 -1
  34. package/dist/{chunk-LBQBWIEX.js → chunk-Y4P4SGZV.js} +1 -1
  35. package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
  36. package/dist/chunk-Z5QW6USC.js +2 -0
  37. package/dist/chunk-ZJQY5PPP.js +7 -0
  38. package/dist/{commands-LMUD5L6R.js → commands-ANRJNG2W.js} +1 -1
  39. package/dist/compliance-BNFWQPKM.js +6 -0
  40. package/dist/config-schema-FLHRVZMI.js +2 -0
  41. package/dist/{constellation-CG7C4WFE.js → constellation-NWLXYATA.js} +1 -1
  42. package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
  43. package/dist/{cost-IDNVMAEV.js → cost-24UZSS2P.js} +1 -1
  44. package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
  45. package/dist/decision-loader-HELL2AMX.js +2 -0
  46. package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
  47. package/dist/{diff-JVEYCXUC.js → diff-MF55KQZH.js} +1 -1
  48. package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
  49. package/dist/dist-JZZJLVMR.js +2 -0
  50. package/dist/{dist-3ZCH25SG.js → dist-OG6MM4VY.js} +1 -1
  51. package/dist/dist-SE67SOXB.js +2 -0
  52. package/dist/{docs-USDAF26F.js → docs-O37YLLRN.js} +1 -1
  53. package/dist/doctor-IG5XM4C4.js +2 -0
  54. package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
  55. package/dist/{flow-POQP27WA.js → flow-BGXOVE2V.js} +1 -1
  56. package/dist/{hooks-IG2GOAHP.js → hooks-TFMMMB2H.js} +1 -1
  57. package/dist/index.js +6 -6
  58. package/dist/init-M44SO65G.js +2 -0
  59. package/dist/init-V4KSEKPK.js +2 -0
  60. package/dist/{integrity-UYDOOJDP.js → integrity-ROO3G43N.js} +1 -1
  61. package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
  62. package/dist/list-CFHINXIS.js +12 -0
  63. package/dist/lore-loader-D2ISOASW.js +2 -0
  64. package/dist/lore-loader-PXFKMKAN.js +2 -0
  65. package/dist/mcp.js +19 -11
  66. package/dist/metrics-UESGUHTA.js +2 -0
  67. package/dist/{migrate-IBDE7VK4.js → migrate-Z5UQN57G.js} +1 -1
  68. package/dist/migrate-assessments-YSITX7KM.js +4 -0
  69. package/dist/migrate-decisions-NPLQOEEH.js +6 -0
  70. package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
  71. package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-QPZJH6XO.js} +1 -1
  72. package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
  73. package/dist/{orchestrate-RCAMBOIB.js → orchestrate-RID7HHHH.js} +1 -1
  74. package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
  75. package/dist/portal-check-DV2VSJ5E.js +8 -0
  76. package/dist/{portal-compliance-4MG5F2GI.js → portal-compliance-JONQ4SOP.js} +1 -1
  77. package/dist/{probe-B22G2JKF.js → probe-5HAXULAD.js} +1 -1
  78. package/dist/{providers-AWA7WLLM.js → providers-4PXMWA7V.js} +1 -1
  79. package/dist/quiz-WYIZJG5K.js +10 -0
  80. package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
  81. package/dist/reindex-FWPD2VGM.js +2 -0
  82. package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
  83. package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
  84. package/dist/{review-6UAH6V3R.js → review-VMSX2PKI.js} +1 -1
  85. package/dist/{ripple-ZGDITCGB.js → ripple-FNZI47SH.js} +1 -1
  86. package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
  87. package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
  88. package/dist/sentinel.js +1 -1
  89. package/dist/{serve-U47GULB6.js → serve-MO35XIZE.js} +1 -1
  90. package/dist/serve-OQYUO7CR.js +12 -0
  91. package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
  92. package/dist/server-FGUL2FWQ.js +7 -0
  93. package/dist/session-tracker-KGORN6B5.js +2 -0
  94. package/dist/{session-work-log-PAKXOFGL.js → session-work-log-4IEVE4KK.js} +1 -1
  95. package/dist/{session-work-log-ZP45TREI.js → session-work-log-EE4UIZ33.js} +1 -1
  96. package/dist/{setup-3F5IK7MO.js → setup-ZSEC72BS.js} +2 -2
  97. package/dist/{shift-FDADESC4.js → shift-TVNY2CQF.js} +6 -6
  98. package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
  99. package/dist/show-WVHAL4VU.js +7 -0
  100. package/dist/{snapshot-L2G56RPL.js → snapshot-3IYB67D4.js} +1 -1
  101. package/dist/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
  102. package/dist/{status-77M3SDIF.js → status-DB3KNLW3.js} +1 -1
  103. package/dist/status-S7Z5FVIE.js +6 -0
  104. package/dist/{summary-LXLHFRN7.js → summary-WLI3NF4G.js} +2 -2
  105. package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
  106. package/dist/sync-55U6QPIA.js +2 -0
  107. package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
  108. package/dist/team-MGT66HZQ.js +2 -0
  109. package/dist/{test-BQJMS4Y2.js → test-WLEPZQFC.js} +1 -1
  110. package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
  111. package/dist/tools-QJHAVYI6.js +2 -0
  112. package/dist/university-content/notes/N-para-001-build-something.md +126 -0
  113. package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
  114. package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
  115. package/dist/university-content/notes/N-para-101-component-types.md +99 -0
  116. package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
  117. package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
  118. package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
  119. package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
  120. package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
  121. package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
  122. package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
  123. package/dist/university-content/notes/N-para-101-welcome.md +51 -0
  124. package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
  125. package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
  126. package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
  127. package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
  128. package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
  129. package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
  130. package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
  131. package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
  132. package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
  133. package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
  134. package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
  135. package/dist/university-content/notes/N-para-301-context-management.md +53 -0
  136. package/dist/university-content/notes/N-para-301-decisions.md +99 -0
  137. package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
  138. package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
  139. package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
  140. package/dist/university-content/notes/N-para-301-history-system.md +42 -0
  141. package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
  142. package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
  143. package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
  144. package/dist/university-content/notes/N-para-301-protocols.md +113 -0
  145. package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
  146. package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
  147. package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
  148. package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
  149. package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
  150. package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
  151. package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
  152. package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
  153. package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
  154. package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
  155. package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
  156. package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
  157. package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
  158. package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
  159. package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
  160. package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
  161. package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
  162. package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
  163. package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
  164. package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
  165. package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
  166. package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
  167. package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
  168. package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
  169. package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
  170. package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
  171. package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
  172. package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
  173. package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
  174. package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
  175. package/dist/university-content/notes/N-para-501-task-management.md +100 -0
  176. package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
  177. package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
  178. package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
  179. package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
  180. package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
  181. package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
  182. package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
  183. package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
  184. package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
  185. package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
  186. package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
  187. package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
  188. package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
  189. package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
  190. package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
  191. package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
  192. package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
  193. package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
  194. package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
  195. package/dist/university-content/paths/LP-para-001.yaml +29 -0
  196. package/dist/university-content/paths/LP-para-101.yaml +59 -0
  197. package/dist/university-content/paths/LP-para-201.yaml +69 -0
  198. package/dist/university-content/paths/LP-para-301.yaml +84 -0
  199. package/dist/university-content/paths/LP-para-401.yaml +74 -0
  200. package/dist/university-content/paths/LP-para-501.yaml +89 -0
  201. package/dist/university-content/paths/LP-para-601.yaml +59 -0
  202. package/dist/university-content/paths/LP-para-701.yaml +64 -0
  203. package/dist/university-content/quizzes/Q-para-001-build-something.yaml +46 -0
  204. package/dist/university-content/quizzes/Q-para-001-meet-the-team.yaml +46 -0
  205. package/dist/university-content/quizzes/Q-para-001-shift-setup.yaml +46 -0
  206. package/dist/university-content/quizzes/Q-para-101-component-types.yaml +46 -0
  207. package/dist/university-content/quizzes/Q-para-101-first-steps.yaml +56 -0
  208. package/dist/university-content/quizzes/Q-para-101-five-symbols.yaml +66 -0
  209. package/dist/university-content/quizzes/Q-para-101-paradigm-logger.yaml +56 -0
  210. package/dist/university-content/quizzes/Q-para-101-portal-yaml.yaml +56 -0
  211. package/dist/university-content/quizzes/Q-para-101-project-structure.yaml +66 -0
  212. package/dist/university-content/quizzes/Q-para-101-purpose-files.yaml +56 -0
  213. package/dist/university-content/quizzes/Q-para-101-tags-and-classification.yaml +56 -0
  214. package/dist/university-content/quizzes/Q-para-101-welcome.yaml +56 -0
  215. package/dist/university-content/quizzes/Q-para-201-architecture-review.yaml +66 -0
  216. package/dist/university-content/quizzes/Q-para-201-aspect-graph.yaml +46 -0
  217. package/dist/university-content/quizzes/Q-para-201-aspects-and-anchors.yaml +56 -0
  218. package/dist/university-content/quizzes/Q-para-201-component-patterns.yaml +56 -0
  219. package/dist/university-content/quizzes/Q-para-201-cross-cutting-concerns.yaml +56 -0
  220. package/dist/university-content/quizzes/Q-para-201-disciplines.yaml +66 -0
  221. package/dist/university-content/quizzes/Q-para-201-flows-deep-dive.yaml +66 -0
  222. package/dist/university-content/quizzes/Q-para-201-gates-deep-dive.yaml +66 -0
  223. package/dist/university-content/quizzes/Q-para-201-portal-protocol.yaml +56 -0
  224. package/dist/university-content/quizzes/Q-para-201-signal-patterns.yaml +56 -0
  225. package/dist/university-content/quizzes/Q-para-201-symbol-naming.yaml +66 -0
  226. package/dist/university-content/quizzes/Q-para-301-context-management.yaml +56 -0
  227. package/dist/university-content/quizzes/Q-para-301-decisions.yaml +76 -0
  228. package/dist/university-content/quizzes/Q-para-301-doctor-and-validation.yaml +66 -0
  229. package/dist/university-content/quizzes/Q-para-301-enforcement-levels.yaml +46 -0
  230. package/dist/university-content/quizzes/Q-para-301-fragility-tracking.yaml +46 -0
  231. package/dist/university-content/quizzes/Q-para-301-history-system.yaml +56 -0
  232. package/dist/university-content/quizzes/Q-para-301-navigation-system.yaml +56 -0
  233. package/dist/university-content/quizzes/Q-para-301-operations-review.yaml +66 -0
  234. package/dist/university-content/quizzes/Q-para-301-paradigm-shift.yaml +46 -0
  235. package/dist/university-content/quizzes/Q-para-301-protocols.yaml +56 -0
  236. package/dist/university-content/quizzes/Q-para-301-ripple-analysis.yaml +56 -0
  237. package/dist/university-content/quizzes/Q-para-301-sentinel-observability.yaml +46 -0
  238. package/dist/university-content/quizzes/Q-para-301-sync-and-maintenance.yaml +46 -0
  239. package/dist/university-content/quizzes/Q-para-301-wisdom-system.yaml +56 -0
  240. package/dist/university-content/quizzes/Q-para-401-agent-identity.yaml +66 -0
  241. package/dist/university-content/quizzes/Q-para-401-agent-interop.yaml +46 -0
  242. package/dist/university-content/quizzes/Q-para-401-agent-roles.yaml +56 -0
  243. package/dist/university-content/quizzes/Q-para-401-commit-conventions.yaml +56 -0
  244. package/dist/university-content/quizzes/Q-para-401-mastery-review.yaml +66 -0
  245. package/dist/university-content/quizzes/Q-para-401-mcp-tools-overview.yaml +66 -0
  246. package/dist/university-content/quizzes/Q-para-401-multi-agent-coordination.yaml +76 -0
  247. package/dist/university-content/quizzes/Q-para-401-notebooks-permissions.yaml +61 -0
  248. package/dist/university-content/quizzes/Q-para-401-orchestration-workflow.yaml +66 -0
  249. package/dist/university-content/quizzes/Q-para-401-pm-governance.yaml +66 -0
  250. package/dist/university-content/quizzes/Q-para-401-provider-cascade.yaml +56 -0
  251. package/dist/university-content/quizzes/Q-para-401-quick-check.yaml +46 -0
  252. package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
  253. package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
  254. package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
  255. package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
  256. package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
  257. package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
  258. package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
  259. package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
  260. package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
  261. package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
  262. package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
  263. package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
  264. package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
  265. package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
  266. package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
  267. package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
  268. package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
  269. package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
  270. package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
  271. package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
  272. package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
  273. package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
  274. package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
  275. package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
  276. package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
  277. package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
  278. package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
  279. package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
  280. package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
  281. package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
  282. package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
  283. package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
  284. package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
  285. package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
  286. package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
  287. package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
  288. package/dist/university-content/reference.json +2 -2
  289. package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
  290. package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
  291. package/dist/university-ui/index.html +1 -1
  292. package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
  293. package/dist/{validate-VZXTJHGO.js → validate-BB6LRWIY.js} +1 -1
  294. package/dist/validate-XUQZTF3H.js +9 -0
  295. package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
  296. package/dist/workspace-VMSPYIBV.js +2 -0
  297. package/lore-ui/dist/assets/{index-Bk-K0qgN.js → index-DKhNxgtW.js} +10 -10
  298. package/lore-ui/dist/index.html +1 -1
  299. package/package.json +3 -2
  300. package/platform-ui/dist/assets/{AmbientSection-BYjt75R1.js → AmbientSection-CwatqcBD.js} +1 -1
  301. package/platform-ui/dist/assets/{CanvasSection-rKvA_vZj.js → CanvasSection-dFAthehN.js} +1 -1
  302. package/platform-ui/dist/assets/{DocsSection-CI9K73M-.js → DocsSection-BZ2SFJBZ.js} +1 -1
  303. package/platform-ui/dist/assets/{GitSection-DSGj_c6S.js → GitSection-MNNYU1tO.js} +1 -1
  304. package/platform-ui/dist/assets/{GraphSection-CawN7pC5.js → GraphSection-COYjb4Pt.js} +1 -1
  305. package/platform-ui/dist/assets/LoreSection-B0hUbfsJ.js +1 -0
  306. package/platform-ui/dist/assets/{SentinelSection-DNgoYMH0.js → SentinelSection-BCxW1DCp.js} +1 -1
  307. package/platform-ui/dist/assets/{SymphonySection-C0zfcqv3.js → SymphonySection-BsucZRqy.js} +1 -1
  308. package/platform-ui/dist/assets/{TeamSection-Bzd3Dt9Q.js → TeamSection-C0QNTudW.js} +1 -1
  309. package/platform-ui/dist/assets/{UniversitySection-tBr62R0S.js → UniversitySection-DN1-g9pw.js} +1 -1
  310. package/platform-ui/dist/assets/{index-BaOmyn11.js → index-DwUT8pju.js} +2 -2
  311. package/platform-ui/dist/index.html +1 -1
  312. package/templates/paradigm/specs/symbols.md +4 -2
  313. package/dist/add-P76GEMGF.js +0 -8
  314. package/dist/chunk-3TR6LLXP.js +0 -111
  315. package/dist/chunk-G7XFK2GI.js +0 -11
  316. package/dist/chunk-J6KWGCHN.js +0 -24
  317. package/dist/chunk-JQKKVAAN.js +0 -2
  318. package/dist/chunk-ODVKPZZ4.js +0 -2
  319. package/dist/chunk-Q2J542ST.js +0 -2
  320. package/dist/chunk-QT2LKB3P.js +0 -7
  321. package/dist/chunk-SHD27BQX.js +0 -6
  322. package/dist/chunk-WS2N27RX.js +0 -3
  323. package/dist/chunk-YT52WLBF.js +0 -521
  324. package/dist/compliance-WJINB5DM.js +0 -6
  325. package/dist/config-schema-GUQY2QN7.js +0 -2
  326. package/dist/decision-loader-2XPZE4EZ.js +0 -2
  327. package/dist/dist-R3RWD35F.js +0 -2
  328. package/dist/dist-VXCZWVVJ.js +0 -2
  329. package/dist/doctor-QJ47XAUP.js +0 -2
  330. package/dist/init-HIBRSVUB.js +0 -2
  331. package/dist/list-5IUGP3ZB.js +0 -7
  332. package/dist/lore-loader-RVQI5GXL.js +0 -2
  333. package/dist/lore-loader-XY5MZRR2.js +0 -2
  334. package/dist/migrate-assessments-GEI5WMI2.js +0 -4
  335. package/dist/portal-check-Z3OCQEQR.js +0 -8
  336. package/dist/quiz-FE5UGAY2.js +0 -10
  337. package/dist/reindex-FO5VMZVQ.js +0 -2
  338. package/dist/serve-OY6XYL7F.js +0 -12
  339. package/dist/server-2MNROHF6.js +0 -7
  340. package/dist/session-tracker-MWJAJA6Z.js +0 -2
  341. package/dist/show-BOAVWZPZ.js +0 -7
  342. package/dist/status-A37ECYNJ.js +0 -6
  343. package/dist/sync-DLUBV5HQ.js +0 -2
  344. package/dist/team-NSP6PMPS.js +0 -2
  345. package/dist/tools-CERDNVCG.js +0 -2
  346. package/dist/university-content/courses/.purpose +0 -492
  347. package/dist/university-content/courses/para-001.json +0 -166
  348. package/dist/university-content/courses/para-101.json +0 -615
  349. package/dist/university-content/courses/para-201.json +0 -794
  350. package/dist/university-content/courses/para-301.json +0 -830
  351. package/dist/university-content/courses/para-401.json +0 -868
  352. package/dist/university-content/courses/para-501.json +0 -1166
  353. package/dist/university-content/courses/para-601.json +0 -719
  354. package/dist/university-content/courses/para-701.json +0 -807
  355. package/dist/university-content/plsat/.purpose +0 -162
  356. package/dist/university-content/plsat/v2.0.json +0 -760
  357. package/dist/university-content/plsat/v3.0.json +0 -3453
  358. package/dist/validate-C6SMKGYD.js +0 -9
  359. package/dist/workspace-MKSQN7B2.js +0 -2
  360. package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
  361. /package/dist/{chunk-BV5PRPLB.js → chunk-IZSBGW6E.js} +0 -0
  362. /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
@@ -0,0 +1,175 @@
1
+ ---
2
+ id: N-para-201-architecture-review
3
+ title: Putting It All Together
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-201
11
+ - feature-building-follows
12
+ - implementation-comes-last
13
+ - check-existing-aspects
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 4
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-201.json
21
+ ---
22
+
23
+ ## Building a Complete Feature
24
+
25
+ You have learned flows, gates, aspects, disciplines, naming conventions, component patterns, signal patterns, and cross-cutting concerns. Now let us walk through building a complete feature from scratch, using every tool in the Paradigm toolkit. The feature: **a team invitation system** where team admins can invite new members via email.
26
+
27
+ ## Step 1: Identify Components
28
+
29
+ Start by listing the code units you will need:
30
+
31
+ ```yaml
32
+ #invitation-service:
33
+ description: Creates and manages team invitations
34
+ tags: [feature, teams]
35
+
36
+ #invitation-email:
37
+ description: Sends invitation emails via SendGrid
38
+ tags: [integration, sendgrid, email]
39
+
40
+ #invitation-token:
41
+ description: Generates and validates secure invitation tokens
42
+ tags: [infrastructure, security]
43
+
44
+ #invitation-store:
45
+ description: Persists invitations with status tracking
46
+ tags: [state, teams]
47
+ ```
48
+
49
+ Four components — one feature, one integration, one infrastructure, one state. Each has a clear responsibility and appropriate tags.
50
+
51
+ ## Step 2: Define the Flow
52
+
53
+ The invitation process spans all four components in sequence:
54
+
55
+ ```yaml
56
+ $team-invitation-flow:
57
+ description: Admin invites a user, email is sent, user accepts and joins team
58
+ steps:
59
+ - component: "#invitation-service"
60
+ action: create-invitation
61
+ description: Validates admin permissions and creates invitation record
62
+ - component: "#invitation-token"
63
+ action: generate-token
64
+ description: Creates a cryptographically secure token with 7-day expiry
65
+ - component: "#invitation-store"
66
+ action: persist-invitation
67
+ description: Saves invitation with pending status
68
+ - component: "#invitation-email"
69
+ action: send-invite
70
+ description: Sends email with accept link containing the token
71
+ signals: ["!invitation-sent", "!invitation-accepted"]
72
+ gates: ["^authenticated", "^team-admin"]
73
+ ```
74
+
75
+ ## Step 3: Add Gates
76
+
77
+ Two gates are needed. First, check `portal.yaml` for existing gates. `^authenticated` likely exists. `^team-admin` may need to be created:
78
+
79
+ ```yaml
80
+ # In portal.yaml
81
+ gates:
82
+ ^team-admin:
83
+ description: User must be an admin of the specified team
84
+ check: team.admins.includes(req.user.id)
85
+ type: role
86
+ requires: [^authenticated]
87
+ effects: []
88
+
89
+ routes:
90
+ "POST /api/teams/:id/invitations": [^authenticated, ^team-admin]
91
+ "POST /api/invitations/:token/accept": [^authenticated]
92
+ "GET /api/teams/:id/invitations": [^authenticated, ^team-admin]
93
+ "DELETE /api/invitations/:id": [^authenticated, ^team-admin]
94
+ ```
95
+
96
+ Notice that accepting an invitation only requires `^authenticated` — any logged-in user with a valid token can accept. But creating, listing, and deleting invitations requires `^team-admin`.
97
+
98
+ ## Step 4: Define Signals
99
+
100
+ ```yaml
101
+ !invitation-sent:
102
+ description: An invitation email was successfully sent to a prospective team member
103
+ emitters: ["#invitation-service"]
104
+ category: business
105
+ data:
106
+ invitationId: string
107
+ teamId: string
108
+ email: string
109
+
110
+ !invitation-accepted:
111
+ description: A user accepted a team invitation and joined the team
112
+ emitters: ["#invitation-service"]
113
+ category: business
114
+ data:
115
+ invitationId: string
116
+ teamId: string
117
+ userId: string
118
+ ```
119
+
120
+ These business signals enable decoupled side effects — an analytics tracker can listen for `!invitation-accepted` to track conversion rates, and a notification service can alert existing team members.
121
+
122
+ ## Step 5: Apply Aspects
123
+
124
+ Check which aspects apply to the new components:
125
+
126
+ - `~audit-required` applies to `#*Service` → `#invitation-service` is covered. Ensure the audit middleware is applied.
127
+ - `~rate-limited` applies to `#*-handler` → Not directly applicable here (no handler component), but the API route should go through the rate limiter.
128
+ - `~validated` applies to `#*-handler` → The invitation endpoint should validate input (email format, team existence).
129
+
130
+ ## Step 6: Write the .purpose File
131
+
132
+ Assemble everything into `src/invitations/.purpose`:
133
+
134
+ ```yaml
135
+ name: Team Invitations
136
+ description: Team admin invitation system with email delivery and token-based acceptance
137
+ context:
138
+ - Invitation tokens expire after 7 days
139
+ - Maximum 50 pending invitations per team
140
+ - Uses SendGrid for email delivery
141
+
142
+ components:
143
+ #invitation-service:
144
+ description: Creates and manages team invitations
145
+ file: invitation-service.ts
146
+ tags: [feature, teams]
147
+ flows: ["$team-invitation-flow"]
148
+ signals: ["!invitation-sent", "!invitation-accepted"]
149
+ gates: ["^authenticated", "^team-admin"]
150
+ aspects: ["~audit-required"]
151
+ # ... (remaining components)
152
+
153
+ flows:
154
+ $team-invitation-flow:
155
+ # ... (as defined above)
156
+
157
+ signals:
158
+ !invitation-sent:
159
+ # ... (as defined above)
160
+ !invitation-accepted:
161
+ # ... (as defined above)
162
+ ```
163
+
164
+ ## Step 7: Validate
165
+
166
+ Before writing any implementation code, validate the Paradigm definitions:
167
+
168
+ 1. `paradigm_purpose_validate` — Checks the .purpose file for schema errors.
169
+ 2. `paradigm_flow_check` — Verifies the flow references valid components.
170
+ 3. `paradigm_aspect_check` — Confirms aspect anchors are valid for applied aspects.
171
+ 4. `paradigm_ripple` — Shows what existing code is affected by the new components.
172
+
173
+ ## The Pattern
174
+
175
+ Every feature follows this pattern: **identify components** → **define flows** → **add gates** → **define signals** → **apply aspects** → **write .purpose** → **validate** → **implement**. The implementation comes last — after the architecture is documented and validated. This front-loaded documentation pays dividends: AI agents can navigate the new feature immediately, security is defined before code, and the team has a clear map of what will be built.
@@ -0,0 +1,79 @@
1
+ ---
2
+ id: N-para-201-aspect-graph
3
+ title: The Aspect Graph
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-201
11
+ - aspect-graph-connects
12
+ - five-aspect-categories
13
+ - five-edge-relations
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 3
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-201.json
21
+ ---
22
+
23
+ ## What Is the Aspect Graph?
24
+
25
+ In earlier lessons you learned that aspects (`~`) represent cross-cutting rules, constraints, and configuration values anchored to specific lines of code. The **aspect graph** connects those aspects to each other and to the rest of your symbol system — components, gates, flows, and signals — creating a queryable relationship map.
26
+
27
+ Think of it this way: a single aspect like `~token-expiry-24h` is useful on its own. But when you can see that it is *enforced by* `^authenticated`, *related to* `~refresh-token-7d`, and linked to a lore entry explaining why the team chose 24 hours — that is the graph at work.
28
+
29
+ ## v3.5 Aspect Fields
30
+
31
+ Paradigm v3.5 extended aspects with structured fields that make them graph-ready:
32
+
33
+ ```yaml
34
+ aspects:
35
+ ~rate-limit-100:
36
+ description: API rate limited to 100 requests per minute
37
+ value: 100/min
38
+ category: constraint
39
+ severity: high
40
+ anchors:
41
+ - src/middleware/rate-limiter.ts:12-18
42
+ applies-to: [#api-gateway]
43
+ edges:
44
+ - symbol: ^authenticated
45
+ relation: enforced-by
46
+ tags: [security, performance]
47
+ ```
48
+
49
+ Key fields:
50
+ - **value** — The concrete value (a number, duration, threshold) making aspects searchable by content
51
+ - **category** — One of five types: `rule` (behavioral), `decision` (architectural choice), `constraint` (hard limit), `configuration` (environment-specific), `invariant` (always-true condition)
52
+ - **severity** — Impact of violation: `low`, `medium`, `high`, `critical`
53
+ - **edges** — Explicit relationships to other symbols with typed relations: `enforced-by`, `depends-on`, `contradicts`, `supersedes`, `related-to`
54
+ - **lore** — References to lore entries providing historical context
55
+
56
+ ## Working with the Graph
57
+
58
+ Seven MCP tools let you interact with the aspect graph:
59
+
60
+ | Tool | Purpose |
61
+ |------|---------|
62
+ | `paradigm_aspect_search` | Find aspects by keyword — uses a three-tier search (learned mappings, full-text, fuzzy) |
63
+ | `paradigm_aspect_get` | Deep-dive: full definition, code snippets at anchors, edges, linked lore |
64
+ | `paradigm_aspect_graph` | Explore the neighborhood around a symbol (N hops out) |
65
+ | `paradigm_aspect_heatmap` | See which aspects are accessed most (search, ripple, navigate, direct) |
66
+ | `paradigm_aspect_suggest_scan` | Scan a source file for undocumented aspects (magic numbers, hardcoded strings, rate limits, etc.) |
67
+ | `paradigm_aspect_drift` | Check if code at anchored lines changed since last scan (SHA-256 hash comparison) |
68
+ | `paradigm_aspect_confirm` | Confirm a search result to improve future search accuracy (learning loop) |
69
+
70
+ The graph is stored as a SQLite database at `.paradigm/aspect-graph.db` — a derived artifact rebuilt by `paradigm_reindex`. The YAML `.purpose` files remain the source of truth.
71
+
72
+ ## When to Use the Aspect Graph
73
+
74
+ - **Before modifying enforcement code** — call `paradigm_aspect_drift` to check for stale anchors
75
+ - **Exploring unfamiliar rules** — call `paradigm_aspect_search` then `paradigm_aspect_get` for full context
76
+ - **Understanding impact** — call `paradigm_aspect_graph` to see what a change affects
77
+ - **Finding undocumented rules** — call `paradigm_aspect_suggest_scan` on source files
78
+
79
+ > **Deep dive:** PARA 501 covers the SQLite schema, three-tier search internals, the learning loop, edge origins (explicit vs inferred vs learned), and the materialization pipeline in detail.
@@ -0,0 +1,112 @@
1
+ ---
2
+ id: N-para-201-aspects-and-anchors
3
+ title: Aspects & Code Anchors
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-201
11
+ - aspects-are-the
12
+ - anchor-formats-single
13
+ - applies-to-uses-glob
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 4
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-201.json
21
+ ---
22
+
23
+ ## Why Aspects Require Anchors
24
+
25
+ Aspects (`~`) are unique among Paradigm's five symbols because they are the only ones that **require code anchors**. An anchor is a pointer to the exact lines of code where the aspect is enforced. This requirement exists for a practical reason: an aspect without an anchor is just a wish.
26
+
27
+ Consider `~audit-required`. If you define it without anchors, you are saying "financial operations should be audited" — but there is no proof that they actually are. With anchors pointing to `src/middleware/audit.ts:15-35`, you are saying "financial operations are audited, and here is the enforcement code." AI agents can verify the anchor, developers can review it, and `paradigm_aspect_check` can validate that the code still exists.
28
+
29
+ ## Anchor Format
30
+
31
+ Anchors support three formats:
32
+
33
+ ```yaml
34
+ ~rate-limited:
35
+ description: API endpoints are rate-limited to prevent abuse
36
+ anchors:
37
+ - src/middleware/rate-limiter.ts:42 # Single line
38
+ - src/middleware/rate-limiter.ts:42-78 # Line range
39
+ - src/decorators/throttle.ts:10,15,22 # Multiple specific lines
40
+ applies-to: ["#*-handler"]
41
+ ```
42
+
43
+ - **Single line** (`file:42`) — Points to one specific line. Use when the enforcement is a single check or decorator.
44
+ - **Range** (`file:42-78`) — Points to a block of code. Use when the enforcement spans multiple lines (a middleware function, a class method).
45
+ - **Multiple lines** (`file:10,15,22`) — Points to several non-contiguous lines. Use when the enforcement is scattered across a file (multiple decorators, multiple conditional checks).
46
+
47
+ Anchors must point to *real files with real code*. If the file does not exist or the lines are outside the file's range, `paradigm_aspect_check` will report an error.
48
+
49
+ ## The applies-to Pattern
50
+
51
+ The `applies-to` field uses glob patterns to declare which symbols the aspect covers:
52
+
53
+ ```yaml
54
+ ~audit-required:
55
+ applies-to: ["#*Service"] # All components ending in 'Service'
56
+
57
+ ~rate-limited:
58
+ applies-to: ["#*-handler", "#*-endpoint"] # All handlers and endpoints
59
+
60
+ ~cached:
61
+ applies-to: ["#*-query"] # All query components
62
+ ```
63
+
64
+ This is declarative — it says "this aspect should apply to these components." AI agents use this to check whether a new component matching the pattern has the aspect applied. If you create `#billing-service` and `~audit-required` applies to `#*Service`, the agent knows to apply the audit aspect.
65
+
66
+ ## Defining Aspects in .purpose Files
67
+
68
+ ```yaml
69
+ aspects:
70
+ ~audit-required:
71
+ description: All financial operations must log to the audit trail
72
+ anchors:
73
+ - src/middleware/audit.ts:15-35
74
+ - src/decorators/auditable.ts:1-20
75
+ applies-to: ["#*Service"]
76
+ enforcement: middleware
77
+ tags: [compliance, security]
78
+
79
+ ~rate-limited:
80
+ description: API endpoints enforce per-user rate limits
81
+ anchors:
82
+ - src/middleware/rate-limiter.ts:42-78
83
+ applies-to: ["#*-handler"]
84
+ enforcement: middleware
85
+ tags: [security, performance]
86
+ ```
87
+
88
+ The `enforcement` field is optional metadata that describes *how* the aspect is enforced — via middleware, decorator, wrapper function, etc. It helps AI agents understand the enforcement mechanism when they need to apply the aspect to new components.
89
+
90
+ ## Validating Aspects
91
+
92
+ Use `paradigm_aspect_check` to verify that an aspect's anchors are valid:
93
+
94
+ ```
95
+ paradigm_aspect_check({ aspect: "~audit-required" })
96
+ ```
97
+
98
+ This tool checks:
99
+ 1. **Anchor existence** — Do the referenced files exist?
100
+ 2. **Line validity** — Are the line numbers within the file's range?
101
+ 3. **Coverage** — Are all components matching `applies-to` actually covered?
102
+
103
+ Run this after refactoring. If you move or rename files, the anchors break — and a broken anchor means the enforcement code is lost or relocated. The aspect check catches this drift.
104
+
105
+ ## Aspects vs Gates
106
+
107
+ A common confusion: when should you use an aspect (`~`) versus a gate (`^`)? The distinction is clear:
108
+
109
+ - **Gates** check a *specific condition at a specific time*. "Can this user access this project?" or "Is this feature flag enabled?" is a gate.
110
+ - **Aspects** enforce rules *across many components as a pattern*. "All financial services must log to the audit trail" is an aspect.
111
+
112
+ Gates are reactive (triggered per request or operation). Aspects are structural (enforced by code patterns). A gate checks one condition at one point; an aspect applies to all components matching a pattern.
@@ -0,0 +1,138 @@
1
+ ---
2
+ id: N-para-201-component-patterns
3
+ title: Component Patterns
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-201
11
+ - feature-components-user-facing
12
+ - integration-components-third-party
13
+ - state-components-data
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 3
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-201.json
21
+ ---
22
+
23
+ ## The Many Faces of `#`
24
+
25
+ The `#` component is Paradigm's most used symbol — and intentionally the broadest. It covers everything from a React button to a database service to a CLI command parser. This breadth is a feature, not a bug: it means you never struggle to classify code. But it also means you need **tags** to create meaningful subcategories.
26
+
27
+ This lesson covers the major component patterns and when to use each one.
28
+
29
+ ## Feature Components
30
+
31
+ Feature components represent **user-facing functionality**. They are the things your users interact with — checkout, search, profile editing, notification preferences.
32
+
33
+ ```yaml
34
+ #checkout:
35
+ description: Shopping cart checkout with payment processing
36
+ file: checkout.ts
37
+ tags: [feature, critical, payments]
38
+ flows: ["$checkout-flow"]
39
+ signals: ["!order-placed"]
40
+ gates: ["^authenticated"]
41
+
42
+ #search:
43
+ description: Full-text search across products and content
44
+ file: search.ts
45
+ tags: [feature, search]
46
+ ```
47
+
48
+ Feature components often have the richest cross-references: they participate in flows, emit signals, and require gates. They are the entry points into your system's behavior.
49
+
50
+ ## Integration Components
51
+
52
+ Integration components wrap **third-party services**. They isolate external API calls behind a stable internal interface:
53
+
54
+ ```yaml
55
+ #stripe-service:
56
+ description: Stripe API client for payment processing
57
+ file: stripe-service.ts
58
+ tags: [integration, stripe, payments]
59
+ signals: ["!payment-completed", "!payment-failed"]
60
+
61
+ #sendgrid-client:
62
+ description: SendGrid email delivery wrapper
63
+ file: sendgrid.ts
64
+ tags: [integration, sendgrid, email]
65
+ ```
66
+
67
+ The convention is to tag integrations with both `[integration]` and the service name (`[stripe]`, `[sendgrid]`). This lets you search for all integrations OR for all Stripe-related code specifically.
68
+
69
+ ## State Components
70
+
71
+ State components manage **data storage and state containers** — databases, caches, in-memory stores, Redux slices:
72
+
73
+ ```yaml
74
+ #user-store:
75
+ description: User data persistence and caching layer
76
+ file: user-store.ts
77
+ tags: [state, users, cache]
78
+
79
+ #session-cache:
80
+ description: Redis-backed session storage with 24h TTL
81
+ file: session-cache.ts
82
+ tags: [state, session, redis]
83
+ ```
84
+
85
+ State components are often referenced by many other components. Use `paradigm_ripple` before modifying them — a change to `#user-store` might impact every feature that reads user data.
86
+
87
+ ## Infrastructure Components
88
+
89
+ Infrastructure components provide **foundational services** that other components depend on but users never directly interact with:
90
+
91
+ ```yaml
92
+ #logger:
93
+ description: Structured logging with symbol tagging
94
+ file: logger.ts
95
+ tags: [infrastructure, observability]
96
+
97
+ #config-loader:
98
+ description: Environment-aware configuration loading
99
+ file: config.ts
100
+ tags: [infrastructure, config]
101
+
102
+ #database-pool:
103
+ description: PostgreSQL connection pool with health checks
104
+ file: db.ts
105
+ tags: [infrastructure, database, postgres]
106
+ ```
107
+
108
+ Infrastructure components rarely have flows or gates, but they are often the most fragile — many other components depend on them. Check `paradigm_history_fragility` before making changes.
109
+
110
+ ## When to Split vs Combine
111
+
112
+ A common question: should a large module be one component or several?
113
+
114
+ **Split when:**
115
+ - The module has distinct responsibilities that could change independently
116
+ - Different parts require different gates or emit different signals
117
+ - The file exceeds ~300 lines and contains clearly separable logic
118
+
119
+ **Combine when:**
120
+ - The parts are tightly coupled and always change together
121
+ - Splitting would create components with trivial descriptions ("calls the other half")
122
+ - The module is a cohesive unit with a single responsibility
123
+
124
+ ```yaml
125
+ # Good split — distinct responsibilities
126
+ #payment-processor:
127
+ description: Charges cards via Stripe
128
+ #payment-validator:
129
+ description: Validates payment amounts and currencies
130
+
131
+ # Bad split — artificial separation
132
+ #payment-step-1:
133
+ description: First half of payment processing
134
+ #payment-step-2:
135
+ description: Second half of payment processing
136
+ ```
137
+
138
+ If you cannot describe the component without referencing the other half, they should be one component.
@@ -0,0 +1,145 @@
1
+ ---
2
+ id: N-para-201-cross-cutting-concerns
3
+ title: Cross-Cutting Concerns
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-201
11
+ - cross-cutting-concerns-apply
12
+ - common-aspects-audit
13
+ - applies-to-uses-glob
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 3
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-201.json
21
+ ---
22
+
23
+ ## Rules That Span the System
24
+
25
+ Some requirements do not belong to any single component. "All financial operations must be audited." "All API endpoints must be rate-limited." "All sensitive data must be encrypted at rest." These are **cross-cutting concerns** — rules that apply across multiple components as a structural pattern rather than a per-request check.
26
+
27
+ Paradigm models cross-cutting concerns as **aspects** (`~`). Unlike gates (which check access per request) or signals (which fire per event), aspects describe ongoing constraints that are enforced by code patterns, middleware, decorators, or architectural choices.
28
+
29
+ ## Common Aspect Patterns
30
+
31
+ ### Audit Trails
32
+
33
+ ```yaml
34
+ ~audit-required:
35
+ description: All financial operations must log to the audit trail with user, action, and timestamp
36
+ anchors:
37
+ - src/middleware/audit.ts:15-35
38
+ - src/decorators/auditable.ts:1-20
39
+ applies-to: ["#*Service"]
40
+ enforcement: middleware
41
+ tags: [compliance, security]
42
+ ```
43
+
44
+ Audit aspects ensure that certain operations leave a trail. The anchors point to the middleware or decorator that performs the logging. Any service matching `#*Service` is expected to use this middleware.
45
+
46
+ ### Rate Limiting
47
+
48
+ ```yaml
49
+ ~rate-limited:
50
+ description: API endpoints enforce per-user rate limits (100 req/min default)
51
+ anchors:
52
+ - src/middleware/rate-limiter.ts:10-45
53
+ applies-to: ["#*-handler", "#*-endpoint"]
54
+ enforcement: middleware
55
+ tags: [security, performance]
56
+ ```
57
+
58
+ Rate limiting protects against abuse. The aspect documents the default limit (100 req/min) and points to the middleware that enforces it.
59
+
60
+ ### Caching
61
+
62
+ ```yaml
63
+ ~cached:
64
+ description: Read-heavy queries use a 5-minute TTL cache
65
+ anchors:
66
+ - src/lib/cache-wrapper.ts:20-55
67
+ applies-to: ["#*-query"]
68
+ enforcement: wrapper-function
69
+ tags: [performance]
70
+ ```
71
+
72
+ ### Input Validation
73
+
74
+ ```yaml
75
+ ~validated:
76
+ description: All API inputs are validated against defined schemas before processing
77
+ anchors:
78
+ - src/middleware/validate.ts:1-30
79
+ - src/schemas/index.ts:1-50
80
+ applies-to: ["#*-handler"]
81
+ enforcement: middleware
82
+ tags: [security, data-integrity]
83
+ ```
84
+
85
+ ### Idempotency
86
+
87
+ ```yaml
88
+ ~idempotent:
89
+ description: Mutation endpoints use idempotency keys to prevent duplicate processing
90
+ anchors:
91
+ - src/middleware/idempotency.ts:15-60
92
+ applies-to: ["#*-handler"]
93
+ enforcement: middleware
94
+ tags: [reliability, payments]
95
+ ```
96
+
97
+ ### Encryption at Rest
98
+
99
+ ```yaml
100
+ ~encrypted-at-rest:
101
+ description: Sensitive fields are encrypted before storage using AES-256-GCM
102
+ anchors:
103
+ - src/lib/encryption.ts:10-45
104
+ - src/models/base-model.ts:30-50
105
+ applies-to: ["#*-store"]
106
+ enforcement: model-hook
107
+ tags: [security, compliance]
108
+ ```
109
+
110
+ ## The applies-to Glob Pattern
111
+
112
+ The `applies-to` field uses glob patterns to declare which symbols the aspect covers:
113
+
114
+ | Pattern | Matches |
115
+ |---------|---------|
116
+ | `#*Service` | `#payment-service`, `#email-service`, `#auth-service` |
117
+ | `#*-handler` | `#login-handler`, `#webhook-handler` |
118
+ | `#*-store` | `#user-store`, `#session-store` |
119
+ | `#*` | All components (use sparingly) |
120
+
121
+ When an AI agent creates a new component matching a pattern, it should check whether any aspects apply. If `~rate-limited` applies to `#*-handler` and the agent creates `#upload-handler`, the agent should ensure rate limiting middleware is applied.
122
+
123
+ ## Aspects vs Other Symbols
124
+
125
+ Understanding when to use each symbol avoids misclassification:
126
+
127
+ | If the rule... | Use |
128
+ |----------------|-----|
129
+ | Checks a specific condition per request or operation | `^` Gate |
130
+ | Fires an event that triggers side effects | `!` Signal |
131
+ | Applies the same pattern across many components | `~` Aspect |
132
+ | Describes a multi-step process | `$` Flow |
133
+
134
+ A rate limiter is an aspect (it applies the same pattern to all handlers), not a gate (it does not check authorization). An audit log is an aspect (it applies to all financial services), not a signal (it is a structural requirement, not a one-time event).
135
+
136
+ ## Maintaining Aspects During Refactors
137
+
138
+ Aspects are the most maintenance-sensitive symbol because their anchors contain file paths and line numbers. When you refactor:
139
+
140
+ 1. Run `paradigm_aspect_check` before the refactor to know the current state.
141
+ 2. Make your code changes.
142
+ 3. Run `paradigm_aspect_check` again to find broken anchors.
143
+ 4. Update the anchors in the `.purpose` file to point to the new locations.
144
+
145
+ This is a conscious trade-off: anchors create maintenance burden, but they prevent the much worse problem of unverified rules that silently stop being enforced.