@a-company/paradigm 5.38.0 → 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 (328) hide show
  1. package/dist/{accept-orchestration-OATWIRHP.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/{ambient-76YMUA5Q.js → ambient-BE3SQXNN.js} +1 -1
  6. package/dist/{ambient-WTLYUAQM.js → ambient-NVKQCW2A.js} +12 -12
  7. package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
  8. package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
  9. package/dist/{chunk-5QOCKWK5.js → chunk-4PSD5R7N.js} +2 -2
  10. package/dist/{chunk-HOBHJPTL.js → chunk-6SKSV5B2.js} +1 -1
  11. package/dist/{chunk-4L7665QV.js → chunk-FEYOQMZ5.js} +1 -1
  12. package/dist/{chunk-NEJ4ZLCY.js → chunk-GAFKOFAV.js} +1 -1
  13. package/dist/chunk-GRZQIKST.js +2 -0
  14. package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
  15. package/dist/{chunk-4VKSEOXZ.js → chunk-LPBCQM5Y.js} +3 -3
  16. package/dist/{chunk-74SGKSRQ.js → chunk-M2HKWR25.js} +1 -1
  17. package/dist/{chunk-BOYQAMGC.js → chunk-M3PPXJU4.js} +1 -1
  18. package/dist/chunk-PHEX6LU4.js +111 -0
  19. package/dist/chunk-Q527BPUF.js +2 -0
  20. package/dist/chunk-R5ECMBIV.js +11 -0
  21. package/dist/{chunk-X3U3IGYT.js → chunk-TBWWFRL5.js} +1 -1
  22. package/dist/{chunk-MQIG6SMF.js → chunk-TNVWGPCE.js} +1 -1
  23. package/dist/chunk-TZDYIPVU.js +521 -0
  24. package/dist/{chunk-3XGNXXCT.js → chunk-UZ5H7K6Q.js} +1 -1
  25. package/dist/chunk-VIG5LSGZ.js +2 -0
  26. package/dist/chunk-VNIX5KBT.js +3 -0
  27. package/dist/{chunk-AGFPVSX5.js → chunk-VXIIVMTM.js} +1 -1
  28. package/dist/{chunk-ORDKEGII.js → chunk-WESTEMIM.js} +1 -1
  29. package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
  30. package/dist/chunk-Z5QW6USC.js +2 -0
  31. package/dist/{compliance-D7GD6ZYC.js → compliance-BNFWQPKM.js} +1 -1
  32. package/dist/config-schema-FLHRVZMI.js +2 -0
  33. package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
  34. package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
  35. package/dist/decision-loader-HELL2AMX.js +2 -0
  36. package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
  37. package/dist/{diff-YGHBIJY5.js → diff-MF55KQZH.js} +1 -1
  38. package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
  39. package/dist/{docs-USDAF26F.js → docs-O37YLLRN.js} +1 -1
  40. package/dist/doctor-IG5XM4C4.js +2 -0
  41. package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
  42. package/dist/{flow-FVZR3YJ4.js → flow-BGXOVE2V.js} +1 -1
  43. package/dist/index.js +6 -6
  44. package/dist/init-M44SO65G.js +2 -0
  45. package/dist/{init-XYB62Q3X.js → init-V4KSEKPK.js} +1 -1
  46. package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
  47. package/dist/list-CFHINXIS.js +12 -0
  48. package/dist/lore-loader-D2ISOASW.js +2 -0
  49. package/dist/lore-loader-PXFKMKAN.js +2 -0
  50. package/dist/mcp.js +4 -4
  51. package/dist/metrics-UESGUHTA.js +2 -0
  52. package/dist/migrate-assessments-YSITX7KM.js +4 -0
  53. package/dist/migrate-decisions-NPLQOEEH.js +6 -0
  54. package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
  55. package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-QPZJH6XO.js} +1 -1
  56. package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
  57. package/dist/{orchestrate-M5PBZBJQ.js → orchestrate-RID7HHHH.js} +1 -1
  58. package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
  59. package/dist/{portal-check-ZMLVBIGW.js → portal-check-DV2VSJ5E.js} +1 -1
  60. package/dist/portal-compliance-JONQ4SOP.js +2 -0
  61. package/dist/{probe-3FTG6LYO.js → probe-5HAXULAD.js} +1 -1
  62. package/dist/{providers-AWA7WLLM.js → providers-4PXMWA7V.js} +1 -1
  63. package/dist/quiz-WYIZJG5K.js +10 -0
  64. package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
  65. package/dist/reindex-FWPD2VGM.js +2 -0
  66. package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
  67. package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
  68. package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
  69. package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
  70. package/dist/{serve-U47GULB6.js → serve-MO35XIZE.js} +1 -1
  71. package/dist/serve-OQYUO7CR.js +12 -0
  72. package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
  73. package/dist/server-FGUL2FWQ.js +7 -0
  74. package/dist/session-tracker-KGORN6B5.js +2 -0
  75. package/dist/{session-work-log-PAKXOFGL.js → session-work-log-4IEVE4KK.js} +1 -1
  76. package/dist/{session-work-log-ZP45TREI.js → session-work-log-EE4UIZ33.js} +1 -1
  77. package/dist/{setup-FEWSYS3Y.js → setup-ZSEC72BS.js} +1 -1
  78. package/dist/{shift-PC6C7NUX.js → shift-TVNY2CQF.js} +6 -6
  79. package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
  80. package/dist/show-WVHAL4VU.js +7 -0
  81. package/dist/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
  82. package/dist/status-S7Z5FVIE.js +6 -0
  83. package/dist/{summary-PYTEIJ4U.js → summary-WLI3NF4G.js} +2 -2
  84. package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
  85. package/dist/sync-55U6QPIA.js +2 -0
  86. package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
  87. package/dist/{team-PDK64JXI.js → team-MGT66HZQ.js} +1 -1
  88. package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
  89. package/dist/tools-QJHAVYI6.js +2 -0
  90. package/dist/university-content/notes/N-para-001-build-something.md +126 -0
  91. package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
  92. package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
  93. package/dist/university-content/notes/N-para-101-component-types.md +99 -0
  94. package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
  95. package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
  96. package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
  97. package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
  98. package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
  99. package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
  100. package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
  101. package/dist/university-content/notes/N-para-101-welcome.md +51 -0
  102. package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
  103. package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
  104. package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
  105. package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
  106. package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
  107. package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
  108. package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
  109. package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
  110. package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
  111. package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
  112. package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
  113. package/dist/university-content/notes/N-para-301-context-management.md +53 -0
  114. package/dist/university-content/notes/N-para-301-decisions.md +99 -0
  115. package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
  116. package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
  117. package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
  118. package/dist/university-content/notes/N-para-301-history-system.md +42 -0
  119. package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
  120. package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
  121. package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
  122. package/dist/university-content/notes/N-para-301-protocols.md +113 -0
  123. package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
  124. package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
  125. package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
  126. package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
  127. package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
  128. package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
  129. package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
  130. package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
  131. package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
  132. package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
  133. package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
  134. package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
  135. package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
  136. package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
  137. package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
  138. package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
  139. package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
  140. package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
  141. package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
  142. package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
  143. package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
  144. package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
  145. package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
  146. package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
  147. package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
  148. package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
  149. package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
  150. package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
  151. package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
  152. package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
  153. package/dist/university-content/notes/N-para-501-task-management.md +100 -0
  154. package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
  155. package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
  156. package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
  157. package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
  158. package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
  159. package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
  160. package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
  161. package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
  162. package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
  163. package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
  164. package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
  165. package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
  166. package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
  167. package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
  168. package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
  169. package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
  170. package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
  171. package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
  172. package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
  173. package/dist/university-content/paths/LP-para-001.yaml +29 -0
  174. package/dist/university-content/paths/LP-para-101.yaml +59 -0
  175. package/dist/university-content/paths/LP-para-201.yaml +69 -0
  176. package/dist/university-content/paths/LP-para-301.yaml +84 -0
  177. package/dist/university-content/paths/LP-para-401.yaml +74 -0
  178. package/dist/university-content/paths/LP-para-501.yaml +89 -0
  179. package/dist/university-content/paths/LP-para-601.yaml +59 -0
  180. package/dist/university-content/paths/LP-para-701.yaml +64 -0
  181. package/dist/university-content/quizzes/Q-para-001-build-something.yaml +46 -0
  182. package/dist/university-content/quizzes/Q-para-001-meet-the-team.yaml +46 -0
  183. package/dist/university-content/quizzes/Q-para-001-shift-setup.yaml +46 -0
  184. package/dist/university-content/quizzes/Q-para-101-component-types.yaml +46 -0
  185. package/dist/university-content/quizzes/Q-para-101-first-steps.yaml +56 -0
  186. package/dist/university-content/quizzes/Q-para-101-five-symbols.yaml +66 -0
  187. package/dist/university-content/quizzes/Q-para-101-paradigm-logger.yaml +56 -0
  188. package/dist/university-content/quizzes/Q-para-101-portal-yaml.yaml +56 -0
  189. package/dist/university-content/quizzes/Q-para-101-project-structure.yaml +66 -0
  190. package/dist/university-content/quizzes/Q-para-101-purpose-files.yaml +56 -0
  191. package/dist/university-content/quizzes/Q-para-101-tags-and-classification.yaml +56 -0
  192. package/dist/university-content/quizzes/Q-para-101-welcome.yaml +56 -0
  193. package/dist/university-content/quizzes/Q-para-201-architecture-review.yaml +66 -0
  194. package/dist/university-content/quizzes/Q-para-201-aspect-graph.yaml +46 -0
  195. package/dist/university-content/quizzes/Q-para-201-aspects-and-anchors.yaml +56 -0
  196. package/dist/university-content/quizzes/Q-para-201-component-patterns.yaml +56 -0
  197. package/dist/university-content/quizzes/Q-para-201-cross-cutting-concerns.yaml +56 -0
  198. package/dist/university-content/quizzes/Q-para-201-disciplines.yaml +66 -0
  199. package/dist/university-content/quizzes/Q-para-201-flows-deep-dive.yaml +66 -0
  200. package/dist/university-content/quizzes/Q-para-201-gates-deep-dive.yaml +66 -0
  201. package/dist/university-content/quizzes/Q-para-201-portal-protocol.yaml +56 -0
  202. package/dist/university-content/quizzes/Q-para-201-signal-patterns.yaml +56 -0
  203. package/dist/university-content/quizzes/Q-para-201-symbol-naming.yaml +66 -0
  204. package/dist/university-content/quizzes/Q-para-301-context-management.yaml +56 -0
  205. package/dist/university-content/quizzes/Q-para-301-decisions.yaml +76 -0
  206. package/dist/university-content/quizzes/Q-para-301-doctor-and-validation.yaml +66 -0
  207. package/dist/university-content/quizzes/Q-para-301-enforcement-levels.yaml +46 -0
  208. package/dist/university-content/quizzes/Q-para-301-fragility-tracking.yaml +46 -0
  209. package/dist/university-content/quizzes/Q-para-301-history-system.yaml +56 -0
  210. package/dist/university-content/quizzes/Q-para-301-navigation-system.yaml +56 -0
  211. package/dist/university-content/quizzes/Q-para-301-operations-review.yaml +66 -0
  212. package/dist/university-content/quizzes/Q-para-301-paradigm-shift.yaml +46 -0
  213. package/dist/university-content/quizzes/Q-para-301-protocols.yaml +56 -0
  214. package/dist/university-content/quizzes/Q-para-301-ripple-analysis.yaml +56 -0
  215. package/dist/university-content/quizzes/Q-para-301-sentinel-observability.yaml +46 -0
  216. package/dist/university-content/quizzes/Q-para-301-sync-and-maintenance.yaml +46 -0
  217. package/dist/university-content/quizzes/Q-para-301-wisdom-system.yaml +56 -0
  218. package/dist/university-content/quizzes/Q-para-401-agent-identity.yaml +66 -0
  219. package/dist/university-content/quizzes/Q-para-401-agent-interop.yaml +46 -0
  220. package/dist/university-content/quizzes/Q-para-401-agent-roles.yaml +56 -0
  221. package/dist/university-content/quizzes/Q-para-401-commit-conventions.yaml +56 -0
  222. package/dist/university-content/quizzes/Q-para-401-mastery-review.yaml +66 -0
  223. package/dist/university-content/quizzes/Q-para-401-mcp-tools-overview.yaml +66 -0
  224. package/dist/university-content/quizzes/Q-para-401-multi-agent-coordination.yaml +76 -0
  225. package/dist/university-content/quizzes/Q-para-401-notebooks-permissions.yaml +61 -0
  226. package/dist/university-content/quizzes/Q-para-401-orchestration-workflow.yaml +66 -0
  227. package/dist/university-content/quizzes/Q-para-401-pm-governance.yaml +66 -0
  228. package/dist/university-content/quizzes/Q-para-401-provider-cascade.yaml +56 -0
  229. package/dist/university-content/quizzes/Q-para-401-quick-check.yaml +46 -0
  230. package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
  231. package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
  232. package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
  233. package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
  234. package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
  235. package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
  236. package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
  237. package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
  238. package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
  239. package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
  240. package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
  241. package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
  242. package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
  243. package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
  244. package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
  245. package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
  246. package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
  247. package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
  248. package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
  249. package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
  250. package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
  251. package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
  252. package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
  253. package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
  254. package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
  255. package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
  256. package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
  257. package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
  258. package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
  259. package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
  260. package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
  261. package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
  262. package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
  263. package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
  264. package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
  265. package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
  266. package/dist/university-content/reference.json +2 -2
  267. package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
  268. package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
  269. package/dist/university-ui/index.html +1 -1
  270. package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
  271. package/dist/validate-XUQZTF3H.js +9 -0
  272. package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
  273. package/lore-ui/dist/assets/{index-Bk-K0qgN.js → index-DKhNxgtW.js} +10 -10
  274. package/lore-ui/dist/index.html +1 -1
  275. package/package.json +2 -2
  276. package/platform-ui/dist/assets/{AmbientSection-BYjt75R1.js → AmbientSection-CwatqcBD.js} +1 -1
  277. package/platform-ui/dist/assets/{CanvasSection-rKvA_vZj.js → CanvasSection-dFAthehN.js} +1 -1
  278. package/platform-ui/dist/assets/{DocsSection-CI9K73M-.js → DocsSection-BZ2SFJBZ.js} +1 -1
  279. package/platform-ui/dist/assets/{GitSection-DSGj_c6S.js → GitSection-MNNYU1tO.js} +1 -1
  280. package/platform-ui/dist/assets/{GraphSection-CawN7pC5.js → GraphSection-COYjb4Pt.js} +1 -1
  281. package/platform-ui/dist/assets/LoreSection-B0hUbfsJ.js +1 -0
  282. package/platform-ui/dist/assets/{SentinelSection-DNgoYMH0.js → SentinelSection-BCxW1DCp.js} +1 -1
  283. package/platform-ui/dist/assets/{SymphonySection-C0zfcqv3.js → SymphonySection-BsucZRqy.js} +1 -1
  284. package/platform-ui/dist/assets/{TeamSection-Bzd3Dt9Q.js → TeamSection-C0QNTudW.js} +1 -1
  285. package/platform-ui/dist/assets/{UniversitySection-tBr62R0S.js → UniversitySection-DN1-g9pw.js} +1 -1
  286. package/platform-ui/dist/assets/{index-BaOmyn11.js → index-DwUT8pju.js} +2 -2
  287. package/platform-ui/dist/index.html +1 -1
  288. package/dist/add-P76GEMGF.js +0 -8
  289. package/dist/chunk-JQKKVAAN.js +0 -2
  290. package/dist/chunk-NQ47TA6C.js +0 -111
  291. package/dist/chunk-ODVKPZZ4.js +0 -2
  292. package/dist/chunk-Q2J542ST.js +0 -2
  293. package/dist/chunk-RBLK34IA.js +0 -11
  294. package/dist/chunk-RN4VE6P3.js +0 -521
  295. package/dist/chunk-WS2N27RX.js +0 -3
  296. package/dist/config-schema-GUQY2QN7.js +0 -2
  297. package/dist/decision-loader-2XPZE4EZ.js +0 -2
  298. package/dist/doctor-WMVULMQD.js +0 -2
  299. package/dist/list-5IUGP3ZB.js +0 -7
  300. package/dist/lore-loader-RVQI5GXL.js +0 -2
  301. package/dist/lore-loader-XY5MZRR2.js +0 -2
  302. package/dist/migrate-assessments-GEI5WMI2.js +0 -4
  303. package/dist/portal-compliance-6YR27IQU.js +0 -2
  304. package/dist/quiz-FE5UGAY2.js +0 -10
  305. package/dist/reindex-I6LPAKCC.js +0 -2
  306. package/dist/serve-OY6XYL7F.js +0 -12
  307. package/dist/server-2MNROHF6.js +0 -7
  308. package/dist/session-tracker-MWJAJA6Z.js +0 -2
  309. package/dist/show-BOAVWZPZ.js +0 -7
  310. package/dist/status-A37ECYNJ.js +0 -6
  311. package/dist/sync-DLUBV5HQ.js +0 -2
  312. package/dist/tools-5ITPEPSV.js +0 -2
  313. package/dist/university-content/courses/.purpose +0 -492
  314. package/dist/university-content/courses/para-001.json +0 -166
  315. package/dist/university-content/courses/para-101.json +0 -615
  316. package/dist/university-content/courses/para-201.json +0 -794
  317. package/dist/university-content/courses/para-301.json +0 -830
  318. package/dist/university-content/courses/para-401.json +0 -868
  319. package/dist/university-content/courses/para-501.json +0 -1166
  320. package/dist/university-content/courses/para-601.json +0 -719
  321. package/dist/university-content/courses/para-701.json +0 -807
  322. package/dist/university-content/plsat/.purpose +0 -162
  323. package/dist/university-content/plsat/v2.0.json +0 -760
  324. package/dist/university-content/plsat/v3.0.json +0 -3453
  325. package/dist/validate-C6SMKGYD.js +0 -9
  326. package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
  327. /package/dist/{chunk-BV5PRPLB.js → chunk-IZSBGW6E.js} +0 -0
  328. /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
