<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE TIP SYSTEM "http://www.tcl.tk/cgi-bin/tct/tip/tipxml.dtd">
<!-- Converted at Sun May 26 01:32:17 GMT 2013 -->
<!-- TIP AutoGenerator - written by Donal K. Fellows -->

<TIP number='2'>
<header><title>TIP Guidelines</title><author address="mailto:a.kupries@westend.com">Andreas Kupries</author><author address="mailto:fellowsd@cs.man.ac.uk">Donal K. Fellows</author><author address="mailto:dgp@users.sourceforge.net">Don Porter</author><author address="mailto:no@spam.com">Mo DeJong</author><author address="mailto:lvirden@yahoo.com">Larry W. Virden</author><author address="mailto:kennykb@acm.org">Kevin Kenny</author><status type='process' state='draft' vote='prior'>$Revision: 1.38 $</status><history></history><created day='12' month='sep' year='2000' /></header>
<abstract>This document describes and defines the editorial process a TCT document (TIP) has to go through before accepted as official.</abstract>
<body><section title="What is a TIP?">
<para>TIP stands for Tcl Improvement Proposal. A TIP is a design document providing information to the Tcl community, or describing a new feature for Tcl. The TIP should provide a concise technical specification of the feature and a rationale for the feature.</para>
<para>We intend TIPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Tcl. The TIP author is responsible for building consensus within the community and documenting dissenting opinions.</para>
<para>Because the TIPs are maintained as text files under revision control, their history is the historical record of the feature proposal. This historical record is available by the normal (CVS?) commands for retrieving older revisions. For those without direct access to the CVS tree, you can browse the current and past TIP revisions [<url ref="http://www.cs.man.ac.uk/fellowsd-bin/TIP/"/>].</para>
<para>Further details on the arguments behind the evolution of the TIP concept and formatting can be found in the archive of the <emph style="italic">tclcore</emph> mailing list [<url ref="http://aspn.activestate.com/ASPN/Mail/Browse/Threaded/tcl-core"/>].</para>
</section>
<section title="Kinds of TIPs">
<para>There are three kinds of TIPs. A project TIP describes a new (or significantly updated) feature or implementation for Tcl. An informative TIP describes a Tcl design issue, or provides general guidelines or information to the Tcl community, but does not propose a new feature. A process TIP is like an informative TIP but the provided guidelines are mandatory in a certain context (as specified in the TIP itself).</para>
<para>Voting by the TCT as per the charter (see <tipref type="text" tip="0"/>) is required to make a project or process TIP official.</para>
</section>
<section title="TIP Workflow">
<para>The TIP editor, Donal K. Fellows &lt;<url ref="mailto:donal.k.fellows@manchester.ac.uk"/>&gt; <emph style="italic">pro tem</emph>, is responsible for assigning numbers to each TIP and managing its status on behalf of authors.</para>
<para>Everyone in the community can submit a TIP to the TIP editor. It should contain at least a proposed title and a rough, but fleshed out, draft of the TIP. It <emph style="italic">must</emph> include a copyright statement that permits the normal business of the TIP process as described here.</para>
<para>If the TIP editor approves, he will assign the TIP a number, label it as either project, process or informational, give it status <emph style="italic">Draft</emph>, and create and check-in the initial draft of the TIP. The TIP editor will not unreasonably deny a TIP. Reasons for denying TIP status include gross malformatting, inappropriate copyright, duplication of effort, being technically unsound, or not in keeping with the Tcl philosophy; the TCT and after that John Ousterhout &lt;<url ref="mailto:ouster@pacbell.net"/>&gt; is the final arbitrator of the latter, as defined in the charter (<tipref type="text" tip="0"/>).</para>
<para>Discussion concerning a TIP should initially be kept out of the tclcore and tct mailing lists. Instead, comments should be sent to, and collected by, the TIP author, who has the responsibility to incorporate these comments into the document.</para>
<para><emph style="italic">Note:</emph> It has been proposed to create a new mailing list for each TIP to handle its discussion. Rejection and finalization of the TIP closes the mailing list, but not the archive. Together with the CVS history a complete record of the development of a TIP will be available.</para>
<para>The authors of the TIP are responsible for writing the TIP and marshaling community support for it. The structure of a TIP is described in detail in <tipref type="text" tip="3"/>.</para>
<para>A project TIP consists in principle of two parts, a design document and a reference implementation. The TIP will not normally be reviewed and accepted before a reference implementation is begun so that the amount of time between acceptance and a final implementation can be minimized. The implementation can be given in the form of code, patch, or URL to same, and <emph style="italic">must</emph> be applied to the Tcl/Tk core before it can be considered <emph style="italic">Final</emph>; while small reference implementations may be placed inside the TIP itself, large reference implementations should be held externally and linked to by reference (typically a URL). Authors are encouraged to use the SourceForge Patch trackers for this purpose.</para>
<para>Process and Informational TIPs do not need an implementation.</para>
<para>TIP authors are responsible for collecting community feedback on a TIP before submitting it for review (the creation of a TIP is a part of that review process.) However, wherever possible, long open-ended discussions on public mailing lists should be avoided. A better strategy is to encourage public feedback directly to the TIP author, who collects and integrates the comments back into the TIP.</para>
<para>Once the authors have completed a TIP, they must inform the Tcl Core Team that it is ready for review. TIPs are reviewed by the Tcl Core Team and (for Project TIPs) the maintainers for the relevant parts of the core, who may accept or reject a TIP or send it back to the author(s) for revision (as detailed in <tipref type="text" tip="0"/>.) The acceptance or rejection of a TIP will cause its state to be changed accordingly to <emph style="italic">Accepted</emph> or <emph style="italic">Rejected</emph>.</para>
<para>Once a TIP requiring a reference implementation has been accepted, the reference implementation must be completed. When the reference implementation is complete and accepted by the TCT (who can reject it if they feel the implementation would damage the rest of the core) the status will be changed to <emph style="italic">Final</emph>. This is usually done by the TIP Editor, as advised by the responsible Tcl/Tk maintainer.</para>
<para>A TIP can also be assigned status <emph style="italic">Deferred</emph>. The TIP author or the editor can assign the TIP this status when no progress is being made on the TIP. Once a TIP is deferred, the TIP editor can re-assign it to <emph style="italic">Draft</emph> status.</para>
<para>A TIP can also be <emph style="italic">Withdrawn</emph> by the author. Perhaps after all is said and done, the author believes it was not a good idea. It is still important to have a record of this fact. It is expected that <emph style="italic">Accepted</emph> TIPs will only be withdrawn very rarely, and <emph style="italic">Final</emph> TIPs only under exceptional circumstances.</para>
<para>TIP workflow is as follows:</para>
<image src="2workflow" caption="TIP Workflow" />
<para>Some informative TIPs may also have a status of <emph style="italic">Active</emph> if they are never meant to be completed. For example: <tipref type="text" tip="1"/>.</para>
</section>
<section title="What belongs in a successful TIP?">
<para>Each TIP should have the following parts:</para>
<enumerate><item.e index='1'><para><emph style="italic">Title</emph> - a short, descriptive title.</para></item.e><item.e index='2'><para><emph style="italic">Author</emph>(s) - names and contact info (email addresses) for each author.</para></item.e><item.e index='3'><para><emph style="italic">Abstract</emph> - a short (typically &lt;200 word) description of the technical issue being addressed.</para></item.e><item.e index='4'><para><emph style="italic">Copyright</emph>/public domain - Each TIP must either be explicitly labelled in the public domain (the preferred &apos;license&apos;) or the Open Publication License [<url ref="http://www.opencontent.org/openpub/"/>]. It is recommended that this be done by making the last section of the document be a copyright heading, with the body describing what copyright (if any) the document is released under.</para></item.e><item.e index='5'><para><emph style="italic">Specification</emph> - Project TIPs should have a technical specification that should describe the syntax and semantics of any new language feature. The specification should be detailed enough to allow (competing) interoperable implementations for any of the current Tcl platforms.</para></item.e><item.e index='6'><para><emph style="italic">Rationale</emph> - The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, <emph style="italic">e.g.</emph> how the feature is supported in other languages.</para><para>The rationale should provide evidence of consensus within the community and discuss important objections or concerns raised during discussion.</para></item.e><item.e index='7'><para><emph style="italic">Reference Implementation</emph> - The reference implementation must be completed before any TIP requiring such is given status <emph style="italic">Final</emph>, but it need not be completed before the TIP is accepted. It is better to finish the specification and rationale first and reach consensus on it before writing code.</para><para>The final implementation must include test code and documentation appropriate for either the Tcl language reference or the standard library reference.</para></item.e></enumerate>
</section>
<section title="TIP Style">
<para>TIPs are written in plain ASCII text with an RFC822-like header and embedded sequences suitable for Wiki-like processing as indicated in <tipref type="text" tip="3"/>.</para>
<para>There are Tcl scripts that convert the TIP into HTML for viewing on the web. Scripts for producing other formats are available too, for example LaTeX and plain ASCII.</para>
</section>
<section title="Sample Project TIP">
<para>(With thanks to William H. Duquette &lt;<url ref="mailto:William.H.Duquette@jpl.nasa.gov"/>&gt; for suggesting this.) Note that the TIP Editor is responsible for allocating TIP numbers, so you can leave that unfilled.</para>
<verbatim><vline encoding='base64'>VElQOiAgICAgICAgICAgPz8/</vline><vline encoding='base64'>VGl0bGU6ICAgICAgICAgVGhlIFRJUCBUaXRsZSBhcyBQbGFpbiBUZXh0</vline><vline encoding='base64'>VmVyc2lvbjogICAgICAgJFJldmlzaW9uOiAxLjM4ICQ=</vline><vline encoding='base64'>QXV0aG9yOiAgICAgICAgQXV0aG9yIE5hbWUgPGF1dGhvckBzb21ld2hlcmUuY29tPg==</vline><vline encoding='base64'>U3RhdGU6ICAgICAgICAgRHJhZnQ=</vline><vline encoding='base64'>VHlwZTogICAgICAgICAgUHJvamVjdA==</vline><vline encoding='base64'>VGNsLVZlcnNpb246ICAgOC40</vline><vline encoding='base64'>Vm90ZTogICAgICAgICAgUGVuZGluZw==</vline><vline encoding='base64'>Q3JlYXRlZDogICAgICAgMzEtRmViLTE5OTk=</vline><vline encoding='base64'>UG9zdC1IaXN0b3J5Og==</vline><vline encoding='base64'></vline><vline encoding='base64'>fiBBYnN0cmFjdA==</vline><vline encoding='base64'></vline><vline encoding='base64'>VGhpcyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byB3cml0ZSBhIHNpbXBsZSBwcm9qZWN0IFRJUC4gIFRoaXMgaXMgdGhl</vline><vline encoding='base64'>YWJzdHJhY3Qgd2hpY2ggc2hvdWxkIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcGFyYWdyYXBoIG9mIHVuZGVyIDIwMA==</vline><vline encoding='base64'>d29yZHMuICBJZiB5b3UgbmVlZCBtb3JlIHRoYW4gdGhpcywgeW91IHNob3VsZCBzdG9wIGFuZCB0aGluayBhYm91dA==</vline><vline encoding='base64'>d3JpdGluZyBhIHJlYWwgYWJzdHJhY3QsIG5vdCBhIHdob2xlIHNlY3Rpb24hICA6Xik=</vline><vline encoding='base64'></vline><vline encoding='base64'>fiBTb21lIFNlY3Rpb25z</vline><vline encoding='base64'></vline><vline encoding='base64'>WWFkYSB5YWRhIHlhZGEuICBMb29rIGF0IHRoZSBzb3VyY2VzIHRvIHRoZSB2YXJpb3VzIFRJUHMgZm9yIHRyaWNrcw==</vline><vline encoding='base64'>b24gaG93IHRvIGRvIHZhcmlvdXMgdGhpbmdzLiAgJydOb3RlIHRoYXQgZm9yIGNvbXBsZXRlIGxlZ2FsIHNhZmV0eSw=</vline><vline encoding='base64'>eW91IG11c3Qgc3BlY2lmeSB3aGF0IGNvcHlyaWdodCBpcyB1c2VkLicnICBXZSBwcmVmZXIgcHVibGljIGRvbWFpbiw=</vline><vline encoding='base64'>YXMgaXQgYWxsb3dzIG90aGVycyAobm90YWJseSB0aGUgVElQIGVkaXRvcihzKSkgdG8gbWFpbnRhaW4gdGhlIFRJUA==</vline><vline encoding='base64'>YXMgbmVjZXNzYXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHNlZWsgcGVybWlzc2lvbi4=</vline><vline encoding='base64'></vline><vline encoding='base64'>SSBhbHNvIHByZWZlciB0byBtYWtlIHN1cmUgVElQIGFuZCBzZWN0aW9uIHRpdGxlcyBhcmUgY2FwaXRhbGl6ZWQ=</vline><vline encoding='base64'>YWNjb3JkaW5nIHRvIHRoZSB1c3VhbCBydWxlcyBvZiBFbmdsaXNoLg==</vline><vline encoding='base64'></vline><vline encoding='base64'>fiBDb3B5cmlnaHQ=</vline><vline encoding='base64'></vline><vline encoding='base64'>VGhpcyBkb2N1bWVudCBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4u</vline></verbatim>
<para>A more complex example is <tipref type="text" tip="7"/> by Kevin Kenny &lt;<url ref="mailto:kennykb@acm.org"/>&gt; (the source is at <url ref="http://www.cs.man.ac.uk/fellowsd-bin/TIP/7.tip"/>) and which includes demonstrations of how to use advanced features like figures and verbatim text. His is a very high quality TIP though, and it has been though several revisions; don&apos;t feel too put off if your first attempt isn&apos;t quite as good...</para>
</section>
<section title="Patches">
<para>For preference, patches to Tcl should be stored separately on another website or submitted as a separate file. This is because (quite rightly) the <url ref="news:comp.lang.tcl.announce"/> moderator does not allow patches to be posted on that newsgroup. If you want a patch to be incorporated into the archive, please contact the TIP Editor.</para>
<rule/>
</section>
<section title="Comments">
<quote>From Don Porter &lt;mailto: dgp@users.sourceforge.net &gt; :</quote>
<enumerate><item.e index='1'><para>It is confusing that &quot;project&quot; TIPs defined here do not correspond to &quot;projects&quot; defined in <tipref type="text" tip="0"/>.</para><enumerate><item.e index='2'><para>The TIP Workflow section should mention the web-based drafting service <tipref type="text" tip="13"/> as another way for members of the community to add their comments to a draft TIP.</para></item.e><item.e index='3'><para>The TIP Workflow section calls for TCT acceptance of a project TIP implementation to move it from state Accepted to state Final. This conflicts with <tipref type="text" tip="0"/> which delegates that acceptance task to maintainers.</para></item.e><item.e index='4'><para>It is not clear how the TIP workflow state diagram applies to non-project TIPs. Non-project TIPs do not have an implementation. Do they move straight from state Draft to state Final when they receive TCT approval? Or do they just stay in state Accepted forever with no need to move to state Final?</para></item.e><item.e index='5'><para>It should be noted in the TIP Workflow section that according to <tipref type="text" tip="0"/> a project TIP cannot be approved (and therefore should not be sponsored) until the TIP names a committed implementor.</para></item.e><item.e index='6'><para>The Patches section indicates that patches in the TIP are incompatible with posting to comp.lang.tcl.announce, so earlier sections of this TIP should not indicate that including patches in the TIP is an acceptable practice.</para></item.e><item.e index='7'><para>Should process TIPs be reserved for those proposals that revise <tipref type="text" tip="0"/> and require 2/3 support of the entire TCT?</para></item.e></enumerate></item.e></enumerate>
<para>From Mo DeJong:</para>
<para>It seems like we have a documentation problem with respect to how a TIP becomes &quot;un-rejected&quot;.</para>
<para>The text says:</para>
<quote>... may accept or reject a TIP or send it back to the author(s) for revision&quot;</quote>
<para>But the state transition diagram shows no way to go from <emph style="italic">Rejected</emph> to <emph style="italic">Draft</emph>. What becomes of a TIP after it is put up for a vote? If it is rejected, should the author create a new TIP number or can they rewrite the original TIP?</para>
<rule/>
<para><emph style="italic">Larry W. Virden writes:</emph> I would really find it useful if upon submission of a TIP, a web page, perhaps on the Tcl&apos;ers Wiki or elsewhere, would be referenced in the TIP itself. This web page would contain a summary of the discussion to date, perhaps containing urls to relevant postings within the tct archives, etc. This page could be used by those looking at the archive to quickly determine the state of the discussion, as well as the reasons for the final disposition of the TIP.</para>
<para><emph style="italic">Donal Fellows responds:</emph> Feel free to establish such things. But I&apos;ve definitely not got time to maintain them, and especially haven&apos;t got time to go back through the archives to make the resource complete for those TIPs that have already been voted upon.</para>
<rule/>
</section>
<section title="Copyright">
<para>This document has been placed in the public domain.</para>
</section>
</body></TIP>
