@a-company/paradigm 5.37.11 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/dist/{accept-orchestration-SBZVK3H4.js → accept-orchestration-QQISPINV.js} +1 -1
  2. package/dist/add-UOR4INIV.js +8 -0
  3. package/dist/{agent-loader-RIVI6QPP.js → agent-loader-2WJHD46U.js} +1 -1
  4. package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-YKS2PQWO.js} +1 -1
  5. package/dist/{aggregate-W66DM3GA.js → aggregate-A5S5MTCC.js} +1 -1
  6. package/dist/{ambient-76YMUA5Q.js → ambient-BE3SQXNN.js} +1 -1
  7. package/dist/{ambient-WTLYUAQM.js → ambient-NVKQCW2A.js} +12 -12
  8. package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
  9. package/dist/{beacon-5QVYV5DF.js → beacon-QVUD3MGP.js} +1 -1
  10. package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
  11. package/dist/{chunk-SI6SV76D.js → chunk-3DZK54RU.js} +72 -19
  12. package/dist/{chunk-CHVQNRRT.js → chunk-4PSD5R7N.js} +2 -2
  13. package/dist/chunk-6SKSV5B2.js +24 -0
  14. package/dist/{chunk-KFNHCQ4R.js → chunk-FEYOQMZ5.js} +1 -1
  15. package/dist/{chunk-NEJ4ZLCY.js → chunk-GAFKOFAV.js} +1 -1
  16. package/dist/chunk-GRZQIKST.js +2 -0
  17. package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
  18. package/dist/chunk-LPBCQM5Y.js +6 -0
  19. package/dist/{chunk-T6IDXUUA.js → chunk-LWAIVOSF.js} +1 -1
  20. package/dist/{chunk-74SGKSRQ.js → chunk-M2HKWR25.js} +1 -1
  21. package/dist/{chunk-BOYQAMGC.js → chunk-M3PPXJU4.js} +1 -1
  22. package/dist/chunk-PHEX6LU4.js +111 -0
  23. package/dist/chunk-Q527BPUF.js +2 -0
  24. package/dist/chunk-R5ECMBIV.js +11 -0
  25. package/dist/{chunk-X3U3IGYT.js → chunk-TBWWFRL5.js} +1 -1
  26. package/dist/{chunk-MQIG6SMF.js → chunk-TNVWGPCE.js} +1 -1
  27. package/dist/{chunk-SUU6M4JH.js → chunk-TOYQ2QCB.js} +1 -1
  28. package/dist/chunk-TZDYIPVU.js +521 -0
  29. package/dist/{chunk-3XGNXXCT.js → chunk-UZ5H7K6Q.js} +1 -1
  30. package/dist/chunk-VIG5LSGZ.js +2 -0
  31. package/dist/chunk-VNIX5KBT.js +3 -0
  32. package/dist/{chunk-AGFPVSX5.js → chunk-VXIIVMTM.js} +1 -1
  33. package/dist/{chunk-ORDKEGII.js → chunk-WESTEMIM.js} +1 -1
  34. package/dist/{chunk-LBQBWIEX.js → chunk-Y4P4SGZV.js} +1 -1
  35. package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
  36. package/dist/chunk-Z5QW6USC.js +2 -0
  37. package/dist/chunk-ZJQY5PPP.js +7 -0
  38. package/dist/{commands-LMUD5L6R.js → commands-ANRJNG2W.js} +1 -1
  39. package/dist/compliance-BNFWQPKM.js +6 -0
  40. package/dist/config-schema-FLHRVZMI.js +2 -0
  41. package/dist/{constellation-CG7C4WFE.js → constellation-NWLXYATA.js} +1 -1
  42. package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
  43. package/dist/{cost-IDNVMAEV.js → cost-24UZSS2P.js} +1 -1
  44. package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
  45. package/dist/decision-loader-HELL2AMX.js +2 -0
  46. package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
  47. package/dist/{diff-JVEYCXUC.js → diff-MF55KQZH.js} +1 -1
  48. package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
  49. package/dist/dist-JZZJLVMR.js +2 -0
  50. package/dist/{dist-3ZCH25SG.js → dist-OG6MM4VY.js} +1 -1
  51. package/dist/dist-SE67SOXB.js +2 -0
  52. package/dist/{docs-USDAF26F.js → docs-O37YLLRN.js} +1 -1
  53. package/dist/doctor-IG5XM4C4.js +2 -0
  54. package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
  55. package/dist/{flow-POQP27WA.js → flow-BGXOVE2V.js} +1 -1
  56. package/dist/{hooks-IG2GOAHP.js → hooks-TFMMMB2H.js} +1 -1
  57. package/dist/index.js +6 -6
  58. package/dist/init-M44SO65G.js +2 -0
  59. package/dist/init-V4KSEKPK.js +2 -0
  60. package/dist/{integrity-UYDOOJDP.js → integrity-ROO3G43N.js} +1 -1
  61. package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
  62. package/dist/list-CFHINXIS.js +12 -0
  63. package/dist/lore-loader-D2ISOASW.js +2 -0
  64. package/dist/lore-loader-PXFKMKAN.js +2 -0
  65. package/dist/mcp.js +19 -11
  66. package/dist/metrics-UESGUHTA.js +2 -0
  67. package/dist/{migrate-IBDE7VK4.js → migrate-Z5UQN57G.js} +1 -1
  68. package/dist/migrate-assessments-YSITX7KM.js +4 -0
  69. package/dist/migrate-decisions-NPLQOEEH.js +6 -0
  70. package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
  71. package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-QPZJH6XO.js} +1 -1
  72. package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
  73. package/dist/{orchestrate-RCAMBOIB.js → orchestrate-RID7HHHH.js} +1 -1
  74. package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
  75. package/dist/portal-check-DV2VSJ5E.js +8 -0
  76. package/dist/{portal-compliance-4MG5F2GI.js → portal-compliance-JONQ4SOP.js} +1 -1
  77. package/dist/{probe-B22G2JKF.js → probe-5HAXULAD.js} +1 -1
  78. package/dist/{providers-AWA7WLLM.js → providers-4PXMWA7V.js} +1 -1
  79. package/dist/quiz-WYIZJG5K.js +10 -0
  80. package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
  81. package/dist/reindex-FWPD2VGM.js +2 -0
  82. package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
  83. package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
  84. package/dist/{review-6UAH6V3R.js → review-VMSX2PKI.js} +1 -1
  85. package/dist/{ripple-ZGDITCGB.js → ripple-FNZI47SH.js} +1 -1
  86. package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
  87. package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
  88. package/dist/sentinel.js +1 -1
  89. package/dist/{serve-U47GULB6.js → serve-MO35XIZE.js} +1 -1
  90. package/dist/serve-OQYUO7CR.js +12 -0
  91. package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
  92. package/dist/server-FGUL2FWQ.js +7 -0
  93. package/dist/session-tracker-KGORN6B5.js +2 -0
  94. package/dist/{session-work-log-PAKXOFGL.js → session-work-log-4IEVE4KK.js} +1 -1
  95. package/dist/{session-work-log-ZP45TREI.js → session-work-log-EE4UIZ33.js} +1 -1
  96. package/dist/{setup-3F5IK7MO.js → setup-ZSEC72BS.js} +2 -2
  97. package/dist/{shift-FDADESC4.js → shift-TVNY2CQF.js} +6 -6
  98. package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
  99. package/dist/show-WVHAL4VU.js +7 -0
  100. package/dist/{snapshot-L2G56RPL.js → snapshot-3IYB67D4.js} +1 -1
  101. package/dist/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
  102. package/dist/{status-77M3SDIF.js → status-DB3KNLW3.js} +1 -1
  103. package/dist/status-S7Z5FVIE.js +6 -0
  104. package/dist/{summary-LXLHFRN7.js → summary-WLI3NF4G.js} +2 -2
  105. package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
  106. package/dist/sync-55U6QPIA.js +2 -0
  107. package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
  108. package/dist/team-MGT66HZQ.js +2 -0
  109. package/dist/{test-BQJMS4Y2.js → test-WLEPZQFC.js} +1 -1
  110. package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
  111. package/dist/tools-QJHAVYI6.js +2 -0
  112. package/dist/university-content/notes/N-para-001-build-something.md +126 -0
  113. package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
  114. package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
  115. package/dist/university-content/notes/N-para-101-component-types.md +99 -0
  116. package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
  117. package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
  118. package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
  119. package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
  120. package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
  121. package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
  122. package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
  123. package/dist/university-content/notes/N-para-101-welcome.md +51 -0
  124. package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
  125. package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
  126. package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
  127. package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
  128. package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
  129. package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
  130. package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
  131. package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
  132. package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
  133. package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
  134. package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
  135. package/dist/university-content/notes/N-para-301-context-management.md +53 -0
  136. package/dist/university-content/notes/N-para-301-decisions.md +99 -0
  137. package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
  138. package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
  139. package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
  140. package/dist/university-content/notes/N-para-301-history-system.md +42 -0
  141. package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
  142. package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
  143. package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
  144. package/dist/university-content/notes/N-para-301-protocols.md +113 -0
  145. package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
  146. package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
  147. package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
  148. package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
  149. package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
  150. package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
  151. package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
  152. package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
  153. package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
  154. package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
  155. package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
  156. package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
  157. package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
  158. package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
  159. package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
  160. package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
  161. package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
  162. package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
  163. package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
  164. package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
  165. package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
  166. package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
  167. package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
  168. package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
  169. package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
  170. package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
  171. package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
  172. package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
  173. package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
  174. package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
  175. package/dist/university-content/notes/N-para-501-task-management.md +100 -0
  176. package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
  177. package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
  178. package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
  179. package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
  180. package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
  181. package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
  182. package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
  183. package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
  184. package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
  185. package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
  186. package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
  187. package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
  188. package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
  189. package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
  190. package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
  191. package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
  192. package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
  193. package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
  194. package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
  195. package/dist/university-content/paths/LP-para-001.yaml +29 -0
  196. package/dist/university-content/paths/LP-para-101.yaml +59 -0
  197. package/dist/university-content/paths/LP-para-201.yaml +69 -0
  198. package/dist/university-content/paths/LP-para-301.yaml +84 -0
  199. package/dist/university-content/paths/LP-para-401.yaml +74 -0
  200. package/dist/university-content/paths/LP-para-501.yaml +89 -0
  201. package/dist/university-content/paths/LP-para-601.yaml +59 -0
  202. package/dist/university-content/paths/LP-para-701.yaml +64 -0
  203. package/dist/university-content/quizzes/Q-para-001-build-something.yaml +46 -0
  204. package/dist/university-content/quizzes/Q-para-001-meet-the-team.yaml +46 -0
  205. package/dist/university-content/quizzes/Q-para-001-shift-setup.yaml +46 -0
  206. package/dist/university-content/quizzes/Q-para-101-component-types.yaml +46 -0
  207. package/dist/university-content/quizzes/Q-para-101-first-steps.yaml +56 -0
  208. package/dist/university-content/quizzes/Q-para-101-five-symbols.yaml +66 -0
  209. package/dist/university-content/quizzes/Q-para-101-paradigm-logger.yaml +56 -0
  210. package/dist/university-content/quizzes/Q-para-101-portal-yaml.yaml +56 -0
  211. package/dist/university-content/quizzes/Q-para-101-project-structure.yaml +66 -0
  212. package/dist/university-content/quizzes/Q-para-101-purpose-files.yaml +56 -0
  213. package/dist/university-content/quizzes/Q-para-101-tags-and-classification.yaml +56 -0
  214. package/dist/university-content/quizzes/Q-para-101-welcome.yaml +56 -0
  215. package/dist/university-content/quizzes/Q-para-201-architecture-review.yaml +66 -0
  216. package/dist/university-content/quizzes/Q-para-201-aspect-graph.yaml +46 -0
  217. package/dist/university-content/quizzes/Q-para-201-aspects-and-anchors.yaml +56 -0
  218. package/dist/university-content/quizzes/Q-para-201-component-patterns.yaml +56 -0
  219. package/dist/university-content/quizzes/Q-para-201-cross-cutting-concerns.yaml +56 -0
  220. package/dist/university-content/quizzes/Q-para-201-disciplines.yaml +66 -0
  221. package/dist/university-content/quizzes/Q-para-201-flows-deep-dive.yaml +66 -0
  222. package/dist/university-content/quizzes/Q-para-201-gates-deep-dive.yaml +66 -0
  223. package/dist/university-content/quizzes/Q-para-201-portal-protocol.yaml +56 -0
  224. package/dist/university-content/quizzes/Q-para-201-signal-patterns.yaml +56 -0
  225. package/dist/university-content/quizzes/Q-para-201-symbol-naming.yaml +66 -0
  226. package/dist/university-content/quizzes/Q-para-301-context-management.yaml +56 -0
  227. package/dist/university-content/quizzes/Q-para-301-decisions.yaml +76 -0
  228. package/dist/university-content/quizzes/Q-para-301-doctor-and-validation.yaml +66 -0
  229. package/dist/university-content/quizzes/Q-para-301-enforcement-levels.yaml +46 -0
  230. package/dist/university-content/quizzes/Q-para-301-fragility-tracking.yaml +46 -0
  231. package/dist/university-content/quizzes/Q-para-301-history-system.yaml +56 -0
  232. package/dist/university-content/quizzes/Q-para-301-navigation-system.yaml +56 -0
  233. package/dist/university-content/quizzes/Q-para-301-operations-review.yaml +66 -0
  234. package/dist/university-content/quizzes/Q-para-301-paradigm-shift.yaml +46 -0
  235. package/dist/university-content/quizzes/Q-para-301-protocols.yaml +56 -0
  236. package/dist/university-content/quizzes/Q-para-301-ripple-analysis.yaml +56 -0
  237. package/dist/university-content/quizzes/Q-para-301-sentinel-observability.yaml +46 -0
  238. package/dist/university-content/quizzes/Q-para-301-sync-and-maintenance.yaml +46 -0
  239. package/dist/university-content/quizzes/Q-para-301-wisdom-system.yaml +56 -0
  240. package/dist/university-content/quizzes/Q-para-401-agent-identity.yaml +66 -0
  241. package/dist/university-content/quizzes/Q-para-401-agent-interop.yaml +46 -0
  242. package/dist/university-content/quizzes/Q-para-401-agent-roles.yaml +56 -0
  243. package/dist/university-content/quizzes/Q-para-401-commit-conventions.yaml +56 -0
  244. package/dist/university-content/quizzes/Q-para-401-mastery-review.yaml +66 -0
  245. package/dist/university-content/quizzes/Q-para-401-mcp-tools-overview.yaml +66 -0
  246. package/dist/university-content/quizzes/Q-para-401-multi-agent-coordination.yaml +76 -0
  247. package/dist/university-content/quizzes/Q-para-401-notebooks-permissions.yaml +61 -0
  248. package/dist/university-content/quizzes/Q-para-401-orchestration-workflow.yaml +66 -0
  249. package/dist/university-content/quizzes/Q-para-401-pm-governance.yaml +66 -0
  250. package/dist/university-content/quizzes/Q-para-401-provider-cascade.yaml +56 -0
  251. package/dist/university-content/quizzes/Q-para-401-quick-check.yaml +46 -0
  252. package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
  253. package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
  254. package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
  255. package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
  256. package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
  257. package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
  258. package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
  259. package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
  260. package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
  261. package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
  262. package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
  263. package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
  264. package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
  265. package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
  266. package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
  267. package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
  268. package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
  269. package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
  270. package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
  271. package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
  272. package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
  273. package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
  274. package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
  275. package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
  276. package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
  277. package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
  278. package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
  279. package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
  280. package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
  281. package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
  282. package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
  283. package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
  284. package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
  285. package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
  286. package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
  287. package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
  288. package/dist/university-content/reference.json +2 -2
  289. package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
  290. package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
  291. package/dist/university-ui/index.html +1 -1
  292. package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
  293. package/dist/{validate-VZXTJHGO.js → validate-BB6LRWIY.js} +1 -1
  294. package/dist/validate-XUQZTF3H.js +9 -0
  295. package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
  296. package/dist/workspace-VMSPYIBV.js +2 -0
  297. package/lore-ui/dist/assets/{index-Bk-K0qgN.js → index-DKhNxgtW.js} +10 -10
  298. package/lore-ui/dist/index.html +1 -1
  299. package/package.json +3 -2
  300. package/platform-ui/dist/assets/{AmbientSection-BYjt75R1.js → AmbientSection-CwatqcBD.js} +1 -1
  301. package/platform-ui/dist/assets/{CanvasSection-rKvA_vZj.js → CanvasSection-dFAthehN.js} +1 -1
  302. package/platform-ui/dist/assets/{DocsSection-CI9K73M-.js → DocsSection-BZ2SFJBZ.js} +1 -1
  303. package/platform-ui/dist/assets/{GitSection-DSGj_c6S.js → GitSection-MNNYU1tO.js} +1 -1
  304. package/platform-ui/dist/assets/{GraphSection-CawN7pC5.js → GraphSection-COYjb4Pt.js} +1 -1
  305. package/platform-ui/dist/assets/LoreSection-B0hUbfsJ.js +1 -0
  306. package/platform-ui/dist/assets/{SentinelSection-DNgoYMH0.js → SentinelSection-BCxW1DCp.js} +1 -1
  307. package/platform-ui/dist/assets/{SymphonySection-C0zfcqv3.js → SymphonySection-BsucZRqy.js} +1 -1
  308. package/platform-ui/dist/assets/{TeamSection-Bzd3Dt9Q.js → TeamSection-C0QNTudW.js} +1 -1
  309. package/platform-ui/dist/assets/{UniversitySection-tBr62R0S.js → UniversitySection-DN1-g9pw.js} +1 -1
  310. package/platform-ui/dist/assets/{index-BaOmyn11.js → index-DwUT8pju.js} +2 -2
  311. package/platform-ui/dist/index.html +1 -1
  312. package/templates/paradigm/specs/symbols.md +4 -2
  313. package/dist/add-P76GEMGF.js +0 -8
  314. package/dist/chunk-3TR6LLXP.js +0 -111
  315. package/dist/chunk-G7XFK2GI.js +0 -11
  316. package/dist/chunk-J6KWGCHN.js +0 -24
  317. package/dist/chunk-JQKKVAAN.js +0 -2
  318. package/dist/chunk-ODVKPZZ4.js +0 -2
  319. package/dist/chunk-Q2J542ST.js +0 -2
  320. package/dist/chunk-QT2LKB3P.js +0 -7
  321. package/dist/chunk-SHD27BQX.js +0 -6
  322. package/dist/chunk-WS2N27RX.js +0 -3
  323. package/dist/chunk-YT52WLBF.js +0 -521
  324. package/dist/compliance-WJINB5DM.js +0 -6
  325. package/dist/config-schema-GUQY2QN7.js +0 -2
  326. package/dist/decision-loader-2XPZE4EZ.js +0 -2
  327. package/dist/dist-R3RWD35F.js +0 -2
  328. package/dist/dist-VXCZWVVJ.js +0 -2
  329. package/dist/doctor-QJ47XAUP.js +0 -2
  330. package/dist/init-HIBRSVUB.js +0 -2
  331. package/dist/list-5IUGP3ZB.js +0 -7
  332. package/dist/lore-loader-RVQI5GXL.js +0 -2
  333. package/dist/lore-loader-XY5MZRR2.js +0 -2
  334. package/dist/migrate-assessments-GEI5WMI2.js +0 -4
  335. package/dist/portal-check-Z3OCQEQR.js +0 -8
  336. package/dist/quiz-FE5UGAY2.js +0 -10
  337. package/dist/reindex-FO5VMZVQ.js +0 -2
  338. package/dist/serve-OY6XYL7F.js +0 -12
  339. package/dist/server-2MNROHF6.js +0 -7
  340. package/dist/session-tracker-MWJAJA6Z.js +0 -2
  341. package/dist/show-BOAVWZPZ.js +0 -7
  342. package/dist/status-A37ECYNJ.js +0 -6
  343. package/dist/sync-DLUBV5HQ.js +0 -2
  344. package/dist/team-NSP6PMPS.js +0 -2
  345. package/dist/tools-CERDNVCG.js +0 -2
  346. package/dist/university-content/courses/.purpose +0 -492
  347. package/dist/university-content/courses/para-001.json +0 -166
  348. package/dist/university-content/courses/para-101.json +0 -615
  349. package/dist/university-content/courses/para-201.json +0 -794
  350. package/dist/university-content/courses/para-301.json +0 -830
  351. package/dist/university-content/courses/para-401.json +0 -868
  352. package/dist/university-content/courses/para-501.json +0 -1166
  353. package/dist/university-content/courses/para-601.json +0 -719
  354. package/dist/university-content/courses/para-701.json +0 -807
  355. package/dist/university-content/plsat/.purpose +0 -162
  356. package/dist/university-content/plsat/v2.0.json +0 -760
  357. package/dist/university-content/plsat/v3.0.json +0 -3453
  358. package/dist/validate-C6SMKGYD.js +0 -9
  359. package/dist/workspace-MKSQN7B2.js +0 -2
  360. package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
  361. /package/dist/{chunk-BV5PRPLB.js → chunk-IZSBGW6E.js} +0 -0
  362. /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
