@a-company/paradigm 5.38.0 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{accept-orchestration-OATWIRHP.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/{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/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/{chunk-5QOCKWK5.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/{chunk-HOBHJPTL.js → chunk-6SKSV5B2.js} +1 -1
- package/dist/{chunk-4L7665QV.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-4VKSEOXZ.js → chunk-LPBCQM5Y.js} +3 -3
- 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-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-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/{compliance-D7GD6ZYC.js → compliance-BNFWQPKM.js} +1 -1
- package/dist/config-schema-FLHRVZMI.js +2 -0
- package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.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-YGHBIJY5.js → diff-MF55KQZH.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- 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-FVZR3YJ4.js → flow-BGXOVE2V.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/init-M44SO65G.js +2 -0
- package/dist/{init-XYB62Q3X.js → init-V4KSEKPK.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 +4 -4
- package/dist/metrics-UESGUHTA.js +2 -0
- 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-M5PBZBJQ.js → orchestrate-RID7HHHH.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
- package/dist/{portal-check-ZMLVBIGW.js → portal-check-DV2VSJ5E.js} +1 -1
- package/dist/portal-compliance-JONQ4SOP.js +2 -0
- package/dist/{probe-3FTG6LYO.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/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
- package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.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-FEWSYS3Y.js → setup-ZSEC72BS.js} +1 -1
- package/dist/{shift-PC6C7NUX.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/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
- package/dist/status-S7Z5FVIE.js +6 -0
- package/dist/{summary-PYTEIJ4U.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-PDK64JXI.js → team-MGT66HZQ.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-XUQZTF3H.js +9 -0
- package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
- 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 +2 -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/dist/add-P76GEMGF.js +0 -8
- package/dist/chunk-JQKKVAAN.js +0 -2
- package/dist/chunk-NQ47TA6C.js +0 -111
- package/dist/chunk-ODVKPZZ4.js +0 -2
- package/dist/chunk-Q2J542ST.js +0 -2
- package/dist/chunk-RBLK34IA.js +0 -11
- package/dist/chunk-RN4VE6P3.js +0 -521
- package/dist/chunk-WS2N27RX.js +0 -3
- package/dist/config-schema-GUQY2QN7.js +0 -2
- package/dist/decision-loader-2XPZE4EZ.js +0 -2
- package/dist/doctor-WMVULMQD.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-compliance-6YR27IQU.js +0 -2
- package/dist/quiz-FE5UGAY2.js +0 -10
- package/dist/reindex-I6LPAKCC.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/tools-5ITPEPSV.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/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,56 @@
|
|
|
1
|
+
id: Q-para-101-welcome
|
|
2
|
+
title: 'PARA 101: Foundations — Welcome to Paradigm'
|
|
3
|
+
description: 'Quiz for lesson: Welcome to Paradigm'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: What is Paradigm best described as?
|
|
19
|
+
choices:
|
|
20
|
+
A: A JavaScript component library for building UIs
|
|
21
|
+
B: A code generation tool that scaffolds project boilerplate
|
|
22
|
+
C: A meta-framework that organizes how AI agents understand your codebase
|
|
23
|
+
D: A testing framework with built-in assertion helpers
|
|
24
|
+
E: A deployment pipeline tool for CI/CD
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: Paradigm is a meta-framework — it does not ship runtime code or components. Its purpose is to give AI agents structured context (symbols, purpose files, specifications) so they can navigate and modify codebases efficiently.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Which of the following is NOT one of Paradigm's three pillars?
|
|
29
|
+
choices:
|
|
30
|
+
A: Symbols
|
|
31
|
+
B: Purpose Files
|
|
32
|
+
C: Specifications
|
|
33
|
+
D: Runtime Middleware
|
|
34
|
+
E: All of the above are pillars
|
|
35
|
+
correct: D
|
|
36
|
+
explanation: Paradigm's three pillars are Symbols (the vocabulary), Purpose Files (the directory maps), and Specifications (the project rulebook). Runtime Middleware is not a Paradigm concept — Paradigm is metadata, not runtime code.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: What problem does Paradigm primarily solve for AI agents?
|
|
39
|
+
choices:
|
|
40
|
+
A: Slow compilation times in large TypeScript projects
|
|
41
|
+
B: Excessive token usage and missed context when navigating undocumented codebases
|
|
42
|
+
C: Lack of type safety in JavaScript applications
|
|
43
|
+
D: Difficulty deploying applications to cloud providers
|
|
44
|
+
E: Missing test coverage in legacy codebases
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: AI agents waste tokens exploring directories, guessing relationships, and re-reading files when a codebase has no structured context. Paradigm provides that structure so agents can find what they need in ~100 tokens instead of 2,000+.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: 'You open a .purpose file and see symbols prefixed with #, $, ^, !, and ~. A new team member asks what the ~ symbol means. What do you tell them?'
|
|
49
|
+
choices:
|
|
50
|
+
A: ~ marks a component — a documented code unit
|
|
51
|
+
B: ~ marks a flow — a multi-step process
|
|
52
|
+
C: ~ marks a gate — a security checkpoint
|
|
53
|
+
D: ~ marks a signal — an event notification
|
|
54
|
+
E: ~ marks an aspect — a cross-cutting rule, constraint, or configuration anchored to specific code
|
|
55
|
+
correct: E
|
|
56
|
+
explanation: 'The five symbols are: # (Component), $ (Flow), ^ (Gate), ! (Signal), and ~ (Aspect). Aspects represent cross-cutting concerns — rules, constraints, and configuration values that are anchored to specific lines of code. They are the only symbol type that requires code anchors.'
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-architecture-review
|
|
2
|
+
title: 'PARA 201: Architecture — Putting It All Together'
|
|
3
|
+
description: 'Quiz for lesson: Putting It All Together'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: A team invitation feature uses a token to accept invitations. The token was created by an admin. Should the accept action require the ^team-admin gate?
|
|
19
|
+
choices:
|
|
20
|
+
A: Yes — only admins should be able to modify team membership
|
|
21
|
+
B: No — the invitation token itself serves as proof of authorization, so any authenticated user with a valid token should be able to accept
|
|
22
|
+
C: Yes — ^team-admin is always required for team-related operations
|
|
23
|
+
D: No — acceptance actions should be completely public with no gates at all
|
|
24
|
+
E: It depends on whether the token has expired
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: The invitation token itself is the authorization. The admin already approved the invitation by creating it. Any authenticated user who possesses the valid token (received via email) should be able to accept. Requiring ^team-admin would make the feature useless — the invitee is not yet a team member, let alone an admin. The token acts as a delegated authorization from the admin.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: The walkthrough creates four components. Put them in the correct order of the $team-invitation-flow steps.
|
|
29
|
+
choices:
|
|
30
|
+
A: '#invitation-email → #invitation-token → #invitation-store → #invitation-service'
|
|
31
|
+
B: '#invitation-service → #invitation-token → #invitation-store → #invitation-email'
|
|
32
|
+
C: '#invitation-store → #invitation-service → #invitation-email → #invitation-token'
|
|
33
|
+
D: '#invitation-token → #invitation-email → #invitation-service → #invitation-store'
|
|
34
|
+
E: '#invitation-service → #invitation-email → #invitation-token → #invitation-store'
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: 'The flow is: (1) #invitation-service validates and creates, (2) #invitation-token generates the secure token, (3) #invitation-store persists the invitation, (4) #invitation-email sends the email. The service orchestrates, the token is needed before storage, and the email is sent last.'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: The feature building pattern ends with 'validate → implement'. Why does implementation come last?
|
|
39
|
+
choices:
|
|
40
|
+
A: Because Paradigm generates the implementation code automatically
|
|
41
|
+
B: Because implementation is the least important step
|
|
42
|
+
C: Because documenting architecture first ensures security is defined before code, AI agents can navigate immediately, and the team has a clear map
|
|
43
|
+
D: Because .purpose files must be committed before any source files
|
|
44
|
+
E: Because the validator rejects implementations that do not match definitions
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: 'Front-loading documentation has three benefits: (1) security gates are defined in portal.yaml before handler code exists, preventing auth as an afterthought, (2) AI agents can navigate the feature structure immediately, and (3) the team has a validated architectural map before writing any implementation.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: 'After defining all components for the invitation feature, you run paradigm_ripple on #invitation-service. What is this checking?'
|
|
49
|
+
choices:
|
|
50
|
+
A: Whether the invitation service's code compiles
|
|
51
|
+
B: Whether the service name follows naming conventions
|
|
52
|
+
C: 'What existing code and symbols would be affected by changes to #invitation-service'
|
|
53
|
+
D: Whether the service has enough test coverage
|
|
54
|
+
E: Whether the service's dependencies are installed
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: 'paradigm_ripple analyzes the dependency graph to show what would be impacted if #invitation-service changes. This reveals connections to flows, signals, gates, and other components — helping you understand the blast radius before implementation.'
|
|
57
|
+
- id: q5
|
|
58
|
+
question: 'You notice that ~audit-required applies-to ["#*Service"] and your new #invitation-service matches this pattern. What should you do?'
|
|
59
|
+
choices:
|
|
60
|
+
A: 'Rename #invitation-service to #invitation-handler to avoid the aspect'
|
|
61
|
+
B: Delete the ~audit-required aspect since it is too broad
|
|
62
|
+
C: 'Ensure the audit middleware is applied to #invitation-service and add aspects: ["~audit-required"] to its definition'
|
|
63
|
+
D: Nothing — aspects are enforced automatically by Paradigm
|
|
64
|
+
E: Create a new aspect ~invitation-audit specific to this service
|
|
65
|
+
correct: C
|
|
66
|
+
explanation: 'When a new component matches an existing aspect''s applies-to pattern, you should apply that aspect. This means ensuring the enforcement code (audit middleware) is used by the new service and documenting the relationship by adding aspects: ["~audit-required"] to the component''s .purpose definition.'
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
id: Q-para-201-aspect-graph
|
|
2
|
+
title: 'PARA 201: Architecture — The Aspect Graph'
|
|
3
|
+
description: 'Quiz for lesson: The Aspect Graph'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: Your team's rate limiter was recently changed from 100 req/min to 500 req/min, but no one updated the aspect definition. Which tool would catch this?
|
|
19
|
+
choices:
|
|
20
|
+
A: paradigm_aspect_search — it would find the stale value in search results
|
|
21
|
+
B: paradigm_aspect_drift — it compares code hashes at anchor line ranges and detects the change
|
|
22
|
+
C: paradigm_aspect_heatmap — it shows the aspect is no longer being accessed
|
|
23
|
+
D: paradigm_aspect_graph — it reveals the broken edge to the rate limiter component
|
|
24
|
+
E: paradigm_reindex — it automatically updates the aspect value during reindexing
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: paradigm_aspect_drift compares SHA-256 hashes of code at anchored line ranges against the hashes from the last scan. When the rate limiter code changed, the hash changed, flagging the anchor as drifted. The other tools don't detect code changes — reindex rebuilds the graph from YAML, which still has the old value.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Which aspect category best fits "JWT access tokens expire after 24 hours"?
|
|
29
|
+
choices:
|
|
30
|
+
A: rule — it defines a behavioral pattern that code must follow
|
|
31
|
+
B: decision — it captures an architectural choice
|
|
32
|
+
C: constraint — it is a hard limit that cannot be violated
|
|
33
|
+
D: configuration — it is a value that may differ across environments
|
|
34
|
+
E: invariant — it is a condition that must always hold true
|
|
35
|
+
correct: D
|
|
36
|
+
explanation: A JWT expiry duration is a configuration value — it could reasonably differ between environments (shorter in dev, longer in production). A constraint is a hard limitation (like "maximum 100 items per page"). A rule is a behavioral pattern. Configuration captures what specific value was set and where.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'An aspect has edges: [{symbol: "^authenticated", relation: "enforced-by"}]. What does this tell you?'
|
|
39
|
+
choices:
|
|
40
|
+
A: The aspect enforces the ^authenticated gate
|
|
41
|
+
B: The ^authenticated gate depends on the aspect existing
|
|
42
|
+
C: The ^authenticated gate is the mechanism that ensures the aspect holds true
|
|
43
|
+
D: The aspect and the gate are in conflict
|
|
44
|
+
E: The aspect will be removed if the gate is deleted
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: The enforced-by relation means the target symbol is what ensures the aspect's rule holds. Here, the ^authenticated gate is the checkpoint that enforces whatever the aspect defines. Aspects declare what must be true; gates enforce those truths. The edge makes this relationship explicit and queryable.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-aspects-and-anchors
|
|
2
|
+
title: 'PARA 201: Architecture — Aspects & Code Anchors'
|
|
3
|
+
description: 'Quiz for lesson: Aspects & Code Anchors'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: Why do aspects require anchors while other symbols do not?
|
|
19
|
+
choices:
|
|
20
|
+
A: Because aspects are more important than other symbols
|
|
21
|
+
B: Because without anchors, an aspect is an unenforced rule — a wish, not a constraint
|
|
22
|
+
C: Because YAML requires at least one nested field under aspects
|
|
23
|
+
D: Because AI agents cannot understand aspects without seeing the code
|
|
24
|
+
E: Because aspects are always defined in middleware files
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: An aspect without anchors is just a statement of intent with no proof of enforcement. Anchors point to the actual code that enforces the rule, making the aspect verifiable by tools, reviewable by developers, and auditable by compliance.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: The anchor `src/middleware/auth.ts:42-78` points to what?
|
|
29
|
+
choices:
|
|
30
|
+
A: Lines 42 and 78 only (two specific lines)
|
|
31
|
+
B: The 42nd through 78th characters on line 1
|
|
32
|
+
C: A range of lines from line 42 to line 78 inclusive
|
|
33
|
+
D: Column 42 through column 78 on every line in the file
|
|
34
|
+
E: The 42nd and 78th functions defined in the file
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: The range format (file:start-end) points to a block of consecutive lines. src/middleware/auth.ts:42-78 covers lines 42 through 78 inclusive — typically a complete function or middleware definition.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'You define `~cached` with `applies-to: ["#*-query"]`. You then create `#user-query` without applying the cache aspect. What should happen?'
|
|
39
|
+
choices:
|
|
40
|
+
A: Nothing — applies-to is just a suggestion
|
|
41
|
+
B: 'paradigm_aspect_check reports a coverage gap: #user-query matches the pattern but is not covered'
|
|
42
|
+
C: The build fails because the aspect is not applied
|
|
43
|
+
D: The component is automatically cached by Paradigm
|
|
44
|
+
E: '#user-query is renamed to #user-query-cached'
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'The applies-to field is declarative — it says ''this aspect should cover all components matching this pattern.'' When paradigm_aspect_check runs, it identifies #user-query as matching #*-query but not having the caching aspect applied, reporting a coverage gap.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: After a major refactor, several source files were renamed and moved. What is the risk to aspects?
|
|
49
|
+
choices:
|
|
50
|
+
A: No risk — aspects are tied to symbol names, not file paths
|
|
51
|
+
B: Anchor references break because they point to file paths and line numbers that may no longer exist
|
|
52
|
+
C: The aspect definitions are automatically updated by git
|
|
53
|
+
D: Aspects are deleted when their files move
|
|
54
|
+
E: The refactor cannot proceed if aspects exist
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: Anchors contain file paths and line numbers (e.g., src/middleware/audit.ts:15-35). When files are renamed, moved, or heavily edited, these references break. Running paradigm_aspect_check after refactoring catches this drift.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-component-patterns
|
|
2
|
+
title: 'PARA 201: Architecture — Component Patterns'
|
|
3
|
+
description: 'Quiz for lesson: Component Patterns'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: A Redis caching layer is used by the user service, the product service, and the search service. How should it be tagged?
|
|
19
|
+
choices:
|
|
20
|
+
A: 'tags: [feature, redis] — because users interact with cached data'
|
|
21
|
+
B: 'tags: [integration, redis] — because Redis is a third-party service'
|
|
22
|
+
C: 'tags: [state, cache, redis] — because it manages data storage'
|
|
23
|
+
D: 'tags: [infrastructure, redis] — because it is a foundational service'
|
|
24
|
+
E: Both C and D are acceptable, depending on whether caching is the primary purpose or a supporting capability
|
|
25
|
+
correct: E
|
|
26
|
+
explanation: 'If the component''s primary purpose is data caching (storing and retrieving cached data), tags: [state, cache, redis] is appropriate. If it is more of a foundational service that provides caching as infrastructure, tags: [infrastructure, cache, redis] fits. Both are valid interpretations.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: You have a 500-line module that handles payment processing AND sends email receipts. What should you do?
|
|
29
|
+
choices:
|
|
30
|
+
A: Keep it as one component — splitting would be premature optimization
|
|
31
|
+
B: 'Split into #payment-processor and #receipt-emailer — they have distinct responsibilities'
|
|
32
|
+
C: Create a $payment-receipt-flow instead of splitting
|
|
33
|
+
D: Add more tags to cover both responsibilities in one component
|
|
34
|
+
E: Move the email logic into the logger
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: Payment processing and email sending are distinct responsibilities that could change independently (e.g., switching email providers without touching payment logic). The module is also large (500 lines). Splitting into two focused components follows the 'split when responsibilities are distinct' guideline.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: Why should you check paradigm_history_fragility before modifying infrastructure components?
|
|
39
|
+
choices:
|
|
40
|
+
A: Because infrastructure components have more lines of code
|
|
41
|
+
B: Because many other components depend on them, making changes high-risk
|
|
42
|
+
C: Because infrastructure components are never tested
|
|
43
|
+
D: Because the fragility check automatically creates a backup
|
|
44
|
+
E: Because infrastructure tags prevent direct modification
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'Infrastructure components (logger, config-loader, database-pool) are foundational — many other components depend on them. A breaking change to #database-pool could cascade across the entire application. Fragility analysis warns you about this risk before you make changes.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: What is wrong with splitting a payment module into `#payment-step-1` and `#payment-step-2`?
|
|
49
|
+
choices:
|
|
50
|
+
A: Components cannot have numbers in their names
|
|
51
|
+
B: There should be three components minimum
|
|
52
|
+
C: The names are non-descriptive and the split is artificial — neither component has an independent responsibility
|
|
53
|
+
D: Steps should be defined as a flow, not as components
|
|
54
|
+
E: The hyphen before the number violates kebab-case
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: 'If you cannot describe a component without referencing ''the other half,'' the split is artificial. #payment-step-1 and #payment-step-2 are not independent responsibilities — they are an arbitrary division of a single unit. Keep them as one component with a clear description.'
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-cross-cutting-concerns
|
|
2
|
+
title: 'PARA 201: Architecture — Cross-Cutting Concerns'
|
|
3
|
+
description: 'Quiz for lesson: Cross-Cutting Concerns'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: All API handlers must validate input against a defined schema. Should this be modeled as a gate, signal, or aspect?
|
|
19
|
+
choices:
|
|
20
|
+
A: ^ gate — it checks a condition before processing
|
|
21
|
+
B: '! signal — it fires when validation fails'
|
|
22
|
+
C: ~ aspect — it is a structural pattern applied across all handlers
|
|
23
|
+
D: $ flow — it is a step in the request processing flow
|
|
24
|
+
E: '# component — it is a validation utility'
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: Input validation across all handlers is a cross-cutting concern — the same pattern (validate against a schema) applies to every handler. This is an aspect (~validated), not a gate (gates check conditions like authorization, not input format) or a signal (validation is a structural requirement, not an event).
|
|
27
|
+
- id: q2
|
|
28
|
+
question: 'An aspect `~cached` has `applies-to: ["#*-query"]`. You create `#user-query` without applying caching. What is the recommended action?'
|
|
29
|
+
choices:
|
|
30
|
+
A: Nothing — aspects are just documentation
|
|
31
|
+
B: Delete the ~cached aspect since it does not apply universally
|
|
32
|
+
C: 'Apply the caching pattern to #user-query, since it matches the applies-to pattern'
|
|
33
|
+
D: 'Rename #user-query to #user-fetch to avoid matching the pattern'
|
|
34
|
+
E: 'Add an exception for #user-query in the aspect definition'
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: 'When a new component matches an aspect''s applies-to pattern, the aspect should be applied. If ~cached applies to all #*-query components, then #user-query should use the caching pattern. If there is a genuine reason to exempt it, document that exception rather than working around the naming.'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: Why is a rate limiter classified as an aspect (~rate-limited) rather than a gate (^rate-limited)?
|
|
39
|
+
choices:
|
|
40
|
+
A: Because rate limiters are implemented in middleware
|
|
41
|
+
B: Because rate limiters do not return 403 status codes
|
|
42
|
+
C: Because rate limiting is a structural pattern applied across many endpoints, not a per-resource authorization check
|
|
43
|
+
D: Because rate limiters do not require authentication
|
|
44
|
+
E: Because the ~ prefix is alphabetically closer to 'rate'
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: Gates check specific conditions per request — 'is this user allowed to access this resource?' or 'is this feature enabled?' Rate limiting is a different concern — it applies the same pattern (request counting and throttling) across many endpoints as a structural rule. This cross-cutting nature makes it an aspect.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: After a large refactor that moved files, what is the correct procedure for maintaining aspects?
|
|
49
|
+
choices:
|
|
50
|
+
A: Delete all aspects and recreate them from scratch
|
|
51
|
+
B: Run paradigm_aspect_check to find broken anchors, then update the anchor paths in .purpose files
|
|
52
|
+
C: Aspects automatically update their anchors when files move
|
|
53
|
+
D: Ignore broken anchors — they will fix themselves on the next paradigm scan
|
|
54
|
+
E: Convert all aspects to gates since gates do not have anchors
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: After refactoring, run paradigm_aspect_check to identify which anchors now point to moved or renamed files. Then update the anchors in the .purpose files to reflect the new file paths and line numbers. This maintenance is the trade-off for having verifiable enforcement code.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-disciplines
|
|
2
|
+
title: 'PARA 201: Architecture — Disciplines'
|
|
3
|
+
description: 'Quiz for lesson: Disciplines'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: In a web discipline project, what symbol type should a frontend hook like `useAuth` be classified as?
|
|
19
|
+
choices:
|
|
20
|
+
A: '! signal — hooks fire events'
|
|
21
|
+
B: ^ gate — hooks check conditions
|
|
22
|
+
C: '# component — hooks are code units that encapsulate logic'
|
|
23
|
+
D: $ flow — hooks define sequences
|
|
24
|
+
E: ~ aspect — hooks are cross-cutting concerns
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: 'Hooks are code units, not events. A frontend hook like useAuth encapsulates authentication logic — it is #useAuth, a component. The ! signal prefix is reserved for events that trigger decoupled side effects, which is not what hooks do.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: A project has `src/client/` for frontend and `src/server/` for backend code. Which discipline should be used?
|
|
29
|
+
choices:
|
|
30
|
+
A: web — because the client directory is listed first
|
|
31
|
+
B: backend — because server code is more important
|
|
32
|
+
C: fullstack — it combines both web and backend mappings based on directory path
|
|
33
|
+
D: library — because the code is shared between client and server
|
|
34
|
+
E: cli — because the server might have CLI commands
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: 'The fullstack discipline combines web and backend mappings. It uses the directory path to determine which mapping applies: src/client/ uses web discipline rules, src/server/ uses backend rules.'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: What three things does the discipline setting affect in Paradigm tooling?
|
|
39
|
+
choices:
|
|
40
|
+
A: Build output, test runner, deployment target
|
|
41
|
+
B: Navigator generation, logging conventions, gate recommendations
|
|
42
|
+
C: File naming, import paths, type definitions
|
|
43
|
+
D: Package manager, bundler, linter configuration
|
|
44
|
+
E: Database schema, API schema, UI schema
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'The discipline affects: (1) navigator generation — how paradigm scan categorizes directories, (2) logging conventions — which log methods are conventional for each directory, and (3) gate recommendations — what paradigm_gates_for_route suggests.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: Your backend project has a `policies/` directory for authorization policies. You want Paradigm to treat them as gates. How do you configure this?
|
|
49
|
+
choices:
|
|
50
|
+
A: Rename the directory to middleware/
|
|
51
|
+
B: Change the discipline to 'web' since it handles auth differently
|
|
52
|
+
C: 'Add a custom-mappings entry in config.yaml: "policies/": "^"'
|
|
53
|
+
D: Create a .purpose file with only gate definitions
|
|
54
|
+
E: It is not possible — gates can only live in middleware/
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: 'Custom mappings in config.yaml extend the discipline defaults. Adding "policies/": "^" tells Paradigm to treat files in the policies/ directory as gates, without changing the overall discipline or renaming directories.'
|
|
57
|
+
- id: q5
|
|
58
|
+
question: 'A Next.js project runs `paradigm init`. The output shows `discipline: fullstack` and `stack: nextjs`. What does the stack preset add that the discipline alone does not provide?'
|
|
59
|
+
choices:
|
|
60
|
+
A: A completely different set of symbol mappings that replaces the discipline
|
|
61
|
+
B: Framework-specific scan hints, refined symbol mappings for Next.js patterns like app/ routes, and purpose-required paths
|
|
62
|
+
C: Automatic code generation for Next.js boilerplate
|
|
63
|
+
D: A Next.js-specific version of portal.yaml with pre-defined gates
|
|
64
|
+
E: Nothing — stack presets and disciplines are the same thing
|
|
65
|
+
correct: B
|
|
66
|
+
explanation: Stack presets layer framework-specific configuration on top of disciplines. For Next.js, the preset adds knowledge about app/ directory routing, server components, API route handlers, and other Next.js-specific patterns. It refines the generic fullstack discipline with framework-aware scan hints and purpose-required paths. Presets extend disciplines — they do not replace them.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-flows-deep-dive
|
|
2
|
+
title: 'PARA 201: Architecture — Flows in Depth'
|
|
3
|
+
description: 'Quiz for lesson: Flows in Depth'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: A controller calls a service, which queries a database and returns a result. Should this be a $flow?
|
|
19
|
+
choices:
|
|
20
|
+
A: Yes — any multi-step process should be a flow
|
|
21
|
+
B: Yes — database queries always require flow documentation
|
|
22
|
+
C: No — this is a two-component interaction with no sequence ambiguity
|
|
23
|
+
D: No — flows can only be used for user-facing features
|
|
24
|
+
E: It depends on whether the service emits a signal
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: A flow is warranted when logic spans three or more components in a specific order. A controller calling a service (with its database query) is a straightforward two-component interaction that can be documented on the component itself.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Where should a $checkout-flow be defined if the checkout process starts in the cart module?
|
|
29
|
+
choices:
|
|
30
|
+
A: In .paradigm/flows/checkout.yaml
|
|
31
|
+
B: In portal.yaml under a flows section
|
|
32
|
+
C: In src/cart/.purpose, since the cart module initiates the flow
|
|
33
|
+
D: In every .purpose file of every component involved in the flow
|
|
34
|
+
E: In a standalone checkout-flow.purpose file at the project root
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: Flows are defined in the .purpose file of the initiating component's directory. Since the checkout flow starts in the cart module, it belongs in src/cart/.purpose. The flow will reference components from other directories.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'What does `paradigm_flow_check` with `checkImplementation: true` verify?'
|
|
39
|
+
choices:
|
|
40
|
+
A: That the flow executes correctly at runtime
|
|
41
|
+
B: That referenced components exist in .purpose files, actions are implemented, and signals are emitted
|
|
42
|
+
C: That the flow has fewer than 10 steps
|
|
43
|
+
D: That all flows use the same naming convention
|
|
44
|
+
E: That the flow is referenced in portal.yaml
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'With checkImplementation: true, the validator performs deep checks: it verifies that referenced #components exist in .purpose files, that the named actions are implemented in the actual codebase, and that listed signals are actually emitted. This catches documentation-code drift.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: What is the fundamental nature of a Paradigm flow?
|
|
49
|
+
choices:
|
|
50
|
+
A: A workflow engine that orchestrates service calls at runtime
|
|
51
|
+
B: A saga implementation with rollback support
|
|
52
|
+
C: Documentation metadata describing what happens in a sequence, not how to execute it
|
|
53
|
+
D: A state machine that transitions between components
|
|
54
|
+
E: An event bus configuration defining message routing
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: Flows are documentation, not orchestration. They describe the sequence of operations for humans and AI agents to understand. Your code still handles the actual service calls, error handling, and state management however you choose to implement it.
|
|
57
|
+
- id: q5
|
|
58
|
+
question: '`$checkout-flow` lists `relatedFlows: [$payment-flow]` and `$payment-flow` lists `relatedFlows: [$checkout-flow]`. What does `paradigm_flow_check` report?'
|
|
59
|
+
choices:
|
|
60
|
+
A: No issues — bidirectional references are valid
|
|
61
|
+
B: 'A circular dependency: $checkout-flow → $payment-flow → $checkout-flow'
|
|
62
|
+
C: A missing step error — related flows must appear as steps
|
|
63
|
+
D: A naming violation — flows cannot reference each other
|
|
64
|
+
E: A warning about duplicate flow definitions
|
|
65
|
+
correct: B
|
|
66
|
+
explanation: When flows reference each other in a cycle via relatedFlows, Paradigm detects it as a circular dependency using depth-first search. The resolution is to extract shared logic into a third flow, remove one direction of the dependency, or replace direct flow references with signal-based communication.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-gates-deep-dive
|
|
2
|
+
title: 'PARA 201: Architecture — Gates in Depth'
|
|
3
|
+
description: 'Quiz for lesson: Gates in Depth'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: A gate checks whether a user's subscription is active before allowing access to premium content. What type should this gate be?
|
|
19
|
+
choices:
|
|
20
|
+
A: auth — it verifies the user's identity
|
|
21
|
+
B: role — it checks the user's permission level
|
|
22
|
+
C: ownership — it verifies resource ownership
|
|
23
|
+
D: state-precondition — it verifies the system is in the right condition
|
|
24
|
+
E: integration — it checks a third-party service
|
|
25
|
+
correct: D
|
|
26
|
+
explanation: This gate verifies system state — whether the subscription is active — rather than identity (auth), permission level (role), or resource ownership. State-precondition gates check conditions about the current state of data.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: 'What is wrong with this gate check expression: `check: user is admin`?'
|
|
29
|
+
choices:
|
|
30
|
+
A: Nothing — it is clear and concise
|
|
31
|
+
B: It should use JavaScript syntax, not English
|
|
32
|
+
C: It is too vague — a developer cannot implement it without more information
|
|
33
|
+
D: It is missing the req. prefix
|
|
34
|
+
E: Gate checks must be written in YAML, not pseudo-code
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: 'Check expressions should be precise enough to implement from reading the expression. ''user is admin'' does not specify how admin status is determined — is it a boolean field? A role in an array? A separate table? A better expression: project.admins.includes(req.user.id).'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'A route requires `[^authenticated, ^org-admin, ^billing-enabled]`. The `^org-admin` gate has `requires: [^authenticated]`. What happens at runtime?'
|
|
39
|
+
choices:
|
|
40
|
+
A: ^authenticated runs twice — once from the route, once from ^org-admin's requires
|
|
41
|
+
B: ^authenticated runs once, ^org-admin runs once, ^billing-enabled runs once — in that order
|
|
42
|
+
C: An error is thrown because ^authenticated is listed both in the route and in requires
|
|
43
|
+
D: All three gates run in parallel for performance
|
|
44
|
+
E: Only ^billing-enabled runs because the other two are implicit from requires
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'Gate chains prevent redundant checks. ^authenticated is required by ^org-admin, but since the route lists ^authenticated first, it runs once and subsequent gates know it already passed. The three gates execute in order: authenticated, org-admin, billing-enabled.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: When should the `effects` field be an empty array `[]`?
|
|
49
|
+
choices:
|
|
50
|
+
A: Never — every gate must have at least one prize
|
|
51
|
+
B: When the gate has no side effects to trigger on pass
|
|
52
|
+
C: When the gate is of type 'auth'
|
|
53
|
+
D: When the gate is used on GET routes only
|
|
54
|
+
E: When the gate has been deprecated
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: 'Use effects: [] when the gate has no side effects. Most gates simply allow or deny access without triggering additional actions. Effects are for special cases like gamification badges, onboarding rewards, or analytics events.'
|
|
57
|
+
- id: q5
|
|
58
|
+
question: 'portal.yaml says `"DELETE /api/posts/:id": [^authenticated, ^post-author]`, but the route handler only checks authentication, not authorship. What is the consequence?'
|
|
59
|
+
choices:
|
|
60
|
+
A: No consequence — portal.yaml is just documentation
|
|
61
|
+
B: The route will return 403 automatically based on portal.yaml
|
|
62
|
+
C: Any authenticated user can delete any post — a security vulnerability caused by the implementation not matching the specification
|
|
63
|
+
D: The paradigm scan command will fix the discrepancy automatically
|
|
64
|
+
E: The delete will fail silently
|
|
65
|
+
correct: C
|
|
66
|
+
explanation: portal.yaml defines what SHOULD happen, but your code must implement it. If the middleware only checks authentication without verifying post authorship, any logged-in user can delete any post. This is a security vulnerability caused by specification-implementation drift.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-portal-protocol
|
|
2
|
+
title: 'PARA 201: Architecture — The Portal Protocol'
|
|
3
|
+
description: 'Quiz for lesson: The Portal Protocol'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: You need to add `DELETE /api/teams/:id`. What is the FIRST step in the Portal Protocol?
|
|
19
|
+
choices:
|
|
20
|
+
A: Write the delete handler and add authentication middleware
|
|
21
|
+
B: Add the route to portal.yaml with [^authenticated]
|
|
22
|
+
C: Call paradigm_gates_for_route to get gate suggestions
|
|
23
|
+
D: Write a test for the 403 response
|
|
24
|
+
E: Create a ^team-admin gate in middleware
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: The Portal Protocol starts with asking Paradigm. Call paradigm_gates_for_route with the route and method to get suggestions based on existing patterns. This ensures you consider all necessary gates before implementation.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: 'Your portal.yaml specifies `"PUT /api/posts/:id": [^authenticated, ^post-author]`. Your middleware only checks ^authenticated. What is the security impact?'
|
|
29
|
+
choices:
|
|
30
|
+
A: None — portal.yaml automatically enforces all listed gates
|
|
31
|
+
B: Any authenticated user can edit any post, because the ^post-author check is missing from the implementation
|
|
32
|
+
C: The route will return 500 because of the missing gate
|
|
33
|
+
D: Paradigm will block the request at the framework level
|
|
34
|
+
E: The post-author gate runs automatically via the requires field
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: portal.yaml is a specification, not enforcement. If the middleware does not implement the ^post-author check, any authenticated user can edit any post. This is a security vulnerability caused by the implementation not matching the specification.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: In a web API, which HTTP status code should a failed authentication gate return, versus a failed authorization gate?
|
|
39
|
+
choices:
|
|
40
|
+
A: Both return 403 Forbidden
|
|
41
|
+
B: Authentication returns 401 Unauthorized; authorization returns 403 Forbidden
|
|
42
|
+
C: Authentication returns 403 Forbidden; authorization returns 401 Unauthorized
|
|
43
|
+
D: Both return 401 Unauthorized
|
|
44
|
+
E: Authentication returns 400 Bad Request; authorization returns 403 Forbidden
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: In the HTTP discipline, the standard distinguishes between authentication (who are you?) and authorization (are you allowed?). A failed auth gate (^authenticated) returns 401 Unauthorized. A failed role/ownership gate (^project-admin) returns 403 Forbidden. Note that this is the web API implementation — other disciplines express gate failure differently (a mobile app might show a login screen or disable a button; a CLI might exit with an error code).
|
|
47
|
+
- id: q4
|
|
48
|
+
question: Why does the Portal Protocol require defining gates BEFORE writing handler code?
|
|
49
|
+
choices:
|
|
50
|
+
A: Because Paradigm cannot parse handler code that already exists
|
|
51
|
+
B: Because it creates an auditable specification separate from implementation, preventing conditions as an afterthought
|
|
52
|
+
C: Because TypeScript requires gate types to be defined before use
|
|
53
|
+
D: Because AI agents refuse to write code without portal.yaml
|
|
54
|
+
E: Because gate middleware must be loaded before route handlers in the server stack
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: The Portal Protocol's core principle is specification before implementation. By specifying gates in portal.yaml first, you create an auditable specification that is separate from (and checkable against) the implementation. This prevents the common pattern of building features first and bolting on checks later.
|