@a-company/paradigm 5.38.0 → 6.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/dist/{accept-orchestration-OATWIRHP.js → accept-orchestration-TIXUQQGR.js} +1 -1
  2. package/dist/add-UOR4INIV.js +8 -0
  3. package/dist/agent-MB3H5EZA.js +33 -0
  4. package/dist/{agent-loader-RIVI6QPP.js → agent-loader-VGBPL3TH.js} +1 -1
  5. package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-W3RQJVW7.js} +1 -1
  6. package/dist/{agents-suggest-HYTFMQD3.js → agents-suggest-IKY6VD2R.js} +1 -1
  7. package/dist/{ambient-WTLYUAQM.js → ambient-AI42BOM5.js} +12 -12
  8. package/dist/{ambient-76YMUA5Q.js → ambient-FNNFB4AP.js} +1 -1
  9. package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
  10. package/dist/authority-FA3HLEOA.js +2 -0
  11. package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
  12. package/dist/chunk-23T6UG73.js +605 -0
  13. package/dist/{chunk-4L7665QV.js → chunk-2AU5L333.js} +1 -1
  14. package/dist/{chunk-BOYQAMGC.js → chunk-4N56FRNE.js} +1 -1
  15. package/dist/{chunk-5QOCKWK5.js → chunk-4PSD5R7N.js} +2 -2
  16. package/dist/{chunk-MQIG6SMF.js → chunk-6QXBXZF6.js} +1 -1
  17. package/dist/{chunk-ORDKEGII.js → chunk-AMLD7IYC.js} +1 -1
  18. package/dist/{chunk-3DZK54RU.js → chunk-DBEWOKD6.js} +32 -7
  19. package/dist/{chunk-AGFPVSX5.js → chunk-F6E3HW45.js} +1 -1
  20. package/dist/{chunk-X3U3IGYT.js → chunk-GD4F2HC6.js} +2 -2
  21. package/dist/chunk-GRZQIKST.js +2 -0
  22. package/dist/{chunk-HOBHJPTL.js → chunk-IOVHF4SR.js} +1 -1
  23. package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
  24. package/dist/{chunk-74SGKSRQ.js → chunk-KAFQA7HV.js} +2 -2
  25. package/dist/{chunk-NEJ4ZLCY.js → chunk-LAYBUKMB.js} +1 -1
  26. package/dist/{chunk-4VKSEOXZ.js → chunk-LPBCQM5Y.js} +3 -3
  27. package/dist/chunk-Q527BPUF.js +2 -0
  28. package/dist/{chunk-AO7ZSRME.js → chunk-TQOT2LBO.js} +2 -2
  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-WXF5VFB4.js +111 -0
  33. package/dist/chunk-XQLO5URP.js +11 -0
  34. package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
  35. package/dist/chunk-Z5QW6USC.js +2 -0
  36. package/dist/{compliance-D7GD6ZYC.js → compliance-J3VOV445.js} +1 -1
  37. package/dist/config-schema-FLHRVZMI.js +2 -0
  38. package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
  39. package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
  40. package/dist/decision-loader-HELL2AMX.js +2 -0
  41. package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
  42. package/dist/{diff-YGHBIJY5.js → diff-75MABOSL.js} +1 -1
  43. package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
  44. package/dist/{docs-USDAF26F.js → docs-TSAAS4W3.js} +1 -1
  45. package/dist/doctor-L5XZENCF.js +2 -0
  46. package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
  47. package/dist/{flow-FVZR3YJ4.js → flow-BGXOVE2V.js} +1 -1
  48. package/dist/{hooks-TFMMMB2H.js → hooks-KUEE5KMM.js} +1 -1
  49. package/dist/index.js +6 -6
  50. package/dist/init-M44SO65G.js +2 -0
  51. package/dist/{init-XYB62Q3X.js → init-V4KSEKPK.js} +1 -1
  52. package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
  53. package/dist/list-CFHINXIS.js +12 -0
  54. package/dist/lore-loader-D2ISOASW.js +2 -0
  55. package/dist/lore-loader-PXFKMKAN.js +2 -0
  56. package/dist/mcp.js +4 -4
  57. package/dist/metrics-UESGUHTA.js +2 -0
  58. package/dist/{migrate-Z5UQN57G.js → migrate-ZPNYDNM4.js} +1 -1
  59. package/dist/migrate-assessments-YSITX7KM.js +4 -0
  60. package/dist/migrate-decisions-NPLQOEEH.js +6 -0
  61. package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
  62. package/dist/migration-notices-BHLEYC4T.js +4 -0
  63. package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-NCLTGMAK.js} +1 -1
  64. package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
  65. package/dist/{orchestrate-M5PBZBJQ.js → orchestrate-K4KBTBYK.js} +1 -1
  66. package/dist/{platform-server-DNAMH4YI.js → platform-server-ANOALDPL.js} +1 -1
  67. package/dist/{portal-check-ZMLVBIGW.js → portal-check-DV2VSJ5E.js} +1 -1
  68. package/dist/portal-compliance-JONQ4SOP.js +2 -0
  69. package/dist/{probe-3FTG6LYO.js → probe-5HAXULAD.js} +1 -1
  70. package/dist/{providers-AWA7WLLM.js → providers-TBPOE4DI.js} +1 -1
  71. package/dist/quiz-WYIZJG5K.js +10 -0
  72. package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
  73. package/dist/registry-OUTA3DXW.js +20 -0
  74. package/dist/reindex-IZCD2JGD.js +2 -0
  75. package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
  76. package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
  77. package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
  78. package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
  79. package/dist/{serve-U47GULB6.js → serve-3FMUWW5K.js} +1 -1
  80. package/dist/serve-OQYUO7CR.js +12 -0
  81. package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
  82. package/dist/server-FGUL2FWQ.js +7 -0
  83. package/dist/session-tracker-HHNY6J4I.js +2 -0
  84. package/dist/{session-work-log-ZP45TREI.js → session-work-log-MEJ33TYD.js} +1 -1
  85. package/dist/{session-work-log-PAKXOFGL.js → session-work-log-ZVVJGO7X.js} +1 -1
  86. package/dist/{setup-FEWSYS3Y.js → setup-ZSEC72BS.js} +1 -1
  87. package/dist/shift-WGMZGWOC.js +60 -0
  88. package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
  89. package/dist/show-WVHAL4VU.js +7 -0
  90. package/dist/{spawn-M5BAV252.js → spawn-KKDDR6UR.js} +1 -1
  91. package/dist/status-S7Z5FVIE.js +6 -0
  92. package/dist/{summary-PYTEIJ4U.js → summary-WLI3NF4G.js} +2 -2
  93. package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
  94. package/dist/sync-55U6QPIA.js +2 -0
  95. package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
  96. package/dist/{team-PDK64JXI.js → team-2LGZQRP4.js} +1 -1
  97. package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
  98. package/dist/tools-4RRFTU5H.js +2 -0
  99. package/dist/university-content/notes/N-para-001-build-something.md +126 -0
  100. package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
  101. package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
  102. package/dist/university-content/notes/N-para-101-component-types.md +99 -0
  103. package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
  104. package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
  105. package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
  106. package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
  107. package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
  108. package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
  109. package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
  110. package/dist/university-content/notes/N-para-101-welcome.md +51 -0
  111. package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
  112. package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
  113. package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
  114. package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
  115. package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
  116. package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
  117. package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
  118. package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
  119. package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
  120. package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
  121. package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
  122. package/dist/university-content/notes/N-para-301-context-management.md +53 -0
  123. package/dist/university-content/notes/N-para-301-decisions.md +99 -0
  124. package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
  125. package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
  126. package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
  127. package/dist/university-content/notes/N-para-301-history-system.md +42 -0
  128. package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
  129. package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
  130. package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
  131. package/dist/university-content/notes/N-para-301-protocols.md +113 -0
  132. package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
  133. package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
  134. package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
  135. package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
  136. package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
  137. package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
  138. package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
  139. package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
  140. package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
  141. package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
  142. package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
  143. package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
  144. package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
  145. package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
  146. package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
  147. package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
  148. package/dist/university-content/notes/N-para-451-agent-routing.md +117 -0
  149. package/dist/university-content/notes/N-para-451-archetypes-vs-instances.md +82 -0
  150. package/dist/university-content/notes/N-para-451-identity-layers.md +76 -0
  151. package/dist/university-content/notes/N-para-451-orchestration-modes.md +85 -0
  152. package/dist/university-content/notes/N-para-451-paradigm-shift.md +95 -0
  153. package/dist/university-content/notes/N-para-451-partners-primitive.md +107 -0
  154. package/dist/university-content/notes/N-para-451-roster-management.md +132 -0
  155. package/dist/university-content/notes/N-para-451-roster-reference.md +106 -0
  156. package/dist/university-content/notes/N-para-451-the-team-pattern.md +87 -0
  157. package/dist/university-content/notes/N-para-451-tiers.md +81 -0
  158. package/dist/university-content/notes/N-para-451-welcome.md +55 -0
  159. package/dist/university-content/notes/N-para-451-what-is-an-agent.md +73 -0
  160. package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
  161. package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
  162. package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
  163. package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
  164. package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
  165. package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
  166. package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
  167. package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
  168. package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
  169. package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
  170. package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
  171. package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
  172. package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
  173. package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
  174. package/dist/university-content/notes/N-para-501-task-management.md +100 -0
  175. package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
  176. package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
  177. package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
  178. package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
  179. package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
  180. package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
  181. package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
  182. package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
  183. package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
  184. package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
  185. package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
  186. package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
  187. package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
  188. package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
  189. package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
  190. package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
  191. package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
  192. package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
  193. package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
  194. package/dist/university-content/paths/LP-para-001.yaml +29 -0
  195. package/dist/university-content/paths/LP-para-101.yaml +59 -0
  196. package/dist/university-content/paths/LP-para-201.yaml +69 -0
  197. package/dist/university-content/paths/LP-para-301.yaml +84 -0
  198. package/dist/university-content/paths/LP-para-401.yaml +74 -0
  199. package/dist/university-content/paths/LP-para-451.yaml +69 -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-451-foundations.yaml +154 -0
  253. package/dist/university-content/quizzes/Q-para-451-when-to-invoke.yaml +182 -0
  254. package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
  255. package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
  256. package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
  257. package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
  258. package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
  259. package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
  260. package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
  261. package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
  262. package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
  263. package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
  264. package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
  265. package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
  266. package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
  267. package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
  268. package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
  269. package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
  270. package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
  271. package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
  272. package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
  273. package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
  274. package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
  275. package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
  276. package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
  277. package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
  278. package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
  279. package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
  280. package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
  281. package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
  282. package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
  283. package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
  284. package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
  285. package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
  286. package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
  287. package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
  288. package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
  289. package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
  290. package/dist/university-content/reference.json +2 -2
  291. package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
  292. package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
  293. package/dist/university-ui/index.html +1 -1
  294. package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
  295. package/dist/validate-XUQZTF3H.js +9 -0
  296. package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
  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 +2 -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/dist/add-P76GEMGF.js +0 -8
  313. package/dist/agent-X6I2YWOB.js +0 -33
  314. package/dist/chunk-JQKKVAAN.js +0 -2
  315. package/dist/chunk-NQ47TA6C.js +0 -111
  316. package/dist/chunk-ODVKPZZ4.js +0 -2
  317. package/dist/chunk-Q2J542ST.js +0 -2
  318. package/dist/chunk-RBLK34IA.js +0 -11
  319. package/dist/chunk-RN4VE6P3.js +0 -521
  320. package/dist/chunk-WS2N27RX.js +0 -3
  321. package/dist/config-schema-GUQY2QN7.js +0 -2
  322. package/dist/decision-loader-2XPZE4EZ.js +0 -2
  323. package/dist/doctor-WMVULMQD.js +0 -2
  324. package/dist/list-5IUGP3ZB.js +0 -7
  325. package/dist/lore-loader-RVQI5GXL.js +0 -2
  326. package/dist/lore-loader-XY5MZRR2.js +0 -2
  327. package/dist/migrate-assessments-GEI5WMI2.js +0 -4
  328. package/dist/portal-compliance-6YR27IQU.js +0 -2
  329. package/dist/quiz-FE5UGAY2.js +0 -10
  330. package/dist/registry-KOOKFUWD.js +0 -20
  331. package/dist/reindex-I6LPAKCC.js +0 -2
  332. package/dist/serve-OY6XYL7F.js +0 -12
  333. package/dist/server-2MNROHF6.js +0 -7
  334. package/dist/session-tracker-MWJAJA6Z.js +0 -2
  335. package/dist/shift-PC6C7NUX.js +0 -60
  336. package/dist/show-BOAVWZPZ.js +0 -7
  337. package/dist/status-A37ECYNJ.js +0 -6
  338. package/dist/sync-DLUBV5HQ.js +0 -2
  339. package/dist/tools-5ITPEPSV.js +0 -2
  340. package/dist/university-content/courses/.purpose +0 -492
  341. package/dist/university-content/courses/para-001.json +0 -166
  342. package/dist/university-content/courses/para-101.json +0 -615
  343. package/dist/university-content/courses/para-201.json +0 -794
  344. package/dist/university-content/courses/para-301.json +0 -830
  345. package/dist/university-content/courses/para-401.json +0 -868
  346. package/dist/university-content/courses/para-501.json +0 -1166
  347. package/dist/university-content/courses/para-601.json +0 -719
  348. package/dist/university-content/courses/para-701.json +0 -807
  349. package/dist/university-content/plsat/.purpose +0 -162
  350. package/dist/university-content/plsat/v2.0.json +0 -760
  351. package/dist/university-content/plsat/v3.0.json +0 -3453
  352. package/dist/validate-C6SMKGYD.js +0 -9
  353. package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
  354. /package/dist/{chunk-BV5PRPLB.js → chunk-HXGYVS2N.js} +0 -0
  355. /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
