@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.
- package/dist/{accept-orchestration-SBZVK3H4.js → accept-orchestration-QQISPINV.js} +1 -1
- package/dist/add-UOR4INIV.js +8 -0
- package/dist/{agent-loader-RIVI6QPP.js → agent-loader-2WJHD46U.js} +1 -1
- package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-YKS2PQWO.js} +1 -1
- package/dist/{aggregate-W66DM3GA.js → aggregate-A5S5MTCC.js} +1 -1
- package/dist/{ambient-76YMUA5Q.js → ambient-BE3SQXNN.js} +1 -1
- package/dist/{ambient-WTLYUAQM.js → ambient-NVKQCW2A.js} +12 -12
- package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
- package/dist/{beacon-5QVYV5DF.js → beacon-QVUD3MGP.js} +1 -1
- package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/{chunk-SI6SV76D.js → chunk-3DZK54RU.js} +72 -19
- package/dist/{chunk-CHVQNRRT.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/chunk-6SKSV5B2.js +24 -0
- package/dist/{chunk-KFNHCQ4R.js → chunk-FEYOQMZ5.js} +1 -1
- package/dist/{chunk-NEJ4ZLCY.js → chunk-GAFKOFAV.js} +1 -1
- package/dist/chunk-GRZQIKST.js +2 -0
- package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
- package/dist/chunk-LPBCQM5Y.js +6 -0
- package/dist/{chunk-T6IDXUUA.js → chunk-LWAIVOSF.js} +1 -1
- package/dist/{chunk-74SGKSRQ.js → chunk-M2HKWR25.js} +1 -1
- package/dist/{chunk-BOYQAMGC.js → chunk-M3PPXJU4.js} +1 -1
- package/dist/chunk-PHEX6LU4.js +111 -0
- package/dist/chunk-Q527BPUF.js +2 -0
- package/dist/chunk-R5ECMBIV.js +11 -0
- package/dist/{chunk-X3U3IGYT.js → chunk-TBWWFRL5.js} +1 -1
- package/dist/{chunk-MQIG6SMF.js → chunk-TNVWGPCE.js} +1 -1
- package/dist/{chunk-SUU6M4JH.js → chunk-TOYQ2QCB.js} +1 -1
- package/dist/chunk-TZDYIPVU.js +521 -0
- package/dist/{chunk-3XGNXXCT.js → chunk-UZ5H7K6Q.js} +1 -1
- package/dist/chunk-VIG5LSGZ.js +2 -0
- package/dist/chunk-VNIX5KBT.js +3 -0
- package/dist/{chunk-AGFPVSX5.js → chunk-VXIIVMTM.js} +1 -1
- package/dist/{chunk-ORDKEGII.js → chunk-WESTEMIM.js} +1 -1
- package/dist/{chunk-LBQBWIEX.js → chunk-Y4P4SGZV.js} +1 -1
- package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/chunk-ZJQY5PPP.js +7 -0
- package/dist/{commands-LMUD5L6R.js → commands-ANRJNG2W.js} +1 -1
- package/dist/compliance-BNFWQPKM.js +6 -0
- package/dist/config-schema-FLHRVZMI.js +2 -0
- package/dist/{constellation-CG7C4WFE.js → constellation-NWLXYATA.js} +1 -1
- package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
- package/dist/{cost-IDNVMAEV.js → cost-24UZSS2P.js} +1 -1
- package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
- package/dist/decision-loader-HELL2AMX.js +2 -0
- package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
- package/dist/{diff-JVEYCXUC.js → diff-MF55KQZH.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- package/dist/dist-JZZJLVMR.js +2 -0
- package/dist/{dist-3ZCH25SG.js → dist-OG6MM4VY.js} +1 -1
- package/dist/dist-SE67SOXB.js +2 -0
- package/dist/{docs-USDAF26F.js → docs-O37YLLRN.js} +1 -1
- package/dist/doctor-IG5XM4C4.js +2 -0
- package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
- package/dist/{flow-POQP27WA.js → flow-BGXOVE2V.js} +1 -1
- package/dist/{hooks-IG2GOAHP.js → hooks-TFMMMB2H.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/init-M44SO65G.js +2 -0
- package/dist/init-V4KSEKPK.js +2 -0
- package/dist/{integrity-UYDOOJDP.js → integrity-ROO3G43N.js} +1 -1
- package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
- package/dist/list-CFHINXIS.js +12 -0
- package/dist/lore-loader-D2ISOASW.js +2 -0
- package/dist/lore-loader-PXFKMKAN.js +2 -0
- package/dist/mcp.js +19 -11
- package/dist/metrics-UESGUHTA.js +2 -0
- package/dist/{migrate-IBDE7VK4.js → migrate-Z5UQN57G.js} +1 -1
- package/dist/migrate-assessments-YSITX7KM.js +4 -0
- package/dist/migrate-decisions-NPLQOEEH.js +6 -0
- package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
- package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-QPZJH6XO.js} +1 -1
- package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
- package/dist/{orchestrate-RCAMBOIB.js → orchestrate-RID7HHHH.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
- package/dist/portal-check-DV2VSJ5E.js +8 -0
- package/dist/{portal-compliance-4MG5F2GI.js → portal-compliance-JONQ4SOP.js} +1 -1
- package/dist/{probe-B22G2JKF.js → probe-5HAXULAD.js} +1 -1
- package/dist/{providers-AWA7WLLM.js → providers-4PXMWA7V.js} +1 -1
- package/dist/quiz-WYIZJG5K.js +10 -0
- package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
- package/dist/reindex-FWPD2VGM.js +2 -0
- package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
- package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
- package/dist/{review-6UAH6V3R.js → review-VMSX2PKI.js} +1 -1
- package/dist/{ripple-ZGDITCGB.js → ripple-FNZI47SH.js} +1 -1
- package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
- package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
- package/dist/sentinel.js +1 -1
- package/dist/{serve-U47GULB6.js → serve-MO35XIZE.js} +1 -1
- package/dist/serve-OQYUO7CR.js +12 -0
- package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
- package/dist/server-FGUL2FWQ.js +7 -0
- package/dist/session-tracker-KGORN6B5.js +2 -0
- package/dist/{session-work-log-PAKXOFGL.js → session-work-log-4IEVE4KK.js} +1 -1
- package/dist/{session-work-log-ZP45TREI.js → session-work-log-EE4UIZ33.js} +1 -1
- package/dist/{setup-3F5IK7MO.js → setup-ZSEC72BS.js} +2 -2
- package/dist/{shift-FDADESC4.js → shift-TVNY2CQF.js} +6 -6
- package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
- package/dist/show-WVHAL4VU.js +7 -0
- package/dist/{snapshot-L2G56RPL.js → snapshot-3IYB67D4.js} +1 -1
- package/dist/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
- package/dist/{status-77M3SDIF.js → status-DB3KNLW3.js} +1 -1
- package/dist/status-S7Z5FVIE.js +6 -0
- package/dist/{summary-LXLHFRN7.js → summary-WLI3NF4G.js} +2 -2
- package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
- package/dist/sync-55U6QPIA.js +2 -0
- package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
- package/dist/team-MGT66HZQ.js +2 -0
- package/dist/{test-BQJMS4Y2.js → test-WLEPZQFC.js} +1 -1
- package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
- package/dist/tools-QJHAVYI6.js +2 -0
- package/dist/university-content/notes/N-para-001-build-something.md +126 -0
- package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
- package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
- package/dist/university-content/notes/N-para-101-component-types.md +99 -0
- package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
- package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
- package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
- package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
- package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
- package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
- package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
- package/dist/university-content/notes/N-para-101-welcome.md +51 -0
- package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
- package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
- package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
- package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
- package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
- package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
- package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
- package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
- package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
- package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
- package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
- package/dist/university-content/notes/N-para-301-context-management.md +53 -0
- package/dist/university-content/notes/N-para-301-decisions.md +99 -0
- package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
- package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
- package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
- package/dist/university-content/notes/N-para-301-history-system.md +42 -0
- package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
- package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
- package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
- package/dist/university-content/notes/N-para-301-protocols.md +113 -0
- package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
- package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
- package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
- package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
- package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
- package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
- package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
- package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
- package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
- package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
- package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
- package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
- package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
- package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
- package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
- package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
- package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
- package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
- package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
- package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
- package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
- package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
- package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
- package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
- package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
- package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
- package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
- package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
- package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
- package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
- package/dist/university-content/notes/N-para-501-task-management.md +100 -0
- package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
- package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
- package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
- package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
- package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
- package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
- package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
- package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
- package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
- package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
- package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
- package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
- package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
- package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
- package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
- package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
- package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
- package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
- package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
- package/dist/university-content/paths/LP-para-001.yaml +29 -0
- package/dist/university-content/paths/LP-para-101.yaml +59 -0
- package/dist/university-content/paths/LP-para-201.yaml +69 -0
- package/dist/university-content/paths/LP-para-301.yaml +84 -0
- package/dist/university-content/paths/LP-para-401.yaml +74 -0
- package/dist/university-content/paths/LP-para-501.yaml +89 -0
- package/dist/university-content/paths/LP-para-601.yaml +59 -0
- package/dist/university-content/paths/LP-para-701.yaml +64 -0
- package/dist/university-content/quizzes/Q-para-001-build-something.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-001-meet-the-team.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-001-shift-setup.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-101-component-types.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-101-first-steps.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-five-symbols.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-101-paradigm-logger.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-portal-yaml.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-project-structure.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-101-purpose-files.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-tags-and-classification.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-welcome.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-architecture-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-aspect-graph.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-201-aspects-and-anchors.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-component-patterns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-cross-cutting-concerns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-disciplines.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-flows-deep-dive.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-gates-deep-dive.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-portal-protocol.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-signal-patterns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-symbol-naming.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-context-management.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-decisions.yaml +76 -0
- package/dist/university-content/quizzes/Q-para-301-doctor-and-validation.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-enforcement-levels.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-fragility-tracking.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-history-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-navigation-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-operations-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-paradigm-shift.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-protocols.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-ripple-analysis.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-sentinel-observability.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-sync-and-maintenance.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-wisdom-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-agent-identity.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-agent-interop.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-401-agent-roles.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-commit-conventions.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-mastery-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-mcp-tools-overview.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-multi-agent-coordination.yaml +76 -0
- package/dist/university-content/quizzes/Q-para-401-notebooks-permissions.yaml +61 -0
- package/dist/university-content/quizzes/Q-para-401-orchestration-workflow.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-pm-governance.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-provider-cascade.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-quick-check.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
- package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
- package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
- package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
- package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
- package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
- package/dist/university-content/reference.json +2 -2
- package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
- package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
- package/dist/{validate-VZXTJHGO.js → validate-BB6LRWIY.js} +1 -1
- package/dist/validate-XUQZTF3H.js +9 -0
- package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
- package/dist/workspace-VMSPYIBV.js +2 -0
- package/lore-ui/dist/assets/{index-Bk-K0qgN.js → index-DKhNxgtW.js} +10 -10
- package/lore-ui/dist/index.html +1 -1
- package/package.json +3 -2
- package/platform-ui/dist/assets/{AmbientSection-BYjt75R1.js → AmbientSection-CwatqcBD.js} +1 -1
- package/platform-ui/dist/assets/{CanvasSection-rKvA_vZj.js → CanvasSection-dFAthehN.js} +1 -1
- package/platform-ui/dist/assets/{DocsSection-CI9K73M-.js → DocsSection-BZ2SFJBZ.js} +1 -1
- package/platform-ui/dist/assets/{GitSection-DSGj_c6S.js → GitSection-MNNYU1tO.js} +1 -1
- package/platform-ui/dist/assets/{GraphSection-CawN7pC5.js → GraphSection-COYjb4Pt.js} +1 -1
- package/platform-ui/dist/assets/LoreSection-B0hUbfsJ.js +1 -0
- package/platform-ui/dist/assets/{SentinelSection-DNgoYMH0.js → SentinelSection-BCxW1DCp.js} +1 -1
- package/platform-ui/dist/assets/{SymphonySection-C0zfcqv3.js → SymphonySection-BsucZRqy.js} +1 -1
- package/platform-ui/dist/assets/{TeamSection-Bzd3Dt9Q.js → TeamSection-C0QNTudW.js} +1 -1
- package/platform-ui/dist/assets/{UniversitySection-tBr62R0S.js → UniversitySection-DN1-g9pw.js} +1 -1
- package/platform-ui/dist/assets/{index-BaOmyn11.js → index-DwUT8pju.js} +2 -2
- package/platform-ui/dist/index.html +1 -1
- package/templates/paradigm/specs/symbols.md +4 -2
- package/dist/add-P76GEMGF.js +0 -8
- package/dist/chunk-3TR6LLXP.js +0 -111
- package/dist/chunk-G7XFK2GI.js +0 -11
- package/dist/chunk-J6KWGCHN.js +0 -24
- package/dist/chunk-JQKKVAAN.js +0 -2
- package/dist/chunk-ODVKPZZ4.js +0 -2
- package/dist/chunk-Q2J542ST.js +0 -2
- package/dist/chunk-QT2LKB3P.js +0 -7
- package/dist/chunk-SHD27BQX.js +0 -6
- package/dist/chunk-WS2N27RX.js +0 -3
- package/dist/chunk-YT52WLBF.js +0 -521
- package/dist/compliance-WJINB5DM.js +0 -6
- package/dist/config-schema-GUQY2QN7.js +0 -2
- package/dist/decision-loader-2XPZE4EZ.js +0 -2
- package/dist/dist-R3RWD35F.js +0 -2
- package/dist/dist-VXCZWVVJ.js +0 -2
- package/dist/doctor-QJ47XAUP.js +0 -2
- package/dist/init-HIBRSVUB.js +0 -2
- package/dist/list-5IUGP3ZB.js +0 -7
- package/dist/lore-loader-RVQI5GXL.js +0 -2
- package/dist/lore-loader-XY5MZRR2.js +0 -2
- package/dist/migrate-assessments-GEI5WMI2.js +0 -4
- package/dist/portal-check-Z3OCQEQR.js +0 -8
- package/dist/quiz-FE5UGAY2.js +0 -10
- package/dist/reindex-FO5VMZVQ.js +0 -2
- package/dist/serve-OY6XYL7F.js +0 -12
- package/dist/server-2MNROHF6.js +0 -7
- package/dist/session-tracker-MWJAJA6Z.js +0 -2
- package/dist/show-BOAVWZPZ.js +0 -7
- package/dist/status-A37ECYNJ.js +0 -6
- package/dist/sync-DLUBV5HQ.js +0 -2
- package/dist/team-NSP6PMPS.js +0 -2
- package/dist/tools-CERDNVCG.js +0 -2
- package/dist/university-content/courses/.purpose +0 -492
- package/dist/university-content/courses/para-001.json +0 -166
- package/dist/university-content/courses/para-101.json +0 -615
- package/dist/university-content/courses/para-201.json +0 -794
- package/dist/university-content/courses/para-301.json +0 -830
- package/dist/university-content/courses/para-401.json +0 -868
- package/dist/university-content/courses/para-501.json +0 -1166
- package/dist/university-content/courses/para-601.json +0 -719
- package/dist/university-content/courses/para-701.json +0 -807
- package/dist/university-content/plsat/.purpose +0 -162
- package/dist/university-content/plsat/v2.0.json +0 -760
- package/dist/university-content/plsat/v3.0.json +0 -3453
- package/dist/validate-C6SMKGYD.js +0 -9
- package/dist/workspace-MKSQN7B2.js +0 -2
- package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
- /package/dist/{chunk-BV5PRPLB.js → chunk-IZSBGW6E.js} +0 -0
- /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
|