@@ -0,0 +1,904 @@
1
+ id: Q-plsat-v2
2
+ title: The PLSAT — Paradigm Licensure Standardized Assessment Test
3
+ description: 50 questions. 45 minutes. 90% to pass. Good luck, scholar.
4
+ author: paradigm
5
+ created: '2026-04-22'
6
+ updated: '2026-04-22'
7
+ tags:
8
+ - plsat
9
+ - certification
10
+ symbols: []
11
+ difficulty: advanced
12
+ passThreshold: 0.9
13
+ timeLimit: 2700
14
+ exam:
15
+ kind: proctored
16
+ category: paradigm-core
17
+ origin: imported
18
+ source: plsat/v2.0.json
19
+ questions:
20
+ - id: plsat-001
21
+ scenario: You've just joined a team that uses Paradigm. You open the project and see directories like `.paradigm/`, several `.purpose` files, and a `portal.yaml` at the root. A colleague asks you to document a new utility function they wrote in `src/lib/format-currency.ts`.
22
+ question: Which symbol prefix should you use to document this utility?
23
+ choices:
24
+ A: '`$format-currency` — because it describes a process (formatting)'
25
+ B: '`!format-currency` — because it signals a transformation event'
26
+ C: '`#format-currency` — because it is a documented code unit'
27
+ D: '`~format-currency` — because it applies a rule (formatting rules)'
28
+ E: '`^format-currency` — because it gates what format is allowed'
29
+ correct: C
30
+ explanation: In Paradigm, every documented code unit uses the `#` (Component) symbol. There are only 5 operational symbols, and `#` is the universal prefix for any code unit — utilities, services, handlers, components, hooks, you name it. `$` is for multi-step flows, `!` for signals/events, `~` for aspects with code anchors, and `^` for condition gates. A simple utility function is a component.
31
+ section: para-101
32
+ - id: plsat-002
33
+ scenario: A component manages user authentication state — tracking the current user, login status, and session tokens. You need to document it in a `.purpose` file.
34
+ question: How should this component be documented in Paradigm?
35
+ choices:
36
+ A: '`#auth-state` with no tags — the component name is descriptive enough'
37
+ B: '`#auth-state` with `tags: [state]` — the `[state]` tag classifies its role'
38
+ C: '`!auth-state` — authentication state changes should be modeled as signals'
39
+ D: '`$auth-state` — state management is a multi-step flow'
40
+ E: '`~auth-state` — authentication state is a cross-cutting concern requiring an aspect'
41
+ correct: B
42
+ explanation: State management components use the `#` (Component) symbol with a `[state]` tag from the tag bank. Paradigm uses only 5 operational symbols for structure, and a tag bank for classification. The `[state]` tag tells humans and AI agents that this component's primary role is managing state, while `#` identifies it as a documented code unit. Signals (`!`) are for events, flows (`$`) are for multi-step processes, and aspects (`~`) are for enforced rules with code anchors.
43
+ section: para-101
44
+ - id: plsat-003
45
+ scenario: Your team is debating logging practices. One developer argues that using `console.log` everywhere is fine because logs are just for debugging. Another insists on using structured, symbol-aware logging with Paradigm's logger (e.g., `log.component('#checkout-service').info('Processing payment', { amount })`).
46
+ question: What is the STRONGEST argument for using Paradigm's structured logger over raw `console.log`?
47
+ choices:
48
+ A: Structured logging is faster at runtime than `console.log`
49
+ B: Paradigm's logger automatically fixes bugs when it detects errors in the logs
50
+ C: Symbol-aware logging connects runtime behavior to the documented architecture, making it possible to trace issues back to specific components, flows, and gates
51
+ D: Using `console.log` will cause Paradigm's CI checks to fail
52
+ E: Structured logging is required by law for production applications
53
+ correct: C
54
+ explanation: 'The core value of Paradigm''s structured logger is traceability: every log line is tagged with a symbol (`#component`, `^gate`, `!signal`, etc.), which means you can correlate runtime behavior with the architectural documentation. When something goes wrong, you can trace from the log back to the component in the `.purpose` file, understand its flows, check its gates, and review its history. Raw `console.log` loses this connection. Performance (A) is not the primary benefit. Paradigm doesn''t auto-fix bugs (B) or enforce logging by law (E). CI checks (D) depend on team configuration, not a universal rule.'
55
+ section: para-101
56
+ - id: plsat-004
57
+ scenario: You're setting up a brand new project with Paradigm. You run `paradigm shift` and it creates the `.paradigm/` directory structure. Your project will have a REST API with several endpoints that require condition checks — such as authentication, feature flags, and rate limiting.
58
+ question: Which file MUST you create at the project root?
59
+ choices:
60
+ A: '`auth.yaml` — Paradigm''s dedicated authentication config'
61
+ B: '`gates.yaml` — where all `^gate` definitions live'
62
+ C: '`portal.yaml` — where gates and protected routes are defined'
63
+ D: '`.paradigm/security.yaml` — security config goes in the paradigm directory'
64
+ E: No file needed — gates are defined inline in `.purpose` files only
65
+ correct: C
66
+ explanation: '`portal.yaml` is REQUIRED at the project root whenever your project has protected routes. It defines gates (`^` symbols) with their check expressions, and maps routes to the gates that protect them. Gates can represent any condition checkpoint — authentication, authorization, feature flags, rate limits, or custom business rules. Gates can also appear in `.purpose` files for documentation, but `portal.yaml` is the authoritative source for route protection.'
67
+ section: para-101
68
+ - id: plsat-005
69
+ scenario: |-
70
+ You find the following `.purpose` file in `src/payments/`:
71
+
72
+ ```yaml
73
+ name: Payments Module
74
+ description: Handles all payment processing
75
+ components:
76
+ #stripe-service:
77
+ description: Stripe API integration
78
+ file: stripe.ts
79
+ tags: [integration, stripe]
80
+ #payment-processor:
81
+ description: Core payment logic
82
+ file: processor.ts
83
+ signals: ["!payment-completed", "!payment-failed"]
84
+ ```
85
+ question: What is the correct way to reference `#stripe-service` from another `.purpose` file in a different directory?
86
+ choices:
87
+ A: '`payments/#stripe-service` — use the directory path as a namespace'
88
+ B: '`#stripe-service` — symbol IDs are globally unique across the project'
89
+ C: '`&stripe-service` — integrations use the `&` prefix when cross-referenced'
90
+ D: '`#payments.stripe-service` — use dot notation for cross-module references'
91
+ E: '`import: #stripe-service from payments` — use import syntax'
92
+ correct: B
93
+ explanation: Symbol IDs are globally unique across the entire Paradigm project. You reference `#stripe-service` the same way everywhere — no namespacing, no path prefixes, no import syntax. Paradigm's index (built by `paradigm scan`) tracks where each symbol is defined. If you have naming conflicts, use more specific names (e.g., `#payments-stripe-service`). The convention is kebab-case for all symbol IDs.
94
+ section: para-101
95
+ - id: plsat-006
96
+ scenario: |-
97
+ Your team uses the following directory structure:
98
+
99
+ ```
100
+ src/
101
+ middleware/auth.ts
102
+ events/payment-events.ts
103
+ services/billing.ts
104
+ flows/onboarding.ts
105
+ aspects/rate-limiter.ts
106
+ ```
107
+
108
+ A new developer asks which Paradigm logger method to use in each file. Your team follows the conventional directory-to-symbol mapping as a guideline.
109
+ question: Which file-to-logger mapping is INCORRECT?
110
+ choices:
111
+ A: '`middleware/auth.ts` → `log.gate(''^auth-check'')`'
112
+ B: '`events/payment-events.ts` → `log.signal(''!payment-received'')`'
113
+ C: '`services/billing.ts` → `log.component(''#billing-service'')`'
114
+ D: '`flows/onboarding.ts` → `log.signal(''!onboarding-started'')`'
115
+ E: '`aspects/rate-limiter.ts` → `log.aspect(''~rate-limited'')`'
116
+ correct: D
117
+ explanation: 'Files in the `flows/` directory conventionally correspond to `$` (Flow) symbols and should use `log.flow()`, not `log.signal()`. The correct call would be `log.flow(''$onboarding'').info(...)`. The conventional directory-to-symbol mapping is: middleware/auth/guards → `^` (gate), events/handlers/listeners → `!` (signal), services/lib/components → `#` (component), flows/sagas/workflows → `$` (flow), aspects/rules → `~` (aspect). While teams may adapt these conventions to their needs, this mapping provides a consistent default that helps developers and AI agents reason about the codebase.'
118
+ section: para-101
119
+ - id: plsat-007
120
+ scenario: Your team is prototyping a new feature — an experimental search widget that may or may not ship. You've built the component and want to document it in a `.purpose` file. You also want to make it clear to other developers and AI agents that this is an idea in progress, not a committed part of the product.
121
+ question: How should you classify this component to indicate it is experimental?
122
+ choices:
123
+ A: Use a special `?experimental-widget` symbol prefix reserved for ideas
124
+ B: 'Add `status: experimental` to the component definition'
125
+ C: 'Add the `[idea]` tag to the component: `tags: [idea]`'
126
+ D: Create an aspect `~experimental` and apply it to the component
127
+ E: Comment it out in the `.purpose` file with `# EXPERIMENTAL`
128
+ correct: C
129
+ explanation: 'Paradigm''s tag bank includes the `[idea]` tag for exactly this purpose. You''d define the component as `#experimental-widget` with `tags: [idea]`. Tags are the classification layer in Paradigm: the 5 operational symbols (`#`, `$`, `^`, `!`, `~`) provide structure, while tags from the tag bank provide classification metadata like `[idea]`, `[feature]`, `[state]`, `[integration]`, `[critical]`, etc. Choice B (status field) is plausible but `status` is typically for lifecycle states like `active` or `deprecated`, not for ideation. There is no `?` symbol prefix in Paradigm (A). Commenting it out (E) removes it from the symbol graph entirely.'
130
+ section: para-101
131
+ - id: plsat-008
132
+ scenario: 'A `.paradigm/tags.yaml` file has three sections: `core`, `project`, and `suggested`. The `core` section contains tags like `[feature]`, `[integration]`, `[state]`, `[critical]`, and `[security]`.'
133
+ question: What is the `suggested` section for?
134
+ choices:
135
+ A: Tags that Paradigm automatically generates based on code analysis
136
+ B: Tags proposed by AI agents awaiting human approval before use
137
+ C: Tags from the Paradigm community marketplace that can be installed
138
+ D: Tags that are deprecated and will be removed in the next version
139
+ E: Tags that the framework suggests but are optional to implement
140
+ correct: B
141
+ explanation: 'The `suggested` section in `tags.yaml` holds tags proposed by AI agents (via `paradigm_tags_suggest`) that haven''t been approved by a human yet. This is part of Paradigm''s governance model: AI can propose new classifications, but a human must promote them to `project` or `core` before they become official. This prevents tag sprawl and keeps the taxonomy intentional. The `core` tags ship with Paradigm, `project` tags are team-defined, and `suggested` are AI proposals awaiting review.'
142
+ section: para-101
143
+ - id: plsat-009
144
+ scenario: |-
145
+ You're reading a project's `.paradigm/config.yaml` and see:
146
+
147
+ ```yaml
148
+ discipline: fullstack
149
+ conventions:
150
+ naming: kebab-case
151
+ components: PascalCase
152
+ ```
153
+ question: Based on these conventions, which symbol ID is correctly formatted?
154
+ choices:
155
+ A: '`#paymentService` — camelCase for services'
156
+ B: '`#payment-service` — kebab-case for IDs, PascalCase for class-like references'
157
+ C: '`#Payment_Service` — PascalCase with underscores'
158
+ D: '`#PAYMENT_SERVICE` — SCREAMING_SNAKE for services'
159
+ E: '`#payment.service` — dot notation for namespaced components'
160
+ correct: B
161
+ explanation: 'Paradigm conventions specify kebab-case for all symbol IDs. The `components: PascalCase` convention means that when referring to class-like components in prose or code, you use PascalCase (e.g., `#PaymentService`), but the canonical ID in `.purpose` files is kebab-case (`#payment-service`). This dual convention is documented in the CLAUDE.md: ''Use kebab-case for all symbol IDs'' and ''Use PascalCase for class-like components''.'
162
+ section: para-101
163
+ - id: plsat-010
164
+ scenario: |-
165
+ A team member creates a new `.purpose` file for their notification system:
166
+
167
+ ```yaml
168
+ name: Notifications
169
+ components:
170
+ #email-sender:
171
+ description: Sends transactional emails
172
+ file: email.ts
173
+ #push-notifier:
174
+ description: Sends push notifications
175
+ file: push.ts
176
+ signals:
177
+ !notification-sent:
178
+ description: Fires after any notification is delivered
179
+ emitters: ["#email-sender", "#push-notifier"]
180
+ ```
181
+ question: This `.purpose` file is missing a critical top-level field. What is it?
182
+ choices:
183
+ A: '`version` — every purpose file must specify a schema version'
184
+ B: '`description` — every purpose file should describe what the module does'
185
+ C: '`tags` — top-level tags are required for indexing'
186
+ D: '`gates` — every module must define its authorization requirements'
187
+ E: '`flows` — signals require at least one flow to be meaningful'
188
+ correct: B
189
+ explanation: Every `.purpose` file should have a `description` field explaining what the module/directory does. While `name` identifies it, `description` provides the context that AI agents and developers need to understand the module's role. The `paradigm_purpose_init` tool requires both `name` and `description` conceptually, and `paradigm doctor` will flag purpose files missing descriptions. Tags, gates, and flows are optional depending on the module's nature. Version is handled at the framework level, not per-file.
190
+ section: para-101
191
+ - id: plsat-011
192
+ scenario: 'You''re designing an e-commerce checkout process that involves: (1) validating the cart, (2) checking inventory, (3) processing payment via Stripe, (4) creating the order record, and (5) sending a confirmation email. This spans 5 different components across 3 directories.'
193
+ question: How should this be documented in Paradigm?
194
+ choices:
195
+ A: As a single `#checkout` component with sub-steps in its description
196
+ B: As a `$checkout-flow` with ordered steps referencing each component
197
+ C: As five separate `!` signals chained together
198
+ D: As a `~checkout-required` aspect applied to all five components
199
+ E: As five `^` gates that must be passed sequentially
200
+ correct: B
201
+ explanation: 'A multi-step process spanning 3+ components is the textbook definition of a Flow (`$`). You''d define `$checkout-flow` with ordered steps, each referencing the responsible component and action: `#cart-validator` validates, `#inventory-checker` checks stock, `#stripe-service` processes payment, `#order-service` creates the record, `#email-sender` confirms. Flows document the sequence and make it visible to `paradigm_flows_affected` for impact analysis. Signals (`!`) may be emitted during the flow, but they don''t define the sequence.'
202
+ section: para-201
203
+ - id: plsat-012
204
+ scenario: |-
205
+ Your `portal.yaml` defines these gates:
206
+
207
+ ```yaml
208
+ gates:
209
+ ^authenticated:
210
+ description: User must be logged in
211
+ check: req.user != null
212
+ ^project-admin:
213
+ description: User must be admin of the project
214
+ check: project.admins.includes(req.user.id)
215
+ requires: ["^authenticated"]
216
+ ```
217
+
218
+ A new endpoint `DELETE /api/projects/:id` needs to be added. Only project admins should be able to delete projects.
219
+ question: What is the correct route entry in `portal.yaml`?
220
+ choices:
221
+ A: '`"DELETE /api/projects/:id": [^authenticated, ^project-admin]`'
222
+ B: '`"DELETE /api/projects/:id": [^project-admin]`'
223
+ C: '`"DELETE /api/projects/:id": [^authenticated]`'
224
+ D: '`"DELETE /api/projects/:id": [^project-admin, ^authenticated]`'
225
+ E: '`"DELETE /api/projects/:id": [^admin]`'
226
+ correct: B
227
+ explanation: 'Since `^project-admin` already has `requires: ["^authenticated"]`, listing `^authenticated` in the route is redundant. The gate dependency chain means `^project-admin` will automatically enforce `^authenticated` first. The route only needs to specify `[^project-admin]`. Choice A technically works (it''s not wrong per se), but it''s redundant and violates the DRY principle. Choice D reverses the order, which could cause confusion about evaluation sequence. Choice E references a gate that doesn''t exist in the portal.'
228
+ section: para-201
229
+ - id: plsat-013
230
+ scenario: |-
231
+ A developer defines the following aspect:
232
+
233
+ ```yaml
234
+ aspects:
235
+ ~audit-required:
236
+ description: All financial operations must be logged
237
+ tags: [compliance, security]
238
+ applies-to: ["#*Service"]
239
+ ```
240
+
241
+ They run `paradigm doctor` and get a validation error.
242
+ question: What is missing from this aspect definition?
243
+ choices:
244
+ A: The `enforcement` field specifying how the aspect is enforced
245
+ B: The `anchors` field pointing to the actual enforcement code
246
+ C: The `severity` field indicating how critical the aspect is
247
+ D: The `gates` field linking the aspect to authorization checks
248
+ E: The `signals` field for emitting audit events
249
+ correct: B
250
+ explanation: 'Aspects (`~`) MUST have code anchors. This is a hard rule in Paradigm: no unanchored aspects allowed. Anchors point to the actual lines of code where the aspect is enforced (e.g., `src/middleware/audit.ts:15-35`). Without anchors, the aspect is just documentation with no verifiable link to implementation. `paradigm doctor` and `paradigm_aspect_check` will both flag unanchored aspects. The anchor format supports single lines (`file.ts:15`), ranges (`file.ts:15-20`), and multiple lines (`file.ts:15,25,30`).'
251
+ section: para-201
252
+ - id: plsat-014
253
+ scenario: 'You''re implementing a webhook handler that receives events from a third-party payment provider. When a payment succeeds, your system needs to: update the order status, send a receipt email, and notify the analytics service. These are independent side effects that don''t need to happen in order.'
254
+ question: What is the MOST appropriate Paradigm modeling for these independent side effects?
255
+ choices:
256
+ A: A `$payment-webhook-flow` with three sequential steps
257
+ B: A `!payment-succeeded` signal with three subscriber components
258
+ C: Three separate `^` gates that the webhook must pass
259
+ D: A `~payment-side-effects` aspect applied to the webhook handler
260
+ E: Three `#` components with no formal connection between them
261
+ correct: B
262
+ explanation: When side effects are independent and don't require ordering, a Signal (`!`) is the right model. You define `!payment-succeeded` and document three subscriber components (`#order-service`, `#email-sender`, `#analytics-tracker`) that react to it. Signals are for events that trigger side effects. A Flow (`$`) would be appropriate if the steps needed to happen in a specific order or if one step depended on the output of another. Gates (`^`) are for condition checks, not business logic.
263
+ section: para-201
264
+ - id: plsat-015
265
+ scenario: 'Your project''s discipline is `fullstack`. You''re adding a new feature: team invitations. The feature involves a UI component for the invite form, an API endpoint, a service for generating invite tokens, and an email sender. You create a new directory `src/features/team-invites/`.'
266
+ question: What should the `.purpose` file in this directory contain at minimum?
267
+ choices:
268
+ A: Just a `name` field — Paradigm will auto-discover the rest
269
+ B: A `name`, `description`, and at least one `#component` entry
270
+ C: A full `$flow` definition with all steps documented
271
+ D: Gate definitions (`^`) for all protected endpoints in this feature
272
+ E: Signal definitions (`!`) for all events this feature emits
273
+ correct: B
274
+ explanation: At minimum, a `.purpose` file needs a `name` and `description` (to orient agents and developers) and at least one `#component` documenting a code unit. Gates go in `portal.yaml` (the authoritative source for route protection), not in purpose files. Flows and signals are important but not required for every feature — they should be added when the feature has multi-step processes or emits events. Paradigm does not auto-discover components; they must be explicitly documented.
275
+ section: para-201
276
+ - id: plsat-016
277
+ scenario: |-
278
+ You're looking at a `portal.yaml` with this route mapping:
279
+
280
+ ```yaml
281
+ routes:
282
+ "GET /api/projects": [^authenticated]
283
+ "POST /api/projects": [^authenticated]
284
+ "GET /api/projects/:id": [^authenticated, ^project-member]
285
+ "PUT /api/projects/:id": [^authenticated, ^project-admin]
286
+ "DELETE /api/projects/:id": [^authenticated, ^project-admin]
287
+ "POST /api/projects/:id/comments": [^authenticated, ^project-member]
288
+ ```
289
+
290
+ A colleague adds a new endpoint: `DELETE /api/projects/:id/comments/:commentId`. Only the comment author should be able to delete their own comment.
291
+ question: Which gate configuration follows Paradigm best practices?
292
+ choices:
293
+ A: Add `[^authenticated, ^project-admin]` — admins can delete anything
294
+ B: Add `[^authenticated, ^project-member, ^comment-author]` — must be a member AND the author
295
+ C: Add `[^comment-author]` — authorship implies authentication and membership
296
+ D: Add `[^authenticated, ^comment-author]` — logged in and owns the comment
297
+ E: Don't add it to portal.yaml — handle it in the route handler code only
298
+ correct: B
299
+ explanation: 'The correct approach is `[^authenticated, ^project-member, ^comment-author]`. Being the comment author doesn''t automatically mean you''re authenticated or a project member (the comment could be from before you were removed). Each gate has one responsibility: `^authenticated` checks login, `^project-member` checks project access, `^comment-author` checks ownership. If `^comment-author` had `requires: [^authenticated, ^project-member]`, then just `[^comment-author]` would suffice. But without explicit requires, list all gates. Choice E violates the cardinal rule: all protected routes MUST be in portal.yaml.'
300
+ section: para-201
301
+ - id: plsat-017
302
+ scenario: |-
303
+ Your team defines the following flow:
304
+
305
+ ```yaml
306
+ flows:
307
+ $user-onboarding:
308
+ description: New user setup after registration
309
+ steps:
310
+ - component: "#email-verifier"
311
+ action: send-verification-email
312
+ - component: "#profile-wizard"
313
+ action: collect-profile-data
314
+ - component: "#team-assigner"
315
+ action: assign-default-team
316
+ - component: "#welcome-emailer"
317
+ action: send-welcome-email
318
+ signals: ["!user-onboarded"]
319
+ ```
320
+
321
+ You need to modify `#email-verifier` to use a new email provider.
322
+ question: Before making the code change, what should you do FIRST?
323
+ choices:
324
+ A: Run `paradigm_search` to find all references to `#email-verifier`
325
+ B: Read the `#email-verifier` source file to understand the current implementation
326
+ C: Call `paradigm_ripple` on `#email-verifier` to understand the impact
327
+ D: Call `paradigm_orchestrate_inline` to plan the migration
328
+ E: Update the `.purpose` file first to reflect the new provider
329
+ correct: C
330
+ explanation: Before modifying ANY symbol, the first step is always `paradigm_ripple`. This shows you what depends on `#email-verifier` directly and indirectly — in this case, you'd discover it's part of `$user-onboarding` and any other flows or components that reference it. This prevents you from making changes that break downstream dependencies. After ripple analysis, you'd read the source (B), check wisdom/history, and then implement. Orchestration (D) is for complex multi-file tasks, not single-component changes.
331
+ section: para-201
332
+ - id: plsat-018
333
+ scenario: You're defining a gate for a multi-tenant SaaS application. Users can belong to multiple organizations, and each organization has its own resources. You need a gate that checks whether the requesting user is a member of the organization that owns the requested resource.
334
+ question: Which gate definition follows the Paradigm portal pattern?
335
+ choices:
336
+ A: |-
337
+ ```yaml
338
+ ^org-member:
339
+ description: User is a member of the organization AND has read permission
340
+ check: org.members.includes(req.user.id) && req.user.permissions.read
341
+ ```
342
+ B: |-
343
+ ```yaml
344
+ ^org-member:
345
+ description: User is a member of the resource's organization
346
+ check: org.members.includes(req.user.id)
347
+ ```
348
+ C: |-
349
+ ```yaml
350
+ ^org-access:
351
+ description: User can access organization resources with full CRUD
352
+ check: org.members.includes(req.user.id) && req.user.role !== 'viewer'
353
+ ```
354
+ D: |-
355
+ ```yaml
356
+ ^resource-check:
357
+ description: Validates resource exists and user has access
358
+ check: resource != null && org.members.includes(req.user.id)
359
+ ```
360
+ E: |-
361
+ ```yaml
362
+ ^member-or-admin:
363
+ description: User is either a member or an admin of the organization
364
+ check: org.members.includes(req.user.id) || org.admins.includes(req.user.id)
365
+ ```
366
+ correct: B
367
+ explanation: 'Paradigm''s gate philosophy is ''one responsibility per gate.'' Choice B does exactly one thing: checks organization membership. Choice A bundles membership with permissions (two responsibilities). Choice C adds a role check. Choice D validates resource existence (that''s a different concern). Choice E conflates membership and admin roles. If you need permission checks, create `^org-reader`, `^org-writer` as separate gates with `requires: ["^org-member"]`. Keep gates minimal and composable.'
368
+ section: para-201
369
+ - id: plsat-019
370
+ scenario: |-
371
+ A developer has documented the following in `aspects/`:
372
+
373
+ ```yaml
374
+ aspects:
375
+ ~rate-limited:
376
+ description: API endpoints are rate-limited per user
377
+ tags: [security, performance]
378
+ anchors:
379
+ - src/middleware/rate-limiter.ts:12-45
380
+ applies-to: ["#*-handler"]
381
+ enforcement: middleware
382
+ ```
383
+
384
+ The `applies-to` pattern `#*-handler` uses a glob. The developer asks if the aspect will automatically apply rate limiting to all matching components.
385
+ question: What is the correct understanding of `applies-to` in an aspect?
386
+ choices:
387
+ A: It automatically applies the middleware to all matching components at runtime
388
+ B: It generates rate-limiting code for each matching component during build
389
+ C: It is a documentation hint — tells humans/AI which components SHOULD have this aspect, but doesn't enforce it
390
+ D: It creates a compile-time check that all matching components import the rate limiter
391
+ E: It registers the components with the rate-limiter middleware automatically on server startup
392
+ correct: C
393
+ explanation: Paradigm is a documentation and intelligence framework, not a runtime. `applies-to` is a declarative hint that tells humans and AI agents which components should have the `~rate-limited` aspect applied. It doesn't auto-generate code, inject middleware, or create compile-time checks. The anchors point to WHERE the rate limiting is implemented, and `applies-to` says WHERE it SHOULD be applied. `paradigm doctor` and `paradigm_aspect_check` can validate that the anchors exist, but enforcement in the actual code is the developer's responsibility.
394
+ section: para-201
395
+ - id: plsat-020
396
+ scenario: 'You open `.paradigm/config.yaml` and see `discipline: fullstack`. You''re curious what this means and whether it affects how symbols are mapped.'
397
+ question: What does the `discipline` field control in Paradigm?
398
+ choices:
399
+ A: It determines which programming language the project uses
400
+ B: It configures the symbol-to-directory mapping and recommended patterns for the project type
401
+ C: It restricts which symbols are allowed — e.g., some disciplines don't use flows
402
+ D: It's purely cosmetic — shown in the dashboard but has no functional effect
403
+ E: It determines the deployment pipeline configuration
404
+ correct: B
405
+ explanation: The `discipline` field tells Paradigm what kind of project this is, which influences symbol mappings (e.g., where components vs. gates typically live), suggested patterns, and how AI agents reason about the codebase. A `fullstack` discipline suggests `middleware/` maps to gates, `services/` to components, etc. Different disciplines (e.g., `cli`, `library`, `embedded`) would have different default mappings. Since v2, Paradigm auto-detects the discipline from project structure at init time. It doesn't restrict symbols — all 5 are always available.
406
+ section: para-201
407
+ - id: plsat-021
408
+ scenario: |-
409
+ While reviewing a PR, you notice a developer added a new webhook endpoint:
410
+
411
+ ```typescript
412
+ // src/api/webhooks/stripe.ts
413
+ app.post('/api/webhooks/stripe', async (req, res) => {
414
+ const event = verifyStripeSignature(req);
415
+ if (event.type === 'payment_intent.succeeded') {
416
+ await updateOrderStatus(event.data);
417
+ await sendReceipt(event.data);
418
+ }
419
+ res.json({ received: true });
420
+ });
421
+ ```
422
+
423
+ The developer did not update any Paradigm files.
424
+ question: Which Paradigm files should be updated? Select the MOST complete answer.
425
+ choices:
426
+ A: Only `portal.yaml` — add the webhook route with appropriate gates
427
+ B: Only the nearest `.purpose` file — add `#stripe-webhook-handler` as a component
428
+ C: Both `portal.yaml` and the nearest `.purpose` file
429
+ D: The `.purpose` file, `portal.yaml`, and add a `!payment-succeeded` signal definition
430
+ E: No updates needed — webhooks are external and don't need Paradigm documentation
431
+ correct: D
432
+ explanation: 'The most complete answer includes: (1) The `.purpose` file needs a `#stripe-webhook-handler` component with `tags: [integration, stripe]`. (2) `portal.yaml` needs the route — even webhook endpoints may need gates (e.g., signature verification as `^stripe-signature-valid`). (3) The payment success event should be documented as `!payment-succeeded` since it triggers side effects (order update, receipt). This is the Paradigm principle: if it exists in code, it should exist in the symbol graph.'
433
+ section: para-201
434
+ - id: plsat-022
435
+ scenario: |-
436
+ A developer writes this commit message:
437
+
438
+ ```
439
+ added apple pay button and updated checkout
440
+ ```
441
+ question: What is wrong with this commit message according to Paradigm conventions?
442
+ choices:
443
+ A: It should use past tense ('added' is correct, actually)
444
+ B: It's missing the conventional commit type, primary symbol in parentheses, and the `Symbols:` trailer
445
+ C: It should be in ALL CAPS for visibility
446
+ D: It should reference the Jira ticket number instead of symbols
447
+ E: Nothing is wrong — commit messages are personal preference
448
+ correct: B
449
+ explanation: |-
450
+ Paradigm commit messages follow a strict format: `type(#primary-symbol): description` in the subject, symbol references in the body, and a `Symbols:` trailer for machine parsing. The correct message would be:
451
+
452
+ ```
453
+ feat(#payment-form): add Apple Pay support
454
+
455
+ - Add #apple-pay-button component
456
+ - Update $checkout-flow with new payment step
457
+
458
+ Symbols: #payment-form, #apple-pay-button, $checkout-flow
459
+ ```
460
+
461
+ The `Symbols:` trailer is parsed by the post-commit hook for automatic history capture.
462
+ section: para-201
463
+ - id: plsat-023
464
+ scenario: You're building a real-time notification system. Notifications can arrive via WebSocket, and the user can mark them as read, archive them, or delete them. The system also needs to handle notification preferences (email, push, in-app) and batching for high-volume scenarios.
465
+ question: A team member suggests modeling each notification action (read, archive, delete) as a separate `$` flow. What is the BEST response?
466
+ choices:
467
+ A: Agree — each action is a distinct process that should have its own flow
468
+ B: Disagree — single actions are not flows; use `#` components for each action and a `$notification-lifecycle` flow for the overall process
469
+ C: Disagree — these should all be `!` signals since they're user-triggered events
470
+ D: Agree, but only if each action involves 3+ components
471
+ E: Disagree — model them as `^` gates since they require condition checks
472
+ correct: B
473
+ explanation: 'Flows (`$`) are for multi-step processes spanning 3+ components. A single action like ''mark as read'' is just a component method, not a flow. The correct modeling is: `#notification-reader`, `#notification-archiver`, etc. as components, with `!notification-read`, `!notification-archived` as signals for side effects. If the OVERALL lifecycle (receive → display → interact → archive/delete) is worth documenting, THAT is the flow: `$notification-lifecycle`. Choice D gets close but misses the key insight about modeling the lifecycle.'
474
+ section: para-201
475
+ - id: plsat-024
476
+ scenario: |-
477
+ Your project has the following aspect definition:
478
+
479
+ ```yaml
480
+ ~audit-required:
481
+ description: Financial operations must produce audit logs
482
+ anchors:
483
+ - src/middleware/audit.ts:15-35
484
+ - src/decorators/auditable.ts:1-20
485
+ applies-to: ["#*Service"]
486
+ enforcement: middleware
487
+ ```
488
+
489
+ A colleague refactors `audit.ts` and moves the audit logic from lines 15-35 to lines 50-70.
490
+ question: What happens if the anchors are not updated?
491
+ choices:
492
+ A: Nothing — anchors are just documentation hints and aren't validated
493
+ B: '`paradigm doctor` will report stale anchors, and `paradigm_aspect_check` will flag the mismatch'
494
+ C: The application will crash because the aspect can't find its enforcement code
495
+ D: The audit middleware will stop working because Paradigm controls execution
496
+ E: The CI pipeline will block the merge due to anchor validation
497
+ correct: B
498
+ explanation: Paradigm is a documentation/intelligence layer, not a runtime. Stale anchors won't crash your app or stop middleware from working. However, `paradigm doctor` (the validation command) and `paradigm_aspect_check` (the MCP tool) will detect that the anchored lines no longer match the expected code. This is important because anchors are the mechanism that keeps aspects grounded in real code rather than becoming aspirational documentation. The developer should update anchors to `src/middleware/audit.ts:50-70` as part of the refactor.
499
+ section: para-201
500
+ - id: plsat-025
501
+ scenario: You're adding a new API endpoint `POST /api/billing/invoices` to your project. Before writing any code, you want to follow Paradigm best practices.
502
+ question: What is the recommended sequence of steps?
503
+ choices:
504
+ A: Write the code → Update `.purpose` file → Update `portal.yaml` → Commit
505
+ B: Call `paradigm_gates_for_route` → Update `portal.yaml` → Write the code → Update `.purpose` file → Commit
506
+ C: Update `portal.yaml` → Write the code → Run `paradigm doctor` → Commit
507
+ D: Write the code → Run `paradigm scan` → Let it auto-generate the purpose file → Commit
508
+ E: Call `paradigm_orchestrate_inline` → Spawn agents → Let agents handle everything
509
+ correct: B
510
+ explanation: 'The recommended flow for adding endpoints is: (1) Call `paradigm_gates_for_route` to get gate suggestions for `POST /api/billing/invoices`, (2) Update `portal.yaml` with the route and its gates, (3) Implement the endpoint with proper gate enforcement, (4) Update the nearest `.purpose` file with the new `#` component, signals, etc. (5) Commit with proper Paradigm commit format. This ''portal first'' approach ensures security is designed before implementation. Choice D is wrong because `paradigm scan` discovers existing symbols but doesn''t auto-generate purpose files from code.'
511
+ section: para-201
512
+ - id: plsat-026
513
+ scenario: You're in the middle of a long Claude Code session. You've made 47 tool calls, modified 12 files, and you're about to start a complex refactor of the payment system. You vaguely recall something about context management but can't remember the details.
514
+ question: What should you do before starting the refactor?
515
+ choices:
516
+ A: Just continue — context management is handled automatically
517
+ B: Call `paradigm_session_health` to see if a handoff is recommended
518
+ C: Start a new Claude session immediately to get fresh context
519
+ D: Save all files and run `paradigm scan` to rebuild the index
520
+ E: Call `paradigm_session_stats` and if over 100 tool calls, panic
521
+ correct: B
522
+ explanation: The protocol says to call `paradigm_session_health` periodically (every 10-15 tool calls) during long sessions. At 47 tool calls, you're well overdue for a check. This tool analyzes your context window usage and recommends whether to continue, prepare a handoff, or urgently wrap up. If usage is over 85%, you should prioritize completing your current task and prepare a handoff with `paradigm_handoff_prepare`. Don't just start a new session (C) without preparing a handoff — you'd lose all context about what was done.
523
+ section: para-301
524
+ - id: plsat-027
525
+ scenario: |-
526
+ You run `paradigm doctor` and get the following output:
527
+
528
+ ```
529
+ WARNING: #payment-processor has been modified 7 times in 14 days
530
+ WARNING: #payment-processor has 3 rollbacks in history
531
+ FRAGILITY SCORE: 0.85 (HIGH)
532
+ ```
533
+ question: What does a fragility score of 0.85 indicate, and what should you do?
534
+ choices:
535
+ A: The component has a bug 85% of the time — rewrite it from scratch
536
+ B: 85% of the codebase depends on it — extract it into a separate service
537
+ C: The component is highly unstable due to frequent changes and rollbacks — proceed with extra caution, review wisdom, and consider refactoring
538
+ D: The component needs 85% more test coverage — write tests first
539
+ E: The score is informational only — ignore it and proceed normally
540
+ correct: C
541
+ explanation: 'A fragility score of 0.85 (out of 1.0) means the component is highly unstable. It''s been changed 7 times in 2 weeks with 3 rollbacks — a clear pattern of churn. Before modifying it: (1) Call `paradigm_wisdom_context` to check for antipatterns and `paradigm_decision_search` for prior decisions about it, (2) Call `paradigm_history_context` to understand the recent changes, (3) Consider whether a refactor is needed before adding more changes. The score doesn''t mean ''has bugs 85%'' or ''needs 85% coverage'' — it''s a stability metric based on change frequency and rollback rate.'
542
+ section: para-301
543
+ - id: plsat-028
544
+ scenario: 'After a production incident where the payment system double-charged a customer, the team discovers the root cause: a developer removed a deduplication check while refactoring `#payment-processor`. The team wants to prevent this from happening again.'
545
+ question: What is the MOST appropriate Paradigm response to this incident?
546
+ choices:
547
+ A: 'Add a comment in the code: `// DO NOT REMOVE THIS CHECK`'
548
+ B: 'Record an antipattern in wisdom: ''Never remove deduplication from #payment-processor'' with the alternative approach'
549
+ C: Create a `^deduplication-enforced` gate in portal.yaml
550
+ D: Add `#payment-processor` to a 'do not touch' list in `.paradigm/config.yaml`
551
+ E: Record the incident in Sentinel AND record an antipattern in wisdom
552
+ correct: E
553
+ explanation: 'The most complete response uses both Sentinel and Wisdom. (1) Record the incident with `paradigm_sentinel_record` so it appears in incident tracking with symbolic context (the `#payment-processor` symbol, error details, timeline). (2) Record an antipattern with `paradigm_wisdom_record` so future AI agents and developers are warned before modifying `#payment-processor`. The antipattern would say: ''Never remove deduplication logic'' with alternative: ''If refactoring payment processing, always preserve the deduplication middleware and add tests for it.'' A code comment (A) is easily missed. A gate (C) is for condition checks on routes, not business logic.'
554
+ section: para-301
555
+ - id: plsat-029
556
+ scenario: You need to understand the impact of changing `^authenticated` — the main authentication gate used across your entire application. You want to know what depends on it.
557
+ question: Which MCP tool call gives you the MOST useful dependency information?
558
+ choices:
559
+ A: '`paradigm_search({ query: ''^authenticated'' })` — find all references'
560
+ B: '`paradigm_related({ symbol: ''^authenticated'' })` — show direct relations'
561
+ C: '`paradigm_ripple({ symbol: ''^authenticated'', depth: 3 })` — show direct AND indirect dependencies up to 3 levels'
562
+ D: '`paradigm_navigate({ intent: ''find'', target: ''^authenticated'' })` — locate the gate'
563
+ E: '`paradigm_flows_affected({ symbol: ''^authenticated'' })` — show affected flows'
564
+ correct: C
565
+ explanation: '`paradigm_ripple` with a depth parameter gives you the cascading dependency analysis. For a widely-used gate like `^authenticated`, you need to see not just what directly references it, but what depends on things that depend on it (transitive dependencies). At depth 3, you''d see: Level 1 — all gates with `requires: [^authenticated]`, all routes using it. Level 2 — all components behind those routes. Level 3 — flows involving those components. `paradigm_related` (B) only shows direct connections. `paradigm_search` (A) finds textual references but doesn''t analyze the dependency graph.'
566
+ section: para-301
567
+ - id: plsat-030
568
+ scenario: It's Monday morning. You open Claude Code to continue work on a project. Last Friday, a different Claude session was making changes to the user management module. You have no idea what state things are in.
569
+ question: What is the FIRST thing you should do?
570
+ choices:
571
+ A: Run `git log` to see recent commits
572
+ B: Call `paradigm_session_recover` to load breadcrumbs from the previous session
573
+ C: Call `paradigm_status` for a general project overview
574
+ D: Read the `.paradigm/config.yaml` to understand the project
575
+ E: Start fresh — don't worry about what the previous session did
576
+ correct: B
577
+ explanation: '`paradigm_session_recover` is designed exactly for this scenario. It loads breadcrumbs from previous sessions, showing you what was done, what files were modified, what symbols were touched, and what the next steps were. This is more useful than `paradigm_status` (C) because status gives you general project info, not session-specific context. After recovering the session, THEN you''d call `paradigm_status` and check the relevant files. Starting fresh (E) risks duplicating work or missing important context.'
578
+ section: para-301
579
+ - id: plsat-031
580
+ scenario: Your application is experiencing intermittent 500 errors on the checkout flow. You suspect it's related to the Stripe integration. You want to check if there's a known pattern for this type of failure.
581
+ question: Which sequence of Sentinel tools should you use?
582
+ choices:
583
+ A: '`paradigm_sentinel_triage` to see open incidents, then `paradigm_sentinel_patterns` to find matching failure patterns'
584
+ B: '`paradigm_sentinel_stats` to see overall health, then guess at the root cause'
585
+ C: '`paradigm_sentinel_record` to create a new incident immediately'
586
+ D: '`paradigm_sentinel_suggest_pattern` without any incident context'
587
+ E: '`paradigm_sentinel_resolve` to close any open incidents and hope it goes away'
588
+ correct: A
589
+ explanation: 'The diagnostic workflow is: (1) `paradigm_sentinel_triage` with a filter like `search: ''500''` or `symbol: ''#stripe-service''` to see if there are existing open incidents matching your symptoms. (2) `paradigm_sentinel_patterns` to find known failure patterns (with confidence scores) that match the error. If a pattern matches, it includes resolution steps and code hints. You''d only record a NEW incident (C) if triage shows this is a novel failure. Resolving without investigating (E) is never the right answer. Stats (B) give you health metrics but not diagnostic details.'
590
+ section: para-301
591
+ - id: plsat-032
592
+ scenario: You want to find who on your team has the most expertise with the payment system before making a significant architectural change.
593
+ question: Which Paradigm tool helps you find the right person?
594
+ choices:
595
+ A: '`paradigm_search({ query: ''payments'' })` and look at file authors in git blame'
596
+ B: '`paradigm_wisdom_expert({ area: ''payments'' })` to find recognized experts'
597
+ C: '`paradigm_history_context({ symbols: [''#payment-service''] })` and infer from commit history'
598
+ D: '`paradigm_navigate({ intent: ''explore'', target: ''payments'' })` and read the code to figure out who wrote it'
599
+ E: Ask in Deus / Slack / Teams
600
+ correct: B
601
+ explanation: '`paradigm_wisdom_expert` is purpose-built for finding human experts by area or symbol. It returns people who are recognized as knowledgeable about the payment system, based on recorded wisdom and history. While `paradigm_history_context` (C) can show who recently worked on the code, that doesn''t mean they''re the expert — they might have just fixed a typo. `paradigm_wisdom_expert` tracks deliberate expertise attribution, not just commit frequency.'
602
+ section: para-301
603
+ - id: plsat-033
604
+ scenario: After completing a significant refactor of the authentication module, you want to record what you did for future sessions and team members.
605
+ question: What is the correct way to record this in Paradigm's history system?
606
+ choices:
607
+ A: Write a detailed comment in the `.purpose` file
608
+ B: Call `paradigm_history_record` with type 'refactor', affected symbols, and description
609
+ C: Update `.paradigm/docs/changelog.md` with the changes
610
+ D: Just commit with a good message — git history is sufficient
611
+ E: Call `paradigm_decision_record` with title, rationale, and participants explaining the refactor rationale
612
+ correct: B
613
+ explanation: '`paradigm_history_record` is the right tool for recording implementation events. You''d call it with `type: ''refactor''`, `symbols: [''^authenticated'', ''#auth-middleware'', ...]`, and a description of what was changed. This feeds into the history system that powers `paradigm_history_context` and `paradigm_history_fragility`. A good commit message (D) is important but separate — Paradigm''s history provides symbolic context that git alone doesn''t. If the refactor involved an architectural DECISION, you''d ALSO record it via `paradigm_decision_record` (E), but that''s supplementary, not a replacement — the implementation event itself belongs in the history system. (Note: `paradigm_wisdom_record` no longer accepts `type: ''decision''` in v6.0; decisions live in the dedicated decision store.)'
614
+ section: para-301
615
+ - id: plsat-034
616
+ scenario: You've run tests after implementing a new feature. 15 tests passed, 2 failed, and 1 was skipped. You previously recorded the implementation with `paradigm_history_record` and got back an implementation ID.
617
+ question: How should you record the test results?
618
+ choices:
619
+ A: Update the implementation record by calling `paradigm_history_record` again
620
+ B: Call `paradigm_history_validate` with result 'partial' and the test counts
621
+ C: Call `paradigm_history_validate` with result 'fail' because not all tests passed
622
+ D: Don't record it — fix the failing tests first, then record a 'pass'
623
+ E: Call `paradigm_sentinel_record` to log the test failures as incidents
624
+ correct: B
625
+ explanation: '`paradigm_history_validate` is the validation companion to `paradigm_history_record`. With 15 passed, 2 failed, and 1 skipped, the result is ''partial'' (not full pass, not complete failure). You''d call it with `result: ''partial''` and `tests: { passed: 15, failed: 2, skipped: 1 }`. This creates a validation record linked to the implementation. Recording it as ''fail'' (C) is too harsh — partial acknowledges progress. Waiting to record (D) loses valuable history about the initial state. Test failures aren''t production incidents (E) unless they indicate a production problem.'
626
+ section: para-301
627
+ - id: plsat-035
628
+ scenario: |-
629
+ A context check returns the following:
630
+
631
+ ```
632
+ Context usage: ~82%
633
+ Recommendation: prepare-handoff
634
+ Message: Context getting full. Complete current task and prepare handoff.
635
+ ```
636
+
637
+ You're in the middle of implementing a feature that's about 70% done.
638
+ question: What is the correct course of action?
639
+ choices:
640
+ A: Ignore the warning and finish the feature — 82% means you still have 18% left
641
+ B: Stop immediately and call `paradigm_handoff_prepare` with what you've done so far
642
+ C: Finish the current task as quickly as possible, then call `paradigm_handoff_prepare` with a summary, modified files, and next steps
643
+ D: Delete some earlier context by running `paradigm_session_recover` to free up space
644
+ E: Switch to a different, smaller task that can be completed in the remaining context
645
+ correct: C
646
+ explanation: 'At 82% with a ''prepare-handoff'' recommendation, you should complete your current task (not start new ones) and then hand off. The protocol says: when context usage is high but not critical (>85%), prioritize completing the current task, then prepare a handoff. `paradigm_handoff_prepare` takes your summary, modified files, symbols touched, and next steps — giving the next session everything it needs to pick up where you left off. Ignoring it (A) risks running out of context mid-task. Stopping immediately (B) wastes the 70% progress. You can''t delete context (D).'
647
+ section: para-301
648
+ - id: plsat-036
649
+ scenario: You want to understand the complete structure of the authentication module without reading every file. The project has 200+ files across nested directories.
650
+ question: What is the MOST token-efficient way to explore this?
651
+ choices:
652
+ A: Read every file in `src/auth/` one by one
653
+ B: 'Call `paradigm_navigate({ intent: ''explore'', target: ''auth'' })` to browse the area'
654
+ C: 'Run `paradigm_search({ query: ''auth'' })` and read every matching file'
655
+ D: Read `.paradigm/navigator.yaml` and then every file it references
656
+ E: Call `paradigm_status` and hope it includes auth module details
657
+ correct: B
658
+ explanation: '`paradigm_navigate` with intent ''explore'' is designed for exactly this: browsing an area of the codebase without reading individual files. At ~200 tokens per call, it''s vastly more efficient than reading files (~500-2000 tokens each). It returns the structural overview of the auth area — components, gates, flows, signals — from the indexed symbols. If you need specific implementation details AFTER exploring, then you read individual files. The rule is: MCP for discovery, files for implementation.'
659
+ section: para-301
660
+ - id: plsat-037
661
+ scenario: You're debugging an issue where the `$order-fulfillment` flow is failing at the 'ship order' step. The flow has 6 steps spanning 4 components. You suspect the gate `^warehouse-authorized` is rejecting valid requests.
662
+ question: Which combination of tools gives you the MOST diagnostic information?
663
+ choices:
664
+ A: '`paradigm_flow_check({ flowId: ''$order-fulfillment'' })` + `paradigm_sentinel_triage({ symbol: ''^warehouse-authorized'' })`'
665
+ B: '`paradigm_search({ query: ''warehouse'' })` + read all matching files'
666
+ C: '`paradigm_ripple({ symbol: ''$order-fulfillment'' })` only'
667
+ D: '`paradigm_history_context({ symbols: [''$order-fulfillment''] })` only'
668
+ E: '`paradigm_navigate({ intent: ''find'', target: ''^warehouse-authorized'' })` + read the gate code'
669
+ correct: A
670
+ explanation: 'The best combination is: (1) `paradigm_flow_check` checks the flow definition against the codebase — are all steps implemented, do the gates exist, are signals emitted? This could reveal if the flow definition is out of sync with the code. (2) `paradigm_sentinel_triage` filtered by `^warehouse-authorized` shows if there are incidents or known patterns for this gate failing. Together, these give you structural validation AND operational history. Ripple (C) shows dependencies but not failures. History (D) shows changes but not current errors.'
671
+ section: para-301
672
+ - id: plsat-038
673
+ scenario: 'Your team has been using Paradigm for 6 months. A new developer joins and asks: ''How do I know if the Paradigm files are actually accurate? What if the code has drifted from the documentation?'''
674
+ question: What is the correct answer?
675
+ choices:
676
+ A: Trust the Paradigm files — they're always accurate because they're machine-generated
677
+ B: Run `paradigm doctor` to validate consistency between Paradigm files and the codebase, and check `paradigm_aspect_check` for aspect anchor drift
678
+ C: Paradigm files are aspirational — they describe what the code SHOULD be, not what it IS
679
+ D: Run `paradigm scan` to regenerate all Paradigm files from scratch
680
+ E: Check the git blame on `.purpose` files to see when they were last updated
681
+ correct: B
682
+ explanation: '`paradigm doctor` is the validation tool that checks for inconsistencies between Paradigm files and the codebase. It flags missing anchors, undefined symbols referenced in flows, gates referenced in portal.yaml that don''t have implementations, and more. `paradigm_aspect_check` specifically validates that aspect anchors still point to valid code. `paradigm_purpose_validate` checks `.purpose` file structural validity. These tools are how you verify accuracy. Paradigm files are NOT auto-generated (A) or aspirational (C) — they''re maintained documentation that has validation tools.'
683
+ section: para-301
684
+ - id: plsat-039
685
+ scenario: 'You need to build a complete user profile feature: a UI component, API endpoint, database service, validation logic, and tests. This will touch at least 6 files across 3 directories.'
686
+ question: Before writing ANY code, what should you do FIRST?
687
+ choices:
688
+ A: Start coding the UI component — start with the frontend and work backwards
689
+ B: 'Call `paradigm_orchestrate_inline({ task: ''Build user profile feature'', mode: ''plan'' })` to get the right agents and plan'
690
+ C: Call `paradigm_search` for existing profile-related symbols
691
+ D: Create the `.purpose` file first to define all the symbols
692
+ E: Call `paradigm_ripple` on every component you plan to create
693
+ correct: B
694
+ explanation: 'When a task affects 3+ files, involves multiple features, or spans security and implementation, the FIRST step is calling `paradigm_orchestrate_inline` with mode=''plan''. This returns: the right agent team (e.g., architect + security + builder + tester), estimated token cost, and an execution plan with stages. This prevents you from wasting tokens on ad-hoc implementation when a structured approach would be more efficient. After the plan, you''d call with mode=''execute'' to get full agent prompts. You can''t ripple (E) symbols that don''t exist yet.'
695
+ section: para-401
696
+ - id: plsat-040
697
+ scenario: |-
698
+ You call `paradigm_orchestrate_inline` with mode='plan' for a task involving JWT authentication. The plan returns four agents: architect, security, builder, tester. The plan shows two stages:
699
+
700
+ ```
701
+ Stage 1: [architect, security] (canRunParallel: true)
702
+ Stage 2: [builder, tester] (canRunParallel: false)
703
+ ```
704
+ question: How should you execute this plan?
705
+ choices:
706
+ A: Run all four agents simultaneously for maximum speed
707
+ B: Run architect and security in parallel, wait for both to complete, then run builder, then tester sequentially
708
+ C: Run architect first, then security, then builder, then tester — always sequential
709
+ D: Skip the architect and security agents — just run builder and tester
710
+ E: Run builder first to get code written, then architect and security for review
711
+ correct: B
712
+ explanation: 'The orchestration plan explicitly marks `canRunParallel: true` for Stage 1 (architect + security), meaning they can run simultaneously. Stage 2 has `canRunParallel: false`, meaning builder must complete before tester starts. The correct execution is: launch architect and security in parallel (Stage 1), wait for both to finish, run builder with handoff context from Stage 1, then run tester after builder completes. Skipping agents (D) defeats the purpose of orchestration. Running builder first (E) ignores architecture and security design.'
713
+ section: para-401
714
+ - id: plsat-041
715
+ scenario: |-
716
+ Your team is evaluating which agent provider to use for orchestration. The environment has:
717
+ - `ANTHROPIC_API_KEY` set
718
+ - Claude Code installed (Max subscription)
719
+ - Cursor IDE open
720
+ - No `.paradigm/config.yaml` provider override
721
+
722
+ The team runs `paradigm team providers`.
723
+ question: Which provider will be used by default based on the cascade?
724
+ choices:
725
+ A: Cursor agent CLI — because Cursor IDE is detected
726
+ B: Claude Code Task tool — because Max subscription is available
727
+ C: Anthropic API (claude) — because it's first in the cascade and the API key is set
728
+ D: Manual file-based handoffs — because no provider is explicitly configured
729
+ E: Claude Code Agent Teams — because it supports parallel execution
730
+ correct: C
731
+ explanation: 'The provider cascade tries providers in order: (1) claude (Anthropic API), (2) claude-code-teams, (3) claude-code, (4) cursor-cli, (5) claude-cli, (6) manual. Since `ANTHROPIC_API_KEY` is set, the first provider (`claude` — Anthropic API) is available and will be used. The cascade stops at the first available provider unless overridden. Even though Cursor and Claude Code are available, they''re lower priority. To override, use `paradigm team providers --set cursor-cli` or set `agent-provider` in config.'
732
+ section: para-401
733
+ - id: plsat-042
734
+ scenario: |-
735
+ You're configuring agent models for your team. The task involves:
736
+ - An architectural review (complex reasoning needed)
737
+ - A security audit (critical, needs thoroughness)
738
+ - Building 3 UI components (straightforward implementation)
739
+ - Writing unit tests (repetitive, pattern-based)
740
+
741
+ Your budget is limited.
742
+ question: Which model assignment follows Paradigm's recommended configuration?
743
+ choices:
744
+ A: All agents use opus for maximum quality
745
+ B: 'Architect: opus, Security: opus, Builder: haiku, Tester: haiku'
746
+ C: All agents use haiku for cost efficiency
747
+ D: 'Architect: sonnet, Security: sonnet, Builder: sonnet, Tester: sonnet'
748
+ E: 'Architect: opus, Security: sonnet, Builder: opus, Tester: haiku'
749
+ correct: B
750
+ explanation: 'Paradigm''s recommended model configuration is: architect and security agents use opus (complex reasoning, critical decisions), builder uses haiku (fast, cost-effective for straightforward implementation), and tester uses haiku (pattern-based, repetitive work). The reviewer role (not in this scenario) uses sonnet (balanced critique). This balances quality where it matters most (architecture, security) with cost efficiency where tasks are more mechanical (building, testing). All-opus (A) blows the budget. All-haiku (C) risks poor architectural decisions.'
751
+ section: para-401
752
+ - id: plsat-043
753
+ scenario: |-
754
+ You're about to call an MCP tool. Your choices are:
755
+ 1. `paradigm_status` (~100 tokens)
756
+ 2. `paradigm_navigate` (~200 tokens)
757
+ 3. Reading a 400-line TypeScript file (~2000 tokens)
758
+ 4. `paradigm_ripple` (~300 tokens)
759
+
760
+ You need to understand what components exist in the payments area before modifying `#payment-service`.
761
+ question: What is the MOST token-efficient approach?
762
+ choices:
763
+ A: Read the TypeScript file directly — you need to see the actual code
764
+ B: Call `paradigm_navigate` to explore the payments area, then `paradigm_ripple` on `#payment-service`, then read only the specific file you need to change
765
+ C: Call `paradigm_status` first, then read all payment-related files
766
+ D: Call all four tools to be thorough
767
+ E: Skip all tools and just start coding — you'll figure it out
768
+ correct: B
769
+ explanation: 'The optimal approach is: (1) `paradigm_navigate` (~200 tokens) to discover what exists in the payments area without reading files. (2) `paradigm_ripple` (~300 tokens) on `#payment-service` to understand impact before modifying. (3) THEN read the specific file you need to change. Total: ~500 tokens + one targeted file read. This follows the rule: ''MCP for discovery, files for implementation.'' Reading files first (A) costs ~2000 tokens before you even know what you''re looking at. Calling everything (D) wastes `paradigm_status` tokens on info you don''t need for this task.'
770
+ section: para-401
771
+ - id: plsat-044
772
+ scenario: Your team decides that all API responses should include a `requestId` header for tracing. This is an architectural decision that affects every API endpoint in the project.
773
+ question: How should this decision be recorded in Paradigm?
774
+ choices:
775
+ A: Add a comment in every API route file
776
+ B: Call `paradigm_decision_record` with title, rationale, participants, and alternatives_considered — the decision lives in `.paradigm/decisions/` and writes a companion lore `insight` automatically
777
+ C: Create a `~request-id-required` aspect and add it to every component
778
+ D: Update `.paradigm/config.yaml` with a new convention
779
+ E: Both B and C — record the decision AND create an aspect with code anchors
780
+ correct: E
781
+ explanation: 'The most complete answer is both. (1) Record the architectural decision with `paradigm_decision_record` including title, decision text, rationale (tracing, debugging, support requirements), participants with stances, and alternatives_considered (response body field rejected_because clients prefer headers). The decision is stored in `.paradigm/decisions/` and a companion lore `insight` is auto-written so the timeline shows the moment the choice was made. (2) Create `~request-id-required` aspect with anchors pointing to the middleware that adds the header. The decision documents the WHY, the aspect enforces the WHAT with verifiable code anchors. Just the decision (B) lacks enforcement. Just the aspect (C) lacks rationale.'
782
+ section: para-401
783
+ - id: plsat-045
784
+ scenario: |-
785
+ You're writing a commit message for a change that added rate limiting to the payment API, modified the Stripe webhook handler, and added a new `!rate-limit-exceeded` signal.
786
+
787
+ The affected symbols are: `#payment-api`, `#stripe-webhook-handler`, `~rate-limited`, `!rate-limit-exceeded`.
788
+ question: Which commit message follows Paradigm conventions?
789
+ choices:
790
+ A: |-
791
+ ```
792
+ feat: add rate limiting to payments
793
+ ```
794
+ B: |-
795
+ ```
796
+ feat(#payment-api): add rate limiting to payment endpoints
797
+
798
+ - Apply ~rate-limited aspect to #payment-api
799
+ - Update #stripe-webhook-handler with rate limit checks
800
+ - Add !rate-limit-exceeded signal for monitoring
801
+
802
+ Symbols: #payment-api, #stripe-webhook-handler, ~rate-limited, !rate-limit-exceeded
803
+ ```
804
+ C: |-
805
+ ```
806
+ feat(payments): add rate limiting
807
+
808
+ Added rate limiting to payment API and webhook handler.
809
+ ```
810
+ D: |-
811
+ ```
812
+ FEAT(#payment-api): ADD RATE LIMITING
813
+
814
+ Symbols: ALL PAYMENT SYMBOLS
815
+ ```
816
+ E: |-
817
+ ```
818
+ feat(~rate-limited): apply rate limiting aspect
819
+
820
+ - Updated payment-api
821
+ - Updated stripe-webhook-handler
822
+
823
+ Symbols: ~rate-limited
824
+ ```
825
+ correct: B
826
+ explanation: 'Choice B follows all Paradigm commit conventions: (1) Subject line: `type(#primary-symbol): description` with the primary affected component. (2) Body: references all affected symbols with their prefixes (#, ~, !). (3) `Symbols:` trailer: machine-readable list of ALL affected symbols for the post-commit hook to parse. Choice A lacks symbols entirely. Choice C uses a generic scope instead of a symbol. Choice D is SCREAMING_CASE (no). Choice E uses the aspect as the primary symbol, but the primary change is to `#payment-api`, and the Symbols trailer is incomplete.'
827
+ section: para-401
828
+ - id: plsat-046
829
+ scenario: 'A developer on your team proposes a new tag: `[webhook-handler]`. They''ve noticed 5 components across the project that handle incoming webhooks and think a dedicated tag would be useful for classification.'
830
+ question: What is the correct process for adding this tag?
831
+ choices:
832
+ A: Add it directly to the `core` section of `tags.yaml`
833
+ B: Add it directly to the `project` section of `tags.yaml`
834
+ C: Call `paradigm_tags_suggest` with the tag name, description, reason, and example symbols — it goes to `suggested` for human approval
835
+ D: 'Just start using `tags: [webhook-handler]` on components — tags are freeform'
836
+ E: Create a new aspect `~webhook-handler` instead — tags aren't for this
837
+ correct: C
838
+ explanation: 'The proper process is `paradigm_tags_suggest`, which adds the tag to the `suggested` section of `tags.yaml` for human review. This is Paradigm''s governance model: AI can propose tags, but humans must approve them before they become official. Once approved, a human promotes it to `project` (team-specific) or `core` (if it should ship with Paradigm). Adding directly to `core` (A) is only for Paradigm framework maintainers. Freeform usage (D) leads to tag sprawl. An aspect (E) is wrong because webhook handling isn''t a cross-cutting rule requiring code anchors.'
839
+ section: para-401
840
+ - id: plsat-047
841
+ scenario: |-
842
+ Your CI/CD pipeline runs `paradigm doctor` as a check. The latest run shows:
843
+
844
+ ```
845
+ ERROR: Gate ^project-owner referenced in portal.yaml but not defined
846
+ WARNING: Aspect ~cache-invalidation has stale anchors (file moved)
847
+ ERROR: Flow $signup-flow references undefined component #sms-verifier
848
+ INFO: 3 suggested tags awaiting human review
849
+ ```
850
+ question: Which issues MUST be fixed before merging, and which can wait?
851
+ choices:
852
+ A: All four must be fixed — `paradigm doctor` errors should block the merge
853
+ B: The two ERRORs must be fixed (undefined gate and undefined component). The WARNING and INFO can wait.
854
+ C: Only the gate error must be fixed (security). Everything else is documentation.
855
+ D: None need to block the merge — `paradigm doctor` is advisory only
856
+ E: The errors and warning must be fixed. Only the INFO about suggested tags can wait.
857
+ correct: B
858
+ explanation: 'ERRORs indicate broken references that will cause real problems: a gate referenced in `portal.yaml` that doesn''t exist means route protection is undefined, and a flow referencing an undefined component means the flow documentation is actively misleading. These MUST be fixed. The WARNING about stale anchors is important but not merge-blocking — the aspect still works, the documentation just needs updating. The INFO about suggested tags is purely administrative. In practice, many teams also fix WARNINGs before merge, but the ERRORs are the must-fix items.'
859
+ section: para-401
860
+ - id: plsat-048
861
+ scenario: You're preparing a handoff because your context window is at 87%. You've been working on a migration from REST to GraphQL for the user module. You've completed the schema and resolvers but haven't written tests yet.
862
+ question: What information should you include in `paradigm_handoff_prepare`?
863
+ choices:
864
+ A: Just the summary — the next session can figure out the rest
865
+ B: Summary, list of modified files, symbols touched, next steps (write tests), and the open question about whether to keep the REST endpoints during migration
866
+ C: A complete transcript of everything you did in this session
867
+ D: Only the list of modified files — the next session can read them
868
+ E: Summary and next steps only — modified files are in git
869
+ correct: B
870
+ explanation: '`paradigm_handoff_prepare` accepts: summary (what was done), modifiedFiles (what changed), symbolsTouched (which symbols were affected), nextSteps (what to do next), and openQuestions (unresolved decisions). The MOST useful handoff includes ALL of these. The next session needs to know: (1) what was accomplished (summary), (2) which files to look at (modifiedFiles), (3) which symbols are in play (symbolsTouched), (4) exactly what to do next (write tests), and (5) any decisions that still need to be made (keep REST endpoints?). A transcript (C) is too much. Just files (D) lacks context.'
871
+ section: para-401
872
+ - id: plsat-049
873
+ scenario: You want to validate that a specific flow `$checkout-flow` is correctly implemented. The flow has 5 steps, involves 3 gates, and emits 2 signals. You want to verify that all steps have implementations, gates exist in portal.yaml, and signals are actually emitted in the code.
874
+ question: Which MCP tool call gives you this deep implementation check?
875
+ choices:
876
+ A: '`paradigm_flow_check({ flowId: ''$checkout-flow'' })` — validates flow definition only'
877
+ B: '`paradigm_flow_check({ flowId: ''$checkout-flow'', checkImplementation: true })` — deep check against codebase'
878
+ C: '`paradigm_purpose_validate()` — validates all purpose files including flows'
879
+ D: '`paradigm_ripple({ symbol: ''$checkout-flow'' })` — shows flow dependencies'
880
+ E: '`paradigm_related({ symbol: ''$checkout-flow'' })` — shows what''s connected to the flow'
881
+ correct: B
882
+ explanation: '`paradigm_flow_check` with `checkImplementation: true` performs a deep validation: it checks that gates exist in portal.yaml, actions are implemented in the codebase, and signals are emitted. Without `checkImplementation`, it only validates the YAML structure (A). `paradigm_purpose_validate` (C) checks structural validity of purpose files but doesn''t do the deep codebase cross-reference. `paradigm_ripple` (D) shows what depends on the flow, not whether it''s correctly implemented. The `checkImplementation` flag is the key to going from structural validation to implementation verification.'
883
+ section: para-401
884
+ - id: plsat-050
885
+ scenario: |-
886
+ It's 2 AM. Your production system is down. The error logs show:
887
+
888
+ ```
889
+ ERROR: Cannot read property 'id' of null
890
+ at PaymentProcessor.processRefund (payment-processor.ts:142)
891
+ at RefundHandler.handle (refund-handler.ts:67)
892
+ ```
893
+
894
+ You need to investigate and fix this as fast as possible using Paradigm tools. The on-call engineer has no context about the payment system.
895
+ question: What is the optimal 2 AM sequence of actions using Paradigm?
896
+ choices:
897
+ A: Read the source files, find the bug, fix it, deploy
898
+ B: '`paradigm_sentinel_record` the incident → `paradigm_sentinel_patterns` for known fixes → `paradigm_wisdom_context` for `#payment-processor` antipatterns → Fix → `paradigm_sentinel_resolve`'
899
+ C: '`paradigm_orchestrate_inline` to spin up an architect and security agent'
900
+ D: '`paradigm_status` → `paradigm_navigate` → Read every file in payments/ → Eventually find the bug'
901
+ E: '`paradigm_ripple` on `#payment-processor` → Fix everything that depends on it'
902
+ correct: B
903
+ explanation: 'At 2 AM with production down, you want the fastest path to resolution with full traceability: (1) `paradigm_sentinel_record` the incident with the error and stack trace — this starts the clock and provides symbolic context. (2) `paradigm_sentinel_patterns` to check if this is a KNOWN failure pattern with an existing resolution — this could save you hours. (3) `paradigm_wisdom_context` for `#payment-processor` to check if there are recorded antipatterns (e.g., ''null check required before accessing refund.id''). (4) Fix the issue with full context. (5) `paradigm_sentinel_resolve` to close the incident with the fix commit. Orchestration (C) is overkill for an emergency fix. Reading everything (D) burns time you don''t have.'
904
+ section: para-401