@@ -0,0 +1,81 @@
1
+ ---
2
+ id: N-para-451-tiers
3
+ title: Model Tiers — Which Claude Each Agent Runs On
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-26'
7
+ updated: '2026-04-26'
8
+ tags:
9
+ - course
10
+ - para-451
11
+ - tier-1
12
+ - tier-2
13
+ - tier-3
14
+ - model-tier
15
+ - taxonomy
16
+ symbols: []
17
+ difficulty: beginner
18
+ estimatedMinutes: 4
19
+ prerequisites:
20
+ - N-para-451-welcome
21
+ category: paradigm-core
22
+ origin: authored
23
+ source: agents-course-phase-a-design.md
24
+ ---
25
+
26
+ ## Tier = which model the agent runs on
27
+
28
+ In Paradigm, an agent's **tier** answers a single question: *which Claude model does this agent invoke by default?* That is it. Tier is a routing decision, not a status ranking, not a capability label, and — importantly — not the same thing as the v6.1 notebook tier (that one is covered separately; see the callout at the end).
29
+
30
+ The three tiers map to the three Claude model classes:
31
+
32
+ | Tier | Default model | Cost / latency profile | Typical role fit |
33
+ |------|---------------|------------------------|------------------|
34
+ | **Tier 1** | opus | Most capable, highest cost, slowest | Design, threat analysis, simulation, learning-loop reasoning — work where one extra IQ point pays for itself many times over. |
35
+ | **Tier 2** | sonnet | Balanced capability and cost | Review, documentation, devil's-advocacy, ecosystem specialists — work that needs depth but not the maximum. |
36
+ | **Tier 3** | haiku | Fast, low cost | Implementation, test writing, mechanical execution — well-defined work where speed and volume matter. |
37
+
38
+ ## The match is to the work, not the agent
39
+
40
+ A Tier-3 agent (Builder, Tester) is **not** a junior agent. It is an agent doing work that is well-specified enough that a fast model handles it efficiently. Throwing opus at "implement this function the architect already designed" wastes tokens for no gain. Throwing haiku at "design a multi-file refactor across the codebase" wastes everyone's time on a thinner reasoning surface than the task demands. Tier is the framework's way of matching cost and capability to the actual cognitive shape of the work.
41
+
42
+ ## Examples from the canonical roster
43
+
44
+ - **Architect** (id: `architect`) — Tier 1 (opus). Designs systems. Most expensive thinking the team does.
45
+ - **Security** (id: `security`) — Tier 1 (opus). Threat modelling and OWASP review. Mistakes are expensive; tier is conservative.
46
+ - **Cid** (id: `cid`) — Tier 1 (opus). Captain. Pre-task brief, post-task debrief. Reasoning over the whole session.
47
+ - **Reviewer** (id: `reviewer`) — Tier 2 (sonnet). Two-stage review. Needs depth but does not need to design from scratch.
48
+ - **Documentor** (id: `documentor`) — Tier 2 (sonnet). Writes `.purpose` files and updates `portal.yaml`.
49
+ - **Compliance** (id: `compliance`) — Tier 2 (sonnet). Symbol planner and coverage owner.
50
+ - **Builder** (id: `builder`) — Tier 3 (haiku). Implementation. Fast loop, narrow scope.
51
+ - **Tester** (id: `tester`) — Tier 3 (haiku). Test writing.
52
+
53
+ You will see the full tier breakdown in **N-para-451-roster-reference** — every active agent, one row each, with its tier called out.
54
+
55
+ ## How to override
56
+
57
+ Tier is a *default*, not a contract. You can override the model for any agent on a per-project basis in `.paradigm/config.yaml` under the `model-resolution` section:
58
+
59
+ ```yaml
60
+ model-resolution:
61
+ builder: claude-opus-4 # override builder up to opus for a research project
62
+ documentor: claude-haiku-4 # override documentor down to haiku to save cost
63
+ ```
64
+
65
+ Override sparingly. The defaults exist because they reflect a deliberate cost / capability trade-off across the team. If you find yourself overriding the same agent in every project, that is a signal worth bringing to the design — Loid (the intelligence officer) tracks override patterns precisely because they often surface a tier-default that should change.
66
+
67
+ ## What tier does **not** mean
68
+
69
+ Tier does not say:
70
+
71
+ - How much an agent is "trusted" — every agent's authority is governed by its profile and (at v6.1) its authority claims, not its tier.
72
+ - How often an agent is invoked — Builder (Tier 3) runs more often than Architect (Tier 1) on most projects.
73
+ - Which agents are "core" versus "specialty" — that is a separate axis (see the roster reference).
74
+
75
+ Tier is exactly one thing: the default model the agent calls. Keep it that simple and the rest of the framework gets easier.
76
+
77
+ > **Coming in v6.1:** Paradigm introduces a separate concept also named "tier" for **notebooks** — tier-1 (transferable across projects, owned by the agent) versus tier-2 (project-local, owned by the project). The two "tier" concepts are orthogonal: an agent's *model tier* (this entry) is about cost and capability; a *notebook tier* (v6.1) is about scope and ownership of learned patterns. The naming collision is unfortunate; we keep them strictly separate in PARA 451 and 551 to avoid conflation. See `agent-owned-enforcement-plan.md`.
78
+
79
+ ## Up next
80
+
81
+ The next entry — **N-para-451-roster-reference** — is where everything you have learned so far comes together: the canonical roster, with each agent's id, nickname, archetype, *and* tier all in a single scannable table.
@@ -0,0 +1,55 @@
1
+ ---
2
+ id: N-para-451-welcome
3
+ title: Welcome to PARA 451 — Agents Foundations
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-26'
7
+ updated: '2026-04-26'
8
+ tags:
9
+ - course
10
+ - para-451
11
+ - agents
12
+ - welcome
13
+ symbols: []
14
+ difficulty: beginner
15
+ estimatedMinutes: 4
16
+ prerequisites:
17
+ - LP-para-101
18
+ category: paradigm-core
19
+ origin: authored
20
+ source: agents-course-phase-a-design.md
21
+ ---
22
+
23
+ ## Why this course exists
24
+
25
+ Paradigm's most differentiated feature is its **agent team**. Other AI tooling gives you one model and a chat box. Paradigm gives you a roster of named, persistent identities — each with its own role, its own notebook of learned patterns, and its own moment to step in. Architect designs. Builder implements. Reviewer reviews. Cid runs the briefing. Loid runs the learning loop. Scholar and Sheila pair on research. The team is the product.
26
+
27
+ Until now, the only place to learn about agents in University was a handful of entries inside PARA 401: Orchestration — an advanced course beginners rarely reach. Worse, those entries pre-date the v6.0.3 partners primitive and the three-layer identity model, so they describe an older version of the team. PARA 451 is the canonical, beginner-accessible introduction; the older PARA 401 agent entries are flagged as v6.1 retirement candidates and will be retired once 451 is broadly adopted.
28
+
29
+ ## What you will learn
30
+
31
+ By the end of this course you will be able to answer:
32
+
33
+ - **What is an agent in Paradigm, and how is it different from "the model"?** An agent is a persistent identity with a profile, a notebook, and a role — not a single prompt or a single Claude call.
34
+ - **What is an archetype, and how is it different from a nickname or an id?** The three-layer identity model (id / nickname / archetype) is what makes the same agent recognisable across every project, while still letting you call it whatever you want on yours.
35
+ - **Who is on the team, and when do you call each one?** A single roster reference page covers all twenty-one currently-active agents — what each one is for, when it gets invoked, and which agents it pairs with.
36
+ - **What does it mean for two agents to be "partners"?** The partners primitive (shipped at v6.0.3) is how the framework expresses that some agents work meaningfully better as a unit. Scholar + Sheila is the canonical example.
37
+ - **How does orchestration actually run?** Faceted orchestration in Claude Code (true multi-agent, isolated Task contexts) versus sequential roleplay in Cursor and IDEs without Task tool support.
38
+
39
+ ## Prerequisite
40
+
41
+ You should have completed **PARA 101: Foundations** — the five symbols, `.purpose` files, the basic shape of the `.paradigm/` directory. You do **not** need PARA 201, 301, or 401. The agent system is conceptually approachable, and learning the team early pays off in every project from then on.
42
+
43
+ ## Course shape
44
+
45
+ PARA 451 is a single ordered learning path: notes interleaved with quizzes, ending in a mastery review. The full course is ~18 entries (about 35 minutes if you skim, 75-90 minutes if you take the quizzes seriously). This first batch of entries covers the foundation: identity, model tiers, and the roster. Subsequent batches add roster management, orchestration modes, the partners primitive deep-dive, and auto-rostering.
46
+
47
+ ## What this course does **not** cover
48
+
49
+ Phase A — the entries in this course — is intentionally stable. We do not teach Rune's authority modes, the soft-block primitive, the notebook tier-1/tier-2 split, or the cross-project compounding runtime. Those topics are evolving as the v6.1 enforcement model lands, and they live in **PARA 551: Agents in Practice** (the follow-up course). The mastery review at the end of 451 will point you there when you are ready.
50
+
51
+ > **Coming in v6.1:** PARA 551 launches alongside the v6.1 enforcement-model release. It treats PARA 451 as a hard prerequisite. See `agent-owned-enforcement-plan.md`.
52
+
53
+ ## Where to go from here
54
+
55
+ Continue to **N-para-451-what-is-an-agent** to start with the conceptual foundation, then move on to **N-para-451-identity-layers**. If you only have ten minutes and you want the team-at-a-glance, jump to **N-para-451-roster-reference** — it is the most-referenced page in the course, and you will come back to it often.
@@ -0,0 +1,73 @@
1
+ ---
2
+ id: N-para-451-what-is-an-agent
3
+ title: What Is an Agent in Paradigm?
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-26'
7
+ updated: '2026-04-26'
8
+ tags:
9
+ - course
10
+ - para-451
11
+ - agents
12
+ - identity
13
+ - profile
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 5
17
+ prerequisites:
18
+ - N-para-451-welcome
19
+ category: paradigm-core
20
+ origin: authored
21
+ source: agents-course-phase-a-design.md
22
+ ---
23
+
24
+ ## An agent is not a model invocation
25
+
26
+ The single most common confusion newcomers bring to Paradigm is the assumption that "an agent" is just "a Claude API call with a system prompt". It is not. A model invocation is **transient** — it begins, returns a response, and forgets everything. An **agent** is **persistent**: it has a name, a profile on disk, a notebook of patterns it has learned, and a role it fills across every session and (often) across every project on your machine.
27
+
28
+ Concretely, an agent in Paradigm is the union of four things:
29
+
30
+ | Part | What it is | Where it lives |
31
+ |------|------------|----------------|
32
+ | **Profile** | The agent's identity, role, voice, expertise, and partner declarations. | `~/.paradigm/agents/<id>.agent` |
33
+ | **Notebook** | What the agent has learned — patterns, gotchas, expertise entries promoted from journal observations. | `.paradigm/notebooks/<id>/` (project) or global notebook stores |
34
+ | **Roster entry** | Whether this agent is active on a given project, and at what tier. | `.paradigm/roster.yaml` |
35
+ | **Runtime invocation** | The Claude model call that happens when the agent is asked to do something — driven by the profile, fed the notebook, scoped by the roster. | At runtime, via `paradigm_orchestrate_inline` or the Claude Code Task tool |
36
+
37
+ Strip any one of these away and you do not have an agent any more — you have something less. A profile with no notebook is a fresh hire. A notebook with no profile is orphaned data. A roster entry pointing at a missing profile is a dangling reference. The agent is the *whole* construct.
38
+
39
+ ## Why the framework has many of them
40
+
41
+ Paradigm could have given you one big general-purpose Claude with a long system prompt and called it a day. It deliberately does not. Two reasons:
42
+
43
+ 1. **Specialised attention beats generalist attention.** When Architect is invoked, its profile narrows the model's attention to system design — multi-file planning, spec coherence, blast-radius reasoning. When Builder is invoked, its profile narrows attention to "follow the spec exactly, push back if unclear, ship the code". The same Claude model in both invocations produces measurably different output because the framing is different. A multi-agent team is a way of giving the model **multiple framings** in the same project, each at the right time.
44
+
45
+ 2. **Persistent expertise compounds per role.** Architect's notebook accrues *design* patterns. Reviewer's notebook accrues *review* heuristics. Loid's notebook accrues *learning-loop* observations. If everything were one agent, the patterns would muddle. Splitting roles means each agent's notebook stays sharp in its lane, and the cross-project learning that Paradigm bets on (Swift patterns compounding everywhere Swift is detected, for example) actually makes sense.
46
+
47
+ The team metaphor is not decoration. It is the simplest accurate description of what is happening: a small group of specialised, persistent identities, each running on Claude, coordinating through the framework.
48
+
49
+ ## Two scopes: globally installed, project-rostered
50
+
51
+ Every agent has two scopes you should keep straight from day one:
52
+
53
+ - **Globally installed** — the profile sits at `~/.paradigm/agents/<id>.agent` and exists once on your machine. You can install agents from GitHub or (in future) the nevr.land registry; the profile travels with you.
54
+ - **Project-rostered** — each project decides which agents from your global pool are active, via `.paradigm/roster.yaml`. Benching an agent on Project A leaves it untouched on Project B. The same global Architect can be active on six projects simultaneously and benched on a seventh.
55
+
56
+ This split is intentional. You curate your team once, globally. You shape your team per project, locally. The roster-management entry later in the course (**N-para-451-roster-management**) walks through the CLI and the `/paradigm:agents` skill that drive both halves.
57
+
58
+ ## How agents are invoked at runtime
59
+
60
+ When the framework needs an agent to do something, two paths are common:
61
+
62
+ 1. **Via the Task tool (Claude Code).** Each agent runs in an isolated Task subagent context, with the `paradigm:` prefix on its name (e.g. `paradigm:architect`, `paradigm:builder`). Each agent has its own conversation, its own memory, its own tool access — true multi-agent execution. This is **faceted orchestration**, the default in Claude Code.
63
+ 2. **Via sequential roleplay.** In Cursor and other IDEs without Task tool support, the framework runs each agent as an inline persona switch in the same context — you see the agent's voice and reasoning, but they share memory rather than each holding their own. This is **sequential mode**, covered in **N-para-451-orchestration-modes**.
64
+
65
+ Either way, the agent's profile is loaded, its notebook is consulted, and its output is attributed back to its identity (so you can see in the orchestration log "Architect designed", "Builder implemented", "Reviewer flagged"). The mode shapes *how* the work runs; the identity is the same either way.
66
+
67
+ ## Try this
68
+
69
+ Run `paradigm agent list`. The output is your project's roster — every agent currently active, with its id and nickname. Pick one (Architect is a good first target) and run `paradigm agent get architect`. You will see the profile fields: id, nickname, role, tier, partners, and a description of what the agent does. That on-disk record — not a conversation, not a single prompt — is the agent.
70
+
71
+ ## Up next
72
+
73
+ Now that the agent concept is clear, **N-para-451-identity-layers** zooms into the three layers every agent has (id, nickname, archetype) and why each layer earns its keep. After that, **N-para-451-tiers** covers the orthogonal question of which Claude model an agent runs on by default.
@@ -0,0 +1,122 @@
1
+ ---
2
+ id: N-para-501-advanced-workflows
3
+ title: The Complete Workflow
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-501
11
+ - five-phase-workflow-preflight
12
+ - session-recovery-provides
13
+ - post-write-hook-tracks
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 5
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-501.json
21
+ ---
22
+
23
+ ## Putting It All Together
24
+
25
+ You have learned the five advanced systems individually. Now let's see how they work together in a complete development workflow. Every system has a role, and the handoffs between them create a feedback loop that gets smarter with every session.
26
+
27
+ ## The Full Cycle
28
+
29
+ Here is the complete Paradigm workflow for a non-trivial task:
30
+
31
+ ### Phase 1: Preflight
32
+
33
+ ```
34
+ 1. paradigm_session_recover → Load previous session context
35
+ 2. paradigm_pm_preflight → Get compliance plan for the task
36
+ 3. paradigm_habits_check(preflight) → Verify discovery habits are followed
37
+ 4. paradigm_ripple → Check impact of planned changes
38
+ 5. paradigm_wisdom_context → Get team knowledge for affected symbols
39
+ 6. paradigm_practice_context → Get habit-aware warnings for symbols
40
+ 7. paradigm_session_checkpoint(planning) → Save plan before coding
41
+ ```
42
+
43
+ Notice the layering: session recovery provides continuity, preflight ensures preparation, habits check enforces discovery discipline, ripple and wisdom provide context, practice context adds behavioral awareness, and the checkpoint enables crash recovery.
44
+
45
+ ### Phase 2: Implementation
46
+
47
+ ```
48
+ 8. Write code → Implement the feature
49
+ → Post-write hook fires → Tracks edited files in .pending-review
50
+ → Post-write advisory → Reminds about .purpose coverage
51
+ 9. Update .purpose files → Document new/changed symbols
52
+ 10. Update portal.yaml → Add routes and gates (if applicable)
53
+ 11. paradigm_session_checkpoint(implementing) → Save progress
54
+ ```
55
+
56
+ The post-write hook acts as a running tally. Every source file edit is tracked, and periodic reminders keep documentation top of mind. Updating .purpose and portal.yaml during implementation (not after) prevents the stop hook from blocking at the end.
57
+
58
+ ### Phase 3: Validation
59
+
60
+ ```
61
+ 12. paradigm_flow_check → Verify flows are complete
62
+ 13. paradigm_aspect_check → Verify aspect anchors are valid
63
+ 14. paradigm_pm_postflight → Run post-implementation governance
64
+ 15. paradigm_habits_check(postflight) → Verify documentation/testing habits
65
+ 16. paradigm_session_checkpoint(validating) → Save pre-test state
66
+ ```
67
+
68
+ Validation catches issues before they become stop hook violations. Flow validation ensures multi-step processes are complete. Aspect checks confirm anchors point to real code. Postflight governance catches missing .purpose files and undefined gates.
69
+
70
+ ### Phase 4: Recording
71
+
72
+ ```
73
+ 17. paradigm_lore_record → Record the session's work
74
+ 18. paradigm_history_record → Log implementation to symbol history
75
+ 19. paradigm_reindex → Rebuild the symbol index
76
+ 20. paradigm_session_checkpoint(complete) → Mark task complete
77
+ ```
78
+
79
+ Recording preserves institutional knowledge. The lore entry captures what was done and why. History record logs implementation details to individual symbol timelines. Reindexing ensures the symbol index reflects all changes.
80
+
81
+ ### Phase 5: Commit
82
+
83
+ ```
84
+ 21. git commit → Commit changes
85
+ → Pre-commit hook fires → Auto-rebuilds index, stages updated files
86
+ → Stop hook fires → Validates all compliance checks
87
+ 22. If stop hook blocks → Fix violations, re-attempt
88
+ 23. If stop hook passes → Session complete
89
+ ```
90
+
91
+ The commit phase is where enforcement happens. The pre-commit hook ensures the index is fresh. The stop hook validates everything: .purpose coverage, portal.yaml compliance, aspect anchors, lore recording, and pending review freshness.
92
+
93
+ ## How Systems Reinforce Each Other
94
+
95
+ The power of the complete workflow is in the feedback loops:
96
+
97
+ **Sentinel catches what Habits miss.** If an agent skips the `ripple-before-modify` habit and introduces a breaking change, Sentinel records the incident. The practice profile then shows that skipping ripple correlates with incidents — evidence to upgrade the habit severity.
98
+
99
+ **Lore preserves what Sessions forget.** Session breadcrumbs and checkpoints are ephemeral — they expire after 7 days. Lore entries are permanent. The checkpoint gets you through a crash; the lore entry gets the team through the next 6 months.
100
+
101
+ **Wisdom surfaces what Lore accumulates.** Lore entries record individual sessions. Wisdom distills patterns across sessions: "every time we modify #payment-service, check for null references on the refund object." Wisdom is lore, refined.
102
+
103
+ **Hooks enforce what Habits recommend.** Habits at `advisory` severity are suggestions. The stop hook at `block` severity is enforcement. The workflow starts with advice (habits check) and ends with enforcement (stop hook). This graduated approach teaches good behavior before punishing bad behavior.
104
+
105
+ ## Capstone Scenario
106
+
107
+ Imagine you are adding a refund endpoint to a payment system. Here is how the complete workflow plays out:
108
+
109
+ 1. **Session recover** reveals the previous session added the payment processor but did not add refunds
110
+ 2. **Preflight** shows you need to check `#payment-service`, `$checkout-flow`, and `^authenticated`
111
+ 3. **Habits check** confirms you called ripple and wisdom — discovery habits followed
112
+ 4. **Ripple** shows `#payment-service` has 4 downstream dependents
113
+ 5. **Wisdom** warns: "always null-check refund objects — see incident INC-042"
114
+ 6. You implement the refund endpoint with proper null checks
115
+ 7. **Post-write hook** tracks 5 edited files in `.pending-review`
116
+ 8. You update .purpose with `#refund-handler` and portal.yaml with `^refund-eligible` gate
117
+ 9. **Postflight** confirms all gates are declared and flows are valid
118
+ 10. **Lore record** captures the session with the decision to require `^refund-eligible`
119
+ 11. **Commit** triggers pre-commit (index rebuild) and stop hook (all checks pass)
120
+ 12. Three weeks later, a similar null reference hits — **Sentinel** matches pattern `payment-null-ref-001` and resolves it in 5 minutes using the recorded fix
121
+
122
+ This is Paradigm at full power: every system contributing, every session building on the last, every incident making the next resolution faster.
@@ -0,0 +1,195 @@
1
+ ---
2
+ id: N-para-501-aspect-graph-advanced
3
+ title: The Aspect Graph at Scale
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-501
11
+ - 8-built-in-detectors
12
+ - custom-detectors-defined
13
+ - bfs-traversal-with
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 8
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-501.json
21
+ ---
22
+
23
+ ## Beyond the Basics
24
+
25
+ PARA 201 introduced the Aspect Graph's internals — the SQLite schema, materialization pipeline, and recursive ripple. This lesson takes you deeper: building custom detectors, advanced graph queries, drift detection in CI/CD, search learning optimization, and governing aspects at enterprise scale.
26
+
27
+ ## Building Custom Aspect Detection Patterns
28
+
29
+ Paradigm ships with 8 built-in detectors that `paradigm_aspect_suggest_scan` uses to find undocumented aspects in source code:
30
+
31
+ 1. **Magic numbers** — Numeric literals that aren't 0 or 1 (e.g., `timeout: 30000`, `maxRetries: 3`)
32
+ 2. **Hardcoded strings** — String literals used in conditionals or assignments that smell like configuration (e.g., `'production'`, `'us-east-1'`)
33
+ 3. **Rate limits** — Patterns like `rateLimit(100)`, `throttle(1000)`, or variable names containing `limit`, `throttle`, `quota`
34
+ 4. **Time values** — Durations, timeouts, TTLs, and expiry values (e.g., `86400`, `24 * 60 * 60`)
35
+ 5. **Environment checks** — `process.env`, `std::env`, `os.environ` patterns that branch on environment variables
36
+ 6. **Feature flags** — Conditional logic gated on feature names (e.g., `isEnabled('new-checkout')`, `featureFlags.get()`)
37
+ 7. **Regex patterns** — Regular expressions used for validation (e.g., email patterns, URL matchers)
38
+ 8. **Assertion guards** — Invariant checks using `assert`, `invariant()`, `expect()` that enforce guarantees
39
+
40
+ To extend the detection system, you define custom detectors in `.paradigm/aspect-detectors.yaml`:
41
+
42
+ ```yaml
43
+ detectors:
44
+ - id: compliance-annotation
45
+ name: Compliance Annotations
46
+ description: Detects SOC2/GDPR compliance annotations in code
47
+ patterns:
48
+ - regex: "@(SOC2|GDPR|PCI|HIPAA)"
49
+ languages: [typescript, javascript, java]
50
+ - regex: "#\[compliance\("
51
+ languages: [rust]
52
+ suggestedCategory: rule
53
+ suggestedSeverity: critical
54
+ suggestedTags: [compliance, security]
55
+
56
+ - id: retry-policy
57
+ name: Retry Policies
58
+ description: Detects retry/backoff configurations
59
+ patterns:
60
+ - regex: "(retryPolicy|backoff|maxAttempts|retryCount)"
61
+ languages: [typescript, javascript, python]
62
+ suggestedCategory: configuration
63
+ suggestedSeverity: medium
64
+ ```
65
+
66
+ Custom detectors are loaded alongside the built-in 8 during `paradigm_aspect_suggest_scan`. They follow the same interface: match source code patterns, suggest a category and severity, and let the user decide whether to formalize the finding as a `~aspect`.
67
+
68
+ ## Graph Querying Strategies
69
+
70
+ The aspect graph supports three primary querying patterns, each suited to different use cases:
71
+
72
+ ### BFS Traversal (Neighborhood Analysis)
73
+
74
+ `paradigm_aspect_graph` uses breadth-first search to explore the neighborhood of a symbol. The `hops` parameter controls how far to traverse:
75
+
76
+ - **1 hop** — Direct connections only. Use this when you need to know what a single aspect directly relates to. Fast, focused, minimal noise.
77
+ - **2 hops** — Friends-of-friends. Reveals indirect relationships: "this aspect relates to that aspect, which relates to that component." The sweet spot for most queries.
78
+ - **3+ hops** — Extended neighborhood. Useful for understanding how distant parts of the codebase connect through aspects. Gets noisy in dense graphs.
79
+
80
+ The multiplicative weight decay means that each hop reduces confidence. An explicit edge (weight 1.0) followed by an inferred edge (weight 0.5) produces a path weight of 0.5. Two inferred edges produce 0.25. The `minWeight` threshold (default 0.1) prunes low-confidence paths automatically.
81
+
82
+ ### Heatmap-Driven Exploration
83
+
84
+ `paradigm_aspect_heatmap` ranks aspects by access frequency. This is not about what aspects ARE important — it is about what aspects are USED most. The distinction matters:
85
+
86
+ - An aspect accessed 50 times via search but never via ripple might have a discoverability problem — people search for it because it is hard to find through the graph.
87
+ - An aspect accessed primarily via ripple has good graph connectivity — it naturally surfaces during impact analysis.
88
+ - An aspect with zero access across all types may be stale, poorly named, or irrelevant.
89
+
90
+ Heatmap data is the starting point for governance reviews. Aspects that nobody accesses should be evaluated for removal or renaming.
91
+
92
+ ### Edge-Filtered Queries
93
+
94
+ When calling `paradigm_aspect_graph`, you can filter by edge relation to narrow results:
95
+
96
+ - `enforced-by` — Find all aspects that enforce a given component. Useful when changing a component to know what rules apply.
97
+ - `depends-on` — Find dependency chains. If `~token-expiry-24h` depends-on `~jwt-signing-rs256`, changing JWT signing affects token expiry.
98
+ - `contradicts` — Find conflicting aspects. Two aspects that contradict each other signal an architectural tension that needs resolution.
99
+ - `supersedes` — Find deprecated-but-still-referenced aspects. The superseding aspect should be the authoritative one.
100
+ - `related-to` — The weakest relation. Useful for discovery but not for impact analysis.
101
+
102
+ ## Drift Detection in CI/CD
103
+
104
+ Aspect drift occurs when the code at an anchor location changes without updating the aspect definition. The `paradigm_aspect_drift` tool detects this using SHA-256 content hashes.
105
+
106
+ During materialization, the pipeline computes a SHA-256 hash of the code at each anchor's line range and stores it in the `anchors.content_hash` column. When `paradigm_aspect_drift` runs later, it re-reads the code at those line ranges, computes a new hash, and compares. A mismatch means the code changed — the anchor is drifted.
107
+
108
+ For CI/CD integration, add drift detection as a pipeline step:
109
+
110
+ ```yaml
111
+ # .github/workflows/paradigm.yml
112
+ steps:
113
+ - name: Check aspect drift
114
+ run: |
115
+ paradigm scan --quiet
116
+ paradigm doctor --strict --json | jq '.aspects.drifted'
117
+ if [ $(paradigm doctor --json | jq '.aspects.drifted | length') -gt 0 ]; then
118
+ echo "::error::Aspect anchors have drifted"
119
+ exit 1
120
+ fi
121
+ ```
122
+
123
+ The `--strict` flag treats drifted anchors as errors rather than warnings. In a mature project, you want drift detection to block merges — it ensures that aspect documentation stays synchronized with code changes.
124
+
125
+ Drift detection is also available per-aspect via the MCP tool:
126
+
127
+ ```
128
+ paradigm_aspect_drift({ aspectId: 'token-expiry-24h' })
129
+ ```
130
+
131
+ This returns: the aspect ID, each anchor with its stored hash vs current hash, whether each anchor has drifted, and the specific lines that changed. Use this during code review to verify that refactors updated their aspect anchors.
132
+
133
+ ## Search Learning Loop Optimization
134
+
135
+ The three-tier search system improves over time through the confirm-and-decay mechanism. Here is how to optimize it:
136
+
137
+ ### Tier Priority
138
+
139
+ 1. **Tier 1: Learned mappings** — Query-to-aspect weights in the `search_weights` table. If a query matches a stored mapping with weight >= 1.0, the result is returned immediately. This is instant because it is a simple key-value lookup.
140
+ 2. **Tier 2: FTS5 full-text search** — SQLite's FTS5 engine searches aspect descriptions, values, and categories. Returns results ranked by BM25 relevance. Accurate but slower than Tier 1.
141
+ 3. **Tier 3: Fuzzy matching** — Levenshtein distance-based matching with a configurable threshold. Catches typos and partial matches. Slowest but most forgiving.
142
+
143
+ ### Warming the Learning System
144
+
145
+ A new project's search starts cold — no learned mappings exist. Every search falls through to Tier 2 or 3. To warm the system:
146
+
147
+ 1. Run common queries for your project's domain (e.g., search for 'expiry', 'rate limit', 'auth')
148
+ 2. Confirm the best result with `paradigm_aspect_confirm` for each query
149
+ 3. After 3-5 confirmations per query, the learned weight exceeds the Tier 1 threshold
150
+
151
+ The decay mechanism (confirmed +1.0, others *0.95) means that a single confirmation is enough to create a Tier 1 entry. But multiple confirmations build a stronger mapping that resists displacement.
152
+
153
+ ### Diagnosing Search Issues
154
+
155
+ When search returns unexpected results:
156
+
157
+ - Check `search_weights` table entries for the query — are stale mappings dominating?
158
+ - Verify aspect descriptions contain the keywords you are searching for (FTS5 searches descriptions)
159
+ - Check for typos in the query that might prevent Tier 2 matches but trigger Tier 3 fuzzy results
160
+ - Use `paradigm_aspect_heatmap` to see if the expected aspect is ever accessed — a zero-access aspect might have a discovery problem
161
+
162
+ ## Aspect Governance at Scale
163
+
164
+ When a project exceeds 100 aspects, governance becomes critical. Without it, aspects accumulate as stale documentation, anchor drift goes undetected, and the graph becomes noisy rather than useful.
165
+
166
+ ### The Governance Review Cycle
167
+
168
+ Run quarterly aspect reviews using this process:
169
+
170
+ 1. **Heatmap analysis** — `paradigm_aspect_heatmap({ limit: 0 })` returns ALL aspects ranked by access. The bottom 20% are candidates for removal or consolidation.
171
+ 2. **Drift audit** — `paradigm doctor --strict` catches all drifted anchors. Drifted aspects either need anchor updates or should be marked stale.
172
+ 3. **Category distribution** — Check that aspect categories are balanced. A project with 80 rules and 2 decisions might be over-documenting constraints while missing strategic choices.
173
+ 4. **Edge health** — Check for orphaned aspects (no edges to any other symbol). An aspect with zero edges is either standalone (legitimate but rare) or poorly connected.
174
+ 5. **Search weight review** — Check the `search_weights` table for queries with multiple high-weight mappings, which indicate ambiguous terminology.
175
+
176
+ ### Naming Conventions at Scale
177
+
178
+ With 100+ aspects, naming collisions and ambiguity become real problems. Establish conventions:
179
+
180
+ - **Category prefix** — Prefix aspects with their category: `~rule-no-console-log`, `~decision-use-redis`, `~constraint-max-upload-10mb`
181
+ - **Domain grouping** — Group related aspects by domain: `~auth-token-expiry`, `~auth-session-timeout`, `~auth-refresh-rotation`
182
+ - **Version suffix** — When aspects evolve: `~rate-limit-v2` supersedes `~rate-limit-v1` with an explicit `supersedes` edge
183
+
184
+ ### Delegation and Ownership
185
+
186
+ For large teams, assign aspect ownership:
187
+
188
+ ```yaml
189
+ ~payment-idempotency:
190
+ description: Payment operations must be idempotent
191
+ owner: payments-team
192
+ reviewers: [platform-team, security-team]
193
+ ```
194
+
195
+ The `owner` field indicates who maintains the aspect, and `reviewers` lists teams that should be consulted when the aspect changes. This is purely metadata — Paradigm does not enforce it — but it guides humans and AI agents when modifications are needed.
@@ -0,0 +1,97 @@
1
+ ---
2
+ id: N-para-501-aspect-graph-internals
3
+ title: Aspect Graph Internals
4
+ type: note
5
+ author: paradigm
6
+ created: '2026-04-22'
7
+ updated: '2026-04-22'
8
+ tags:
9
+ - course
10
+ - para-501
11
+ - six-sqlite-tables
12
+ - recursive-ripple-uses
13
+ - default-maxdepth-is
14
+ symbols: []
15
+ difficulty: beginner
16
+ estimatedMinutes: 6
17
+ prerequisites: []
18
+ category: paradigm-core
19
+ origin: imported
20
+ source: courses/para-501.json
21
+ ---
22
+
23
+ ## SQLite Schema
24
+
25
+ The aspect graph database at `.paradigm/aspect-graph.db` uses six core tables that model the full aspect ecosystem:
26
+
27
+ **`aspects`** — The primary table storing aspect metadata. Columns include `id` (the aspect symbol, e.g., `token-expiry-24h`), `description`, `value`, `category` (rule/decision/constraint/configuration/invariant), `severity` (low/medium/high/critical), and `content_hash` (SHA-256 of the combined anchor code for drift detection). Each row represents one aspect from a `.purpose` file.
28
+
29
+ **`anchors`** — Stores code anchor locations. Columns: `aspect_id` (foreign key to aspects), `file_path`, `start_line`, `end_line`, and `content_hash` (SHA-256 of the code at those lines). An aspect can have multiple anchors across different files.
30
+
31
+ **`edges`** — The graph edges connecting aspects to other symbols. Columns: `source` (the aspect), `target` (any symbol), `relation` (enforced-by, depends-on, contradicts, supersedes, related-to), `weight` (numeric confidence, default 1.0 for explicit edges), and `origin` (explicit, inferred, or learned). This table is what makes the aspect system a graph rather than a flat list.
32
+
33
+ **`lore_links`** — Connects aspects to lore entries. Columns: `aspect_id` and `lore_id`. These links are materialized from the `lore` field in aspect YAML definitions, and additional links are inferred when two aspects share lore references.
34
+
35
+ **`search_weights`** — The learning system's memory. Columns: `query` (the search string), `aspect_id` (the result), and `weight` (accumulated confidence). This table powers Tier 1 of the three-tier search — when a query matches a stored mapping with sufficient weight, the result is returned immediately without FTS5 or fuzzy matching.
36
+
37
+ **`heatmap`** — Tracks aspect access patterns. Columns: `aspect_id`, `access_type` (search, ripple, navigate, direct), `count`, and `last_accessed`. This data drives the `paradigm_aspect_heatmap` tool, revealing which aspects are most frequently referenced and how they are typically discovered.
38
+
39
+ ## Recursive Ripple
40
+
41
+ The aspect graph enables recursive ripple analysis — when you call `paradigm_ripple` on a symbol that has aspect edges, the ripple follows those edges to discover indirect impacts. The algorithm uses weighted breadth-first search (BFS) with three configurable parameters:
42
+
43
+ - **maxDepth** — How many hops to traverse. Default is 5, maximum is 10. Each hop follows one edge in the graph. At depth 1, you see direct connections. At depth 5, you see connections five edges away.
44
+ - **minWeight** — The minimum cumulative weight to continue traversal. Default is 0.1. As the BFS traverses edges, it multiplies the current weight by each edge's weight (multiplicative decay). When the cumulative weight drops below minWeight, that branch is pruned.
45
+ - **Queue limit** — Maximum BFS queue size: 1000 nodes. This prevents runaway traversals in densely connected graphs. If the queue exceeds 1000 entries, the oldest entries are dropped.
46
+
47
+ The multiplicative decay is the key mechanism. An explicit edge with weight 1.0 passes full confidence to the next hop. An inferred edge with weight 0.5 halves the confidence. After two inferred edges, the weight is 0.25 — and after four, it drops to 0.0625, below the default minWeight threshold. This naturally limits traversal depth through low-confidence paths while allowing full traversal through high-confidence ones.
48
+
49
+ ## Heatmap Tracking
50
+
51
+ Every time an aspect is accessed through any MCP tool, the heatmap table records the access. Four access types are tracked:
52
+
53
+ - **search** — The aspect was found via `paradigm_aspect_search`
54
+ - **ripple** — The aspect was encountered during `paradigm_ripple` traversal
55
+ - **navigate** — The aspect was discovered via `paradigm_navigate`
56
+ - **direct** — The aspect was accessed by ID via `paradigm_aspect_get`
57
+
58
+ The heatmap serves two purposes. First, it powers the `paradigm_aspect_heatmap` tool, which ranks aspects by access frequency and reveals usage patterns. Second, it provides data for project health analysis — aspects that are never accessed may be stale or poorly named, while aspects accessed frequently across multiple types are clearly central to the project.
59
+
60
+ ## Materialization Pipeline
61
+
62
+ The aspect graph is rebuilt during `paradigm_reindex` through a five-step pipeline:
63
+
64
+ 1. **openAspectGraph** — Opens (or creates) the SQLite database at `.paradigm/aspect-graph.db`. If the database exists, all tables are cleared for a fresh rebuild. This ensures the graph always reflects the current state of YAML files.
65
+
66
+ 2. **materializeAspects** — Reads all `.purpose` files, extracts aspect definitions, and writes them to the `aspects`, `anchors`, and `edges` tables. For each anchor, the pipeline reads the actual source code at the specified line range and computes a SHA-256 content hash. Explicit edges from the YAML `edges` field are written with origin `explicit` and weight 1.0. Inferred edges from `applies-to` references are written with origin `inferred` and weight 0.5.
67
+
68
+ 3. **materializeLoreLinks** — Reads the `lore` field from each aspect and creates entries in the `lore_links` table connecting aspects to their referenced lore entries.
69
+
70
+ 4. **inferLoreEdges** — Scans the `lore_links` table for aspects that share lore references. When two aspects both reference the same lore entry, a learned edge is created between them with origin `learned` and a weight proportional to the number of shared references. This discovers implicit relationships that were not explicitly declared.
71
+
72
+ 5. **closeAspectGraph** — Commits all changes, runs ANALYZE for query optimization, and closes the database connection.
73
+
74
+ Because the entire graph is rebuilt from YAML on every reindex, there is no migration or versioning concern. If the schema changes in a future Paradigm version, the next reindex simply creates the new schema.
75
+
76
+ ## Category Inference
77
+
78
+ When an aspect definition omits the `category` field, the materialization pipeline attempts to infer it from the description using keyword matching:
79
+
80
+ - Descriptions containing "must", "always", "never", "required" suggest `rule`
81
+ - Descriptions containing "decided", "chosen", "selected", "opted" suggest `decision`
82
+ - Descriptions containing "limit", "maximum", "minimum", "cannot exceed" suggest `constraint`
83
+ - Descriptions containing "configured", "set to", "defaults to", "environment" suggest `configuration`
84
+ - Descriptions containing "always true", "never negative", "invariant", "guarantee" suggest `invariant`
85
+
86
+ Similarly, severity can be inferred from tags: aspects tagged `[critical]` or `[security]` default to `high` severity, aspects tagged `[compliance]` default to `critical`, and untagged aspects default to `medium`.
87
+
88
+ Inference is a fallback — explicit `category` and `severity` fields in YAML always take precedence.
89
+
90
+ ## Weight Decay in Search Learning
91
+
92
+ The search learning system uses a reinforcement model. When `paradigm_aspect_confirm` is called with a query and aspect ID:
93
+
94
+ 1. The selected result's weight for that query gets **+1.0** added to its current weight in the `search_weights` table. If no entry exists, one is created with weight 1.0.
95
+ 2. All other aspects that were previously returned for the same query get their weights multiplied by **0.95** (a 5% decay). This applies only to aspects that have existing `search_weights` entries for this query — it does not penalize aspects that were never returned for this query.
96
+
97
+ This mechanism is self-correcting. If result A is consistently confirmed for a query, its weight grows (1.0, 2.0, 3.0, ...) while alternatives decay (1.0, 0.95, 0.9025, ...). After enough confirmations, the learned mapping becomes dominant and Tier 1 returns it instantly. But if the user later confirms a different result B for the same query, B starts climbing while A begins decaying — the system adapts to changing preferences without requiring manual intervention.