@@ -0,0 +1,99 @@
1
+ ---
2
+ id: N-para-101-component-types
3
+ title: Component Types & Hierarchy
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-101
11
+ - component-type-describes
12
+ - types-are-open
13
+ - parent-field-establishes
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 2
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-101.json
21
+ ---
22
+
23
+ ## Why Component Types?
24
+
25
+ Components (`#`) are the most common symbol in any Paradigm project. A large project might have hundreds of components — services, views, utilities, routers, filters, models, and more. Without further classification, an AI agent triaging 'where is access control handled?' has to read every component to understand what kind of thing it is.
26
+
27
+ Component types solve this by adding an optional `type` field that describes a component's **structural role** — what the code IS, not what domain it belongs to.
28
+
29
+ ## The `type` Field
30
+
31
+ Add `type` to any component in a `.purpose` file:
32
+
33
+ ```yaml
34
+ components:
35
+ PaymentService:
36
+ description: Coordinates payment processing
37
+ type: service
38
+ PaymentForm:
39
+ description: Credit card input form
40
+ type: view
41
+ format-currency:
42
+ description: Formats numbers as currency strings
43
+ type: utility
44
+ ```
45
+
46
+ Types are **open strings** — each project defines its own vocabulary in the `component_types` glossary in `.paradigm/config.yaml`. There is no fixed enum. Common types include: `view`, `service`, `model`, `tool`, `utility`, `engine`, `loader`, `provider`, `manager`, `router`, `filter`, `handler`, `config`.
47
+
48
+ ## The `parent` Field
49
+
50
+ Components can declare a parent to establish hierarchy:
51
+
52
+ ```yaml
53
+ components:
54
+ InputOrchestrator:
55
+ description: Coordinates all input sources
56
+ type: manager
57
+ GazeRouter:
58
+ description: Maps gaze coordinates to dispatch targets
59
+ type: router
60
+ parent: "#InputOrchestrator"
61
+ KalmanFilter2D:
62
+ description: Smooths noisy gaze signal
63
+ type: filter
64
+ parent: "#GazeRouter"
65
+ ```
66
+
67
+ Parent is declared on the **child**, not maintained as a roster on the parent. This keeps `.purpose` files decentralized.
68
+
69
+ ## Type vs Tag
70
+
71
+ This is a common source of confusion:
72
+
73
+ - **`type`** = structural role (what the code IS). One per component. Examples: `service`, `view`, `router`
74
+ - **`tags`** = behavioral or domain classification. Many per component. Examples: `[feature]`, `[security]`, `[integration]`
75
+
76
+ A component can be `type: service` with `tags: [feature, security]`. Type tells you the architecture; tags tell you the domain.
77
+
78
+ ## Config Glossary
79
+
80
+ Projects define their vocabulary in `.paradigm/config.yaml`:
81
+
82
+ ```yaml
83
+ component_types:
84
+ service: "Business logic coordinator — orchestrates tools, loaders, writers"
85
+ view: "UI rendering unit — SwiftUI view, React component"
86
+ utility: "Shared helper function or module — no side effects, pure logic"
87
+ router: "Maps input signals to targets based on rules"
88
+ ```
89
+
90
+ The glossary is **descriptive only** — it helps agents understand types but does not enforce them.
91
+
92
+ ## MCP Integration
93
+
94
+ Component types integrate with MCP tools:
95
+
96
+ - `paradigm_search` with `componentType: "service"` finds all services
97
+ - `paradigm_status` shows a component type breakdown
98
+ - `paradigm_purpose_add_component` accepts `type` and `parent` parameters
99
+ - `paradigm_reindex` aggregates type counts into `$meta.componentTypes`
@@ -0,0 +1,134 @@
1
+ ---
2
+ id: N-para-101-first-steps
3
+ title: Your First Steps
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-101
11
+ - paradigm-shift-creates
12
+ - start-with-one
13
+ - create-portalyaml-if
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 4
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-101.json
21
+ ---
22
+
23
+ ## Getting Started with Paradigm
24
+
25
+ Before diving into theory, let's get your hands dirty. This lesson walks through the concrete steps to set up Paradigm in a real project. You will encounter terms like *symbols*, *purpose files*, and *gates* — each gets its own deep-dive lesson later in this course. For now, focus on the workflow: initialize, document, scan, go.
26
+
27
+ ## Step 1: Initialize the Project
28
+
29
+ Run `paradigm shift` in your project root. This creates the `.paradigm/` directory with a starter `config.yaml`:
30
+
31
+ ```bash
32
+ paradigm shift
33
+ ```
34
+
35
+ `paradigm shift` runs non-interactively by default — it auto-detects your discipline from project markers (`package.json`, `Cargo.toml`, `go.mod`, etc.), selects an appropriate agent roster, configures model tiers, installs hooks, and generates AI instruction files (CLAUDE.md, AGENTS.md). One command, full setup.
36
+
37
+ You can customize later with flags like `--verify` (health check) or `--workspace <name>` (multi-project workspace).
38
+
39
+ After init, you will have:
40
+ ```
41
+ .paradigm/
42
+ config.yaml # Includes detected discipline and stack
43
+ tags.yaml
44
+ agents.yaml
45
+ ```
46
+
47
+ ## Step 2: Create Your First Purpose File
48
+
49
+ Pick a source directory that contains meaningful code — perhaps your main feature module or your API routes. Create a `.purpose` file:
50
+
51
+ ```yaml
52
+ name: User Authentication
53
+ description: Handles user login, registration, and session management
54
+ context:
55
+ - Uses bcrypt for password hashing
56
+ - Sessions stored in Redis with 24h TTL
57
+ - Rate limited to 5 login attempts per minute
58
+
59
+ components:
60
+ #auth-handler:
61
+ description: POST /auth/login and POST /auth/register endpoints
62
+ file: auth.ts
63
+ tags: [feature, auth]
64
+ signals: ["!login-success", "!login-failed"]
65
+ gates: ["^authenticated"]
66
+
67
+ #session-manager:
68
+ description: Creates and validates user sessions in Redis
69
+ file: session.ts
70
+ tags: [state, auth]
71
+ ```
72
+
73
+ Start small. You do not need to document every file on day one. Begin with the most important module and expand over time.
74
+
75
+ ## Step 3: Set Up portal.yaml (If Needed)
76
+
77
+ If your application has any protected endpoints, create `portal.yaml` at the project root:
78
+
79
+ ```yaml
80
+ version: "1.0"
81
+
82
+ gates:
83
+ ^authenticated:
84
+ description: User must have a valid session
85
+ check: req.session.userId != null
86
+ type: auth
87
+ effects: []
88
+
89
+ routes:
90
+ "POST /auth/login": []
91
+ "POST /auth/register": []
92
+ "GET /api/profile": [^authenticated]
93
+ "PUT /api/profile": [^authenticated]
94
+ ```
95
+
96
+ Note that public routes like login and register have empty gate arrays `[]` — they are listed to document that they are intentionally unprotected.
97
+
98
+ ## Step 4: Run Your First Scan
99
+
100
+ Generate the navigator map so AI agents can find symbols quickly:
101
+
102
+ ```bash
103
+ paradigm scan
104
+ ```
105
+
106
+ This reads all `.purpose` files and `portal.yaml`, builds a symbol index, and writes `navigator.yaml`.
107
+
108
+ ## Step 5: The Orientation Protocol
109
+
110
+ When starting a new AI session (or when an AI agent first encounters your project), the agent should follow this protocol:
111
+
112
+ 1. **Call `paradigm_status`** — Gets a project overview: symbol counts, health, available features.
113
+ 2. **Read `config.yaml`** — Understands the discipline, conventions, and preferences.
114
+ 3. **Check `portal.yaml`** — Knows about security gates if they exist.
115
+ 4. **Use `paradigm_navigate`** — Finds the relevant code area for the current task.
116
+
117
+ This four-step orientation takes ~500 tokens total and gives the agent everything it needs to work effectively.
118
+
119
+ ## Step 6: Iterate
120
+
121
+ Paradigm grows with your project. As you add features:
122
+ - Create `.purpose` files for new directories
123
+ - Add gates to `portal.yaml` for new protected routes
124
+ - Record team decisions in `.paradigm/wisdom/decisions.yaml`
125
+ - Log antipatterns in `.paradigm/wisdom/antipatterns.yaml`
126
+ - Run `paradigm scan` periodically to rebuild the navigator
127
+
128
+ ## Common Pitfalls
129
+
130
+ - **Do not document everything on day one.** Start with the most critical module and expand.
131
+ - **Do not skip portal.yaml.** If you have any gates or preconditions, you need it.
132
+ - **Do not forget to re-scan.** After adding new `.purpose` files, run `paradigm scan` to update the navigator.
133
+ - **Do not put .purpose files in .paradigm/.** They live alongside source code.
134
+ - **Do not use raw console.log.** Use the Paradigm logger from the start to build good habits.
@@ -0,0 +1,128 @@
1
+ ---
2
+ id: N-para-101-five-symbols
3
+ title: The Five Symbols
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-101
11
+ - '-component-'
12
+ - '-flow-'
13
+ - '-gate-'
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 3
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-101.json
21
+ ---
22
+
23
+ ## The Heart of Paradigm
24
+
25
+ Everything in Paradigm revolves around five symbols. Each symbol is a single-character prefix that classifies a code unit by its *role* in the system. When you see `#PaymentService`, you immediately know it is a component. When you see `^authenticated`, you know it is a security gate. The symbols are not decorative — they are a shared vocabulary that lets humans, AI agents, and tooling speak the same language about your codebase.
26
+
27
+ ## `#` Component — The Universal Building Block
28
+
29
+ The `#` symbol marks **any documented code unit**. Services, handlers, React components, utility modules, database models, configuration loaders — if it is a meaningful piece of code that you want AI to know about, it is a `#component`.
30
+
31
+ ```yaml
32
+ # In a .purpose file
33
+ components:
34
+ #PaymentService:
35
+ description: Handles payment processing via Stripe
36
+ file: payment-service.ts
37
+ tags: [integration, stripe, critical]
38
+
39
+ #login-handler:
40
+ description: POST /auth/login endpoint handler
41
+ file: login.ts
42
+ gates: [^authenticated]
43
+ ```
44
+
45
+ Component is intentionally broad. You never have to debate whether something is a "feature" or a "service" — it is a component. Finer distinctions are handled by the tag system: `#checkout` with `tags: [feature]`, `#stripe-service` with `tags: [integration, stripe]`.
46
+
47
+ ## `$` Flow — Multi-Step Processes
48
+
49
+ The `$` symbol marks **ordered sequences of steps that span multiple components**. Use a flow when logic touches three or more components in a specific order.
50
+
51
+ ```yaml
52
+ flows:
53
+ $checkout-flow:
54
+ description: Complete purchase from cart to confirmation
55
+ steps:
56
+ - component: "#cart-service"
57
+ action: validate-cart
58
+ - component: "#payment-service"
59
+ action: charge-card
60
+ - component: "#order-service"
61
+ action: create-order
62
+ - component: "#notification-service"
63
+ action: send-confirmation
64
+ signals: ["!order-placed", "!payment-completed"]
65
+ ```
66
+
67
+ Flows are documentation, not orchestration code. They tell AI agents *the sequence of operations* so the agent can understand what happens end-to-end without reading every file.
68
+
69
+ ## `^` Gate — Condition Checkpoints
70
+
71
+ The `^` symbol marks **conditions that must be satisfied before an action can proceed**. Gates are the gatekeepers of Paradigm — they check a defined state and either allow or block.
72
+
73
+ ```yaml
74
+ gates:
75
+ ^authenticated:
76
+ description: User must be logged in
77
+ check: req.user != null
78
+ ^project-admin:
79
+ description: User must be an admin of the project
80
+ check: project.admins.includes(req.user.id)
81
+ requires: [^authenticated]
82
+ ```
83
+
84
+ Gates can chain — `^project-admin` requires `^authenticated` first. They map to routes in `portal.yaml`, which we will cover later.
85
+
86
+ ## `!` Signal — Events for Side Effects
87
+
88
+ The `!` symbol marks **events that trigger decoupled side effects**. When a payment completes, the payment service does not directly call the notification service — it emits `!payment-completed`, and any listener can react.
89
+
90
+ ```yaml
91
+ signals:
92
+ !payment-completed:
93
+ description: Fired after successful payment processing
94
+ emitters: ["#payment-service"]
95
+ category: business
96
+ !login-failed:
97
+ description: Fired on failed authentication attempt
98
+ emitters: ["#auth-handler"]
99
+ category: security
100
+ ```
101
+
102
+ Signals promote loose coupling. The emitter does not need to know who listens.
103
+
104
+ ## `~` Aspect — Cross-Cutting Rules
105
+
106
+ The `~` symbol marks **rules that apply across multiple components and MUST point to enforcement code**. This is the only symbol that *requires* code anchors.
107
+
108
+ ```yaml
109
+ aspects:
110
+ ~audit-required:
111
+ description: All financial operations must be logged to audit trail
112
+ anchors:
113
+ - src/middleware/audit.ts:15-35
114
+ - src/decorators/auditable.ts:1-20
115
+ applies-to: ["#*Service"]
116
+ tags: [compliance, security]
117
+ ```
118
+
119
+ The `anchors` field is mandatory. An aspect without anchors is invalid — it would be a rule with no enforcement. The anchor format is `file:line`, `file:start-end`, or `file:line1,line2,line3`.
120
+
121
+ ## Choosing the Right Symbol
122
+
123
+ Ask yourself:
124
+ - Is it a piece of code I want documented? → `#` Component
125
+ - Does it describe a multi-step sequence? → `$` Flow
126
+ - Does it guard access to a resource? → `^` Gate
127
+ - Does it represent an event with side effects? → `!` Signal
128
+ - Does it enforce a rule across many components? → `~` Aspect
@@ -0,0 +1,89 @@
1
+ ---
2
+ id: N-para-101-paradigm-logger
3
+ title: The Paradigm Logger
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-101
11
+ - structured-logging-ties
12
+ - log-entries-should
13
+ - four-log-levels
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 3
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-101.json
21
+ ---
22
+
23
+ ## Structured Logging with Symbols
24
+
25
+ Raw `console.log` calls are the bane of production debugging. They have no structure, no categorization, and no connection to the system architecture. Paradigm replaces them with a **structured logger** that ties every log line to a symbol. When you see a log entry from `#payment-service`, you know exactly which component produced it. When you see a warning from `^authenticated`, you know a gate check failed.
26
+
27
+ The Paradigm logger uses a two-step chaining API: first you specify the symbol type and name, then you call a log level method.
28
+
29
+ ## The Logger API
30
+
31
+ There are five logger methods, one for each symbol type:
32
+
33
+ ```typescript
34
+ // Components — any code unit
35
+ log.component('#payment-service').info('Payment processed', { amount: 4999 });
36
+ log.component('#user-store').debug('Cache hit', { userId: 'u_123' });
37
+
38
+ // Gates — authorization checks
39
+ log.gate('^authenticated').warn('Access denied — no session', { path: '/api/admin' });
40
+ log.gate('^project-admin').info('Gate passed', { userId: 'u_456' });
41
+
42
+ // Signals — events
43
+ log.signal('!payment-completed').info('Payment signal emitted', { orderId: 'ord_789' });
44
+ log.signal('!login-failed').warn('Failed login attempt', { email: 'user@example.com' });
45
+
46
+ // Flows — multi-step processes
47
+ log.flow('$checkout-flow').debug('Step 2/4: billing calculated', { total: 5999 });
48
+ log.flow('$onboarding').info('Flow completed', { userId: 'u_123' });
49
+
50
+ // Aspects — cross-cutting concerns
51
+ log.aspect('~audit-required').debug('Audit entry recorded', { operation: 'delete-user' });
52
+ log.aspect('~rate-limited').warn('Rate limit approaching', { remaining: 5 });
53
+ ```
54
+
55
+ ## Log Levels
56
+
57
+ Each symbol method returns an object with four log level methods:
58
+
59
+ | Level | Use When |
60
+ |-------|----------|
61
+ | `debug` | Development-only details, verbose tracing |
62
+ | `info` | Normal operations — a process completed, a step succeeded |
63
+ | `warn` | Something unexpected but recoverable — a gate denial, a rate limit approaching |
64
+ | `error` | Something failed — a payment declined, a database connection lost |
65
+
66
+ Choose the level based on operational severity, not on how important the code is. A critical payment service logging a successful charge uses `.info()`, not `.error()`.
67
+
68
+ ## Symbol-to-Directory Mapping
69
+
70
+ Paradigm defines a convention for which logger method to use based on which directory the code lives in:
71
+
72
+ | Directory Pattern | Logger Method |
73
+ |-------------------|---------------|
74
+ | `features/`, `routes/`, `api/`, `services/`, `lib/`, `components/` | `log.component()` |
75
+ | `middleware/`, `auth/`, `guards/`, `policies/` | `log.gate()` |
76
+ | `events/`, `handlers/`, `listeners/`, `hooks/` | `log.signal()` |
77
+ | `flows/`, `sagas/`, `workflows/`, `pipelines/` | `log.flow()` |
78
+ | `aspects/`, `rules/` | `log.aspect()` |
79
+
80
+ This is a convention, not enforcement. If a service in `lib/` emits a signal, it can call `log.signal()`. But when in doubt, follow the directory mapping.
81
+
82
+ ## Why Not console.log?
83
+
84
+ Structured logging with symbols gives you:
85
+
86
+ 1. **Filterability** — In production, you can filter logs by symbol type (`gate`), symbol name (`^authenticated`), or log level (`warn`). Raw console.log gives you none of this.
87
+ 2. **Traceability** — Every log line connects back to the Paradigm symbol map. You can trace a log entry to its `.purpose` definition, see what flows involve it, and check what gates protect it.
88
+ 3. **Consistency** — AI agents generating code will use the correct logger if the convention exists. Without it, each agent invents its own logging pattern.
89
+ 4. **Incident correlation** — Paradigm Sentinel (the incident tracking system) matches log patterns to symbols, enabling automatic triage based on which components are failing.
@@ -0,0 +1,112 @@
1
+ ---
2
+ id: N-para-101-portal-yaml
3
+ title: Portal.yaml
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-101
11
+ - portalyaml-defines-gates
12
+ - lives-at-project
13
+ - gates-check-any
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 3
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-101.json
21
+ ---
22
+
23
+ ## The Gate Registry
24
+
25
+ `portal.yaml` is Paradigm's gate specification. It defines the gates (`^`) for your project — conditions that must be checked before actions proceed. Gates can check anything: authentication, feature flags, data prerequisites, system health, rate limits, or any other condition your project needs to verify.
26
+
27
+ This file lives at the **project root** — not inside `.paradigm/`. It is intentionally prominent because gate definitions should be easy to find, easy to audit, and impossible to overlook.
28
+
29
+ ## Structure
30
+
31
+ A `portal.yaml` has two main sections: `gates` and `routes`.
32
+
33
+ ```yaml
34
+ version: "1.0"
35
+
36
+ gates:
37
+ ^authenticated:
38
+ description: User must be logged in
39
+ check: req.user != null
40
+ type: auth
41
+ effects: []
42
+
43
+ ^project-member:
44
+ description: User must be a member of the project
45
+ check: project.members.includes(req.user.id)
46
+ type: role
47
+ requires: [^authenticated]
48
+ effects: []
49
+
50
+ ^project-admin:
51
+ description: User must be an admin of the project
52
+ check: project.admins.includes(req.user.id)
53
+ type: role
54
+ requires: [^authenticated]
55
+ effects: []
56
+
57
+ ^comment-author:
58
+ description: User must be the author of the comment
59
+ check: comment.authorId === req.user.id
60
+ type: ownership
61
+ requires: [^authenticated]
62
+ effects: []
63
+
64
+ routes:
65
+ "GET /api/projects": [^authenticated]
66
+ "GET /api/projects/:id": [^authenticated, ^project-member]
67
+ "PUT /api/projects/:id": [^authenticated, ^project-admin]
68
+ "DELETE /api/projects/:id": [^authenticated, ^project-admin]
69
+ "POST /api/projects/:id/comments": [^authenticated, ^project-member]
70
+ "DELETE /api/comments/:id": [^authenticated, ^comment-author]
71
+ ```
72
+
73
+ ## Gate Anatomy
74
+
75
+ Each gate definition includes:
76
+
77
+ - **description** — What the gate checks, in plain English.
78
+ - **check** — A pseudo-code expression describing the authorization logic. This is documentation, not executable code — but it should be precise enough that a developer or AI agent can implement it.
79
+ - **type** — The category of check: `auth`, `role`, `ownership`, `feature-flag`, `data-readiness`, `environment`, or any custom type that fits your domain.
80
+ - **requires** — Other gates that must pass first. `^project-admin` requires `^authenticated`, meaning you must be logged in before the admin check runs.
81
+ - **effects** — Side effects triggered when the gate passes. For example, passing `^first-login` might award an onboarding badge. Use `[]` if there are no effects.
82
+
83
+ ## Gate Chains
84
+
85
+ Gates can chain via the `requires` field. The route `"PUT /api/projects/:id": [^authenticated, ^project-admin]` ensures that:
86
+ 1. First, `^authenticated` verifies the user is logged in.
87
+ 2. Then, `^project-admin` checks that the user is an admin of the specific project.
88
+
89
+ If any gate in the chain fails, the action is blocked. How the failure manifests depends on your discipline: an API returns `403 Forbidden`, a mobile app might disable a button, a CLI exits with an error code.
90
+
91
+ ## When portal.yaml Is Required
92
+
93
+ Create `portal.yaml` whenever your project has conditions that must be checked before actions proceed:
94
+ - Authentication or session validation
95
+ - Role or permission checks
96
+ - Feature flags or environment checks
97
+ - Data prerequisites (cart not empty, profile complete)
98
+ - Rate limits or system health checks
99
+ - Any precondition that should be documented and auditable
100
+
101
+ If your project has no gates — no conditions that need to be verified before any action — then `portal.yaml` is not needed.
102
+
103
+ ## The Gate-First Workflow
104
+
105
+ When adding functionality that requires preconditions, follow this workflow:
106
+
107
+ 1. **Ask Paradigm** — Call `paradigm_gates_for_route` with the route and method (for web APIs), or identify the conditions that must be checked.
108
+ 2. **Add to portal.yaml** — Define the gates and map them to the actions they protect.
109
+ 3. **Implement** — Write the code that enforces each gate check.
110
+ 4. **Test** — Verify that failing a gate blocks the action appropriately for your discipline.
111
+
112
+ This workflow ensures that conditions are defined *before* implementation, not bolted on after.