<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "Status and Planning Reporting";
$pageKeywords	= "development process";
$pageAuthor		= "Bjorn Freeman-Benson Nov 20/05";

ob_start();
?>
    <div id="maincontent">
	<div id="midcolumn">
		
<h1>Status and Planning Reporting</h1>
<p><i>version 029 - December 10, 2005</i></p>
<p><a href="index.php">[This is one page of the larger document.]</a></p>
<h2>Status and Planning Reporting</h2>

<p>The goal is to have a mostly-automated planning and reporting system for Eclipse
projects that:</p>
<ul>
  <li>Replaces the static HTML quarterly status reports with an machine-processed
    XML file</li>
  <li>Reduces each project's overhead of keeping this information up-to-date</li>
  <li>Automatically reminds project leaders when the information needs refreshing</li>
  <li>Publishes information on eclipse.org web pages.&nbsp;<br>
 For example,
    the <a href="/projects/timeline/">prototype
    master timeline</a> has been useful - we can imagine other useful reports
    like that.</li>
</ul>
<h2 align="left">File Formats</h2>
<p align="left">See the <a href="project-status-infrastructure.php">Project
Status Reporting Infrastructure page</a> for details of the current file formats
and locations.</p>
<p>Historically, there were a number of other files that contributed pieces of
this information. These files (such as the <a href="old-status-and-planning-reporting.php">.dates.txt
file</a>) are deprecated and replaced with the <a href="project-status-infrastructure.php">new
infrastructure</a>.</p>
<h2>Reports</h2>
<p>Here are a number of initial reports to be generated from this information:</p>
<ol>
  <li>
    <p align="left"><b>Release Timeline. </b>Like the <a href="/projects/timeline/">prototype
    master timeline</a>. The master timeline will not include Technology
    projects (or, in the future, Research projects) on the theory that
    Technology projects are not &quot;major Eclipse projects&quot;.</li>
  <li>
    <p align="left"><b>Milestone Timeline.</b> Same thing, but showing all the
    milestones as well. It will be big and probably fairly cluttered.</li>
  <li>
    <p align="left"><b>Quick Reference. </b>A one-page per project summary of
    all the projects. Useful for printing and flipping through on an airplane
    trip.</li>
  <li><b>Validity.</b> A report showing the &quot;up-to-dateness&quot; status of
    each project's eclipse-project-status.xml file. Green for up-to-date. Yellow
    for up to 30 days out of date. Red for 30-90 days out of date. Red with
    underlines and bold for more than 90 days out of date. Black
    &quot;MISSING&quot; if the file does not exist.</li>
  <li><b>RSS/Atom Feed.</b> Change notifications.</li>
  <li><b><a name="Roadmap Summary">Roadmap Summary</a>.</b> A report that shows
    the Themes and Priorities from the Roadmap and summarizes the collective
    projects' contributions to those Themes; in other words, collections of bug
    numbers and their status, sorted by Theme.</li>
</ol>
<h2>Updating</h2>
<p>The Eclipse Development Process requires this information to be current each quarter. Current
is defined as:</p>
<ol>
  <li>modified within the last three weeks of the quarter</li>
  <li>has an executive summary that is different than last quarter's executive summary</li>
  <li>has all the required sections and proper formatting of dates, etc.</li>
</ol>
<p>There will be an automated reminder email. The email will include why the
automated program is sending you this email, e.g., &quot;hasn't been
updated&quot; or &quot;date field '27-Jan-2006' is not in DD/MM/YYYY or MM/YYYY
or NQYYYY date format&quot;, etc.</p>
<ul>
  <li>At T-3 weeks, an email will be sent to each project leader reminding them to update
    the eclipse-project-status.xml file.</li>
  <li>At T-2 weeks, if the file has not been modified, a second reminder will be
    sent.</li>
  <li>At T-1 week, if the file has not been modified, a third reminder will be
    sent and it will be cc'd to the EMO.</li>
  <li>At T-0 weeks, if the file has not been modified, two weeks worth of every
    other day reminders will be sent.</li>
  <li>At T+2 weeks, a final email will be sent to the project leader and to the
    EMO saying something like &quot;robo-emailer is giving up&quot;.</li>
</ul>
</div>
</div>
<?php
	# Paste your HTML content between the EOHTML markers!	
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>