# Introduction

Rather than end up with very long thread-mode discussions in the issue tracker we are taking some discussions to this wiki.

Here **summary** and consensus is possible in a way that takes longer and is less efficient on the tracker.  We can also take on topics that relate to multiple issues more easily.



---



# Table of some Wiki Discuss Issues

|ID|Summary|
|:-|:------|
|Issue 448 (on Google Code)|Mentor impersonation in proposal comments|
|Issue 463 (on Google Code)|Organization Administrators should be able to set a scoring system for their org|
|Issue 495 (on Google Code)|Melange Should Send Emails from Mentors/Org Admins to Students|
|Issue 619 (on Google Code)|User preferences page|

[Full list of WikiDiscuss issues](http://code.google.com/p/soc/issues/list?can=1&q=WikiDiscuss&sort=id&colspec=ID%20Summary) (13 are currently tagged)



---



# Topics

## Scoring and Ranking

Issue 463 (on Google Code): Scoring Schemes

  * Question: What should we do?

  * [ProposalReview](ProposalReview.md)

## TinyMCE

  * [TextEditinginMelange](TextEditinginMelange.md) - Will we rip it out and put a wiki in instead?

## Emails

Issue 495 (on Google Code): Emails

Several discussions in progress:

  * [UserCommunication](UserCommunication.md) - E-mails within Melange.

  * [NagEmails](NagEmails.md) - Automated E-Mails sent by melange.

  * [UserPreferencesPage](UserPreferencesPage.md) - Releveant for setting e-mail and notification preferences.

## Dashboards etc

Issue 619 (on Google Code): User Preferences Page

  * What user preferences are there? Can we rate them by importance/utility?
  * [UserPreferencesPage](UserPreferencesPage.md).